@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
JavaScript
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 };