UNPKG

@firtoz/socka

Version:

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

76 lines (74 loc) • 2.71 kB
import { sockaHonoStrictInitFromContext } from '../chunk-QGURL3DJ.js'; export { sockaHonoStrictInitFromContext } from '../chunk-QGURL3DJ.js'; import { dispatchSockaInboundMessage } from '../chunk-JR2GENNT.js'; import { SockaWebSocketSession, runSockaSessionOnAttached } from '../chunk-TTXY7O5P.js'; import { reportSockaError } from '../chunk-IFIGKR3W.js'; // src/hono/node-ws.ts function sockaHonoNodeWs(config, options) { const staticSessions = options?.sessions ?? /* @__PURE__ */ new Map(); const staticConfig = config; const resolveScope = options?.resolveScope; return (c) => ({ onOpen(_evt, wsCtx) { const raw = wsCtx.raw; if (!raw) return; const domWs = raw; const { sessions, config: scopeConfig } = resolveScope ? resolveScope(c) : { sessions: staticSessions, config: staticConfig }; const init = options?.sockaInit?.(c) ?? sockaHonoStrictInitFromContext(c); const cfg = scopeConfig; const session = new SockaWebSocketSession(domWs, sessions, cfg, init); sessions.set(domWs, session); runSockaSessionOnAttached(cfg, session); }, onMessage(evt, wsCtx) { const raw = wsCtx.raw; if (!raw) return; const domWs = raw; const { sessions, config: scopeConfig } = resolveScope ? resolveScope(c) : { sessions: staticSessions, config: staticConfig }; const session = sessions.get(domWs); if (!session) return; const cfg = scopeConfig; const wireFormat = cfg.wireFormat ?? "json"; void dispatchSockaInboundMessage(session, wireFormat, evt.data).catch( (error) => { reportSockaError(cfg.reportError, { kind: "serverInboundMessage", adapter: "hono", error }); } ); }, onClose(_evt, wsCtx) { const raw = wsCtx.raw; if (!raw) return; const domWs = raw; void (async () => { const { sessions, config: scopeConfig } = resolveScope ? resolveScope(c) : { sessions: staticSessions, config: staticConfig }; const cfg = scopeConfig; const session = sessions.get(domWs); try { if (session) { await session.invokeHandleClose(); } } catch (error) { reportSockaError(cfg.reportError, { kind: "serverHandleClose", error }); } finally { sessions.delete(domWs); } })().catch((error) => { reportSockaError(staticConfig.reportError, { kind: "serverShutdown", adapter: "hono", error }); }); } }); } export { sockaHonoNodeWs }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map