UNPKG

@orpc/client

Version:

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

45 lines (41 loc) 1.45 kB
import { ClientPeer } from '@orpc/standard-server-peer'; import '@orpc/shared'; import { c as StandardRPCLink } from '../../shared/client.CQCGVpTM.mjs'; import '@orpc/standard-server'; import '../../shared/client.BX0_8bnM.mjs'; class experimental_LinkWebsocketClient { peer; constructor(options) { const untilOpen = new Promise((resolve) => { if (options.websocket.readyState === 0) { 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 event.data.arrayBuffer() : 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 experimental_RPCLink extends StandardRPCLink { constructor(options) { const linkClient = new experimental_LinkWebsocketClient(options); super(linkClient, { ...options, url: "orpc:/" }); } } export { experimental_LinkWebsocketClient, experimental_RPCLink };