statewire 0.21.0 → 0.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/changes.d.ts +3 -6
- package/dist/client/changes.d.ts.map +1 -1
- package/dist/client/changes.js +1 -2
- package/dist/client/connection.d.ts +80 -83
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +2 -3
- package/dist/client/connection.js.map +1 -1
- package/dist/client/core.d.ts +39 -41
- package/dist/client/core.d.ts.map +1 -1
- package/dist/client/core.js +2 -3
- package/dist/client/session.d.ts +93 -95
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/session.js +6 -7
- package/dist/client/session.js.map +1 -1
- package/dist/client/sessionStore.d.ts +11 -14
- package/dist/client/sessionStore.d.ts.map +1 -1
- package/dist/client/sessionStore.js +1 -2
- package/dist/client/storageError.d.ts +2 -5
- package/dist/client/storageError.d.ts.map +1 -1
- package/dist/client/storageError.js +1 -2
- package/dist/client/timing.d.ts +11 -14
- package/dist/client/timing.d.ts.map +1 -1
- package/dist/client/timing.js +1 -2
- package/dist/document.d.ts +17 -20
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +1 -2
- package/dist/host/adapter.d.ts +4 -7
- package/dist/host/adapter.d.ts.map +1 -1
- package/dist/host/adapter.js +1 -2
- package/dist/host/draft.d.ts +13 -16
- package/dist/host/draft.d.ts.map +1 -1
- package/dist/host/draft.js +1 -2
- package/dist/host/engine.d.ts +7 -10
- package/dist/host/engine.d.ts.map +1 -1
- package/dist/host/engine.js +1 -2
- package/dist/host/host.d.ts +42 -45
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +1 -2
- package/dist/host/http.d.ts +4 -7
- package/dist/host/http.d.ts.map +1 -1
- package/dist/host/http.js +2 -3
- package/dist/host/socket.d.ts +148 -145
- package/dist/host/socket.d.ts.map +1 -1
- package/dist/host/socket.js +30 -12
- package/dist/host/socket.js.map +1 -1
- package/dist/host/synced.d.ts +3 -6
- package/dist/host/synced.d.ts.map +1 -1
- package/dist/host/synced.js +1 -2
- package/dist/host/work.d.ts +2 -5
- package/dist/host/work.d.ts.map +1 -1
- package/dist/host/work.js +1 -2
- package/dist/host-internal.d.ts +101 -93
- package/dist/host-internal.d.ts.map +1 -1
- package/dist/host.d.ts +90 -91
- package/dist/host.d.ts.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/statewire.d.ts +265 -268
- package/dist/statewire.d.ts.map +1 -1
- package/dist/statewire.js +1 -2
- package/dist/storage.d.ts +23 -26
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -2
- package/dist/transports/fake-sse.d.ts +7 -10
- package/dist/transports/fake-sse.d.ts.map +1 -1
- package/dist/transports/fake-sse.js +1 -2
- package/dist/transports/fixtures.d.ts +19 -25
- package/dist/transports/fixtures.d.ts.map +1 -1
- package/dist/transports/fixtures.js +1 -2
- package/dist/transports/remote.d.ts +8 -11
- package/dist/transports/remote.d.ts.map +1 -1
- package/dist/transports/remote.js +1 -2
- package/dist/transports/sse-parser.d.ts +1 -4
- package/dist/transports/sse-parser.d.ts.map +1 -1
- package/dist/transports/sse-parser.js +1 -2
- package/dist/transports/sse.d.ts +50 -53
- package/dist/transports/sse.d.ts.map +1 -1
- package/dist/transports/sse.js +2 -3
- package/dist/transports/testing.d.ts +31 -34
- package/dist/transports/testing.d.ts.map +1 -1
- package/dist/transports/testing.js +1 -2
- package/dist/transports/ws.d.ts +5 -7
- package/dist/transports/ws.d.ts.map +1 -1
- package/dist/transports/ws.js +3 -4
- package/dist/transports/ws.js.map +1 -1
- package/dist/types.d.ts +81 -78
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/util/draftTraps.d.ts +2 -4
- package/dist/util/draftTraps.d.ts.map +1 -1
- package/dist/util/draftTraps.js +1 -2
- package/dist/util/macrotask.d.ts +1 -4
- package/dist/util/macrotask.d.ts.map +1 -1
- package/dist/util/macrotask.js +1 -2
- package/dist/util/methodProxy.d.ts +1 -4
- package/dist/util/methodProxy.d.ts.map +1 -1
- package/dist/util/methodProxy.js +1 -2
- package/dist/util/randomId.d.ts +1 -4
- package/dist/util/randomId.d.ts.map +1 -1
- package/dist/util/randomId.js +1 -2
- package/dist/util/recordMutations.d.ts +5 -7
- package/dist/util/recordMutations.d.ts.map +1 -1
- package/dist/util/recordMutations.js +1 -2
- package/dist/util/statePath.d.ts +9 -12
- package/dist/util/statePath.d.ts.map +1 -1
- package/dist/util/statePath.js +1 -2
- package/dist/wire/context.d.ts +7 -12
- package/dist/wire/context.d.ts.map +1 -1
- package/dist/wire/context.js +2 -3
- package/dist/wire/documents.d.ts +36 -39
- package/dist/wire/documents.d.ts.map +1 -1
- package/dist/wire/documents.js +2 -3
- package/dist/wire/documents.js.map +1 -1
- package/dist/wire/limits.d.ts +7 -10
- package/dist/wire/limits.d.ts.map +1 -1
- package/dist/wire/limits.js +1 -2
- package/dist/wire/meta.d.ts +9 -11
- package/dist/wire/meta.d.ts.map +1 -1
- package/dist/wire/meta.js +1 -2
- package/dist/wire/meta.js.map +1 -1
- package/dist/wire/ops.d.ts +9 -12
- package/dist/wire/ops.d.ts.map +1 -1
- package/dist/wire/ops.js +1 -2
- package/dist/wire/protocol.d.ts +53 -56
- package/dist/wire/protocol.d.ts.map +1 -1
- package/dist/wire/protocol.js +1 -2
- package/dist/wire/version.d.ts +1 -4
- package/dist/wire/version.d.ts.map +1 -1
- package/dist/wire/version.js +1 -2
- package/package.json +6 -6
- package/src/client/connection.ts +13 -15
- package/src/host/socket.ts +63 -6
- package/src/host-internal.ts +12 -0
package/dist/host/socket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","names":["contextValue","captureContext","MAX_CONTEXT_BYTES","encodeDocument","DEFAULT_PROTOCOL","WIRE_VERSION","negotiateProtocols","StatewireProtocol","useEffect","useState","createTapRoot","flushTapSync","useResource","ResourceElement","documentIdentity","getCommandsHost","getStateHost","CommandsHost","CommandsOutcome","StatewireSendError","Statewire","StatewireHost","StatewireHostInternal","reviveValue","sanitizeValue","COMMAND_CAPACITY_RETRY_MS","MAX_COMMANDS_PER_FRAME","MAX_EPHEMERAL_DOCUMENT_BYTES","MAX_FRAME_BODY_BYTES","MAX_INFLIGHT_COMMANDS_PER_CLIENT","MAX_INFLIGHT_COMMANDS_PER_HOST","createMacrotaskPoster","StatewireDocument","StatewirePath","frames","serveFrames","stream","serveStream","CLIENT_ID_RE","PRINCIPAL_MISMATCH_MESSAGE","authEquals","a","b","Object","is","Date","getTime","Array","isArray","length","every","v","i","getPrototypeOf","prototype","keysA","keys","keysB","key","Record","RESULT_TTL_MS","RESULT_LIMIT","CLIENT_RECORD_LIMIT","MAX_SUBSCRIBERS","SUBSCRIBER_LIMIT_MESSAGE","STREAM_QUEUE_SIZE","Cmd","WireOp","op","doc","path","value","meta","MetaEntry","protocol","main","Admission","seq","method","applied","appliedSent","settled","Lane","clientId","conn","Conn","lastSeq","results","Map","ts","cmd","inflight","ClientRec","id","touched","lanes","principal","selection","Selection","socket","Socket","open","ready","sawFrame","lastSentAt","lease","auth","authorizedAt","leaseTimer","ReturnType","setTimeout","contexts","Context","documents","Document","included","Set","view","nextDoc","pendingApplied","pendingCmds","attach","Attach","PendingConn","authorizing","queued","timer","connection","SocketConnection","violation","reason","assign","Error","name","violationReason","error","message","CmdStatement","params","ParsedFrame","ctx","isPlainObject","frameEncoder","TextEncoder","parseFrameValue","frame","unknown","filter","sort","lane","hasOwn","prev","statement","Number","isInteger","last","get","undefined","set","push","NonNullable","seen","entry","some","includes","has","add","encode","JSON","stringify","byteLength","parseFrame","raw","parse","frameIsOversized","encodePayload","payload","cmdOf","adm","outcome","at","type","failure","fate","code","console","parseInitialFrame","headers","Response","status","values","SocketHostState","Definition","wireVersion","Range","heartbeatMs","maxLeaseLifetimeMs","wsInitTimeoutMs","maxSubscribers","maxInflightCommands","streamQueueSize","clientRecordLimit","finOnIdle","pushback","authorize","SocketHostOptions","clients","conns","pendingConns","pendingOps","viewsDirty","idleWire","finished","Fin","disposed","flushScheduled","heartbeatTimer","setInterval","stateHost","StateHost","commandsHost","current","persistence","SocketHostPersistence","post","connect","options","SocketConnectOptions","finish","fin","request","Request","Promise","scheduleFlush","h","markViews","recordOp","next","nextState","state","nextCommands","commands","submit","setOnOp","setOnDocuments","closeConn","delete","clearTimeout","close","detached","size","clearInterval","sendTo","data","now","send","expiredAt","isFinite","leaseExpiredFin","expireLease","armLeaseTimer","delay","Math","min","unref","violate","atSubscriberLimit","ensureHeartbeat","setHeartbeatMs","ms","durableLanes","rec","allLanes","idleLevel","work","isIdle","selects","protocols","p","viewOf","shared","hostMain","record","diffView","ops","number","attachOf","requireSelected","find","caller","callerOf","context","document","snapshot","mount","encoded","other","unmount","include","exclude","flush","takeChanged","queueApplied","level","edge","mainOps","cmds","forConn","list","splice","idle","queueCmd","notifyClientRecords","onClientRecordsChange","map","fromEntries","admittedThrough","retain","newest","max","watermark","laneOf","ephemeral","reemit","cached","settleCmd","settleWire","Caller","isConnected","rejectStatement","admitCmd","rejectUnknown","names","methods","onApplied","onSettle","catch","FrameAdmission","syn","retry","refusal","validateContexts","selected","through","first","s","validateContext","installContexts","contextChanged","admitFrame","fresh","durableNew","clientLoad","hostLoad","isSafeInteger","TypeError","findLast","dur","admission","closePending","pending","sendPending","refuseSubscriberLimit","rejectPendingAuthorization","response","unauthorized","statusText","normalizedHeaders","toLowerCase","Headers","connectAuthorized","authorized","registration","register","refuse","test","initial","resolve","then","onAuthorized","Registration","gcClients","excess","changed","live","oldest","version","known","created","attaching","isEphemeral","early","late","admit","statements","earlyAdmission","answers","hello","lateAdmission","abort","resume","suspend","restoreClientRecords","records","ClientRecord","entries","useSocketHost","transport","Pick","SocketHost","host","clientRecords","connectOptions","heartbeatIntervalMs","StatewireSocketHost","SocketHostRoot","root","getValue","dispose"],"sources":["../../src/host/socket.ts"],"sourcesContent":["import { contextValue, captureContext } from \"../wire/context\";\nimport { MAX_CONTEXT_BYTES } from \"../wire/limits\";\nimport { encodeDocument } from \"../document\";\nimport {\n DEFAULT_PROTOCOL,\n WIRE_VERSION,\n negotiateProtocols,\n} from \"../wire/protocol\";\nimport type { StatewireProtocol } from \"../wire/protocol\";\nimport { useEffect, useState } from \"react\";\nimport { createTapRoot, flushTapSync, useResource } from \"@assistant-ui/tap\";\nimport type { ResourceElement } from \"@assistant-ui/tap\";\nimport { documentIdentity, getCommandsHost, getStateHost } from \"./host\";\nimport type { CommandsHost, CommandsOutcome } from \"./host\";\nimport { StatewireSendError } from \"../types\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireHost } from \"../host\";\nimport type { StatewireHostInternal } from \"../host-internal\";\nimport { reviveValue } from \"../wire/meta\";\nimport { sanitizeValue } from \"../wire/ops\";\nimport {\n COMMAND_CAPACITY_RETRY_MS,\n MAX_COMMANDS_PER_FRAME,\n MAX_EPHEMERAL_DOCUMENT_BYTES,\n MAX_FRAME_BODY_BYTES,\n MAX_INFLIGHT_COMMANDS_PER_CLIENT,\n MAX_INFLIGHT_COMMANDS_PER_HOST,\n} from \"../wire/limits\";\nimport { createMacrotaskPoster } from \"../util/macrotask\";\nimport type { StatewireDocument } from \"../document\";\nimport type { StatewirePath } from \"../wire/ops\";\nimport { frames as serveFrames, stream as serveStream } from \"./http\";\n\nexport const CLIENT_ID_RE = /^[A-Za-z0-9._~-]{1,256}$/;\nexport const PRINCIPAL_MISMATCH_MESSAGE =\n \"client id is bound to another principal\";\n\n/** Structural equality over auth values: primitives, Dates, arrays, and plain\n * objects compare by value; anything else by identity. */\nexport const authEquals = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => authEquals(v, b[i]));\n }\n if (\n typeof a === \"object\" &&\n typeof b === \"object\" &&\n a !== null &&\n b !== null &&\n Object.getPrototypeOf(a) === Object.prototype &&\n Object.getPrototypeOf(b) === Object.prototype\n ) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n return (\n keysA.length === keysB.length &&\n keysA.every(\n (key) =>\n key in b &&\n authEquals(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n ),\n )\n );\n }\n return false;\n};\n\nconst RESULT_TTL_MS = 30_000;\nconst RESULT_LIMIT = 256;\nconst CLIENT_RECORD_LIMIT = 1024;\nconst MAX_SUBSCRIBERS = 1024;\nexport const SUBSCRIBER_LIMIT_MESSAGE = \"stream subscriber limit reached\";\nconst STREAM_QUEUE_SIZE = 256;\n\ntype Cmd = StatewireHostInternal.Cmd;\n\ntype WireOp = {\n op: string;\n doc?: number;\n path?: StatewirePath;\n value?: unknown;\n meta?: StatewireDocument.MetaEntry[];\n protocol?: string;\n key?: readonly string[];\n main?: boolean;\n};\n\ntype Admission = {\n protocol: string;\n seq: number;\n method: string;\n applied: boolean;\n appliedSent: boolean;\n settled: boolean;\n};\n\n/** One statement lane: durable lanes live on the client record, ephemeral lanes on the attach. */\ntype Lane = {\n protocol: string;\n clientId: string;\n conn: Conn | null;\n lastSeq: number;\n results: Map<number, { ts: number; cmd: Cmd }>;\n inflight: Map<number, Admission>;\n};\n\nexport type ClientRec = {\n id: string;\n touched: number;\n lanes: Map<string, Lane>;\n /** The auth captured at the record's first attach; later attaches must match. */\n principal: unknown;\n};\n\n// A Conn outlives its socket so an admitted command keeps its attach view.\nexport type Conn = {\n selection: StatewireProtocol.Selection;\n clientId: string;\n socket: StatewireHostInternal.Socket;\n open: boolean;\n ready: boolean;\n sawFrame: boolean;\n lastSentAt: number;\n lease: string | null;\n /** The awaited `authorize` return captured at this attach's authorization. */\n auth: unknown;\n authorizedAt: number | undefined;\n leaseTimer: ReturnType<typeof setTimeout> | null;\n lanes: Map<string, Lane>;\n contexts: Map<string, Statewire.Context>;\n documents: Map<string, StatewireHost.Document>;\n included: Set<string>;\n view: Map<string, { doc: number; value: unknown }>;\n nextDoc: number;\n pendingApplied: Cmd[];\n pendingCmds: Cmd[];\n attach: StatewireHost.Attach;\n};\n\ntype PendingConn = {\n socket: StatewireHostInternal.Socket;\n open: boolean;\n authorizing: boolean;\n queued: string[];\n timer: ReturnType<typeof setTimeout> | null;\n connection: StatewireHostInternal.SocketConnection | null;\n};\n\n// ─── frame parsing ──────────────────────────────────────\n\nconst violation = (reason: string): never => {\n throw Object.assign(new Error(reason), { name: \"StatewireViolation\" });\n};\n\nconst violationReason = (error: unknown): string | null =>\n error instanceof Error && error.name === \"StatewireViolation\"\n ? error.message\n : null;\n\ntype CmdStatement = {\n protocol: string;\n seq: number;\n method: string;\n params: unknown;\n meta?: unknown;\n};\n\nexport type ParsedFrame = {\n cmd: CmdStatement[];\n ctx?: { protocol: string; value: Statewire.Context }[];\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst frameEncoder = new TextEncoder();\n\nexport const parseFrameValue = (frame: unknown): ParsedFrame => {\n if (!isPlainObject(frame)) return violation(\"malformed frame\");\n const keys = Object.keys(frame);\n if (keys.length === 0) return violation(\"malformed frame\");\n const unknown = keys.filter((key) => key !== \"cmd\" && key !== \"ctx\").sort();\n if (unknown.length > 0)\n return violation(`unknown frame key: '${unknown[0]}'`);\n const lane = frame[\"cmd\"] ?? [];\n if (!Array.isArray(lane)) return violation(\"malformed frame\");\n if (Object.hasOwn(frame, \"cmd\") && lane.length === 0)\n return violation(\"empty lane\");\n if (lane.length > MAX_COMMANDS_PER_FRAME)\n return violation(\"too many commands\");\n const prev = new Map<string, number>();\n const cmd: CmdStatement[] = [];\n for (const statement of lane) {\n if (!isPlainObject(statement)) return violation(\"malformed statement\");\n const seq = statement[\"seq\"];\n const method = statement[\"method\"];\n const protocol = statement[\"protocol\"];\n if (\n typeof seq !== \"number\" ||\n !Number.isInteger(seq) ||\n seq < 1 ||\n typeof method !== \"string\" ||\n typeof protocol !== \"string\" ||\n !(\"params\" in statement)\n ) {\n return violation(\"malformed statement\");\n }\n const last = prev.get(protocol);\n if (last !== undefined && seq !== last + 1)\n return violation(\"malformed frame\");\n prev.set(protocol, seq);\n cmd.push({\n protocol,\n seq,\n method,\n params: statement[\"params\"],\n ...(statement[\"meta\"] !== undefined && { meta: statement[\"meta\"] }),\n });\n }\n const contexts = frame[\"ctx\"];\n const ctx: NonNullable<ParsedFrame[\"ctx\"]> = [];\n if (contexts !== undefined) {\n if (!Array.isArray(contexts) || contexts.length === 0)\n return violation(\"empty context lane\");\n const seen = new Set<string>();\n for (const entry of contexts) {\n if (\n !isPlainObject(entry) ||\n typeof entry[\"protocol\"] !== \"string\" ||\n !Object.hasOwn(entry, \"value\") ||\n Object.keys(entry).some(\n (key) => ![\"protocol\", \"value\", \"meta\"].includes(key),\n )\n )\n return violation(\"malformed context\");\n const protocol = entry[\"protocol\"];\n if (seen.has(protocol)) return violation(\"duplicate context protocol\");\n seen.add(protocol);\n if (\n frameEncoder.encode(JSON.stringify(entry)).byteLength >\n MAX_CONTEXT_BYTES\n )\n return violation(\"context entry too large\");\n try {\n ctx.push({\n protocol,\n value: contextValue({\n value: entry[\"value\"],\n ...(entry[\"meta\"] !== undefined && { meta: entry[\"meta\"] }),\n }),\n });\n } catch (error) {\n return violation(\n error instanceof Error ? error.message : \"invalid context\",\n );\n }\n }\n }\n if (cmd.length === 0 && ctx.length === 0) return violation(\"empty frame\");\n return { cmd, ...(ctx.length > 0 && { ctx }) };\n};\n\nexport const parseFrame = (raw: string): ParsedFrame => {\n let frame: unknown;\n try {\n frame = JSON.parse(raw);\n } catch {\n return violation(\"malformed frame\");\n }\n return parseFrameValue(frame);\n};\n\nconst frameIsOversized = (raw: string): boolean =>\n raw.length > MAX_FRAME_BODY_BYTES ||\n frameEncoder.encode(raw).byteLength > MAX_FRAME_BODY_BYTES;\n\n// ─── verdict encoding ───────────────────────────────────\n\nconst encodePayload = (\n payload: unknown,\n): { payload?: unknown; meta?: StatewireDocument.MetaEntry[] } => {\n if (payload === undefined) return {};\n const { value, meta } = encodeDocument(payload);\n return { payload: value, ...(meta !== undefined && { meta }) };\n};\n\nconst cmdOf = (adm: Admission, outcome: CommandsOutcome): Cmd => {\n const at = { protocol: adm.protocol, seq: adm.seq };\n if (outcome.type === \"accepted\") {\n return { ...at, type: \"result\", ...encodePayload(outcome.payload) };\n }\n const failure =\n outcome.error instanceof StatewireSendError ? outcome.error.failure : null;\n switch (failure?.fate) {\n case \"crashed\":\n return { ...at, type: \"crashed\" };\n case \"failed\":\n return {\n ...at,\n type: \"failed\",\n ...(failure.message !== undefined && { message: failure.message }),\n };\n case \"rejected\": {\n const message =\n failure.code === \"unknown-command\"\n ? `unknown method: '${adm.method}'`\n : failure.message;\n return {\n ...at,\n type: \"rejected\",\n ...(failure.code !== undefined && { code: failure.code }),\n ...(message !== undefined && { message }),\n ...encodePayload(failure.payload),\n };\n }\n default:\n console.error(\"statewire command failed\", outcome.error);\n return {\n ...at,\n type: \"failed\",\n message: \"the command failed\",\n };\n }\n};\n\nconst parseInitialFrame = (raw: string) => {\n let value: unknown;\n try {\n value = JSON.parse(raw);\n } catch {\n return violation(\"malformed frame\");\n }\n if (!isPlainObject(value)) return violation(\"malformed frame\");\n const { headers, ...lanes } = value;\n if (headers === undefined) throw new Response(null, { status: 401 });\n if (\n !isPlainObject(headers) ||\n Object.values(headers).some((v) => typeof v !== \"string\")\n ) {\n return violation(\"malformed headers\");\n }\n return {\n headers: headers as Record<string, string>,\n frame: Object.keys(lanes).length ? parseFrameValue(lanes) : { cmd: [] },\n };\n};\n\n// ─── host ───────────────────────────────────────────────\n\nexport type SocketHostState = {\n protocol: StatewireProtocol.Definition;\n key: readonly string[] | undefined;\n wireVersion: StatewireProtocol.Range;\n heartbeatMs: number;\n maxLeaseLifetimeMs: number | null;\n wsInitTimeoutMs: number;\n maxSubscribers: number;\n maxInflightCommands: number;\n streamQueueSize: number;\n clientRecordLimit: number;\n finOnIdle: boolean;\n pushback: (() => number | null) | undefined;\n authorize: StatewireHostInternal.SocketHostOptions[\"authorize\"];\n clients: Map<string, ClientRec>;\n conns: Set<Conn>;\n pendingConns: Set<PendingConn>;\n pendingOps: WireOp[];\n pendingApplied: Map<string, Cmd[]>;\n pendingCmds: Map<string, Cmd[]>;\n viewsDirty: boolean;\n idleWire: boolean;\n finished: StatewireHost.Fin | null;\n disposed: boolean;\n flushScheduled: boolean;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n stateHost: StatewireHost.StateHost | null;\n commandsHost: CommandsHost | null;\n current: Statewire<unknown> | null;\n persistence: StatewireHostInternal.SocketHostPersistence | undefined;\n post: () => void;\n connect: (\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options?: StatewireHostInternal.SocketConnectOptions,\n ) => StatewireHostInternal.SocketConnection | null;\n finish: (fin: StatewireHost.Fin) => void;\n stream: (request: Request) => Promise<Response>;\n frames: (request: Request) => Promise<Response>;\n};\n\nconst scheduleFlush = (h: SocketHostState) => {\n if (h.flushScheduled || h.disposed) return;\n h.flushScheduled = true;\n h.post();\n};\n\nconst markViews = (h: SocketHostState) => {\n h.viewsDirty = true;\n scheduleFlush(h);\n};\n\nconst recordOp = (\n h: SocketHostState,\n op: {\n op: string;\n path?: StatewirePath;\n value?: unknown;\n },\n) => {\n if (op.op === \"replace\" || op.op === \"add\") {\n const { value, meta } = encodeDocument(op.value);\n h.pendingOps.push({ ...op, value, ...(meta !== undefined && { meta }) });\n } else {\n h.pendingOps.push(op);\n }\n scheduleFlush(h);\n};\n\nconst attach = (h: SocketHostState, next: Statewire<unknown>) => {\n if (next === h.current) return;\n h.current = next;\n const nextState =\n typeof next.state === \"object\" && next.state !== null\n ? getStateHost(next.state)\n : undefined;\n const nextCommands = getCommandsHost(next.commands);\n if (!nextState || !nextCommands?.submit) {\n throw new Error(\n \"StatewireSocketHost requires a statewire/host transport (useStatewireState with object state, useStatewireCommands)\",\n );\n }\n if (nextState !== h.stateHost) {\n h.stateHost?.setOnOp(null);\n h.stateHost?.setOnDocuments(null);\n h.stateHost = nextState;\n h.stateHost.setOnOp((op) => recordOp(h, op));\n h.stateHost.setOnDocuments(() => markViews(h));\n }\n h.commandsHost = nextCommands;\n};\n\nexport const closeConn = (\n h: SocketHostState,\n conn: Conn,\n code?: number,\n reason?: string,\n) => {\n if (!conn.open) return;\n conn.open = false;\n h.conns.delete(conn);\n if (conn.leaseTimer !== null) {\n clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n }\n try {\n conn.socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n h.current?.detached?.(conn.attach);\n if (h.conns.size === 0 && h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n }\n};\n\nexport const sendTo = (h: SocketHostState, conn: Conn, data: string) => {\n if (!conn.open) return;\n conn.lastSentAt = Date.now();\n try {\n conn.socket.send(data);\n } catch {\n closeConn(h, conn);\n }\n};\n\nconst expiredAt = (h: SocketHostState, authorizedAt: number | undefined) => {\n const now = Date.now();\n return (\n authorizedAt === undefined ||\n !Number.isFinite(authorizedAt) ||\n authorizedAt < 0 ||\n authorizedAt > now ||\n (h.maxLeaseLifetimeMs !== null &&\n now - authorizedAt >= h.maxLeaseLifetimeMs)\n );\n};\n\nconst leaseExpiredFin = JSON.stringify({\n fin: { reason: \"reconnect\", code: \"lease-expired\" },\n});\n\nexport const expireLease = (h: SocketHostState, conn: Conn): boolean => {\n if (!conn.open || expiredAt(h, conn.authorizedAt)) {\n if (conn.open) {\n sendTo(h, conn, leaseExpiredFin);\n closeConn(h, conn, 1000, \"lease-expired\");\n }\n return true;\n }\n return false;\n};\n\nconst armLeaseTimer = (h: SocketHostState, conn: Conn) => {\n if (conn.leaseTimer !== null) clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n if (h.disposed || h.maxLeaseLifetimeMs === null || expireLease(h, conn))\n return;\n const delay = h.maxLeaseLifetimeMs - (Date.now() - conn.authorizedAt!);\n conn.leaseTimer = setTimeout(\n () => {\n conn.leaseTimer = null;\n if (!expireLease(h, conn)) armLeaseTimer(h, conn);\n },\n Math.min(delay, 2_147_483_647),\n );\n (conn.leaseTimer as unknown as { unref?: () => void }).unref?.();\n};\n\nconst violate = (h: SocketHostState, conn: Conn, reason: string) => {\n sendTo(\n h,\n conn,\n JSON.stringify({ fin: { reason: \"protocol-error\", message: reason } }),\n );\n closeConn(h, conn, 1008, reason);\n};\n\nexport const atSubscriberLimit = (h: SocketHostState): boolean =>\n h.conns.size +\n [...h.pendingConns].filter((conn) => conn.authorizing).length >=\n h.maxSubscribers;\n\nconst ensureHeartbeat = (h: SocketHostState) => {\n if (h.heartbeatTimer !== null || h.heartbeatMs <= 0) return;\n h.heartbeatTimer = setInterval(() => {\n const now = Date.now();\n for (const conn of [...h.conns]) {\n if (now - conn.lastSentAt >= h.heartbeatMs) sendTo(h, conn, \"{}\");\n }\n }, h.heartbeatMs);\n (h.heartbeatTimer as unknown as { unref?: () => void }).unref?.();\n};\n\nconst setHeartbeatMs = (h: SocketHostState, ms: number) => {\n if (ms === h.heartbeatMs) return;\n h.heartbeatMs = ms;\n if (h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n ensureHeartbeat(h);\n }\n};\n\nconst durableLanes = function* (h: SocketHostState) {\n for (const rec of h.clients.values()) yield* rec.lanes.values();\n};\n\nconst allLanes = function* (h: SocketHostState) {\n yield* durableLanes(h);\n for (const conn of h.conns) yield* conn.lanes.values();\n};\n\nconst idleLevel = (h: SocketHostState): boolean => {\n if (h.current?.work?.isIdle === false) return false;\n for (const lane of allLanes(h)) {\n if (lane.inflight.size > 0) return false;\n }\n return true;\n};\n\nconst selects = (conn: Conn, protocol: string) =>\n conn.selection.protocols.some((p) => p.name === protocol);\n\n// ─── views ──────────────────────────────────────────────\n\nconst viewOf = (\n h: SocketHostState,\n conn: Conn,\n): Map<string, StatewireHost.Document> => {\n const view = new Map<string, StatewireHost.Document>();\n const shared = h.stateHost!.documents();\n const hostMain = documentIdentity(h.protocol.name);\n for (const p of conn.selection.protocols) {\n if (p.record === \"ephemeral\") {\n for (const [id, doc] of conn.documents)\n if (doc.protocol === p.name) view.set(id, doc);\n } else {\n for (const [id, doc] of shared) {\n if (\n doc.protocol === p.name &&\n id !== hostMain &&\n (doc.main || conn.included.has(id))\n )\n view.set(id, doc);\n }\n }\n }\n return view;\n};\n\nconst diffView = (h: SocketHostState, conn: Conn): WireOp[] => {\n const current = viewOf(h, conn);\n const ops: WireOp[] = [];\n for (const [id, entry] of conn.view) {\n if (current.has(id)) continue;\n conn.view.delete(id);\n ops.push({ op: \"unmount\", doc: entry.doc });\n }\n for (const [id, doc] of current) {\n const entry = conn.view.get(id);\n if (entry !== undefined && entry.value === doc.value) continue;\n const { value, meta } = encodeDocument(doc.value);\n if (entry === undefined) {\n const number = conn.nextDoc++;\n conn.view.set(id, { doc: number, value: doc.value });\n ops.push({\n op: \"mount\",\n doc: number,\n protocol: doc.protocol,\n ...(doc.key !== null && { key: doc.key }),\n ...(doc.main && { main: true }),\n value,\n ...(meta !== undefined && { meta }),\n });\n } else {\n entry.value = doc.value;\n ops.push({\n op: \"replace\",\n doc: entry.doc,\n path: [],\n value,\n ...(meta !== undefined && { meta }),\n });\n }\n }\n return ops;\n};\n\nconst attachOf = (h: SocketHostState, conn: Conn): StatewireHost.Attach => {\n const requireSelected = (protocol: string) => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol);\n if (entry === undefined)\n throw new Error(`statewire: protocol ${protocol} was not negotiated`);\n return entry;\n };\n return {\n get caller() {\n return callerOf(h, h.clients.get(conn.clientId)!, conn);\n },\n context: (protocol) => {\n requireSelected(protocol);\n return captureContext(conn.contexts.get(protocol) ?? {});\n },\n document: (protocol, key) => {\n if (key === undefined && protocol === h.protocol.name)\n return h.stateHost!.snapshot();\n const view = viewOf(h, conn);\n if (key !== undefined)\n return view.get(documentIdentity(protocol, key))?.value;\n for (const doc of view.values())\n if (doc.protocol === protocol && doc.main) return doc.value;\n return undefined;\n },\n mount: (protocol, value, key, main = key === undefined) => {\n if (requireSelected(protocol).record !== \"ephemeral\")\n throw new Error(`statewire: protocol ${protocol} is not ephemeral`);\n const encoded = encodeDocument(value);\n if (\n frameEncoder.encode(JSON.stringify(encoded)).byteLength >\n MAX_EPHEMERAL_DOCUMENT_BYTES\n )\n throw new Error(\"statewire: oversized ephemeral document\");\n const id = documentIdentity(protocol, key);\n if (main) {\n for (const [other, doc] of conn.documents) {\n if (doc.protocol === protocol && doc.main && other !== id)\n throw new Error(\n `statewire: ${protocol} already has a main document`,\n );\n }\n }\n conn.documents.set(id, {\n protocol,\n key: key === undefined ? null : [...key],\n main,\n value: sanitizeValue(value),\n });\n markViews(h);\n },\n unmount: (protocol, key) => {\n if (!conn.documents.delete(documentIdentity(protocol, key)))\n throw new Error(\"statewire: document is not mounted\");\n markViews(h);\n },\n include: (protocol, key) => {\n if (requireSelected(protocol).record !== undefined)\n throw new Error(`statewire: protocol ${protocol} is not durable`);\n conn.included.add(documentIdentity(protocol, key));\n markViews(h);\n },\n exclude: (protocol, key) => {\n conn.included.delete(documentIdentity(protocol, key));\n markViews(h);\n },\n };\n};\n\n// ─── flush ──────────────────────────────────────────────\n\nexport const flush = (h: SocketHostState, fin?: StatewireHost.Fin) => {\n flushTapSync(() => {});\n h.stateHost?.takeChanged();\n for (const lane of allLanes(h)) {\n for (const adm of lane.inflight.values()) {\n if (adm.applied && !adm.settled && !adm.appliedSent) {\n adm.appliedSent = true;\n queueApplied(h, lane, adm);\n }\n }\n }\n const level = idleLevel(h);\n const edge = level !== h.idleWire;\n if (\n h.pendingOps.length === 0 &&\n h.pendingApplied.size === 0 &&\n h.pendingCmds.size === 0 &&\n !h.viewsDirty &&\n fin === undefined &&\n !edge &&\n ![...h.conns].some(\n (conn) => conn.pendingApplied.length > 0 || conn.pendingCmds.length > 0,\n )\n ) {\n return;\n }\n h.idleWire = level;\n h.viewsDirty = false;\n if (fin === undefined && edge && level && h.finOnIdle) {\n fin = { reason: \"idle\" };\n }\n const mainOps = h.pendingOps;\n const applied = h.pendingApplied;\n const cmds = h.pendingCmds;\n h.pendingOps = [];\n h.pendingApplied = new Map();\n h.pendingCmds = new Map();\n // One packet per flush: ops first, then applied entries, then verdicts.\n for (const conn of [...h.conns]) {\n if (!conn.ready) continue;\n const forConn = (list: Cmd[] | undefined) =>\n (list ?? []).filter((cmd) => selects(conn, cmd.protocol));\n const ops = [\n ...(selects(conn, h.protocol.name) ? mainOps : []),\n ...diffView(h, conn),\n ];\n const cmd = [\n ...forConn(applied.get(conn.clientId)),\n ...conn.pendingApplied.splice(0),\n ...forConn(cmds.get(conn.clientId)),\n ...conn.pendingCmds.splice(0),\n ];\n if (ops.length > 0) {\n sendTo(\n h,\n conn,\n JSON.stringify({\n ops,\n ...(cmd.length > 0 && { cmd }),\n ...(edge && { idle: level }),\n }),\n );\n } else if (cmd.length > 0) {\n sendTo(h, conn, JSON.stringify({ cmd }));\n }\n if (edge && ops.length === 0) {\n sendTo(h, conn, JSON.stringify({ idle: level }));\n }\n if (fin !== undefined) {\n sendTo(h, conn, JSON.stringify({ fin }));\n closeConn(h, conn);\n }\n }\n};\n\nconst queueApplied = (h: SocketHostState, lane: Lane, adm: Admission) => {\n const cmd: Cmd = { protocol: adm.protocol, seq: adm.seq, type: \"applied\" };\n if (lane.conn !== null) lane.conn.pendingApplied.push(cmd);\n else {\n const list = h.pendingApplied.get(lane.clientId);\n if (list) list.push(cmd);\n else h.pendingApplied.set(lane.clientId, [cmd]);\n }\n scheduleFlush(h);\n};\n\nconst queueCmd = (h: SocketHostState, lane: Lane, cmd: Cmd) => {\n if (lane.conn !== null) lane.conn.pendingCmds.push(cmd);\n else {\n const list = h.pendingCmds.get(lane.clientId);\n if (list) list.push(cmd);\n else h.pendingCmds.set(lane.clientId, [cmd]);\n }\n scheduleFlush(h);\n};\n\nconst notifyClientRecords = (h: SocketHostState) => {\n h.persistence?.onClientRecordsChange?.(\n [...h.clients.values()].map((rec) => ({\n id: rec.id,\n touched: rec.touched,\n lanes: Object.fromEntries(\n [...rec.lanes.values()].map((lane) => [\n lane.protocol,\n {\n lastSeq: admittedThrough(lane),\n results: [...lane.results].map(([seq, entry]) => ({\n seq,\n ts: entry.ts,\n cmd: entry.cmd,\n })),\n },\n ]),\n ),\n principal: rec.principal,\n })),\n );\n};\n\nconst retain = (lane: Lane, cmd: Cmd) => {\n const now = Date.now();\n lane.results.set(cmd.seq, { ts: now, cmd });\n const newest = Math.max(...lane.results.keys());\n for (const [seq, entry] of lane.results) {\n if (seq !== newest && now - entry.ts > RESULT_TTL_MS) {\n lane.results.delete(seq);\n }\n }\n while (lane.results.size > RESULT_LIMIT) {\n lane.results.delete(Math.min(...lane.results.keys()));\n }\n};\n\n/** Lane watermark: the last statement admitted, settled or not. */\nconst admittedThrough = (lane: Lane): number =>\n Math.max(lane.lastSeq, ...lane.inflight.keys());\n\nconst watermark = (h: SocketHostState, conn: Conn, protocol: string) => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol)!;\n const lane =\n entry.record === \"ephemeral\"\n ? conn.lanes.get(protocol)\n : h.clients.get(conn.clientId)?.lanes.get(protocol);\n return lane === undefined ? 0 : admittedThrough(lane);\n};\n\nconst laneOf = (h: SocketHostState, conn: Conn, protocol: string): Lane => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol);\n if (entry === undefined) return violation(\"unsupported protocol\");\n const ephemeral = entry.record === \"ephemeral\";\n const lanes = ephemeral ? conn.lanes : h.clients.get(conn.clientId)!.lanes;\n let lane = lanes.get(protocol);\n if (lane === undefined) {\n lane = {\n protocol,\n clientId: conn.clientId,\n conn: ephemeral ? conn : null,\n lastSeq: 0,\n results: new Map(),\n inflight: new Map(),\n };\n lanes.set(protocol, lane);\n }\n return lane;\n};\n\n// A re-asked seq never re-runs: the stored verdict re-emits, an applied\n// inflight run re-answers applied; one not yet applied answers nothing (its\n// answers ride the stream when ready), an evicted verdict answers expired.\nconst reemit = (h: SocketHostState, lane: Lane, seq: number) => {\n const cached = lane.results.get(seq);\n if (cached) {\n const newest = Math.max(...lane.results.keys());\n if (seq === newest || Date.now() - cached.ts <= RESULT_TTL_MS) {\n queueCmd(h, lane, cached.cmd);\n return;\n }\n lane.results.delete(seq);\n notifyClientRecords(h);\n }\n const adm = lane.inflight.get(seq);\n if (adm) {\n if (adm.applied) queueApplied(h, lane, adm);\n return;\n }\n queueCmd(h, lane, { protocol: lane.protocol, seq, type: \"expired\" });\n};\n\nconst settleCmd = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n cmd: Cmd,\n) => {\n if (adm.settled) return;\n adm.settled = true;\n lane.inflight.delete(adm.seq);\n retain(lane, cmd);\n lane.lastSeq = Math.max(lane.lastSeq, adm.seq);\n adm.applied = true;\n queueCmd(h, lane, cmd);\n if (lane.conn === null) notifyClientRecords(h);\n};\n\nconst settleWire = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n outcome: CommandsOutcome,\n) => settleCmd(h, lane, adm, cmdOf(adm, outcome));\n\nconst callerOf = (\n h: SocketHostState,\n rec: ClientRec,\n conn: Conn,\n): StatewireHost.Caller => ({\n clientId: rec.id,\n auth: conn.auth,\n get isConnected() {\n if (h.clients.get(rec.id) !== rec) return false;\n for (const conn of h.conns) {\n if (conn.clientId === rec.id && conn.open) return true;\n }\n return false;\n },\n});\n\nconst rejectStatement = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n message: string,\n) =>\n settleCmd(h, lane, adm, {\n protocol: adm.protocol,\n seq: adm.seq,\n type: \"rejected\",\n code: \"invalid-params\",\n message,\n });\n\nconst admitCmd = (\n h: SocketHostState,\n lane: Lane,\n conn: Conn,\n statement: CmdStatement,\n) => {\n const rec = h.clients.get(conn.clientId)!;\n const adm: Admission = {\n protocol: statement.protocol,\n seq: statement.seq,\n method: statement.method,\n applied: false,\n appliedSent: false,\n settled: false,\n };\n lane.inflight.set(statement.seq, adm);\n if (lane.conn === null) notifyClientRecords(h);\n if (!Array.isArray(statement.params)) {\n rejectStatement(h, lane, adm, \"params must be an array\");\n return;\n }\n let params = statement.params;\n if (statement.meta !== undefined) {\n try {\n params = reviveValue(params, statement.meta, {\n rejectUnknown: true,\n }) as unknown[];\n } catch (error) {\n rejectStatement(\n h,\n lane,\n adm,\n `invalid params: ${(error as Error).message}`,\n );\n return;\n }\n }\n if (statement.method === \"statewire/commands\") {\n if (params.length > 0) {\n rejectStatement(h, lane, adm, \"statewire/commands takes no params\");\n return;\n }\n const names = [\n ...(h.commandsHost?.methods?.() ?? []),\n \"statewire/commands\",\n ].sort();\n settleCmd(h, lane, adm, {\n protocol: adm.protocol,\n seq: adm.seq,\n type: \"result\",\n payload: names,\n });\n return;\n }\n // Subprotocol methods are registered under their full wire name.\n const method =\n statement.protocol === h.protocol.name\n ? statement.method\n : `${statement.protocol}/${statement.method}`;\n h.commandsHost!.submit!({\n method,\n params,\n clientId: rec.id,\n caller: callerOf(h, rec, conn),\n attach: conn.attach,\n context: captureContext(conn.contexts.get(statement.protocol) ?? {}),\n onApplied: () => {\n if (adm.settled || adm.applied) return;\n adm.applied = true;\n lane.lastSeq = Math.max(lane.lastSeq, adm.seq);\n if (lane.conn === null) notifyClientRecords(h);\n scheduleFlush(h);\n },\n onSettle: (outcome) => settleWire(h, lane, adm, outcome),\n }).catch((error: unknown) => {\n if (!adm.settled) settleWire(h, lane, adm, { type: \"rejected\", error });\n });\n};\n\n// One admission law, every lane: absorbed statements answer from their lane,\n// then the new suffix is admitted whole or the frame is refused whole via a\n// {syn} stating every lane's watermark, nothing consumed. A durable gap is\n// never a close; an ephemeral gap is a violation (the lane has no replay).\nexport type FrameAdmission =\n | { type: \"ok\" }\n | { type: \"expired\" }\n | {\n type: \"refused\";\n syn: {\n syn: { protocols: { name: string; seq: number }[]; retry?: number };\n };\n };\n\nconst refusal = (\n h: SocketHostState,\n conn: Conn,\n retry?: number,\n): FrameAdmission => ({\n type: \"refused\",\n syn: {\n syn: {\n protocols: conn.selection.protocols.map((p) => ({\n name: p.name,\n seq: watermark(h, conn, p.name),\n })),\n ...(retry !== undefined && { retry }),\n },\n },\n});\n\nconst validateContexts = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n) => {\n for (const statement of frame.cmd) {\n if (!selects(conn, statement.protocol))\n return violation(\"unsupported protocol\");\n const selected = conn.selection.protocols.find(\n (p) => p.name === statement.protocol,\n )!;\n if (selected.record === \"ephemeral\") {\n const through = watermark(h, conn, statement.protocol);\n const first = frame.cmd.find(\n (s) => s.protocol === statement.protocol && s.seq > through,\n );\n if (first && first.seq !== through + 1)\n return violation(\"ephemeral lane gap\");\n }\n }\n for (const entry of frame.ctx ?? []) {\n if (!selects(conn, entry.protocol))\n return violation(\"unsupported context protocol\");\n try {\n h.current?.validateContext?.(\n entry.protocol,\n captureContext(entry.value),\n conn.attach,\n );\n } catch (error) {\n return violation(\n error instanceof Error ? error.message : \"invalid context\",\n );\n }\n }\n};\n\nconst installContexts = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n) => {\n for (const entry of frame.ctx ?? [])\n conn.contexts.set(entry.protocol, captureContext(entry.value));\n for (const entry of frame.ctx ?? [])\n h.current?.contextChanged?.(\n entry.protocol,\n captureContext(entry.value),\n conn.attach,\n );\n};\n\nexport const admitFrame = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n): FrameAdmission => {\n if (expireLease(h, conn)) return { type: \"expired\" };\n validateContexts(h, conn, frame);\n installContexts(h, conn, frame);\n const rec = h.clients.get(conn.clientId)!;\n rec.touched = Date.now();\n const lanes = new Map(\n frame.cmd.map((s) => [s.protocol, laneOf(h, conn, s.protocol)]),\n );\n const through = new Map(\n [...lanes].map(([protocol, lane]) => [protocol, admittedThrough(lane)]),\n );\n const fresh = frame.cmd.filter((s) => s.seq > through.get(s.protocol)!);\n for (const s of frame.cmd) {\n if (s.seq <= through.get(s.protocol)!)\n reemit(h, lanes.get(s.protocol)!, s.seq);\n }\n let durableNew = 0;\n for (const [protocol, lane] of lanes) {\n const first = fresh.find((s) => s.protocol === protocol);\n if (first === undefined) continue;\n if (first.seq !== through.get(protocol)! + 1) {\n if (lane.conn !== null) return violation(\"ephemeral lane gap\");\n notifyClientRecords(h);\n return refusal(h, conn);\n }\n if (lane.conn === null)\n durableNew += fresh.filter((s) => s.protocol === protocol).length;\n }\n if (durableNew > 0) {\n let clientLoad = 0;\n for (const lane of rec.lanes.values()) clientLoad += lane.inflight.size;\n let hostLoad = 0;\n for (const lane of durableLanes(h)) hostLoad += lane.inflight.size;\n if (\n clientLoad + durableNew > MAX_INFLIGHT_COMMANDS_PER_CLIENT ||\n hostLoad + durableNew > h.maxInflightCommands\n ) {\n return refusal(h, conn, COMMAND_CAPACITY_RETRY_MS);\n }\n }\n if (fresh.length > 0 && h.pushback) {\n const retry = h.pushback();\n if (retry !== null) {\n if (!Number.isSafeInteger(retry) || retry < 0)\n throw new TypeError(\n \"pushback must return a nonnegative safe integer or null\",\n );\n return refusal(h, conn, retry);\n }\n }\n if (expireLease(h, conn)) return { type: \"expired\" };\n for (const s of fresh) admitCmd(h, lanes.get(s.protocol)!, conn, s);\n for (const [protocol, lane] of lanes) {\n const last = fresh.findLast((s) => s.protocol === protocol);\n // Memory host: admitted means retained — dur rides the admitting flush.\n if (last !== undefined && lane.conn === null)\n queueCmd(h, lane, { protocol, seq: last.seq, dur: true });\n }\n notifyClientRecords(h);\n scheduleFlush(h);\n return { type: \"ok\" };\n};\n\nconst message = (h: SocketHostState, conn: Conn, data: string) => {\n if (!conn.open || h.disposed || h.finished !== null || expireLease(h, conn))\n return;\n if (frameIsOversized(data)) {\n sendTo(\n h,\n conn,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"frame too large\",\n },\n }),\n );\n closeConn(h, conn, 1009, \"frame too large\");\n return;\n }\n if (data === \"{}\") {\n if (conn.sawFrame) sendTo(h, conn, \"{}\");\n return;\n }\n const first = !conn.sawFrame;\n conn.sawFrame = true;\n let admission: ReturnType<typeof admitFrame>;\n try {\n const frame = first ? parseInitialFrame(data).frame : parseFrame(data);\n if (frame.cmd.length === 0 && !frame.ctx?.length) return;\n admission = admitFrame(h, conn, frame);\n } catch (error) {\n const reason = violationReason(error);\n if (reason === null) throw error;\n violate(h, conn, reason);\n return;\n }\n if (admission.type === \"refused\") {\n sendTo(h, conn, JSON.stringify(admission.syn));\n }\n};\n\nconst closePending = (\n h: SocketHostState,\n pending: PendingConn,\n code?: number,\n reason?: string,\n) => {\n if (!pending.open) return;\n pending.open = false;\n h.pendingConns.delete(pending);\n if (pending.timer !== null) clearTimeout(pending.timer);\n try {\n pending.socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n};\n\nconst sendPending = (pending: PendingConn, data: string): boolean => {\n if (!pending.open) return false;\n try {\n pending.socket.send(data);\n return true;\n } catch {\n return false;\n }\n};\n\nconst refuseSubscriberLimit = (socket: StatewireHostInternal.Socket): null => {\n try {\n socket.send(\n JSON.stringify({\n fin: {\n reason: \"reconnect\",\n code: \"overloaded\",\n message: SUBSCRIBER_LIMIT_MESSAGE,\n },\n }),\n );\n } catch {\n /* peer already gone */\n }\n try {\n socket.close(1013, SUBSCRIBER_LIMIT_MESSAGE);\n } catch {\n /* peer already gone */\n }\n return null;\n};\n\nconst rejectPendingAuthorization = (\n h: SocketHostState,\n pending: PendingConn,\n error: unknown,\n) => {\n const response = error instanceof Response ? error : null;\n const unauthorized = response?.status === 401 || response?.status === 403;\n const status = response?.status;\n const message = unauthorized\n ? \"unauthorized\"\n : response?.statusText ||\n (status === undefined ? \"authorization failed\" : `HTTP ${status}`);\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason:\n status === 403\n ? \"forbidden\"\n : unauthorized\n ? \"unauthorized\"\n : \"error\",\n message,\n ...(status !== undefined && { status }),\n },\n }),\n );\n closePending(h, pending, unauthorized ? 1008 : 1011, message);\n};\n\nconst normalizedHeaders = (\n headers: Record<string, string>,\n): Record<string, string> => {\n const seen = new Set<string>();\n for (const name of Object.keys(headers)) {\n const key = name.toLowerCase();\n if (seen.has(key)) throw new TypeError(\"duplicate header name\");\n seen.add(key);\n }\n return Object.fromEntries(new Headers(headers));\n};\n\nconst connectAuthorized = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options: StatewireHostInternal.SocketConnectOptions,\n): StatewireHostInternal.SocketConnection | null => {\n const authorize = h.authorize;\n if (options.authorized === true) {\n if (expiredAt(h, options.authorizedAt)) {\n try {\n socket.send(leaseExpiredFin);\n } catch {\n /* peer already gone */\n }\n try {\n socket.close(1000, \"lease-expired\");\n } catch {\n /* peer already gone */\n }\n return null;\n }\n const registration = register(\n h,\n clientId,\n socket,\n options.authorized === true,\n options.auth,\n options.selection,\n undefined,\n options.authorizedAt,\n );\n return registration?.connection ?? null;\n }\n const refuse = (code: number, reason: string) => {\n try {\n socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n return null;\n };\n if (h.disposed) return refuse(1001, \"disposed\");\n if (!CLIENT_ID_RE.test(clientId)) return refuse(1008, \"invalid client id\");\n flush(h);\n if (h.finished !== null) {\n try {\n socket.send(JSON.stringify({ fin: h.finished }));\n } catch {\n /* peer already gone */\n }\n return refuse(1000, \"finished\");\n }\n const pending: PendingConn = {\n socket,\n open: true,\n authorizing: false,\n queued: [],\n timer: null,\n connection: null,\n };\n h.pendingConns.add(pending);\n pending.timer = setTimeout(\n () =>\n rejectPendingAuthorization(\n h,\n pending,\n new Response(null, { status: 401 }),\n ),\n h.wsInitTimeoutMs,\n );\n (pending.timer as unknown as { unref?: () => void }).unref?.();\n return {\n clientId,\n message: (data) => {\n if (pending.connection !== null) {\n pending.connection.message(data);\n return;\n }\n if (!pending.open || h.disposed || h.finished !== null) return;\n if (frameIsOversized(data)) {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"frame too large\",\n },\n }),\n );\n closePending(h, pending, 1009, \"frame too large\");\n return;\n }\n if (pending.authorizing) {\n pending.queued.push(data);\n return;\n }\n let initial: ReturnType<typeof parseInitialFrame>;\n try {\n initial = parseInitialFrame(data);\n } catch (error) {\n if (error instanceof Response) {\n rejectPendingAuthorization(h, pending, error);\n return;\n }\n const reason = violationReason(error);\n if (reason === null) throw error;\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: reason,\n },\n }),\n );\n closePending(h, pending, 1008, reason);\n return;\n }\n const frame = initial.frame;\n let headers: Record<string, string>;\n try {\n headers = {\n ...normalizedHeaders(initial.headers),\n ...normalizedHeaders(options.headers ?? {}),\n };\n } catch {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"malformed headers\",\n },\n }),\n );\n closePending(h, pending, 1008, \"malformed headers\");\n return;\n }\n if (atSubscriberLimit(h)) {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"reconnect\",\n code: \"overloaded\",\n message: SUBSCRIBER_LIMIT_MESSAGE,\n },\n }),\n );\n closePending(h, pending, 1013, SUBSCRIBER_LIMIT_MESSAGE);\n return;\n }\n pending.authorizing = true;\n Promise.resolve()\n .then(() => authorize?.({ headers }))\n .then((auth) => {\n if (!pending.open || h.disposed || h.finished !== null) return;\n const authorizedAt = Date.now();\n const selection = negotiateProtocols(\n new Headers(headers),\n h.wireVersion,\n [h.protocol],\n );\n if (\"fin\" in selection) {\n sendPending(pending, JSON.stringify(selection));\n closePending(h, pending, 1008, selection.fin.message);\n return;\n }\n options.onAuthorized?.(auth, selection, authorizedAt);\n pending.open = false;\n h.pendingConns.delete(pending);\n if (pending.timer !== null) clearTimeout(pending.timer);\n let registration: Registration | null;\n try {\n registration = register(\n h,\n clientId,\n socket,\n true,\n auth,\n selection,\n frame,\n authorizedAt,\n );\n } catch (error) {\n if (violationReason(error) === null) throw error;\n return;\n }\n if (registration === null) return;\n pending.connection = registration.connection;\n for (const data of pending.queued.splice(0))\n registration.connection.message(data);\n })\n .catch((error: unknown) => {\n if (pending.open) rejectPendingAuthorization(h, pending, error);\n });\n },\n close: () => {\n if (pending.connection !== null) pending.connection.close();\n else closePending(h, pending);\n },\n };\n};\n\nconst gcClients = (h: SocketHostState) => {\n let excess = h.clients.size - h.clientRecordLimit;\n if (excess <= 0) return;\n let changed = false;\n const live = new Set([...h.conns].map((conn) => conn.clientId));\n const oldest = [...h.clients.values()].sort((a, b) => a.touched - b.touched);\n for (const rec of oldest) {\n if (excess <= 0) break;\n if (\n live.has(rec.id) ||\n [...rec.lanes.values()].some((lane) => lane.inflight.size > 0)\n )\n continue;\n h.clients.delete(rec.id);\n changed = true;\n excess -= 1;\n }\n if (changed) notifyClientRecords(h);\n};\n\nexport type Registration = {\n conn: Conn;\n connection: StatewireHostInternal.SocketConnection;\n};\n\n/**\n * Attach a socket: ephemeral-lane statements of the attach frame are admitted\n * before the snapshot (their documents and answers ride the hello), durable\n * ones after it. A violation in the attach frame closes the attach and throws.\n */\nexport const register = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n sawFrame = false,\n auth: unknown = undefined,\n selection: StatewireProtocol.Selection = {\n version: h.wireVersion.version,\n protocols: [{ name: h.protocol.name, version: h.protocol.version }],\n },\n frame: ParsedFrame = { cmd: [] },\n authorizedAt?: number,\n): Registration | null => {\n const refuse = (code: number, reason: string) => {\n try {\n socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n return null;\n };\n if (h.disposed) return refuse(1001, \"disposed\");\n if (!CLIENT_ID_RE.test(clientId)) return refuse(1008, \"invalid client id\");\n flush(h);\n if (h.finished !== null) {\n try {\n socket.send(JSON.stringify({ fin: h.finished }));\n } catch {\n /* peer already gone */\n }\n refuse(1000, \"finished\");\n return null;\n }\n if (atSubscriberLimit(h)) {\n return refuseSubscriberLimit(socket);\n }\n if (expiredAt(h, authorizedAt)) {\n try {\n socket.send(leaseExpiredFin);\n } catch {\n /* peer already gone */\n }\n return refuse(1000, \"lease-expired\");\n }\n const known = h.clients.get(clientId);\n if (known !== undefined && !authEquals(known.principal, auth)) {\n try {\n socket.send(\n JSON.stringify({\n fin: {\n reason: \"forbidden\",\n message: PRINCIPAL_MISMATCH_MESSAGE,\n status: 403,\n },\n }),\n );\n } catch {\n /* peer already gone */\n }\n return refuse(1008, PRINCIPAL_MISMATCH_MESSAGE);\n }\n const rec =\n known ??\n (() => {\n const created: ClientRec = {\n id: clientId,\n touched: Date.now(),\n lanes: new Map(),\n principal: auth,\n };\n h.clients.set(clientId, created);\n return created;\n })();\n rec.touched = Date.now();\n const conn: Conn = {\n selection,\n clientId,\n socket,\n open: true,\n ready: false,\n sawFrame,\n lastSentAt: 0,\n lease: null,\n auth,\n authorizedAt,\n leaseTimer: null,\n lanes: new Map(),\n contexts: new Map(),\n documents: new Map(),\n included: new Set(),\n view: new Map(),\n nextDoc: 1,\n pendingApplied: [],\n pendingCmds: [],\n attach: undefined!,\n };\n conn.attach = attachOf(h, conn);\n h.conns.add(conn);\n try {\n validateContexts(h, conn, frame);\n installContexts(h, conn, frame);\n h.current?.attaching?.(conn.attach);\n } catch (error) {\n const reason = violationReason(error);\n if (reason !== null) violate(h, conn, reason);\n else closeConn(h, conn, 1011, \"attach failed\");\n throw error;\n }\n gcClients(h);\n ensureHeartbeat(h);\n armLeaseTimer(h, conn);\n if (!conn.open) return null;\n const isEphemeral = (s: CmdStatement) =>\n selection.protocols.find((p) => p.name === s.protocol)?.record ===\n \"ephemeral\";\n const early = frame.cmd.filter(isEphemeral);\n const late = frame.cmd.filter((s) => !isEphemeral(s));\n const admit = (statements: CmdStatement[]) => {\n if (statements.length === 0) return null;\n try {\n return admitFrame(h, conn, { cmd: statements });\n } catch (error) {\n const reason = violationReason(error);\n if (reason === null) throw error;\n violate(h, conn, reason);\n throw error;\n }\n };\n const earlyAdmission = admit(early);\n if (early.length > 0) flush(h);\n notifyClientRecords(h);\n if (expireLease(h, conn)) return null;\n const ops: WireOp[] = [];\n if (selects(conn, h.protocol.name)) {\n const { value, meta } = encodeDocument(h.stateHost!.snapshot());\n ops.push({\n op: \"mount\",\n protocol: h.protocol.name,\n ...(h.key !== undefined && { key: h.key }),\n main: true,\n value,\n ...(meta !== undefined && { meta }),\n });\n }\n ops.push(...diffView(h, conn));\n const answers = [\n ...conn.pendingApplied.splice(0),\n ...conn.pendingCmds.splice(0),\n ];\n const hello = {\n ops,\n syn: {\n version: selection.version,\n protocols: selection.protocols.map((p) => ({\n ...p,\n seq: p.record === \"ephemeral\" ? 0 : watermark(h, conn, p.name),\n })),\n ...(h.idleWire && { idle: true }),\n },\n ...(answers.length > 0 && { cmd: answers }),\n };\n conn.ready = true;\n sendTo(h, conn, JSON.stringify(hello));\n if (earlyAdmission?.type === \"refused\")\n sendTo(h, conn, JSON.stringify(earlyAdmission.syn));\n const lateAdmission = admit(late);\n if (lateAdmission?.type === \"refused\")\n sendTo(h, conn, JSON.stringify(lateAdmission.syn));\n const connection: StatewireHostInternal.SocketConnection = {\n clientId,\n message: (data) => message(h, conn, data),\n close: () => closeConn(h, conn),\n };\n return { conn, connection };\n};\n\nconst connect = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options: StatewireHostInternal.SocketConnectOptions = {},\n): StatewireHostInternal.SocketConnection | null => {\n return connectAuthorized(h, clientId, socket, options);\n};\n\nconst finish = (h: SocketHostState, fin: StatewireHost.Fin) => {\n if (\n fin.retry !== undefined &&\n (!Number.isSafeInteger(fin.retry) || fin.retry < 0)\n ) {\n throw new Error(\"statewire: retry must be a nonnegative safe integer\");\n }\n if (h.finished !== null || h.disposed) return;\n h.commandsHost?.abort?.();\n h.finished = fin;\n for (const pending of [...h.pendingConns]) {\n sendPending(pending, JSON.stringify({ fin }));\n closePending(h, pending, 1000, fin.reason);\n }\n flush(h, fin);\n};\n\nconst resume = (h: SocketHostState) => {\n h.disposed = false;\n h.stateHost?.setOnOp((op) => recordOp(h, op));\n h.stateHost?.setOnDocuments(() => markViews(h));\n for (const conn of h.conns) armLeaseTimer(h, conn);\n};\n\nconst suspend = (h: SocketHostState) => {\n h.disposed = true;\n for (const conn of h.conns) {\n if (conn.leaseTimer !== null) clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n }\n if (h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n }\n h.stateHost?.setOnOp(null);\n h.stateHost?.setOnDocuments(null);\n};\n\nconst restoreClientRecords = (\n records: readonly StatewireHostInternal.ClientRecord[] = [],\n): Map<string, ClientRec> =>\n new Map(\n records.map((record) => [\n record.id,\n {\n id: record.id,\n touched: record.touched,\n lanes: new Map(\n Object.entries(record.lanes).map(([protocol, lane]) => [\n protocol,\n {\n protocol,\n clientId: record.id,\n conn: null,\n lastSeq: lane.lastSeq,\n results: new Map(\n lane.results.map(({ seq, ts, cmd }) => [seq, { ts, cmd }]),\n ),\n inflight: new Map(),\n },\n ]),\n ),\n principal: record.principal,\n },\n ]),\n );\n\nconst useSocketHost = (\n transport: ResourceElement<Statewire>,\n options?: StatewireHostInternal.SocketHostOptions,\n persistence?: StatewireHostInternal.SocketHostPersistence,\n): Pick<\n StatewireHostInternal.SocketHost,\n \"connect\" | \"finish\" | \"stream\" | \"frames\"\n> => {\n const [h] = useState((): SocketHostState => {\n const host: SocketHostState = {\n protocol: { name: DEFAULT_PROTOCOL, version: WIRE_VERSION },\n key: undefined,\n wireVersion: { version: WIRE_VERSION },\n heartbeatMs: 15_000,\n maxLeaseLifetimeMs: 86_400_000,\n wsInitTimeoutMs: 5_000,\n maxSubscribers: MAX_SUBSCRIBERS,\n maxInflightCommands: MAX_INFLIGHT_COMMANDS_PER_HOST,\n streamQueueSize: STREAM_QUEUE_SIZE,\n clientRecordLimit: CLIENT_RECORD_LIMIT,\n finOnIdle: false,\n pushback: undefined,\n authorize: undefined,\n clients: restoreClientRecords(persistence?.clientRecords),\n conns: new Set(),\n pendingConns: new Set(),\n pendingOps: [],\n pendingApplied: new Map(),\n pendingCmds: new Map(),\n viewsDirty: false,\n idleWire: true,\n finished: null,\n disposed: false,\n flushScheduled: false,\n heartbeatTimer: null,\n stateHost: null,\n commandsHost: null,\n current: null,\n persistence,\n post: createMacrotaskPoster(() => {\n host.flushScheduled = false;\n flush(host);\n }),\n connect: (clientId, socket, connectOptions) =>\n connect(host, clientId, socket, connectOptions),\n finish: (fin) => finish(host, fin),\n stream: (request) => serveStream(host, request),\n frames: (request) => serveFrames(host, request),\n };\n return host;\n });\n h.protocol = options?.protocol ?? {\n name: DEFAULT_PROTOCOL,\n version: WIRE_VERSION,\n };\n h.key = options?.key;\n h.wireVersion = options?.wireVersion ?? { version: WIRE_VERSION };\n setHeartbeatMs(h, options?.heartbeatIntervalMs ?? 15_000);\n const maxLeaseLifetimeMs =\n options?.maxLeaseLifetimeMs === undefined\n ? 86_400_000\n : options.maxLeaseLifetimeMs;\n if (\n maxLeaseLifetimeMs !== null &&\n (!Number.isFinite(maxLeaseLifetimeMs) || maxLeaseLifetimeMs <= 0)\n ) {\n throw new TypeError(\n \"maxLeaseLifetimeMs must be finite and positive or null\",\n );\n }\n if (h.maxLeaseLifetimeMs !== maxLeaseLifetimeMs) {\n h.maxLeaseLifetimeMs = maxLeaseLifetimeMs;\n for (const conn of [...h.conns]) armLeaseTimer(h, conn);\n }\n h.pushback = options?.pushback;\n h.wsInitTimeoutMs = options?.wsInitTimeoutMs ?? 5_000;\n const maxSubscribers =\n options?.maxSubscribers === undefined\n ? MAX_SUBSCRIBERS\n : options.maxSubscribers;\n if (!Number.isInteger(maxSubscribers) || maxSubscribers < 1) {\n throw new TypeError(\"maxSubscribers must be a positive integer\");\n }\n h.maxSubscribers = maxSubscribers;\n const maxInflightCommands =\n options?.maxInflightCommands === undefined\n ? MAX_INFLIGHT_COMMANDS_PER_HOST\n : options.maxInflightCommands;\n if (!Number.isInteger(maxInflightCommands) || maxInflightCommands < 1) {\n throw new TypeError(\"maxInflightCommands must be a positive integer\");\n }\n h.maxInflightCommands = maxInflightCommands;\n const streamQueueSize =\n options?.streamQueueSize === undefined\n ? STREAM_QUEUE_SIZE\n : options.streamQueueSize;\n if (!Number.isInteger(streamQueueSize) || streamQueueSize < 1) {\n throw new TypeError(\"streamQueueSize must be a positive integer\");\n }\n h.streamQueueSize = streamQueueSize;\n h.clientRecordLimit = options?.clientRecordLimit ?? CLIENT_RECORD_LIMIT;\n h.finOnIdle = options?.finOnIdle ?? false;\n h.authorize = options?.authorize;\n const value = useResource(transport) as Statewire<unknown>;\n attach(h, value);\n useEffect(() => {\n attach(h, value);\n scheduleFlush(h);\n });\n useEffect(() => {\n resume(h);\n return () => suspend(h);\n }, [h]);\n return h;\n};\n\n/**\n * Transport-agnostic WS binding over a statewire/host transport:\n * feed it sockets (anything with `send`/`close`) and raw text frames, and it\n * speaks the Statewire packet protocol — snapshot-first hello with `syn`,\n * per-protocol statement lanes under one admission law, `{cmd}` answer\n * arrays fanned out to every attach of a client id (durable lanes) or the\n * admitting attach (ephemeral lanes), per-attach document views, idle edges,\n * and `fin` on finish.\n */\nexport const StatewireSocketHost = (\n transport: ResourceElement<Statewire>,\n options?: StatewireHostInternal.SocketHostOptions,\n persistence?: StatewireHostInternal.SocketHostPersistence,\n): StatewireHostInternal.SocketHost => {\n const SocketHostRoot = () => useSocketHost(transport, options, persistence);\n const root = createTapRoot(SocketHostRoot);\n let disposed = false;\n return {\n connect: (clientId, socket, connectOptions) =>\n flushTapSync(() =>\n root.getValue().connect(clientId, socket, connectOptions),\n ),\n stream: (request) => flushTapSync(() => root.getValue().stream(request)),\n frames: (request) => flushTapSync(() => root.getValue().frames(request)),\n finish: (fin) => flushTapSync(() => root.getValue().finish(fin)),\n dispose: () => {\n if (disposed) return;\n disposed = true;\n flushTapSync(() =>\n root.getValue().finish({ reason: \"reconnect\", code: \"evicted\" }),\n );\n root.unmount();\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"socket.js","names":["contextValue","captureContext","MAX_CONTEXT_BYTES","encodeDocument","DEFAULT_PROTOCOL","WIRE_VERSION","negotiateProtocols","StatewireProtocol","useEffect","useState","createTapRoot","flushTapSync","useResource","ResourceElement","documentIdentity","getCommandsHost","getStateHost","CommandsHost","CommandsOutcome","StatewireSendError","Statewire","StatewireHost","StatewireHostInternal","reviveValue","sanitizeValue","COMMAND_CAPACITY_RETRY_MS","MAX_COMMANDS_PER_FRAME","MAX_EPHEMERAL_DOCUMENT_BYTES","MAX_FRAME_BODY_BYTES","MAX_INFLIGHT_COMMANDS_PER_CLIENT","MAX_INFLIGHT_COMMANDS_PER_HOST","createMacrotaskPoster","StatewireDocument","StatewirePath","frames","serveFrames","stream","serveStream","CLIENT_ID_RE","PRINCIPAL_MISMATCH_MESSAGE","authEquals","a","b","Object","is","Date","getTime","Array","isArray","length","every","v","i","getPrototypeOf","prototype","keysA","keys","keysB","key","Record","RESULT_TTL_MS","RESULT_LIMIT","CLIENT_RECORD_LIMIT","MAX_SUBSCRIBERS","SUBSCRIBER_LIMIT_MESSAGE","STREAM_QUEUE_SIZE","Cmd","WireOp","op","doc","path","value","meta","MetaEntry","protocol","main","Admission","seq","method","applied","appliedSent","settled","Lane","clientId","conn","Conn","lastSeq","results","Map","ts","cmd","inflight","ClientRec","id","touched","lanes","principal","selection","Selection","socket","Socket","open","ready","sawFrame","lastSentAt","lease","auth","authorizedAt","leaseTimer","ReturnType","setTimeout","timedLease","contexts","Context","documents","Document","included","Set","onIncludedChange","IncludedDocument","view","nextDoc","pendingApplied","pendingCmds","attach","Attach","PendingConn","authorizing","queued","timer","connection","SocketConnection","violation","reason","assign","Error","name","violationReason","error","message","CmdStatement","params","ParsedFrame","ctx","isPlainObject","frameEncoder","TextEncoder","parseFrameValue","frame","unknown","filter","sort","lane","hasOwn","prev","statement","Number","isInteger","last","get","undefined","set","push","NonNullable","seen","entry","some","includes","has","add","encode","JSON","stringify","byteLength","parseFrame","raw","parse","frameIsOversized","encodePayload","payload","cmdOf","adm","outcome","at","type","failure","fate","code","console","parseInitialFrame","headers","Response","status","values","SocketHostState","Definition","wireVersion","Range","heartbeatMs","maxLeaseLifetimeMs","leaseTimers","wsInitTimeoutMs","maxSubscribers","maxInflightCommands","streamQueueSize","clientRecordLimit","finOnIdle","pushback","authorize","SocketHostOptions","clients","conns","pendingConns","pendingOps","viewsDirty","idleWire","finished","Fin","disposed","flushScheduled","heartbeatTimer","setInterval","stateHost","StateHost","commandsHost","current","persistence","SocketHostPersistence","post","connect","options","SocketConnectOptions","finish","fin","request","Request","Promise","scheduleFlush","h","markViews","recordOp","next","nextState","state","nextCommands","commands","submit","setOnOp","setOnDocuments","closeConn","delete","clearTimeout","close","detached","size","clearInterval","sendTo","data","now","send","expiredAt","isFinite","leaseExpiredFin","expireLease","armLeaseTimer","delay","Math","min","unref","violate","atSubscriberLimit","ensureHeartbeat","setHeartbeatMs","ms","durableLanes","rec","allLanes","idleLevel","work","isIdle","selects","protocols","p","viewOf","shared","hostMain","record","diffView","ops","number","notifyIncluded","map","restoredIncluded","part","TypeError","attachOf","requireSelected","find","caller","callerOf","context","document","snapshot","mount","encoded","other","unmount","include","exclude","flush","takeChanged","queueApplied","level","edge","mainOps","cmds","forConn","list","splice","idle","queueCmd","notifyClientRecords","onClientRecordsChange","fromEntries","admittedThrough","retain","newest","max","watermark","laneOf","ephemeral","reemit","cached","settleCmd","settleWire","Caller","isConnected","rejectStatement","admitCmd","rejectUnknown","names","methods","onApplied","onSettle","catch","FrameAdmission","syn","retry","refusal","validateContexts","selected","through","first","s","validateContext","installContexts","contextChanged","admitFrame","fresh","durableNew","clientLoad","hostLoad","isSafeInteger","findLast","dur","admission","closePending","pending","sendPending","refuseSubscriberLimit","rejectPendingAuthorization","response","unauthorized","statusText","normalizedHeaders","toLowerCase","Headers","connectAuthorized","authorized","registration","register","refuse","test","initial","resolve","then","onAuthorized","Registration","gcClients","excess","changed","live","oldest","version","Pick","restored","known","created","attaching","isEphemeral","early","late","admit","statements","earlyAdmission","answers","hello","lateAdmission","abort","resume","suspend","restoreClientRecords","records","ClientRecord","entries","useSocketHost","transport","SocketHost","host","hibernatable","clientRecords","connectOptions","heartbeatIntervalMs","StatewireSocketHost","SocketHostRoot","root","getValue","dispose","reviveValue","serveStream","serveFrames"],"sources":["../../src/host/socket.ts"],"sourcesContent":["import { contextValue, captureContext } from \"../wire/context\";\nimport { MAX_CONTEXT_BYTES } from \"../wire/limits\";\nimport { encodeDocument } from \"../document\";\nimport {\n DEFAULT_PROTOCOL,\n WIRE_VERSION,\n negotiateProtocols,\n} from \"../wire/protocol\";\nimport type { StatewireProtocol } from \"../wire/protocol\";\nimport { useEffect, useState } from \"react\";\nimport { createTapRoot, flushTapSync, useResource } from \"@assistant-ui/tap\";\nimport type { ResourceElement } from \"@assistant-ui/tap\";\nimport { documentIdentity, getCommandsHost, getStateHost } from \"./host\";\nimport type { CommandsHost, CommandsOutcome } from \"./host\";\nimport { StatewireSendError } from \"../types\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireHost } from \"../host\";\nimport type { StatewireHostInternal } from \"../host-internal\";\nimport { reviveValue } from \"../wire/meta\";\nimport { sanitizeValue } from \"../wire/ops\";\nimport {\n COMMAND_CAPACITY_RETRY_MS,\n MAX_COMMANDS_PER_FRAME,\n MAX_EPHEMERAL_DOCUMENT_BYTES,\n MAX_FRAME_BODY_BYTES,\n MAX_INFLIGHT_COMMANDS_PER_CLIENT,\n MAX_INFLIGHT_COMMANDS_PER_HOST,\n} from \"../wire/limits\";\nimport { createMacrotaskPoster } from \"../util/macrotask\";\nimport type { StatewireDocument } from \"../document\";\nimport type { StatewirePath } from \"../wire/ops\";\nimport { frames as serveFrames, stream as serveStream } from \"./http\";\n\nexport const CLIENT_ID_RE = /^[A-Za-z0-9._~-]{1,256}$/;\nexport const PRINCIPAL_MISMATCH_MESSAGE =\n \"client id is bound to another principal\";\n\n/** Structural equality over auth values: primitives, Dates, arrays, and plain\n * objects compare by value; anything else by identity. */\nexport const authEquals = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => authEquals(v, b[i]));\n }\n if (\n typeof a === \"object\" &&\n typeof b === \"object\" &&\n a !== null &&\n b !== null &&\n Object.getPrototypeOf(a) === Object.prototype &&\n Object.getPrototypeOf(b) === Object.prototype\n ) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n return (\n keysA.length === keysB.length &&\n keysA.every(\n (key) =>\n key in b &&\n authEquals(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n ),\n )\n );\n }\n return false;\n};\n\nconst RESULT_TTL_MS = 30_000;\nconst RESULT_LIMIT = 256;\nconst CLIENT_RECORD_LIMIT = 1024;\nconst MAX_SUBSCRIBERS = 1024;\nexport const SUBSCRIBER_LIMIT_MESSAGE = \"stream subscriber limit reached\";\nconst STREAM_QUEUE_SIZE = 256;\n\ntype Cmd = StatewireHostInternal.Cmd;\n\ntype WireOp = {\n op: string;\n doc?: number;\n path?: StatewirePath;\n value?: unknown;\n meta?: StatewireDocument.MetaEntry[];\n protocol?: string;\n key?: readonly string[];\n main?: boolean;\n};\n\ntype Admission = {\n protocol: string;\n seq: number;\n method: string;\n applied: boolean;\n appliedSent: boolean;\n settled: boolean;\n};\n\n/** One statement lane: durable lanes live on the client record, ephemeral lanes on the attach. */\ntype Lane = {\n protocol: string;\n clientId: string;\n conn: Conn | null;\n lastSeq: number;\n results: Map<number, { ts: number; cmd: Cmd }>;\n inflight: Map<number, Admission>;\n};\n\nexport type ClientRec = {\n id: string;\n touched: number;\n lanes: Map<string, Lane>;\n /** The auth captured at the record's first attach; later attaches must match. */\n principal: unknown;\n};\n\n// A Conn outlives its socket so an admitted command keeps its attach view.\nexport type Conn = {\n selection: StatewireProtocol.Selection;\n clientId: string;\n socket: StatewireHostInternal.Socket;\n open: boolean;\n ready: boolean;\n sawFrame: boolean;\n lastSentAt: number;\n lease: string | null;\n /** The awaited `authorize` return captured at this attach's authorization. */\n auth: unknown;\n authorizedAt: number | undefined;\n leaseTimer: ReturnType<typeof setTimeout> | null;\n timedLease: boolean;\n lanes: Map<string, Lane>;\n contexts: Map<string, Statewire.Context>;\n documents: Map<string, StatewireHost.Document>;\n included: Set<string>;\n onIncludedChange:\n | ((included: readonly StatewireHostInternal.IncludedDocument[]) => void)\n | undefined;\n view: Map<string, { doc: number; value: unknown }>;\n nextDoc: number;\n pendingApplied: Cmd[];\n pendingCmds: Cmd[];\n attach: StatewireHost.Attach;\n};\n\ntype PendingConn = {\n socket: StatewireHostInternal.Socket;\n open: boolean;\n authorizing: boolean;\n queued: string[];\n timer: ReturnType<typeof setTimeout> | null;\n connection: StatewireHostInternal.SocketConnection | null;\n};\n\n// ─── frame parsing ──────────────────────────────────────\n\nconst violation = (reason: string): never => {\n throw Object.assign(new Error(reason), { name: \"StatewireViolation\" });\n};\n\nconst violationReason = (error: unknown): string | null =>\n error instanceof Error && error.name === \"StatewireViolation\"\n ? error.message\n : null;\n\ntype CmdStatement = {\n protocol: string;\n seq: number;\n method: string;\n params: unknown;\n meta?: unknown;\n};\n\nexport type ParsedFrame = {\n cmd: CmdStatement[];\n ctx?: { protocol: string; value: Statewire.Context }[];\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst frameEncoder = new TextEncoder();\n\nexport const parseFrameValue = (frame: unknown): ParsedFrame => {\n if (!isPlainObject(frame)) return violation(\"malformed frame\");\n const keys = Object.keys(frame);\n if (keys.length === 0) return violation(\"malformed frame\");\n const unknown = keys.filter((key) => key !== \"cmd\" && key !== \"ctx\").sort();\n if (unknown.length > 0)\n return violation(`unknown frame key: '${unknown[0]}'`);\n const lane = frame[\"cmd\"] ?? [];\n if (!Array.isArray(lane)) return violation(\"malformed frame\");\n if (Object.hasOwn(frame, \"cmd\") && lane.length === 0)\n return violation(\"empty lane\");\n if (lane.length > MAX_COMMANDS_PER_FRAME)\n return violation(\"too many commands\");\n const prev = new Map<string, number>();\n const cmd: CmdStatement[] = [];\n for (const statement of lane) {\n if (!isPlainObject(statement)) return violation(\"malformed statement\");\n const seq = statement[\"seq\"];\n const method = statement[\"method\"];\n const protocol = statement[\"protocol\"];\n if (\n typeof seq !== \"number\" ||\n !Number.isInteger(seq) ||\n seq < 1 ||\n typeof method !== \"string\" ||\n typeof protocol !== \"string\" ||\n !(\"params\" in statement)\n ) {\n return violation(\"malformed statement\");\n }\n const last = prev.get(protocol);\n if (last !== undefined && seq !== last + 1)\n return violation(\"malformed frame\");\n prev.set(protocol, seq);\n cmd.push({\n protocol,\n seq,\n method,\n params: statement[\"params\"],\n ...(statement[\"meta\"] !== undefined && { meta: statement[\"meta\"] }),\n });\n }\n const contexts = frame[\"ctx\"];\n const ctx: NonNullable<ParsedFrame[\"ctx\"]> = [];\n if (contexts !== undefined) {\n if (!Array.isArray(contexts) || contexts.length === 0)\n return violation(\"empty context lane\");\n const seen = new Set<string>();\n for (const entry of contexts) {\n if (\n !isPlainObject(entry) ||\n typeof entry[\"protocol\"] !== \"string\" ||\n !Object.hasOwn(entry, \"value\") ||\n Object.keys(entry).some(\n (key) => ![\"protocol\", \"value\", \"meta\"].includes(key),\n )\n )\n return violation(\"malformed context\");\n const protocol = entry[\"protocol\"];\n if (seen.has(protocol)) return violation(\"duplicate context protocol\");\n seen.add(protocol);\n if (\n frameEncoder.encode(JSON.stringify(entry)).byteLength >\n MAX_CONTEXT_BYTES\n )\n return violation(\"context entry too large\");\n try {\n ctx.push({\n protocol,\n value: contextValue({\n value: entry[\"value\"],\n ...(entry[\"meta\"] !== undefined && { meta: entry[\"meta\"] }),\n }),\n });\n } catch (error) {\n return violation(\n error instanceof Error ? error.message : \"invalid context\",\n );\n }\n }\n }\n if (cmd.length === 0 && ctx.length === 0) return violation(\"empty frame\");\n return { cmd, ...(ctx.length > 0 && { ctx }) };\n};\n\nexport const parseFrame = (raw: string): ParsedFrame => {\n let frame: unknown;\n try {\n frame = JSON.parse(raw);\n } catch {\n return violation(\"malformed frame\");\n }\n return parseFrameValue(frame);\n};\n\nconst frameIsOversized = (raw: string): boolean =>\n raw.length > MAX_FRAME_BODY_BYTES ||\n frameEncoder.encode(raw).byteLength > MAX_FRAME_BODY_BYTES;\n\n// ─── verdict encoding ───────────────────────────────────\n\nconst encodePayload = (\n payload: unknown,\n): { payload?: unknown; meta?: StatewireDocument.MetaEntry[] } => {\n if (payload === undefined) return {};\n const { value, meta } = encodeDocument(payload);\n return { payload: value, ...(meta !== undefined && { meta }) };\n};\n\nconst cmdOf = (adm: Admission, outcome: CommandsOutcome): Cmd => {\n const at = { protocol: adm.protocol, seq: adm.seq };\n if (outcome.type === \"accepted\") {\n return { ...at, type: \"result\", ...encodePayload(outcome.payload) };\n }\n const failure =\n outcome.error instanceof StatewireSendError ? outcome.error.failure : null;\n switch (failure?.fate) {\n case \"crashed\":\n return { ...at, type: \"crashed\" };\n case \"failed\":\n return {\n ...at,\n type: \"failed\",\n ...(failure.message !== undefined && { message: failure.message }),\n };\n case \"rejected\": {\n const message =\n failure.code === \"unknown-command\"\n ? `unknown method: '${adm.method}'`\n : failure.message;\n return {\n ...at,\n type: \"rejected\",\n ...(failure.code !== undefined && { code: failure.code }),\n ...(message !== undefined && { message }),\n ...encodePayload(failure.payload),\n };\n }\n default:\n console.error(\"statewire command failed\", outcome.error);\n return {\n ...at,\n type: \"failed\",\n message: \"the command failed\",\n };\n }\n};\n\nconst parseInitialFrame = (raw: string) => {\n let value: unknown;\n try {\n value = JSON.parse(raw);\n } catch {\n return violation(\"malformed frame\");\n }\n if (!isPlainObject(value)) return violation(\"malformed frame\");\n const { headers, ...lanes } = value;\n if (headers === undefined) throw new Response(null, { status: 401 });\n if (\n !isPlainObject(headers) ||\n Object.values(headers).some((v) => typeof v !== \"string\")\n ) {\n return violation(\"malformed headers\");\n }\n return {\n headers: headers as Record<string, string>,\n frame: Object.keys(lanes).length ? parseFrameValue(lanes) : { cmd: [] },\n };\n};\n\n// ─── host ───────────────────────────────────────────────\n\nexport type SocketHostState = {\n protocol: StatewireProtocol.Definition;\n key: readonly string[] | undefined;\n wireVersion: StatewireProtocol.Range;\n heartbeatMs: number;\n maxLeaseLifetimeMs: number | null;\n leaseTimers: boolean;\n wsInitTimeoutMs: number;\n maxSubscribers: number;\n maxInflightCommands: number;\n streamQueueSize: number;\n clientRecordLimit: number;\n finOnIdle: boolean;\n pushback: (() => number | null) | undefined;\n authorize: StatewireHostInternal.SocketHostOptions[\"authorize\"];\n clients: Map<string, ClientRec>;\n conns: Set<Conn>;\n pendingConns: Set<PendingConn>;\n pendingOps: WireOp[];\n pendingApplied: Map<string, Cmd[]>;\n pendingCmds: Map<string, Cmd[]>;\n viewsDirty: boolean;\n idleWire: boolean;\n finished: StatewireHost.Fin | null;\n disposed: boolean;\n flushScheduled: boolean;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n stateHost: StatewireHost.StateHost | null;\n commandsHost: CommandsHost | null;\n current: Statewire<unknown> | null;\n persistence: StatewireHostInternal.SocketHostPersistence | undefined;\n post: () => void;\n connect: (\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options?: StatewireHostInternal.SocketConnectOptions,\n ) => StatewireHostInternal.SocketConnection | null;\n finish: (fin: StatewireHost.Fin) => void;\n stream: (request: Request) => Promise<Response>;\n frames: (request: Request) => Promise<Response>;\n};\n\nconst scheduleFlush = (h: SocketHostState) => {\n if (h.flushScheduled || h.disposed) return;\n h.flushScheduled = true;\n h.post();\n};\n\nconst markViews = (h: SocketHostState) => {\n h.viewsDirty = true;\n scheduleFlush(h);\n};\n\nconst recordOp = (\n h: SocketHostState,\n op: {\n op: string;\n path?: StatewirePath;\n value?: unknown;\n },\n) => {\n if (op.op === \"replace\" || op.op === \"add\") {\n const { value, meta } = encodeDocument(op.value);\n h.pendingOps.push({ ...op, value, ...(meta !== undefined && { meta }) });\n } else {\n h.pendingOps.push(op);\n }\n scheduleFlush(h);\n};\n\nconst attach = (h: SocketHostState, next: Statewire<unknown>) => {\n if (next === h.current) return;\n h.current = next;\n const nextState =\n typeof next.state === \"object\" && next.state !== null\n ? getStateHost(next.state)\n : undefined;\n const nextCommands = getCommandsHost(next.commands);\n if (!nextState || !nextCommands?.submit) {\n throw new Error(\n \"StatewireSocketHost requires a statewire/host transport (useStatewireState with object state, useStatewireCommands)\",\n );\n }\n if (nextState !== h.stateHost) {\n h.stateHost?.setOnOp(null);\n h.stateHost?.setOnDocuments(null);\n h.stateHost = nextState;\n h.stateHost.setOnOp((op) => recordOp(h, op));\n h.stateHost.setOnDocuments(() => markViews(h));\n }\n h.commandsHost = nextCommands;\n};\n\nexport const closeConn = (\n h: SocketHostState,\n conn: Conn,\n code?: number,\n reason?: string,\n) => {\n if (!conn.open) return;\n conn.open = false;\n h.conns.delete(conn);\n if (conn.leaseTimer !== null) {\n clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n }\n try {\n conn.socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n h.current?.detached?.(conn.attach);\n if (h.conns.size === 0 && h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n }\n};\n\nexport const sendTo = (h: SocketHostState, conn: Conn, data: string) => {\n if (!conn.open) return;\n conn.lastSentAt = Date.now();\n try {\n conn.socket.send(data);\n } catch {\n closeConn(h, conn);\n }\n};\n\nconst expiredAt = (h: SocketHostState, authorizedAt: number | undefined) => {\n const now = Date.now();\n return (\n authorizedAt === undefined ||\n !Number.isFinite(authorizedAt) ||\n authorizedAt < 0 ||\n authorizedAt > now ||\n (h.maxLeaseLifetimeMs !== null &&\n now - authorizedAt >= h.maxLeaseLifetimeMs)\n );\n};\n\nconst leaseExpiredFin = JSON.stringify({\n fin: { reason: \"reconnect\", code: \"lease-expired\" },\n});\n\nexport const expireLease = (h: SocketHostState, conn: Conn): boolean => {\n if (!conn.open || expiredAt(h, conn.authorizedAt)) {\n if (conn.open) {\n sendTo(h, conn, leaseExpiredFin);\n closeConn(h, conn, 1000, \"lease-expired\");\n }\n return true;\n }\n return false;\n};\n\nconst armLeaseTimer = (h: SocketHostState, conn: Conn) => {\n if (conn.leaseTimer !== null) clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n if (\n h.disposed ||\n h.maxLeaseLifetimeMs === null ||\n expireLease(h, conn) ||\n !conn.timedLease\n )\n return;\n const delay = h.maxLeaseLifetimeMs - (Date.now() - conn.authorizedAt!);\n conn.leaseTimer = setTimeout(\n () => {\n conn.leaseTimer = null;\n if (!expireLease(h, conn)) armLeaseTimer(h, conn);\n },\n Math.min(delay, 2_147_483_647),\n );\n (conn.leaseTimer as unknown as { unref?: () => void }).unref?.();\n};\n\nconst violate = (h: SocketHostState, conn: Conn, reason: string) => {\n sendTo(\n h,\n conn,\n JSON.stringify({ fin: { reason: \"protocol-error\", message: reason } }),\n );\n closeConn(h, conn, 1008, reason);\n};\n\nexport const atSubscriberLimit = (h: SocketHostState): boolean =>\n h.conns.size +\n [...h.pendingConns].filter((conn) => conn.authorizing).length >=\n h.maxSubscribers;\n\nconst ensureHeartbeat = (h: SocketHostState) => {\n if (h.heartbeatTimer !== null || h.heartbeatMs <= 0) return;\n h.heartbeatTimer = setInterval(() => {\n const now = Date.now();\n for (const conn of [...h.conns]) {\n if (now - conn.lastSentAt >= h.heartbeatMs && !expireLease(h, conn))\n sendTo(h, conn, \"{}\");\n }\n }, h.heartbeatMs);\n (h.heartbeatTimer as unknown as { unref?: () => void }).unref?.();\n};\n\nconst setHeartbeatMs = (h: SocketHostState, ms: number) => {\n if (ms === h.heartbeatMs) return;\n h.heartbeatMs = ms;\n if (h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n ensureHeartbeat(h);\n }\n};\n\nconst durableLanes = function* (h: SocketHostState) {\n for (const rec of h.clients.values()) yield* rec.lanes.values();\n};\n\nconst allLanes = function* (h: SocketHostState) {\n yield* durableLanes(h);\n for (const conn of h.conns) yield* conn.lanes.values();\n};\n\nconst idleLevel = (h: SocketHostState): boolean => {\n if (h.current?.work?.isIdle === false) return false;\n for (const lane of allLanes(h)) {\n if (lane.inflight.size > 0) return false;\n }\n return true;\n};\n\nconst selects = (conn: Conn, protocol: string) =>\n conn.selection.protocols.some((p) => p.name === protocol);\n\n// ─── views ──────────────────────────────────────────────\n\nconst viewOf = (\n h: SocketHostState,\n conn: Conn,\n): Map<string, StatewireHost.Document> => {\n const view = new Map<string, StatewireHost.Document>();\n const shared = h.stateHost!.documents();\n const hostMain = documentIdentity(h.protocol.name);\n for (const p of conn.selection.protocols) {\n if (p.record === \"ephemeral\") {\n for (const [id, doc] of conn.documents)\n if (doc.protocol === p.name) view.set(id, doc);\n } else {\n for (const [id, doc] of shared) {\n if (\n doc.protocol === p.name &&\n id !== hostMain &&\n (doc.main || conn.included.has(id))\n )\n view.set(id, doc);\n }\n }\n }\n return view;\n};\n\nconst diffView = (h: SocketHostState, conn: Conn): WireOp[] => {\n const current = viewOf(h, conn);\n const ops: WireOp[] = [];\n for (const [id, entry] of conn.view) {\n if (current.has(id)) continue;\n conn.view.delete(id);\n ops.push({ op: \"unmount\", doc: entry.doc });\n }\n for (const [id, doc] of current) {\n const entry = conn.view.get(id);\n if (entry !== undefined && entry.value === doc.value) continue;\n const { value, meta } = encodeDocument(doc.value);\n if (entry === undefined) {\n const number = conn.nextDoc++;\n conn.view.set(id, { doc: number, value: doc.value });\n ops.push({\n op: \"mount\",\n doc: number,\n protocol: doc.protocol,\n ...(doc.key !== null && { key: doc.key }),\n ...(doc.main && { main: true }),\n value,\n ...(meta !== undefined && { meta }),\n });\n } else {\n entry.value = doc.value;\n ops.push({\n op: \"replace\",\n doc: entry.doc,\n path: [],\n value,\n ...(meta !== undefined && { meta }),\n });\n }\n }\n return ops;\n};\n\nconst notifyIncluded = (conn: Conn) =>\n conn.onIncludedChange?.(\n [...conn.included].map(\n (id) => JSON.parse(id) as StatewireHostInternal.IncludedDocument,\n ),\n );\n\nconst restoredIncluded = (\n included: readonly StatewireHostInternal.IncludedDocument[],\n): Set<string> =>\n new Set(\n included.map((entry) => {\n if (\n !Array.isArray(entry) ||\n entry.length !== 2 ||\n typeof entry[0] !== \"string\" ||\n !(\n entry[1] === null ||\n (Array.isArray(entry[1]) &&\n entry[1].every((part) => typeof part === \"string\"))\n )\n )\n throw new TypeError(\"statewire: invalid restored include\");\n return documentIdentity(entry[0], entry[1] ?? undefined);\n }),\n );\n\nconst attachOf = (h: SocketHostState, conn: Conn): StatewireHost.Attach => {\n const requireSelected = (protocol: string) => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol);\n if (entry === undefined)\n throw new Error(`statewire: protocol ${protocol} was not negotiated`);\n return entry;\n };\n return {\n get caller() {\n return callerOf(h, h.clients.get(conn.clientId)!, conn);\n },\n context: (protocol) => {\n requireSelected(protocol);\n return captureContext(conn.contexts.get(protocol) ?? {});\n },\n document: (protocol, key) => {\n if (key === undefined && protocol === h.protocol.name)\n return h.stateHost!.snapshot();\n const view = viewOf(h, conn);\n if (key !== undefined)\n return view.get(documentIdentity(protocol, key))?.value;\n for (const doc of view.values())\n if (doc.protocol === protocol && doc.main) return doc.value;\n return undefined;\n },\n mount: (protocol, value, key, main = key === undefined) => {\n if (requireSelected(protocol).record !== \"ephemeral\")\n throw new Error(`statewire: protocol ${protocol} is not ephemeral`);\n const encoded = encodeDocument(value);\n if (\n frameEncoder.encode(JSON.stringify(encoded)).byteLength >\n MAX_EPHEMERAL_DOCUMENT_BYTES\n )\n throw new Error(\"statewire: oversized ephemeral document\");\n const id = documentIdentity(protocol, key);\n if (main) {\n for (const [other, doc] of conn.documents) {\n if (doc.protocol === protocol && doc.main && other !== id)\n throw new Error(\n `statewire: ${protocol} already has a main document`,\n );\n }\n }\n conn.documents.set(id, {\n protocol,\n key: key === undefined ? null : [...key],\n main,\n value: sanitizeValue(value),\n });\n markViews(h);\n },\n unmount: (protocol, key) => {\n if (!conn.documents.delete(documentIdentity(protocol, key)))\n throw new Error(\"statewire: document is not mounted\");\n markViews(h);\n },\n include: (protocol, key) => {\n if (requireSelected(protocol).record !== undefined)\n throw new Error(`statewire: protocol ${protocol} is not durable`);\n const id = documentIdentity(protocol, key);\n if (conn.included.has(id)) return;\n conn.included.add(id);\n notifyIncluded(conn);\n markViews(h);\n },\n exclude: (protocol, key) => {\n if (!conn.included.delete(documentIdentity(protocol, key))) return;\n notifyIncluded(conn);\n markViews(h);\n },\n };\n};\n\n// ─── flush ──────────────────────────────────────────────\n\nexport const flush = (h: SocketHostState, fin?: StatewireHost.Fin) => {\n flushTapSync(() => {});\n h.stateHost?.takeChanged();\n for (const lane of allLanes(h)) {\n for (const adm of lane.inflight.values()) {\n if (adm.applied && !adm.settled && !adm.appliedSent) {\n adm.appliedSent = true;\n queueApplied(h, lane, adm);\n }\n }\n }\n const level = idleLevel(h);\n const edge = level !== h.idleWire;\n if (\n h.pendingOps.length === 0 &&\n h.pendingApplied.size === 0 &&\n h.pendingCmds.size === 0 &&\n !h.viewsDirty &&\n fin === undefined &&\n !edge &&\n ![...h.conns].some(\n (conn) => conn.pendingApplied.length > 0 || conn.pendingCmds.length > 0,\n )\n ) {\n return;\n }\n h.idleWire = level;\n h.viewsDirty = false;\n if (fin === undefined && edge && level && h.finOnIdle) {\n fin = { reason: \"idle\" };\n }\n const mainOps = h.pendingOps;\n const applied = h.pendingApplied;\n const cmds = h.pendingCmds;\n h.pendingOps = [];\n h.pendingApplied = new Map();\n h.pendingCmds = new Map();\n // One packet per flush: ops first, then applied entries, then verdicts.\n for (const conn of [...h.conns]) {\n if (!conn.ready || expireLease(h, conn)) continue;\n const forConn = (list: Cmd[] | undefined) =>\n (list ?? []).filter((cmd) => selects(conn, cmd.protocol));\n const ops = [\n ...(selects(conn, h.protocol.name) ? mainOps : []),\n ...diffView(h, conn),\n ];\n const cmd = [\n ...forConn(applied.get(conn.clientId)),\n ...conn.pendingApplied.splice(0),\n ...forConn(cmds.get(conn.clientId)),\n ...conn.pendingCmds.splice(0),\n ];\n if (ops.length > 0) {\n sendTo(\n h,\n conn,\n JSON.stringify({\n ops,\n ...(cmd.length > 0 && { cmd }),\n ...(edge && { idle: level }),\n }),\n );\n } else if (cmd.length > 0) {\n sendTo(h, conn, JSON.stringify({ cmd }));\n }\n if (edge && ops.length === 0) {\n sendTo(h, conn, JSON.stringify({ idle: level }));\n }\n if (fin !== undefined) {\n sendTo(h, conn, JSON.stringify({ fin }));\n closeConn(h, conn);\n }\n }\n};\n\nconst queueApplied = (h: SocketHostState, lane: Lane, adm: Admission) => {\n const cmd: Cmd = { protocol: adm.protocol, seq: adm.seq, type: \"applied\" };\n if (lane.conn !== null) lane.conn.pendingApplied.push(cmd);\n else {\n const list = h.pendingApplied.get(lane.clientId);\n if (list) list.push(cmd);\n else h.pendingApplied.set(lane.clientId, [cmd]);\n }\n scheduleFlush(h);\n};\n\nconst queueCmd = (h: SocketHostState, lane: Lane, cmd: Cmd) => {\n if (lane.conn !== null) lane.conn.pendingCmds.push(cmd);\n else {\n const list = h.pendingCmds.get(lane.clientId);\n if (list) list.push(cmd);\n else h.pendingCmds.set(lane.clientId, [cmd]);\n }\n scheduleFlush(h);\n};\n\nconst notifyClientRecords = (h: SocketHostState) => {\n h.persistence?.onClientRecordsChange?.(\n [...h.clients.values()].map((rec) => ({\n id: rec.id,\n touched: rec.touched,\n lanes: Object.fromEntries(\n [...rec.lanes.values()].map((lane) => [\n lane.protocol,\n {\n lastSeq: admittedThrough(lane),\n results: [...lane.results].map(([seq, entry]) => ({\n seq,\n ts: entry.ts,\n cmd: entry.cmd,\n })),\n },\n ]),\n ),\n principal: rec.principal,\n })),\n );\n};\n\nconst retain = (lane: Lane, cmd: Cmd) => {\n const now = Date.now();\n lane.results.set(cmd.seq, { ts: now, cmd });\n const newest = Math.max(...lane.results.keys());\n for (const [seq, entry] of lane.results) {\n if (seq !== newest && now - entry.ts > RESULT_TTL_MS) {\n lane.results.delete(seq);\n }\n }\n while (lane.results.size > RESULT_LIMIT) {\n lane.results.delete(Math.min(...lane.results.keys()));\n }\n};\n\n/** Lane watermark: the last statement admitted, settled or not. */\nconst admittedThrough = (lane: Lane): number =>\n Math.max(lane.lastSeq, ...lane.inflight.keys());\n\nconst watermark = (h: SocketHostState, conn: Conn, protocol: string) => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol)!;\n const lane =\n entry.record === \"ephemeral\"\n ? conn.lanes.get(protocol)\n : h.clients.get(conn.clientId)?.lanes.get(protocol);\n return lane === undefined ? 0 : admittedThrough(lane);\n};\n\nconst laneOf = (h: SocketHostState, conn: Conn, protocol: string): Lane => {\n const entry = conn.selection.protocols.find((p) => p.name === protocol);\n if (entry === undefined) return violation(\"unsupported protocol\");\n const ephemeral = entry.record === \"ephemeral\";\n const lanes = ephemeral ? conn.lanes : h.clients.get(conn.clientId)!.lanes;\n let lane = lanes.get(protocol);\n if (lane === undefined) {\n lane = {\n protocol,\n clientId: conn.clientId,\n conn: ephemeral ? conn : null,\n lastSeq: 0,\n results: new Map(),\n inflight: new Map(),\n };\n lanes.set(protocol, lane);\n }\n return lane;\n};\n\n// A re-asked seq never re-runs: the stored verdict re-emits, an applied\n// inflight run re-answers applied; one not yet applied answers nothing (its\n// answers ride the stream when ready), an evicted verdict answers expired.\nconst reemit = (h: SocketHostState, lane: Lane, seq: number) => {\n const cached = lane.results.get(seq);\n if (cached) {\n const newest = Math.max(...lane.results.keys());\n if (seq === newest || Date.now() - cached.ts <= RESULT_TTL_MS) {\n queueCmd(h, lane, cached.cmd);\n return;\n }\n lane.results.delete(seq);\n notifyClientRecords(h);\n }\n const adm = lane.inflight.get(seq);\n if (adm) {\n if (adm.applied) queueApplied(h, lane, adm);\n return;\n }\n queueCmd(h, lane, { protocol: lane.protocol, seq, type: \"expired\" });\n};\n\nconst settleCmd = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n cmd: Cmd,\n) => {\n if (adm.settled) return;\n adm.settled = true;\n lane.inflight.delete(adm.seq);\n retain(lane, cmd);\n lane.lastSeq = Math.max(lane.lastSeq, adm.seq);\n adm.applied = true;\n queueCmd(h, lane, cmd);\n if (lane.conn === null) notifyClientRecords(h);\n};\n\nconst settleWire = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n outcome: CommandsOutcome,\n) => settleCmd(h, lane, adm, cmdOf(adm, outcome));\n\nconst callerOf = (\n h: SocketHostState,\n rec: ClientRec,\n conn: Conn,\n): StatewireHost.Caller => ({\n clientId: rec.id,\n auth: conn.auth,\n get isConnected() {\n if (h.clients.get(rec.id) !== rec) return false;\n for (const conn of h.conns) {\n if (conn.clientId === rec.id && conn.open) return true;\n }\n return false;\n },\n});\n\nconst rejectStatement = (\n h: SocketHostState,\n lane: Lane,\n adm: Admission,\n message: string,\n) =>\n settleCmd(h, lane, adm, {\n protocol: adm.protocol,\n seq: adm.seq,\n type: \"rejected\",\n code: \"invalid-params\",\n message,\n });\n\nconst admitCmd = (\n h: SocketHostState,\n lane: Lane,\n conn: Conn,\n statement: CmdStatement,\n) => {\n const rec = h.clients.get(conn.clientId)!;\n const adm: Admission = {\n protocol: statement.protocol,\n seq: statement.seq,\n method: statement.method,\n applied: false,\n appliedSent: false,\n settled: false,\n };\n lane.inflight.set(statement.seq, adm);\n if (lane.conn === null) notifyClientRecords(h);\n if (!Array.isArray(statement.params)) {\n rejectStatement(h, lane, adm, \"params must be an array\");\n return;\n }\n let params = statement.params;\n if (statement.meta !== undefined) {\n try {\n params = reviveValue(params, statement.meta, {\n rejectUnknown: true,\n }) as unknown[];\n } catch (error) {\n rejectStatement(\n h,\n lane,\n adm,\n `invalid params: ${(error as Error).message}`,\n );\n return;\n }\n }\n if (statement.method === \"statewire/commands\") {\n if (params.length > 0) {\n rejectStatement(h, lane, adm, \"statewire/commands takes no params\");\n return;\n }\n const names = [\n ...(h.commandsHost?.methods?.() ?? []),\n \"statewire/commands\",\n ].sort();\n settleCmd(h, lane, adm, {\n protocol: adm.protocol,\n seq: adm.seq,\n type: \"result\",\n payload: names,\n });\n return;\n }\n // Subprotocol methods are registered under their full wire name.\n const method =\n statement.protocol === h.protocol.name\n ? statement.method\n : `${statement.protocol}/${statement.method}`;\n h.commandsHost!.submit!({\n method,\n params,\n clientId: rec.id,\n caller: callerOf(h, rec, conn),\n attach: conn.attach,\n context: captureContext(conn.contexts.get(statement.protocol) ?? {}),\n onApplied: () => {\n if (adm.settled || adm.applied) return;\n adm.applied = true;\n lane.lastSeq = Math.max(lane.lastSeq, adm.seq);\n if (lane.conn === null) notifyClientRecords(h);\n scheduleFlush(h);\n },\n onSettle: (outcome) => settleWire(h, lane, adm, outcome),\n }).catch((error: unknown) => {\n if (!adm.settled) settleWire(h, lane, adm, { type: \"rejected\", error });\n });\n};\n\n// One admission law, every lane: absorbed statements answer from their lane,\n// then the new suffix is admitted whole or the frame is refused whole via a\n// {syn} stating every lane's watermark, nothing consumed. A durable gap is\n// never a close; an ephemeral gap is a violation (the lane has no replay).\nexport type FrameAdmission =\n | { type: \"ok\" }\n | { type: \"expired\" }\n | {\n type: \"refused\";\n syn: {\n syn: { protocols: { name: string; seq: number }[]; retry?: number };\n };\n };\n\nconst refusal = (\n h: SocketHostState,\n conn: Conn,\n retry?: number,\n): FrameAdmission => ({\n type: \"refused\",\n syn: {\n syn: {\n protocols: conn.selection.protocols.map((p) => ({\n name: p.name,\n seq: watermark(h, conn, p.name),\n })),\n ...(retry !== undefined && { retry }),\n },\n },\n});\n\nconst validateContexts = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n) => {\n for (const statement of frame.cmd) {\n if (!selects(conn, statement.protocol))\n return violation(\"unsupported protocol\");\n const selected = conn.selection.protocols.find(\n (p) => p.name === statement.protocol,\n )!;\n if (selected.record === \"ephemeral\") {\n const through = watermark(h, conn, statement.protocol);\n const first = frame.cmd.find(\n (s) => s.protocol === statement.protocol && s.seq > through,\n );\n if (first && first.seq !== through + 1)\n return violation(\"ephemeral lane gap\");\n }\n }\n for (const entry of frame.ctx ?? []) {\n if (!selects(conn, entry.protocol))\n return violation(\"unsupported context protocol\");\n try {\n h.current?.validateContext?.(\n entry.protocol,\n captureContext(entry.value),\n conn.attach,\n );\n } catch (error) {\n return violation(\n error instanceof Error ? error.message : \"invalid context\",\n );\n }\n }\n};\n\nconst installContexts = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n) => {\n for (const entry of frame.ctx ?? [])\n conn.contexts.set(entry.protocol, captureContext(entry.value));\n for (const entry of frame.ctx ?? [])\n h.current?.contextChanged?.(\n entry.protocol,\n captureContext(entry.value),\n conn.attach,\n );\n};\n\nexport const admitFrame = (\n h: SocketHostState,\n conn: Conn,\n frame: ParsedFrame,\n): FrameAdmission => {\n if (expireLease(h, conn)) return { type: \"expired\" };\n validateContexts(h, conn, frame);\n installContexts(h, conn, frame);\n const rec = h.clients.get(conn.clientId)!;\n rec.touched = Date.now();\n const lanes = new Map(\n frame.cmd.map((s) => [s.protocol, laneOf(h, conn, s.protocol)]),\n );\n const through = new Map(\n [...lanes].map(([protocol, lane]) => [protocol, admittedThrough(lane)]),\n );\n const fresh = frame.cmd.filter((s) => s.seq > through.get(s.protocol)!);\n for (const s of frame.cmd) {\n if (s.seq <= through.get(s.protocol)!)\n reemit(h, lanes.get(s.protocol)!, s.seq);\n }\n let durableNew = 0;\n for (const [protocol, lane] of lanes) {\n const first = fresh.find((s) => s.protocol === protocol);\n if (first === undefined) continue;\n if (first.seq !== through.get(protocol)! + 1) {\n if (lane.conn !== null) return violation(\"ephemeral lane gap\");\n notifyClientRecords(h);\n return refusal(h, conn);\n }\n if (lane.conn === null)\n durableNew += fresh.filter((s) => s.protocol === protocol).length;\n }\n if (durableNew > 0) {\n let clientLoad = 0;\n for (const lane of rec.lanes.values()) clientLoad += lane.inflight.size;\n let hostLoad = 0;\n for (const lane of durableLanes(h)) hostLoad += lane.inflight.size;\n if (\n clientLoad + durableNew > MAX_INFLIGHT_COMMANDS_PER_CLIENT ||\n hostLoad + durableNew > h.maxInflightCommands\n ) {\n return refusal(h, conn, COMMAND_CAPACITY_RETRY_MS);\n }\n }\n if (fresh.length > 0 && h.pushback) {\n const retry = h.pushback();\n if (retry !== null) {\n if (!Number.isSafeInteger(retry) || retry < 0)\n throw new TypeError(\n \"pushback must return a nonnegative safe integer or null\",\n );\n return refusal(h, conn, retry);\n }\n }\n if (expireLease(h, conn)) return { type: \"expired\" };\n for (const s of fresh) admitCmd(h, lanes.get(s.protocol)!, conn, s);\n for (const [protocol, lane] of lanes) {\n const last = fresh.findLast((s) => s.protocol === protocol);\n // Memory host: admitted means retained — dur rides the admitting flush.\n if (last !== undefined && lane.conn === null)\n queueCmd(h, lane, { protocol, seq: last.seq, dur: true });\n }\n notifyClientRecords(h);\n scheduleFlush(h);\n return { type: \"ok\" };\n};\n\nconst message = (h: SocketHostState, conn: Conn, data: string) => {\n if (!conn.open || h.disposed || h.finished !== null || expireLease(h, conn))\n return;\n if (frameIsOversized(data)) {\n sendTo(\n h,\n conn,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"frame too large\",\n },\n }),\n );\n closeConn(h, conn, 1009, \"frame too large\");\n return;\n }\n if (data === \"{}\") {\n if (conn.sawFrame) sendTo(h, conn, \"{}\");\n return;\n }\n const first = !conn.sawFrame;\n conn.sawFrame = true;\n let admission: ReturnType<typeof admitFrame>;\n try {\n const frame = first ? parseInitialFrame(data).frame : parseFrame(data);\n if (frame.cmd.length === 0 && !frame.ctx?.length) return;\n admission = admitFrame(h, conn, frame);\n } catch (error) {\n const reason = violationReason(error);\n if (reason === null) throw error;\n violate(h, conn, reason);\n return;\n }\n if (admission.type === \"refused\") {\n sendTo(h, conn, JSON.stringify(admission.syn));\n }\n};\n\nconst closePending = (\n h: SocketHostState,\n pending: PendingConn,\n code?: number,\n reason?: string,\n) => {\n if (!pending.open) return;\n pending.open = false;\n h.pendingConns.delete(pending);\n if (pending.timer !== null) clearTimeout(pending.timer);\n try {\n pending.socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n};\n\nconst sendPending = (pending: PendingConn, data: string): boolean => {\n if (!pending.open) return false;\n try {\n pending.socket.send(data);\n return true;\n } catch {\n return false;\n }\n};\n\nconst refuseSubscriberLimit = (socket: StatewireHostInternal.Socket): null => {\n try {\n socket.send(\n JSON.stringify({\n fin: {\n reason: \"reconnect\",\n code: \"overloaded\",\n message: SUBSCRIBER_LIMIT_MESSAGE,\n },\n }),\n );\n } catch {\n /* peer already gone */\n }\n try {\n socket.close(1013, SUBSCRIBER_LIMIT_MESSAGE);\n } catch {\n /* peer already gone */\n }\n return null;\n};\n\nconst rejectPendingAuthorization = (\n h: SocketHostState,\n pending: PendingConn,\n error: unknown,\n) => {\n const response = error instanceof Response ? error : null;\n const unauthorized = response?.status === 401 || response?.status === 403;\n const status = response?.status;\n const message = unauthorized\n ? \"unauthorized\"\n : response?.statusText ||\n (status === undefined ? \"authorization failed\" : `HTTP ${status}`);\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason:\n status === 403\n ? \"forbidden\"\n : unauthorized\n ? \"unauthorized\"\n : \"error\",\n message,\n ...(status !== undefined && { status }),\n },\n }),\n );\n closePending(h, pending, unauthorized ? 1008 : 1011, message);\n};\n\nconst normalizedHeaders = (\n headers: Record<string, string>,\n): Record<string, string> => {\n const seen = new Set<string>();\n for (const name of Object.keys(headers)) {\n const key = name.toLowerCase();\n if (seen.has(key)) throw new TypeError(\"duplicate header name\");\n seen.add(key);\n }\n return Object.fromEntries(new Headers(headers));\n};\n\nconst connectAuthorized = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options: StatewireHostInternal.SocketConnectOptions,\n): StatewireHostInternal.SocketConnection | null => {\n const authorize = h.authorize;\n if (options.authorized === true) {\n if (expiredAt(h, options.authorizedAt)) {\n try {\n socket.send(leaseExpiredFin);\n } catch {\n /* peer already gone */\n }\n try {\n socket.close(1000, \"lease-expired\");\n } catch {\n /* peer already gone */\n }\n return null;\n }\n const registration = register(\n h,\n clientId,\n socket,\n options.authorized === true,\n options.auth,\n options.selection,\n undefined,\n options.authorizedAt,\n { ...options, timedLease: h.leaseTimers },\n );\n return registration?.connection ?? null;\n }\n const refuse = (code: number, reason: string) => {\n try {\n socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n return null;\n };\n if (h.disposed) return refuse(1001, \"disposed\");\n if (!CLIENT_ID_RE.test(clientId)) return refuse(1008, \"invalid client id\");\n flush(h);\n if (h.finished !== null) {\n try {\n socket.send(JSON.stringify({ fin: h.finished }));\n } catch {\n /* peer already gone */\n }\n return refuse(1000, \"finished\");\n }\n const pending: PendingConn = {\n socket,\n open: true,\n authorizing: false,\n queued: [],\n timer: null,\n connection: null,\n };\n h.pendingConns.add(pending);\n pending.timer = setTimeout(\n () =>\n rejectPendingAuthorization(\n h,\n pending,\n new Response(null, { status: 401 }),\n ),\n h.wsInitTimeoutMs,\n );\n (pending.timer as unknown as { unref?: () => void }).unref?.();\n return {\n clientId,\n message: (data) => {\n if (pending.connection !== null) {\n pending.connection.message(data);\n return;\n }\n if (!pending.open || h.disposed || h.finished !== null) return;\n if (frameIsOversized(data)) {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"frame too large\",\n },\n }),\n );\n closePending(h, pending, 1009, \"frame too large\");\n return;\n }\n if (pending.authorizing) {\n pending.queued.push(data);\n return;\n }\n let initial: ReturnType<typeof parseInitialFrame>;\n try {\n initial = parseInitialFrame(data);\n } catch (error) {\n if (error instanceof Response) {\n rejectPendingAuthorization(h, pending, error);\n return;\n }\n const reason = violationReason(error);\n if (reason === null) throw error;\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: reason,\n },\n }),\n );\n closePending(h, pending, 1008, reason);\n return;\n }\n const frame = initial.frame;\n let headers: Record<string, string>;\n try {\n headers = {\n ...normalizedHeaders(initial.headers),\n ...normalizedHeaders(options.headers ?? {}),\n };\n } catch {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"protocol-error\",\n message: \"malformed headers\",\n },\n }),\n );\n closePending(h, pending, 1008, \"malformed headers\");\n return;\n }\n if (atSubscriberLimit(h)) {\n sendPending(\n pending,\n JSON.stringify({\n fin: {\n reason: \"reconnect\",\n code: \"overloaded\",\n message: SUBSCRIBER_LIMIT_MESSAGE,\n },\n }),\n );\n closePending(h, pending, 1013, SUBSCRIBER_LIMIT_MESSAGE);\n return;\n }\n pending.authorizing = true;\n Promise.resolve()\n .then(() => authorize?.({ headers }))\n .then((auth) => {\n if (!pending.open || h.disposed || h.finished !== null) return;\n const authorizedAt = Date.now();\n const selection = negotiateProtocols(\n new Headers(headers),\n h.wireVersion,\n [h.protocol],\n );\n if (\"fin\" in selection) {\n sendPending(pending, JSON.stringify(selection));\n closePending(h, pending, 1008, selection.fin.message);\n return;\n }\n options.onAuthorized?.(auth, selection, authorizedAt);\n pending.open = false;\n h.pendingConns.delete(pending);\n if (pending.timer !== null) clearTimeout(pending.timer);\n let registration: Registration | null;\n try {\n registration = register(\n h,\n clientId,\n socket,\n true,\n auth,\n selection,\n frame,\n authorizedAt,\n {\n timedLease: h.leaseTimers,\n ...(options.onIncludedChange !== undefined && {\n onIncludedChange: options.onIncludedChange,\n }),\n },\n );\n } catch (error) {\n if (violationReason(error) === null) throw error;\n return;\n }\n if (registration === null) return;\n pending.connection = registration.connection;\n for (const data of pending.queued.splice(0))\n registration.connection.message(data);\n })\n .catch((error: unknown) => {\n if (pending.open) rejectPendingAuthorization(h, pending, error);\n });\n },\n close: () => {\n if (pending.connection !== null) pending.connection.close();\n else closePending(h, pending);\n },\n };\n};\n\nconst gcClients = (h: SocketHostState) => {\n let excess = h.clients.size - h.clientRecordLimit;\n if (excess <= 0) return;\n let changed = false;\n const live = new Set([...h.conns].map((conn) => conn.clientId));\n const oldest = [...h.clients.values()].sort((a, b) => a.touched - b.touched);\n for (const rec of oldest) {\n if (excess <= 0) break;\n if (\n live.has(rec.id) ||\n [...rec.lanes.values()].some((lane) => lane.inflight.size > 0)\n )\n continue;\n h.clients.delete(rec.id);\n changed = true;\n excess -= 1;\n }\n if (changed) notifyClientRecords(h);\n};\n\nexport type Registration = {\n conn: Conn;\n connection: StatewireHostInternal.SocketConnection;\n};\n\n/**\n * Attach a socket: ephemeral-lane statements of the attach frame are admitted\n * before the snapshot (their documents and answers ride the hello), durable\n * ones after it. A violation in the attach frame closes the attach and throws.\n */\nexport const register = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n sawFrame = false,\n auth: unknown = undefined,\n selection: StatewireProtocol.Selection = {\n version: h.wireVersion.version,\n protocols: [{ name: h.protocol.name, version: h.protocol.version }],\n },\n frame: ParsedFrame = { cmd: [] },\n authorizedAt?: number,\n included: Pick<\n StatewireHostInternal.SocketConnectOptions,\n \"included\" | \"onIncludedChange\"\n > & { timedLease?: boolean } = {},\n): Registration | null => {\n const restored = restoredIncluded(included.included ?? []);\n const refuse = (code: number, reason: string) => {\n try {\n socket.close(code, reason);\n } catch {\n /* peer already gone */\n }\n return null;\n };\n if (h.disposed) return refuse(1001, \"disposed\");\n if (!CLIENT_ID_RE.test(clientId)) return refuse(1008, \"invalid client id\");\n flush(h);\n if (h.finished !== null) {\n try {\n socket.send(JSON.stringify({ fin: h.finished }));\n } catch {\n /* peer already gone */\n }\n refuse(1000, \"finished\");\n return null;\n }\n if (atSubscriberLimit(h)) {\n return refuseSubscriberLimit(socket);\n }\n if (expiredAt(h, authorizedAt)) {\n try {\n socket.send(leaseExpiredFin);\n } catch {\n /* peer already gone */\n }\n return refuse(1000, \"lease-expired\");\n }\n const known = h.clients.get(clientId);\n if (known !== undefined && !authEquals(known.principal, auth)) {\n try {\n socket.send(\n JSON.stringify({\n fin: {\n reason: \"forbidden\",\n message: PRINCIPAL_MISMATCH_MESSAGE,\n status: 403,\n },\n }),\n );\n } catch {\n /* peer already gone */\n }\n return refuse(1008, PRINCIPAL_MISMATCH_MESSAGE);\n }\n const rec =\n known ??\n (() => {\n const created: ClientRec = {\n id: clientId,\n touched: Date.now(),\n lanes: new Map(),\n principal: auth,\n };\n h.clients.set(clientId, created);\n return created;\n })();\n rec.touched = Date.now();\n const conn: Conn = {\n selection,\n clientId,\n socket,\n open: true,\n ready: false,\n sawFrame,\n lastSentAt: 0,\n lease: null,\n auth,\n authorizedAt,\n leaseTimer: null,\n timedLease: included.timedLease ?? true,\n lanes: new Map(),\n contexts: new Map(),\n documents: new Map(),\n included: restored,\n onIncludedChange: included.onIncludedChange,\n view: new Map(),\n nextDoc: 1,\n pendingApplied: [],\n pendingCmds: [],\n attach: undefined!,\n };\n conn.attach = attachOf(h, conn);\n h.conns.add(conn);\n try {\n validateContexts(h, conn, frame);\n installContexts(h, conn, frame);\n h.current?.attaching?.(conn.attach);\n } catch (error) {\n const reason = violationReason(error);\n if (reason !== null) violate(h, conn, reason);\n else closeConn(h, conn, 1011, \"attach failed\");\n throw error;\n }\n gcClients(h);\n ensureHeartbeat(h);\n armLeaseTimer(h, conn);\n if (!conn.open) return null;\n const isEphemeral = (s: CmdStatement) =>\n selection.protocols.find((p) => p.name === s.protocol)?.record ===\n \"ephemeral\";\n const early = frame.cmd.filter(isEphemeral);\n const late = frame.cmd.filter((s) => !isEphemeral(s));\n const admit = (statements: CmdStatement[]) => {\n if (statements.length === 0) return null;\n try {\n return admitFrame(h, conn, { cmd: statements });\n } catch (error) {\n const reason = violationReason(error);\n if (reason === null) throw error;\n violate(h, conn, reason);\n throw error;\n }\n };\n const earlyAdmission = admit(early);\n if (early.length > 0) flush(h);\n notifyClientRecords(h);\n if (expireLease(h, conn)) return null;\n const ops: WireOp[] = [];\n if (selects(conn, h.protocol.name)) {\n const { value, meta } = encodeDocument(h.stateHost!.snapshot());\n ops.push({\n op: \"mount\",\n protocol: h.protocol.name,\n ...(h.key !== undefined && { key: h.key }),\n main: true,\n value,\n ...(meta !== undefined && { meta }),\n });\n }\n ops.push(...diffView(h, conn));\n const answers = [\n ...conn.pendingApplied.splice(0),\n ...conn.pendingCmds.splice(0),\n ];\n const hello = {\n ops,\n syn: {\n version: selection.version,\n protocols: selection.protocols.map((p) => ({\n ...p,\n seq: p.record === \"ephemeral\" ? 0 : watermark(h, conn, p.name),\n })),\n ...(h.idleWire && { idle: true }),\n },\n ...(answers.length > 0 && { cmd: answers }),\n };\n conn.ready = true;\n sendTo(h, conn, JSON.stringify(hello));\n if (earlyAdmission?.type === \"refused\")\n sendTo(h, conn, JSON.stringify(earlyAdmission.syn));\n const lateAdmission = admit(late);\n if (lateAdmission?.type === \"refused\")\n sendTo(h, conn, JSON.stringify(lateAdmission.syn));\n const connection: StatewireHostInternal.SocketConnection = {\n clientId,\n message: (data) => message(h, conn, data),\n close: () => closeConn(h, conn),\n };\n return { conn, connection };\n};\n\nconst connect = (\n h: SocketHostState,\n clientId: string,\n socket: StatewireHostInternal.Socket,\n options: StatewireHostInternal.SocketConnectOptions = {},\n): StatewireHostInternal.SocketConnection | null => {\n return connectAuthorized(h, clientId, socket, options);\n};\n\nconst finish = (h: SocketHostState, fin: StatewireHost.Fin) => {\n if (\n fin.retry !== undefined &&\n (!Number.isSafeInteger(fin.retry) || fin.retry < 0)\n ) {\n throw new Error(\"statewire: retry must be a nonnegative safe integer\");\n }\n if (h.finished !== null || h.disposed) return;\n h.commandsHost?.abort?.();\n h.finished = fin;\n for (const pending of [...h.pendingConns]) {\n sendPending(pending, JSON.stringify({ fin }));\n closePending(h, pending, 1000, fin.reason);\n }\n flush(h, fin);\n};\n\nconst resume = (h: SocketHostState) => {\n h.disposed = false;\n h.stateHost?.setOnOp((op) => recordOp(h, op));\n h.stateHost?.setOnDocuments(() => markViews(h));\n for (const conn of h.conns) armLeaseTimer(h, conn);\n};\n\nconst suspend = (h: SocketHostState) => {\n h.disposed = true;\n for (const conn of h.conns) {\n if (conn.leaseTimer !== null) clearTimeout(conn.leaseTimer);\n conn.leaseTimer = null;\n }\n if (h.heartbeatTimer !== null) {\n clearInterval(h.heartbeatTimer);\n h.heartbeatTimer = null;\n }\n h.stateHost?.setOnOp(null);\n h.stateHost?.setOnDocuments(null);\n};\n\nconst restoreClientRecords = (\n records: readonly StatewireHostInternal.ClientRecord[] = [],\n): Map<string, ClientRec> =>\n new Map(\n records.map((record) => [\n record.id,\n {\n id: record.id,\n touched: record.touched,\n lanes: new Map(\n Object.entries(record.lanes).map(([protocol, lane]) => [\n protocol,\n {\n protocol,\n clientId: record.id,\n conn: null,\n lastSeq: lane.lastSeq,\n results: new Map(\n lane.results.map(({ seq, ts, cmd }) => [seq, { ts, cmd }]),\n ),\n inflight: new Map(),\n },\n ]),\n ),\n principal: record.principal,\n },\n ]),\n );\n\nconst useSocketHost = (\n transport: ResourceElement<Statewire>,\n options?: StatewireHostInternal.SocketHostOptions,\n persistence?: StatewireHostInternal.SocketHostPersistence,\n): Pick<\n StatewireHostInternal.SocketHost,\n \"connect\" | \"finish\" | \"stream\" | \"frames\"\n> => {\n const [h] = useState((): SocketHostState => {\n const host: SocketHostState = {\n protocol: { name: DEFAULT_PROTOCOL, version: WIRE_VERSION },\n key: undefined,\n wireVersion: { version: WIRE_VERSION },\n heartbeatMs: 15_000,\n maxLeaseLifetimeMs: 86_400_000,\n leaseTimers: persistence?.hibernatable !== true,\n wsInitTimeoutMs: 5_000,\n maxSubscribers: MAX_SUBSCRIBERS,\n maxInflightCommands: MAX_INFLIGHT_COMMANDS_PER_HOST,\n streamQueueSize: STREAM_QUEUE_SIZE,\n clientRecordLimit: CLIENT_RECORD_LIMIT,\n finOnIdle: false,\n pushback: undefined,\n authorize: undefined,\n clients: restoreClientRecords(persistence?.clientRecords),\n conns: new Set(),\n pendingConns: new Set(),\n pendingOps: [],\n pendingApplied: new Map(),\n pendingCmds: new Map(),\n viewsDirty: false,\n idleWire: true,\n finished: null,\n disposed: false,\n flushScheduled: false,\n heartbeatTimer: null,\n stateHost: null,\n commandsHost: null,\n current: null,\n persistence,\n post: createMacrotaskPoster(() => {\n host.flushScheduled = false;\n flush(host);\n }),\n connect: (clientId, socket, connectOptions) =>\n connect(host, clientId, socket, connectOptions),\n finish: (fin) => finish(host, fin),\n stream: (request) => serveStream(host, request),\n frames: (request) => serveFrames(host, request),\n };\n return host;\n });\n h.protocol = options?.protocol ?? {\n name: DEFAULT_PROTOCOL,\n version: WIRE_VERSION,\n };\n h.key = options?.key;\n h.wireVersion = options?.wireVersion ?? { version: WIRE_VERSION };\n setHeartbeatMs(h, options?.heartbeatIntervalMs ?? 15_000);\n const maxLeaseLifetimeMs =\n options?.maxLeaseLifetimeMs === undefined\n ? 86_400_000\n : options.maxLeaseLifetimeMs;\n if (\n maxLeaseLifetimeMs !== null &&\n (!Number.isFinite(maxLeaseLifetimeMs) || maxLeaseLifetimeMs <= 0)\n ) {\n throw new TypeError(\n \"maxLeaseLifetimeMs must be finite and positive or null\",\n );\n }\n if (h.maxLeaseLifetimeMs !== maxLeaseLifetimeMs) {\n h.maxLeaseLifetimeMs = maxLeaseLifetimeMs;\n for (const conn of [...h.conns]) armLeaseTimer(h, conn);\n }\n h.pushback = options?.pushback;\n h.wsInitTimeoutMs = options?.wsInitTimeoutMs ?? 5_000;\n const maxSubscribers =\n options?.maxSubscribers === undefined\n ? MAX_SUBSCRIBERS\n : options.maxSubscribers;\n if (!Number.isInteger(maxSubscribers) || maxSubscribers < 1) {\n throw new TypeError(\"maxSubscribers must be a positive integer\");\n }\n h.maxSubscribers = maxSubscribers;\n const maxInflightCommands =\n options?.maxInflightCommands === undefined\n ? MAX_INFLIGHT_COMMANDS_PER_HOST\n : options.maxInflightCommands;\n if (!Number.isInteger(maxInflightCommands) || maxInflightCommands < 1) {\n throw new TypeError(\"maxInflightCommands must be a positive integer\");\n }\n h.maxInflightCommands = maxInflightCommands;\n const streamQueueSize =\n options?.streamQueueSize === undefined\n ? STREAM_QUEUE_SIZE\n : options.streamQueueSize;\n if (!Number.isInteger(streamQueueSize) || streamQueueSize < 1) {\n throw new TypeError(\"streamQueueSize must be a positive integer\");\n }\n h.streamQueueSize = streamQueueSize;\n h.clientRecordLimit = options?.clientRecordLimit ?? CLIENT_RECORD_LIMIT;\n h.finOnIdle = options?.finOnIdle ?? false;\n h.authorize = options?.authorize;\n const value = useResource(transport) as Statewire<unknown>;\n attach(h, value);\n useEffect(() => {\n attach(h, value);\n scheduleFlush(h);\n });\n useEffect(() => {\n resume(h);\n return () => suspend(h);\n }, [h]);\n return h;\n};\n\n/**\n * Transport-agnostic WS binding over a statewire/host transport:\n * feed it sockets (anything with `send`/`close`) and raw text frames, and it\n * speaks the Statewire packet protocol — snapshot-first hello with `syn`,\n * per-protocol statement lanes under one admission law, `{cmd}` answer\n * arrays fanned out to every attach of a client id (durable lanes) or the\n * admitting attach (ephemeral lanes), per-attach document views, idle edges,\n * and `fin` on finish.\n */\nexport const StatewireSocketHost = (\n transport: ResourceElement<Statewire>,\n options?: StatewireHostInternal.SocketHostOptions,\n persistence?: StatewireHostInternal.SocketHostPersistence,\n): StatewireHostInternal.SocketHost => {\n const SocketHostRoot = () => useSocketHost(transport, options, persistence);\n const root = createTapRoot(SocketHostRoot);\n let disposed = false;\n return {\n connect: (clientId, socket, connectOptions) =>\n flushTapSync(() =>\n root.getValue().connect(clientId, socket, connectOptions),\n ),\n stream: (request) => flushTapSync(() => root.getValue().stream(request)),\n frames: (request) => flushTapSync(() => root.getValue().frames(request)),\n finish: (fin) => flushTapSync(() => root.getValue().finish(fin)),\n dispose: () => {\n if (disposed) return;\n disposed = true;\n flushTapSync(() =>\n root.getValue().finish({ reason: \"reconnect\", code: \"evicted\" }),\n );\n root.unmount();\n },\n };\n};\n"],"mappings":"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"}
|
package/dist/host/synced.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { StatewireHost } from "../host.js";
|
|
2
|
-
//#region src/host/synced.d.ts
|
|
1
|
+
import type { StatewireHost } from "../host.js";
|
|
3
2
|
/** `set`/`patch` handlers for an ephemeral subprotocol's main document; spread into `useStatewireCommands`. */
|
|
4
|
-
declare const syncedDocument: (protocol: string) => {
|
|
5
|
-
|
|
3
|
+
export declare const syncedDocument: (protocol: string) => {
|
|
4
|
+
[x: string]: (this: StatewireHost.Ctx, value: unknown) => void;
|
|
6
5
|
};
|
|
7
|
-
//#endregion
|
|
8
|
-
export { syncedDocument };
|
|
9
6
|
//# sourceMappingURL=synced.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synced.d.ts","
|
|
1
|
+
{"version":3,"file":"synced.d.ts","sourceRoot":"","sources":["../../src/host/synced.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAgB;AAkB7C,+GAA+G;AAC/G,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM;wBACR,aAAa,CAAC,GAAG,SAAS,OAAO;CAqCtE,CAAC"}
|
package/dist/host/synced.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StatewireReject } from "./engine.js";
|
|
2
2
|
import { applyDocumentOps } from "../wire/documents.js";
|
|
3
|
-
|
|
3
|
+
// src/host/synced.ts
|
|
4
4
|
const PATCH_OPS = /* @__PURE__ */ new Set([
|
|
5
5
|
"add",
|
|
6
6
|
"replace",
|
|
@@ -39,7 +39,6 @@ const syncedDocument = (protocol) => ({
|
|
|
39
39
|
mount(this.attach, protocol, next);
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
-
//#endregion
|
|
43
42
|
export { syncedDocument };
|
|
44
43
|
|
|
45
44
|
//# sourceMappingURL=synced.js.map
|
package/dist/host/work.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { StatewireHost } from "../host.js";
|
|
2
|
-
//#region src/host/work.d.ts
|
|
1
|
+
import type { StatewireHost } from "../host.js";
|
|
3
2
|
/** Track background tasks and scheduled callbacks in the host's idle status. */
|
|
4
|
-
declare const useStatewireWork: () => StatewireHost.Work;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { useStatewireWork };
|
|
3
|
+
export declare const useStatewireWork: () => StatewireHost.Work;
|
|
7
4
|
//# sourceMappingURL=work.d.ts.map
|
package/dist/host/work.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.d.ts","
|
|
1
|
+
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/host/work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAgB;AAE7C,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,QAAO,aAAa,CAAC,IA6CjD,CAAC"}
|
package/dist/host/work.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
2
|
-
|
|
2
|
+
// src/host/work.ts
|
|
3
3
|
/** Track background tasks and scheduled callbacks in the host's idle status. */
|
|
4
4
|
const useStatewireWork = () => {
|
|
5
5
|
const [, notify] = useState(0);
|
|
@@ -47,7 +47,6 @@ const useStatewireWork = () => {
|
|
|
47
47
|
}));
|
|
48
48
|
return work;
|
|
49
49
|
};
|
|
50
|
-
//#endregion
|
|
51
50
|
export { useStatewireWork };
|
|
52
51
|
|
|
53
52
|
//# sourceMappingURL=work.js.map
|