Client and server libraries for handling RPC calls between the browser and a Cloudflare websocket interface. The client library will automatically try to reconnect after being disconnected from the server. For details on the protocol see PROTOCOL.md.
npm install websocket-rpc-protocol
import server from 'websocket-rpc-protocol/server';
createServer(websocket, ({ push }) => {
// Any state that could be built up over type during the connection of this single client (user id, etc)
let userState = {};
// Add any functions you want, only those returned will be public
function privateFunction() {
// do something not exposed to the client
}
// Define functions which will be exposed for calling by the client
function sayHi(name?: string) {
return `Hello ${name || 'world'}!`;
}
// return the public API
return {
sayHi,
namespace: {
sayBye(name?: string) {
return `Goodbye cruel ${name || 'world'}!`;
}
}
};
});
import createClient from 'websocket-rpc-protocol/client';
interface API {
sayHi(name?: string): Promise<string>;
}
const client = createClient<API>('wss://url-to-server');
// Call the method directly, TypeScript will support it and the method will be proxied using the send() method
await client.sayHi(); // Hello world!
await client.sayHi('everyone'); // Hello everyone!
await client.namespace.sayBye(); // Goodbye cruel world!
console.log(client.get());
/*
Outputs:
{
online: true, // Whether the browser's APIs think the browser is online
connected: true, // Whether the websocket is connected
authed: true, // If the connection has been successfully authenticated with a JWT
serverTimeOffset: 20, // The offset in milliseconds between the client and the server
}
*/