UNPKG

@firtoz/socka

Version:

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

144 lines (142 loc) • 4.05 kB
import { dispatchSockaInboundMessage } from '../chunk-JR2GENNT.js'; import { SockaWebSocketSession, runSockaSessionOnAttached } from '../chunk-TTXY7O5P.js'; import { reportSockaError } from '../chunk-IFIGKR3W.js'; // src/bun/index.ts function sockaBunInitFromWsData(ws) { const d = ws.data; if (d && "request" in d && d.request instanceof Request) { return { request: d.request }; } return void 0; } function sockaBunUpgrade(server, req, data) { const extra = data ?? {}; return server.upgrade(req, { data: { ...extra, request: req } }); } function bunHandlersFromResolveScope(resolveScope) { const websocket = { open(ws) { const { sessionMap, config } = resolveScope(ws); const domWs = ws; const init = sockaBunInitFromWsData(ws); const session = new SockaWebSocketSession( domWs, sessionMap, config, init ); sessionMap.set(domWs, session); runSockaSessionOnAttached(config, session); }, async message(ws, message) { const { sessionMap, config } = resolveScope(ws); const domWs = ws; const session = sessionMap.get(domWs); if (!session) return; const wireFormat = config.wireFormat ?? "json"; try { await dispatchSockaInboundMessage( session, wireFormat, message ); } catch (error) { reportSockaError(config.reportError, { kind: "serverInboundMessage", adapter: "bun", error }); } }, async close(ws) { const { sessionMap, config } = resolveScope(ws); const domWs = ws; const session = sessionMap.get(domWs); try { if (session) { await session.invokeHandleClose(); } } catch (error) { reportSockaError(config.reportError, { kind: "serverHandleClose", error }); } finally { sessionMap.delete(domWs); } } }; return { sessionMap: /* @__PURE__ */ new Map(), websocket, wireFormat: "json" }; } function bunHandlersFromConfig(config, maybeOptions) { const sessionMap = maybeOptions?.sessionMap ?? /* @__PURE__ */ new Map(); const wireFormat = config.wireFormat ?? "json"; const websocket = { open(ws) { const domWs = ws; const init = sockaBunInitFromWsData(ws); const session = new SockaWebSocketSession( domWs, sessionMap, config, init ); sessionMap.set(domWs, session); runSockaSessionOnAttached(config, session); }, async message(ws, message) { const domWs = ws; const session = sessionMap.get(domWs); if (!session) return; try { await dispatchSockaInboundMessage( session, wireFormat, message ); } catch (error) { reportSockaError(config.reportError, { kind: "serverInboundMessage", adapter: "bun", error }); } }, async close(ws) { const domWs = ws; const session = sessionMap.get(domWs); try { if (session) { await session.invokeHandleClose(); } } catch (error) { reportSockaError(config.reportError, { kind: "serverHandleClose", error }); } finally { sessionMap.delete(domWs); } } }; return { sessionMap, websocket, wireFormat }; } function createSockaBunWebSocketHandlers(configOrOptions, maybeOptions) { const isResolveScope = typeof configOrOptions === "object" && configOrOptions !== null && "resolveScope" in configOrOptions && typeof configOrOptions.resolveScope === "function"; if (isResolveScope) { return bunHandlersFromResolveScope( configOrOptions.resolveScope ); } return bunHandlersFromConfig( configOrOptions, maybeOptions ); } export { createSockaBunWebSocketHandlers, sockaBunInitFromWsData, sockaBunUpgrade }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map