UNPKG

@firtoz/socka

Version:

Standard Schema–first WebSocket RPC for TypeScript — Bun, Hono, Node ws, Cloudflare Workers, Durable Objects

41 lines (36 loc) • 2.9 kB
import { S as SockaWebSocketSession, a as SockaWebSocketSessionConfigUnion, c as SockaWebSocketInit, d as SockaWebSocketSessionConfig } from '../SockaWebSocketSession-CmEtwVE-.js'; export { e as SockaEmitCapable, f as SockaPushSession, b as SockaStrictWebSocketInit, g as SockaWebSocketSessionConfigLoose, h as broadcastContractPushToAll, i as broadcastSockaEventToAll, j as broadcastSockaEventToPeers, r as runSockaSessionOnAttached } from '../SockaWebSocketSession-CmEtwVE-.js'; import { S as SockaContractBound, a as SockaWireFormat } from '../socka-report-error-BALZPjd1.js'; import '@standard-schema/spec'; type AttachedSockaWebSocket<TContract extends SockaContractBound, TData> = { session: SockaWebSocketSession<TContract, TData>; /** Remove listeners and delete this session from the map (idempotent). */ dispose: () => void; }; /** * Register WebSocket `message` / `close` handlers, insert the session into * `sessions`, and return `{ session, dispose }`. `dispose` runs * {@link SockaWebSocketSession.invokeHandleClose} once, then removes listeners * (also triggered by `close`). */ declare function attachSockaWebSocket<TContract extends SockaContractBound, TData>(websocket: WebSocket, sessions: Map<WebSocket, SockaWebSocketSession<TContract, TData>>, config: SockaWebSocketSessionConfigUnion<TContract, TData>, init?: SockaWebSocketInit): AttachedSockaWebSocket<TContract, TData>; /** * Decode a WebSocket `message` payload and dispatch it to the session (same * behavior as the `message` handler installed by {@link attachSockaWebSocket}). * Use this when the runtime does not support `addEventListener` on the socket * (e.g. Bun {@link ServerWebSocket}) or when handling messages manually. */ declare function dispatchSockaInboundMessage<TContract extends SockaContractBound, TData>(session: SockaWebSocketSession<TContract, TData>, wireFormat: SockaWireFormat, data: MessageEvent["data"]): Promise<void>; type SockaRoomBundle<TContract extends SockaContractBound, TData> = { sessionMap: Map<WebSocket, SockaWebSocketSession<TContract, TData>>; config: SockaWebSocketSessionConfig<TContract, TData>; }; /** * Per-room {@link SockaWebSocketSession} maps and configs for Bun/Hono multi-room * apps (one bundle per `roomId`). */ declare function createSockaRoomRegistry<TContract extends SockaContractBound, TData>(makeConfig: (roomId: string, sessionMap: Map<WebSocket, SockaWebSocketSession<TContract, TData>>) => SockaWebSocketSessionConfig<TContract, TData>): { get(roomId: string): SockaRoomBundle<TContract, TData>; readonly rooms: ReadonlyMap<string, SockaRoomBundle<TContract, TData>>; }; export { type AttachedSockaWebSocket, type SockaRoomBundle, SockaWebSocketInit, SockaWebSocketSession, SockaWebSocketSessionConfig, SockaWebSocketSessionConfigUnion, attachSockaWebSocket, createSockaRoomRegistry, dispatchSockaInboundMessage };