You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add newWorkersWebSocketRpcSession for bidirectional server-side WebSockets + typescript fixes (#8)
- Add newWorkersWebSocketRpcSession — new export for bidirectional
WebSocket RPC in Workers. Returns { response, remote } so server-side
code can call back to the client with a typed proxy.
newWorkersWebSocketRpcResponse is now a thin wrapper that discards the
remote.
- Unify tsconfig — single tsconfig.json covers both library and test
files so the editor/language server picks up Cloudflare Workers types.
Add npm run typecheck script.
- Eliminate as any from production code — replace with Record<string,
unknown> casts in type guards. Reduce test as any from 20 to 5 justified
instances.
Before/after: bidirectional worker fixture
```ts
// Before (20 lines, manual plumbing, untyped)
if (request.headers.get("Upgrade") !== "websocket") {
return new Response("Expected WebSocket upgrade", { status: 400 });
}
const pair = new WebSocketPair();
const [client, server] = Object.values(pair);
server.accept();
const transport = createWebSocketTransport(server);
const biService = {
async addWithClientMultiplier(a: number, b: number): Promise<number> {
const multiplier: number = await (session.remote as any).getMultiplier();
return (a + b) * multiplier;
},
};
const session = new RpcSession(transport, biService, { role: "acceptor" });
return new Response(null, { status: 101, webSocket: client });
// After (8 lines, fully typed)
const biService = {
async addWithClientMultiplier(a: number, b: number): Promise<number> {
const multiplier = await remote.getMultiplier();
return (a + b) * multiplier;
},
};
const { response, remote } = newWorkersWebSocketRpcSession<ClientService>(request, biService);
return response;
```
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
0 commit comments