UNPKG

@orpc/client

Version:

<div align="center"> <image align="center" src="https://orpc.unnoq.com/logo.webp" width=280 alt="oRPC logo" /> </div>

46 lines (42 loc) 1.45 kB
import { readAsBuffer } from '@orpc/shared'; import { ClientPeer } from '@orpc/standard-server-peer'; import { c as StandardRPCLink } from '../../shared/client.DKmRtVO2.mjs'; import '@orpc/standard-server'; import '../../shared/client.txdq_i5V.mjs'; const WEBSOCKET_CONNECTING = 0; class LinkWebsocketClient { peer; constructor(options) { const untilOpen = new Promise((resolve) => { if (options.websocket.readyState === WEBSOCKET_CONNECTING) { options.websocket.addEventListener("open", () => { resolve(); }, { once: true }); } else { resolve(); } }); this.peer = new ClientPeer(async (message) => { await untilOpen; return options.websocket.send(message); }); options.websocket.addEventListener("message", async (event) => { const message = event.data instanceof Blob ? await readAsBuffer(event.data) : event.data; this.peer.message(message); }); options.websocket.addEventListener("close", () => { this.peer.close(); }); } async call(request, _options, _path, _input) { const response = await this.peer.request(request); return { ...response, body: () => Promise.resolve(response.body) }; } } class RPCLink extends StandardRPCLink { constructor(options) { const linkClient = new LinkWebsocketClient(options); super(linkClient, { ...options, url: "orpc:/" }); } } export { LinkWebsocketClient, RPCLink };