statewire 0.21.0 → 0.22.0

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.
Files changed (134) hide show
  1. package/dist/client/changes.d.ts +3 -6
  2. package/dist/client/changes.d.ts.map +1 -1
  3. package/dist/client/changes.js +1 -2
  4. package/dist/client/connection.d.ts +80 -83
  5. package/dist/client/connection.d.ts.map +1 -1
  6. package/dist/client/connection.js +2 -3
  7. package/dist/client/connection.js.map +1 -1
  8. package/dist/client/core.d.ts +39 -41
  9. package/dist/client/core.d.ts.map +1 -1
  10. package/dist/client/core.js +2 -3
  11. package/dist/client/session.d.ts +93 -95
  12. package/dist/client/session.d.ts.map +1 -1
  13. package/dist/client/session.js +6 -7
  14. package/dist/client/session.js.map +1 -1
  15. package/dist/client/sessionStore.d.ts +11 -14
  16. package/dist/client/sessionStore.d.ts.map +1 -1
  17. package/dist/client/sessionStore.js +1 -2
  18. package/dist/client/storageError.d.ts +2 -5
  19. package/dist/client/storageError.d.ts.map +1 -1
  20. package/dist/client/storageError.js +1 -2
  21. package/dist/client/timing.d.ts +11 -14
  22. package/dist/client/timing.d.ts.map +1 -1
  23. package/dist/client/timing.js +1 -2
  24. package/dist/document.d.ts +17 -20
  25. package/dist/document.d.ts.map +1 -1
  26. package/dist/document.js +1 -2
  27. package/dist/host/adapter.d.ts +4 -7
  28. package/dist/host/adapter.d.ts.map +1 -1
  29. package/dist/host/adapter.js +1 -2
  30. package/dist/host/draft.d.ts +13 -16
  31. package/dist/host/draft.d.ts.map +1 -1
  32. package/dist/host/draft.js +1 -2
  33. package/dist/host/engine.d.ts +7 -10
  34. package/dist/host/engine.d.ts.map +1 -1
  35. package/dist/host/engine.js +1 -2
  36. package/dist/host/host.d.ts +42 -45
  37. package/dist/host/host.d.ts.map +1 -1
  38. package/dist/host/host.js +1 -2
  39. package/dist/host/http.d.ts +4 -7
  40. package/dist/host/http.d.ts.map +1 -1
  41. package/dist/host/http.js +2 -3
  42. package/dist/host/socket.d.ts +144 -145
  43. package/dist/host/socket.d.ts.map +1 -1
  44. package/dist/host/socket.js +19 -9
  45. package/dist/host/socket.js.map +1 -1
  46. package/dist/host/synced.d.ts +3 -6
  47. package/dist/host/synced.d.ts.map +1 -1
  48. package/dist/host/synced.js +1 -2
  49. package/dist/host/work.d.ts +2 -5
  50. package/dist/host/work.d.ts.map +1 -1
  51. package/dist/host/work.js +1 -2
  52. package/dist/host-internal.d.ts +99 -93
  53. package/dist/host-internal.d.ts.map +1 -1
  54. package/dist/host.d.ts +90 -91
  55. package/dist/host.d.ts.map +1 -1
  56. package/dist/index.d.ts +11 -8
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1 -1
  59. package/dist/statewire.d.ts +265 -268
  60. package/dist/statewire.d.ts.map +1 -1
  61. package/dist/statewire.js +1 -2
  62. package/dist/storage.d.ts +23 -26
  63. package/dist/storage.d.ts.map +1 -1
  64. package/dist/storage.js +1 -2
  65. package/dist/transports/fake-sse.d.ts +7 -10
  66. package/dist/transports/fake-sse.d.ts.map +1 -1
  67. package/dist/transports/fake-sse.js +1 -2
  68. package/dist/transports/fixtures.d.ts +19 -25
  69. package/dist/transports/fixtures.d.ts.map +1 -1
  70. package/dist/transports/fixtures.js +1 -2
  71. package/dist/transports/remote.d.ts +8 -11
  72. package/dist/transports/remote.d.ts.map +1 -1
  73. package/dist/transports/remote.js +1 -2
  74. package/dist/transports/sse-parser.d.ts +1 -4
  75. package/dist/transports/sse-parser.d.ts.map +1 -1
  76. package/dist/transports/sse-parser.js +1 -2
  77. package/dist/transports/sse.d.ts +50 -53
  78. package/dist/transports/sse.d.ts.map +1 -1
  79. package/dist/transports/sse.js +2 -3
  80. package/dist/transports/testing.d.ts +31 -34
  81. package/dist/transports/testing.d.ts.map +1 -1
  82. package/dist/transports/testing.js +1 -2
  83. package/dist/transports/ws.d.ts +5 -7
  84. package/dist/transports/ws.d.ts.map +1 -1
  85. package/dist/transports/ws.js +3 -4
  86. package/dist/transports/ws.js.map +1 -1
  87. package/dist/types.d.ts +81 -78
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js +1 -2
  90. package/dist/util/draftTraps.d.ts +2 -4
  91. package/dist/util/draftTraps.d.ts.map +1 -1
  92. package/dist/util/draftTraps.js +1 -2
  93. package/dist/util/macrotask.d.ts +1 -4
  94. package/dist/util/macrotask.d.ts.map +1 -1
  95. package/dist/util/macrotask.js +1 -2
  96. package/dist/util/methodProxy.d.ts +1 -4
  97. package/dist/util/methodProxy.d.ts.map +1 -1
  98. package/dist/util/methodProxy.js +1 -2
  99. package/dist/util/randomId.d.ts +1 -4
  100. package/dist/util/randomId.d.ts.map +1 -1
  101. package/dist/util/randomId.js +1 -2
  102. package/dist/util/recordMutations.d.ts +5 -7
  103. package/dist/util/recordMutations.d.ts.map +1 -1
  104. package/dist/util/recordMutations.js +1 -2
  105. package/dist/util/statePath.d.ts +9 -12
  106. package/dist/util/statePath.d.ts.map +1 -1
  107. package/dist/util/statePath.js +1 -2
  108. package/dist/wire/context.d.ts +7 -12
  109. package/dist/wire/context.d.ts.map +1 -1
  110. package/dist/wire/context.js +2 -3
  111. package/dist/wire/documents.d.ts +36 -39
  112. package/dist/wire/documents.d.ts.map +1 -1
  113. package/dist/wire/documents.js +2 -3
  114. package/dist/wire/documents.js.map +1 -1
  115. package/dist/wire/limits.d.ts +7 -10
  116. package/dist/wire/limits.d.ts.map +1 -1
  117. package/dist/wire/limits.js +1 -2
  118. package/dist/wire/meta.d.ts +9 -11
  119. package/dist/wire/meta.d.ts.map +1 -1
  120. package/dist/wire/meta.js +1 -2
  121. package/dist/wire/meta.js.map +1 -1
  122. package/dist/wire/ops.d.ts +9 -12
  123. package/dist/wire/ops.d.ts.map +1 -1
  124. package/dist/wire/ops.js +1 -2
  125. package/dist/wire/protocol.d.ts +53 -56
  126. package/dist/wire/protocol.d.ts.map +1 -1
  127. package/dist/wire/protocol.js +1 -2
  128. package/dist/wire/version.d.ts +1 -4
  129. package/dist/wire/version.d.ts.map +1 -1
  130. package/dist/wire/version.js +1 -2
  131. package/package.json +6 -6
  132. package/src/client/connection.ts +13 -15
  133. package/src/host/socket.ts +47 -3
  134. package/src/host-internal.ts +10 -0
@@ -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","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","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","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 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 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 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) 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,\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 options.onIncludedChange === undefined\n ? {}\n : { onIncludedChange: options.onIncludedChange },\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 > = {},\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 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 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,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
- [x: string]: (this: StatewireHost.Ctx, value: unknown) => void;
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","names":[],"sources":["../../src/host/synced.ts"],"mappings":";;;cAqBa,iBAAkB;GACQ,aAAA,MAAA,cAAc,KAAG"}
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"}
@@ -1,6 +1,6 @@
1
1
  import { StatewireReject } from "./engine.js";
2
2
  import { applyDocumentOps } from "../wire/documents.js";
3
- //#region src/host/synced.ts
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
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"work.d.ts","names":[],"sources":["../../src/host/work.ts"],"mappings":";;;cAIa,wBAAuB,cAAc"}
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
- //#region src/host/work.ts
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