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