A browser-compatible JSON-RPC client with multiple transports:
- EventEmitter
- HTTP/HTTPS
- WebSocket
- PostMessageWindow
- PostMessageIframe
import { RequestManager, HTTPTransport, Client } from "@open-rpc/client-js"; const transport = new HTTPTransport("http://localhost:8545"); const client = new Client(new RequestManager([transport])); const result = await client.request({ method: "addition", params: [2, 2] }); // => { jsonrpc: '2.0', id: 1, result: 4 }EventEmitter
import { EventEmitter } from "events"; import { RequestManager, EventEmitterTransport, Client, } from "@open-rpc/client-js"; const chan1 = "chan1"; const chan2 = "chan2"; const emitter = new EventEmitter(); const transport = new EventEmitterTransport(emitter, chan1, chan2); const requestManager = new RequestManager([transport]); const client = new Client(requestManager); // event emitter server code emitter.on(chan1, (jsonrpcRequest) => { const res = { jsonrpc: "2.0", result: "potato", id: jsonrpcRequest.id, }; emitter.emit(chan2, JSON.stringify(res)); }); const main = async () => { const result = await client.request({ method: "addition", params: [2, 2] }); console.log(result); }; main().then(() => { console.log("DONE"); });HTTP
import { RequestManager, Client, HTTPTransport } from "@open-rpc/client-js"; const transport = new HTTPTransport("http://localhost:3333"); const requestManager = new RequestManager([transport]); const client = new Client(requestManager); const main = async () => { const result = await client.request({ method: "addition", params: [2, 2] }); console.log(result); }; main().then(() => { console.log("DONE"); });WebSocket
import { RequestManager, Client, WebSocketTransport, } from "@open-rpc/client-js"; const transport = new WebSocketTransport("ws://localhost:3333"); const requestManager = new RequestManager([transport]); const client = new Client(requestManager); const main = async () => { const result = await client.request({ method: "addition", params: [2, 2] }); console.log(result); }; main().then(() => { console.log("DONE"); client.close(); });# Install bun curl -fsSL https://bun.sh/install | bash # Build the repo bun install bun run buildHow to contribute, build and release are outlined in CONTRIBUTING.md, BUILDING.md and RELEASING.md respectively. Commits in this repository follow the CONVENTIONAL_COMMITS.md specification.