@opengeni/sdk 1.0.1 → 2.3.0-canary.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.
- package/README.md +117 -2
- package/dist/artifacts.js +5 -5
- package/dist/automations-client.d.ts +17 -0
- package/dist/automations.d.ts +3 -0
- package/dist/automations.js +78 -0
- package/dist/automations.js.map +1 -0
- package/dist/{chunk-YGH5P47G.js → chunk-6IPZY27S.js} +744 -57
- package/dist/chunk-6IPZY27S.js.map +1 -0
- package/dist/{chunk-TYZ4JL4J.js → chunk-AGUKZAXR.js} +2 -2
- package/dist/{chunk-A5DC5WEM.js → chunk-C2H7HBNP.js} +22 -2
- package/dist/chunk-C2H7HBNP.js.map +1 -0
- package/dist/{chunk-GU6JF75T.js → chunk-C4DJPZRU.js} +1 -1
- package/dist/{chunk-GU6JF75T.js.map → chunk-C4DJPZRU.js.map} +1 -1
- package/dist/{chunk-ST5DDKJP.js → chunk-GW3EJ2GP.js} +52 -1
- package/dist/chunk-GW3EJ2GP.js.map +1 -0
- package/dist/{chunk-4DV37UUA.js → chunk-TW5MNHUX.js} +16 -2
- package/dist/chunk-TW5MNHUX.js.map +1 -0
- package/dist/{chunk-VWE2QIVO.js → chunk-XNG7YGR3.js} +23 -6
- package/dist/chunk-XNG7YGR3.js.map +1 -0
- package/dist/client.d.ts +159 -26
- package/dist/codex-realtime-controller.d.ts +1 -0
- package/dist/codex-realtime-controller.js +2 -2
- package/dist/company-brain.d.ts +32 -0
- package/dist/company-profile.d.ts +1 -1
- package/dist/core.js +4 -4
- package/dist/editable-artifacts/browser-session.d.ts +7 -3
- package/dist/editable-artifacts/controller.d.ts +4 -1
- package/dist/editable-artifacts/errors.d.ts +1 -1
- package/dist/editable-artifacts/http-live-transport.d.ts +6 -2
- package/dist/editable-artifacts/index.d.ts +2 -0
- package/dist/editable-artifacts/open-failure.d.ts +9 -0
- package/dist/editable-artifacts/types.d.ts +4 -3
- package/dist/editable-artifacts/worker/kernel-adapter.d.ts +1 -1
- package/dist/editable-artifacts-worker.js +44 -17
- package/dist/editable-artifacts-worker.js.map +1 -1
- package/dist/editable-artifacts.js +222 -119
- package/dist/editable-artifacts.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +61 -12
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +23 -0
- package/dist/interaction.js +4 -1
- package/dist/organization-private-session-settings.d.ts +6 -0
- package/dist/organization-private-session-settings.js +22 -0
- package/dist/organization-private-session-settings.js.map +1 -0
- package/dist/pr-review-client.d.ts +15 -0
- package/dist/pr-review.d.ts +4 -0
- package/dist/pr-review.js +56 -0
- package/dist/pr-review.js.map +1 -0
- package/dist/preference-registry.d.ts +8 -0
- package/dist/realtime.js +2 -2
- package/dist/retained-artifacts.d.ts +5 -1
- package/dist/types.d.ts +1023 -13
- package/dist/workspace-instruction-policies.d.ts +22 -0
- package/dist/workspace-learning.d.ts +124 -0
- package/package.json +14 -2
- package/src/automations-client.ts +118 -0
- package/src/automations.ts +15 -0
- package/src/client.ts +1049 -71
- package/src/codex-realtime-controller.ts +21 -0
- package/src/company-brain.ts +99 -0
- package/src/company-profile.ts +4 -1
- package/src/editable-artifacts/browser-session.ts +36 -22
- package/src/editable-artifacts/controller.ts +66 -45
- package/src/editable-artifacts/errors.ts +2 -0
- package/src/editable-artifacts/http-live-transport.ts +62 -37
- package/src/editable-artifacts/index.ts +6 -0
- package/src/editable-artifacts/open-failure.ts +79 -0
- package/src/editable-artifacts/storage.ts +31 -40
- package/src/editable-artifacts/types.ts +4 -3
- package/src/editable-artifacts/worker/kernel-adapter.ts +23 -7
- package/src/editable-artifacts/worker/runtime.ts +26 -13
- package/src/editable-artifacts/worker/wire-codec.ts +23 -5
- package/src/errors.ts +1 -1
- package/src/index.ts +134 -0
- package/src/interaction.ts +95 -0
- package/src/organization-private-session-settings.ts +33 -0
- package/src/pr-review-client.ts +84 -0
- package/src/pr-review.ts +15 -0
- package/src/preference-registry.ts +9 -0
- package/src/retained-artifacts.ts +101 -0
- package/src/stream.ts +13 -2
- package/src/types.ts +1174 -12
- package/src/workspace-instruction-policies.ts +24 -0
- package/src/workspace-learning.ts +138 -0
- package/dist/chunk-4DV37UUA.js.map +0 -1
- package/dist/chunk-A5DC5WEM.js.map +0 -1
- package/dist/chunk-ST5DDKJP.js.map +0 -1
- package/dist/chunk-VWE2QIVO.js.map +0 -1
- package/dist/chunk-YGH5P47G.js.map +0 -1
- /package/dist/{chunk-TYZ4JL4J.js.map → chunk-AGUKZAXR.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editable-artifacts/controller.ts","../src/editable-artifacts/errors.ts","../src/editable-artifacts/storage.ts","../src/editable-artifacts/browser-session.ts","../src/editable-artifacts/http-live-transport.ts","../src/editable-artifacts/session.ts","../src/editable-artifacts/worker/browser-client.ts","../src/editable-artifacts/pool.ts","../src/editable-artifacts/index.ts"],"sourcesContent":["import {\n decodeEditableArtifactMutationIntent,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n decodeCommittedTransactionSummary,\n MAX_COMMITTED_TRANSACTION_BYTES,\n} from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { editableArtifactCodecFor } from \"@opengeni/contracts/editable-artifact-codec-registry\";\nimport { decodeEditableArtifactSerializedCommit } from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport { EditableArtifactSyncError } from \"./errors\";\nimport { EditableArtifactStorageConflictError } from \"./storage\";\nimport type { EditableArtifactStoragePort, EditableArtifactStorageScope } from \"./storage\";\nimport type {\n EditableArtifactBootstrap,\n EditableArtifactBlockedPending,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactId,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactSerializedCommittedTransaction,\n EditableArtifactSerializedModality,\n EditableArtifactSerializedSnapshot,\n EditableArtifactSpreadsheetCommittedTransaction,\n EditableArtifactSpreadsheetPendingTransaction,\n EditableArtifactSpreadsheetSnapshot,\n EditableArtifactStoredReplica,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncListener,\n EditableArtifactSyncScheduler,\n EditableArtifactSyncState,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n} from \"./types\";\n\nconst DEFAULT_PROTOCOL_VERSION = 1;\nconst DEFAULT_REPLAY_PAGE_SIZE = 256;\nconst DEFAULT_MAX_QUEUE_MESSAGES = 512;\nconst DEFAULT_MAX_QUEUE_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_STORED_TAIL = 8_192;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst DEFAULT_MAX_OPERATION_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_REPLAY_PAGE_BYTES = 32 * 1024 * 1024;\nconst DEFAULT_MAX_PENDING_TRANSACTIONS = 256;\nconst DEFAULT_MAX_PENDING_BYTES = 32 * 1024 * 1024;\nconst DEFAULT_MIN_TICKET_TTL_MS = 5_000;\nconst MAX_IDENTIFIER_BYTES = 256;\nconst MAX_KERNEL_VERSION_BYTES = 512;\nconst MAX_TICKET_BYTES = 4_096;\nconst MAX_FRONTIER_ACTORS = 1_024;\n\nexport type CreateEditableArtifactSyncControllerOptions = {\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n /** Authenticated cache authority; every field participates in IndexedDB partitioning. */\n storageAuthority: EditableArtifactCacheAuthority;\n transport: EditableArtifactSyncTransport;\n storage: EditableArtifactStoragePort;\n kernel: EditableArtifactWorkerKernel;\n kernelVersion: string;\n modelSchemaVersion: number;\n commandVersion: number;\n protocolVersion?: number;\n replayPageSize?: number;\n maxQueuedMessages?: number;\n maxQueuedBytes?: number;\n maxStoredTailTransactions?: number;\n maxSnapshotBytes?: number;\n maxCommandBytes?: number;\n maxCommittedTransactionBytes?: number;\n maxReplayPageBytes?: number;\n maxPendingTransactions?: number;\n maxPendingBytes?: number;\n minTicketTtlMs?: number;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n maxReconnectAttempts?: number;\n scheduler?: EditableArtifactSyncScheduler;\n clientTransactionIdFactory?: () => string;\n /** Tests/embedded runtimes may inject; defaults to a fresh per-controller UUID. */\n writerReplicaIdFactory?: () => string;\n};\n\nexport type EditableArtifactCacheAuthority = {\n deploymentOrigin: string;\n accountId: string;\n workspaceId: string;\n principalId: string;\n /** Host-auth revision/session epoch; rotate on logout, grant change, or account switch. */\n authorizationEpoch: string;\n};\n\nexport type EditableArtifactQueueCommandsInput = {\n commandBytes: Uint8Array;\n selectiveUndoTargets?: readonly string[];\n /** Optional deterministic ID for host-driven retries before WAL persistence. */\n clientTransactionId?: string;\n};\n\nexport type EditableArtifactSyncController = {\n readonly artifactId: EditableArtifactId;\n readonly modality: EditableArtifactModality;\n start: () => void;\n whenLive: () => Promise<void>;\n close: () => Promise<void>;\n getView: () => EditableArtifactSyncView;\n subscribe: (listener: EditableArtifactSyncListener) => () => void;\n /** Kernel authors/hashes the immutable envelope; SDK WAL persists before delivery. */\n queueCommands: (\n input: EditableArtifactQueueCommandsInput,\n ) => Promise<EditableArtifactPendingTransaction>;\n};\n\ntype QueuedLiveMessage = {\n message: EditableArtifactLiveMessage;\n bytes: number;\n};\n\ntype LiveWaiter = {\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\ntype ControllerReplicaCommon = {\n cursor: number;\n stateHash: string;\n updatedAt: number;\n};\n\ntype ControllerReplica = ControllerReplicaCommon &\n (\n | {\n modality: \"spreadsheet\";\n snapshot: EditableArtifactSpreadsheetSnapshot;\n causalFrontier: EditableArtifactCausalFrontier;\n }\n | {\n modality: EditableArtifactSerializedModality;\n snapshot: EditableArtifactSerializedSnapshot;\n nativeRevision: number;\n }\n );\n\nexport function createEditableArtifactSyncController(\n options: CreateEditableArtifactSyncControllerOptions,\n): EditableArtifactSyncController {\n return new EditableArtifactSyncControllerImpl(options);\n}\n\nclass EditableArtifactSyncControllerImpl implements EditableArtifactSyncController {\n readonly artifactId: EditableArtifactId;\n readonly modality: EditableArtifactModality;\n\n private readonly transport: EditableArtifactSyncTransport;\n private readonly storage: EditableArtifactStoragePort;\n private readonly storageScope: EditableArtifactStorageScope;\n private readonly kernel: EditableArtifactWorkerKernel;\n private readonly writerReplicaId: string;\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly commandVersion: number;\n private readonly protocolVersion: number;\n private readonly replayPageSize: number;\n private readonly maxQueuedMessages: number;\n private readonly maxQueuedBytes: number;\n private readonly maxStoredTailTransactions: number;\n private readonly maxSnapshotBytes: number;\n private readonly maxCommandBytes: number;\n private readonly maxCommittedTransactionBytes: number;\n private readonly maxReplayPageBytes: number;\n private readonly maxPendingTransactions: number;\n private readonly maxPendingBytes: number;\n private readonly minTicketTtlMs: number;\n private readonly reconnectDelayMs: number;\n private readonly maxReconnectDelayMs: number;\n private readonly maxReconnectAttempts: number;\n private readonly scheduler: EditableArtifactSyncScheduler;\n private readonly clientTransactionIdFactory: () => string;\n\n private readonly abortController = new AbortController();\n private readonly listeners = new Set<EditableArtifactSyncListener>();\n private readonly liveWaiters = new Set<LiveWaiter>();\n private readonly pending = new Map<string, EditableArtifactPendingTransaction>();\n private blockedPending: readonly EditableArtifactBlockedPending[] = [];\n private readonly submitBlockedPending = new Map<string, EditableArtifactBlockedPending>();\n\n private state: EditableArtifactSyncState = \"idle\";\n private cursor = 0;\n private headSequence = 0;\n private reconnectAttempt = 0;\n private lastError: Error | null = null;\n private writable = false;\n private replica: ControllerReplica | null = null;\n private retainedTailTransactions = 0;\n private retainedStorageHead: { cursor: number; stateHash: string } | null = null;\n private initialized = false;\n private initializeTask: Promise<void> | null = null;\n private runTask: Promise<void> | null = null;\n private activeTicket: EditableArtifactSyncTicket | null = null;\n private activeConnection: EditableArtifactLiveConnection | null = null;\n private activeLimits: EditableArtifactLiveLimits | null = null;\n private activeEpoch = 0;\n private connectionReady = false;\n private requireSnapshot = false;\n private queuedBytes = 0;\n private readonly liveQueue: QueuedLiveMessage[] = [];\n private drainTask: Promise<void> | null = null;\n private processingFailure: Error | null = null;\n private flushTask: Promise<void> | null = null;\n private readonly flushTasks = new Set<Promise<void>>();\n /**\n * Serializes every operation that moves the Worker and controller causal\n * heads. The Worker commits before its RPC response reaches this thread, so\n * authoring must not observe the controller cursor during that response gap.\n */\n private causalTail: Promise<void> = Promise.resolve();\n private resyncRevision = 0;\n private readonly submittedEpoch = new Map<string, number>();\n /** Receipt-proven mapping from authoritative OGACO/OGAST ids to caller OGATX ids. */\n private readonly acceptedMappings = new Map<\n string,\n Readonly<{ clientTransactionId: string; requestHash: string }>\n >();\n private lastLocalTransactionId: string | null = null;\n private lastLocalReplicaCounter = 0;\n\n constructor(options: CreateEditableArtifactSyncControllerOptions) {\n this.artifactId = requireStableId(options.artifactId, \"artifactId\");\n this.modality = requireModality(options.modality);\n this.transport = options.transport;\n this.storage = options.storage;\n this.storageScope = {\n namespace: editableArtifactCacheNamespace(options.storageAuthority),\n artifactId: this.artifactId,\n modality: this.modality,\n };\n this.kernel = options.kernel;\n this.writerReplicaId = boundedNonEmpty(\n (options.writerReplicaIdFactory ?? defaultWriterReplicaId)(),\n \"writerReplicaId\",\n MAX_IDENTIFIER_BYTES,\n );\n requireReplicaId(this.writerReplicaId, \"writerReplicaId\");\n this.kernelVersion = boundedNonEmpty(\n options.kernelVersion,\n \"kernelVersion\",\n MAX_KERNEL_VERSION_BYTES,\n );\n this.modelSchemaVersion = positiveSafeInteger(options.modelSchemaVersion, \"modelSchemaVersion\");\n this.commandVersion = positiveSafeInteger(options.commandVersion, \"commandVersion\");\n this.protocolVersion = positiveSafeInteger(\n options.protocolVersion ?? DEFAULT_PROTOCOL_VERSION,\n \"protocolVersion\",\n );\n this.replayPageSize = positiveSafeInteger(\n options.replayPageSize ?? DEFAULT_REPLAY_PAGE_SIZE,\n \"replayPageSize\",\n );\n this.maxQueuedMessages = positiveSafeInteger(\n options.maxQueuedMessages ?? DEFAULT_MAX_QUEUE_MESSAGES,\n \"maxQueuedMessages\",\n );\n this.maxQueuedBytes = positiveSafeInteger(\n options.maxQueuedBytes ?? DEFAULT_MAX_QUEUE_BYTES,\n \"maxQueuedBytes\",\n );\n this.maxStoredTailTransactions = positiveSafeInteger(\n options.maxStoredTailTransactions ?? DEFAULT_MAX_STORED_TAIL,\n \"maxStoredTailTransactions\",\n );\n this.maxSnapshotBytes = positiveSafeInteger(\n options.maxSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n \"maxSnapshotBytes\",\n );\n this.maxCommandBytes = positiveSafeInteger(\n options.maxCommandBytes ?? DEFAULT_MAX_COMMAND_BYTES,\n \"maxCommandBytes\",\n );\n if (this.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES) {\n throw new RangeError(\"maxCommandBytes exceeds the editable-artifact contract bound\");\n }\n this.maxCommittedTransactionBytes = positiveSafeInteger(\n options.maxCommittedTransactionBytes ?? DEFAULT_MAX_OPERATION_BYTES,\n \"maxCommittedTransactionBytes\",\n );\n this.maxReplayPageBytes = positiveSafeInteger(\n options.maxReplayPageBytes ?? DEFAULT_MAX_REPLAY_PAGE_BYTES,\n \"maxReplayPageBytes\",\n );\n this.maxPendingTransactions = positiveSafeInteger(\n options.maxPendingTransactions ?? DEFAULT_MAX_PENDING_TRANSACTIONS,\n \"maxPendingTransactions\",\n );\n this.maxPendingBytes = positiveSafeInteger(\n options.maxPendingBytes ?? DEFAULT_MAX_PENDING_BYTES,\n \"maxPendingBytes\",\n );\n this.minTicketTtlMs = nonNegativeSafeInteger(\n options.minTicketTtlMs ?? DEFAULT_MIN_TICKET_TTL_MS,\n \"minTicketTtlMs\",\n );\n this.reconnectDelayMs = nonNegativeSafeInteger(\n options.reconnectDelayMs ?? 250,\n \"reconnectDelayMs\",\n );\n this.maxReconnectDelayMs = nonNegativeSafeInteger(\n options.maxReconnectDelayMs ?? 5_000,\n \"maxReconnectDelayMs\",\n );\n this.maxReconnectAttempts =\n options.maxReconnectAttempts === undefined\n ? Number.POSITIVE_INFINITY\n : nonNegativeSafeInteger(options.maxReconnectAttempts, \"maxReconnectAttempts\");\n this.scheduler = options.scheduler ?? defaultScheduler;\n this.clientTransactionIdFactory =\n options.clientTransactionIdFactory ?? (() => crypto.randomUUID());\n }\n\n start(): void {\n if (this.runTask || this.state === \"closed\") return;\n this.runTask = this.run().catch((error: unknown) => {\n if (this.abortController.signal.aborted) return;\n const failure = asError(error);\n if (failure instanceof EditableArtifactSyncError && failure.code === \"unsupported_protocol\") {\n this.lastError = failure;\n this.setState(\"unsupported\");\n this.rejectLiveWaiters(failure);\n return;\n }\n this.fail(failure);\n });\n }\n\n async whenLive(): Promise<void> {\n if (this.state === \"live\") return;\n if (isTerminal(this.state)) throw this.lastError ?? new Error(`artifact sync is ${this.state}`);\n this.start();\n await new Promise<void>((resolve, reject) => {\n this.liveWaiters.add({ resolve, reject });\n });\n }\n\n async close(): Promise<void> {\n if (this.state === \"closed\") return;\n this.abortController.abort();\n this.activeEpoch += 1;\n this.connectionReady = false;\n this.activeConnection?.close(\"client_closed\");\n this.activeConnection = null;\n this.clearLiveQueue();\n if (this.runTask) await this.runTask.catch(() => {});\n await Promise.allSettled([...this.flushTasks]);\n await this.causalTail.catch(() => {});\n this.setState(\"closed\");\n this.rejectLiveWaiters(new Error(\"artifact sync controller closed\"));\n }\n\n getView(): EditableArtifactSyncView {\n return {\n artifactId: this.artifactId,\n modality: this.modality,\n state: this.state,\n cursor: this.cursor,\n headSequence: this.headSequence,\n writable: this.writable,\n pendingTransactions: this.pending.size,\n blockedPending: this.allBlockedPending(),\n queuedMessages: this.liveQueue.length,\n reconnectAttempt: this.reconnectAttempt,\n lastError: this.lastError,\n };\n }\n\n subscribe(listener: EditableArtifactSyncListener): () => void {\n this.listeners.add(listener);\n listener(this.getView());\n return () => this.listeners.delete(listener);\n }\n\n queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n if (!(input.commandBytes instanceof Uint8Array)) {\n return Promise.reject(new TypeError(\"commandBytes must be a Uint8Array\"));\n }\n const captured: EditableArtifactQueueCommandsInput = {\n ...input,\n commandBytes: input.commandBytes.slice(),\n ...(input.selectiveUndoTargets === undefined\n ? {}\n : { selectiveUndoTargets: [...input.selectiveUndoTargets] }),\n };\n return this.runCausalOperation(() => this.queueCommandsExclusive(captured));\n }\n\n private runCausalOperation<Result>(operation: () => Promise<Result>): Promise<Result> {\n const result = this.causalTail.then(operation);\n this.causalTail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n private async queueCommandsExclusive(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n if (this.abortController.signal.aborted) {\n throw new Error(\"artifact sync controller is closed\");\n }\n if (!(input.commandBytes instanceof Uint8Array) || input.commandBytes.byteLength === 0) {\n throw new TypeError(\"commandBytes must be a non-empty Uint8Array\");\n }\n const effectiveCommandBytes = Math.min(\n this.maxCommandBytes,\n this.activeLimits?.maxCommandBytes ?? this.maxCommandBytes,\n );\n if (input.commandBytes.byteLength > effectiveCommandBytes) {\n throw new RangeError(\"commandBytes exceeds the configured bound\");\n }\n await this.initialize();\n if (this.abortController.signal.aborted) {\n throw new Error(\"artifact sync controller is closed\");\n }\n const clientTransactionId = requireClientTransactionId(\n input.clientTransactionId ?? this.clientTransactionIdFactory(),\n \"clientTransactionId\",\n );\n const selectiveUndoTargets = normalizeIdentifiers(\n input.selectiveUndoTargets ?? [],\n \"selectiveUndoTargets\",\n );\n if (this.modality !== \"spreadsheet\" && selectiveUndoTargets.length > 0) {\n throw new TypeError(\"selective undo is only supported for spreadsheet artifacts\");\n }\n const existing = this.pending.get(clientTransactionId);\n if (existing) {\n if (\n existing.modality !== this.modality ||\n !bytesEqual(existing.commandBytes, input.commandBytes) ||\n (existing.modality === \"spreadsheet\" &&\n !identifiersEqual(existing.selectiveUndoTargets, selectiveUndoTargets))\n ) {\n throw new TypeError(\n `clientTransactionId ${clientTransactionId} is already bound to other commands`,\n );\n }\n if (this.replica) {\n try {\n await this.replacePendingOverlay();\n } catch (error) {\n this.requestSnapshotResync(\n `artifact Worker could not restore pending projection: ${asError(error).message}`,\n \"resync_required\",\n );\n }\n }\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n return clonePending(existing);\n }\n if (this.modality !== \"spreadsheet\" && this.allBlockedPending().length > 0) {\n throw new EditableArtifactSyncError(\n \"pending_conflict\",\n \"resolve the stale serialized edit before authoring another command\",\n );\n }\n if (this.pending.size >= this.maxPendingTransactions) {\n throw new RangeError(\"pending transaction count exceeds the configured bound\");\n }\n if (this.pendingBytes() + input.commandBytes.byteLength > this.maxPendingBytes) {\n throw new RangeError(\"pending transaction bytes exceed the configured bound\");\n }\n const foreignPending = this.orderedPending().find(\n (transaction) => transaction.replicaId !== this.writerReplicaId,\n );\n if (foreignPending) {\n throw new Error(\n \"pending edits from a prior writer must settle before authoring dependent commands\",\n );\n }\n const previous = this.orderedPending()\n .filter((transaction) => transaction.replicaId === this.writerReplicaId)\n .at(-1);\n const confirmedCounter =\n this.modality === \"spreadsheet\"\n ? (this.currentFrontier().find((entry) => entry.replicaId === this.writerReplicaId)\n ?.counter ?? 0)\n : this.lastLocalReplicaCounter;\n if (previous && previous.replicaCounter < confirmedCounter) {\n throw new Error(\"pending writer counter is behind its confirmed causal frontier\");\n }\n const replicaCounter = positiveSafeInteger(\n (previous?.replicaCounter ?? confirmedCounter) + 1,\n \"replicaCounter\",\n );\n const previousLocalTransactionId = previous?.clientTransactionId ?? this.lastLocalTransactionId;\n if (replicaCounter > 1 && previousLocalTransactionId === null) {\n throw new Error(\"writer replica epoch was reused without its causal predecessor\");\n }\n const createdAt = this.scheduler.now();\n const observedHeadSequence =\n this.modality === \"spreadsheet\" ? this.cursor : this.cursor + this.pending.size;\n const authored = await this.kernel.authorPending({\n modality: this.modality,\n protocolVersion: this.protocolVersion,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n commandVersion: this.commandVersion,\n artifactId: this.artifactId,\n clientTransactionId,\n replicaId: this.writerReplicaId,\n replicaCounter,\n previousLocalTransactionId,\n observedHeadSequence,\n ...(this.modality === \"spreadsheet\"\n ? {\n causalBase: cloneFrontier(this.currentFrontier()),\n selectiveUndoTargets,\n }\n : {}),\n commandBytes: input.commandBytes.slice(),\n createdAt,\n });\n validatePendingTransaction(authored, this.artifactId, this.modality, this.maxCommandBytes);\n if (\n this.activeLimits !== null &&\n authored.intentBytes.byteLength > this.activeLimits.maxIntentBytes\n ) {\n throw new RangeError(\"intentBytes exceeds the negotiated live bound\");\n }\n if (\n this.pendingBytes() + authored.commandBytes.byteLength + authored.intentBytes.byteLength >\n this.maxPendingBytes\n ) {\n throw new RangeError(\"pending transaction bytes exceed the configured bound\");\n }\n verifyAuthoredPending(authored, {\n modality: this.modality,\n clientTransactionId,\n replicaId: this.writerReplicaId,\n replicaCounter,\n previousLocalTransactionId,\n protocolVersion: this.protocolVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n commandVersion: this.commandVersion,\n observedHeadSequence,\n ...(this.modality === \"spreadsheet\"\n ? {\n causalBase: this.currentFrontier(),\n selectiveUndoTargets,\n }\n : {}),\n commandBytes: input.commandBytes,\n createdAt,\n });\n await this.storage.putPending(this.storageScope, clonePending(authored));\n this.pending.set(authored.clientTransactionId, clonePending(authored));\n if (this.replica) {\n try {\n await this.replacePendingOverlay();\n } catch (error) {\n // The WAL write is the acceptance boundary. Never report this command\n // as rejected after its immutable intent is durable; rebuild the\n // speculative projection from authority + WAL on the next connection.\n this.requestSnapshotResync(\n `artifact Worker could not project durable pending intent: ${asError(error).message}`,\n \"resync_required\",\n );\n }\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n return clonePending(authored);\n }\n\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n if (this.initializeTask) return await this.initializeTask;\n this.initializeTask = this.initializeOnce();\n try {\n await this.initializeTask;\n this.initialized = true;\n } finally {\n this.initializeTask = null;\n }\n }\n\n private async initializeOnce(): Promise<void> {\n const pending = await this.storage.listPending(this.storageScope);\n for (const transaction of pending) {\n validatePendingTransaction(transaction, this.artifactId, this.modality, this.maxCommandBytes);\n if (\n transaction.protocolVersion !== this.protocolVersion ||\n transaction.modelSchemaVersion !== this.modelSchemaVersion ||\n transaction.commandVersion !== this.commandVersion\n ) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `retained pending transaction ${transaction.clientTransactionId} uses incompatible protocol/schema/command versions`,\n );\n }\n const existing = this.pending.get(transaction.clientTransactionId);\n if (existing && existing.requestHash !== transaction.requestHash) {\n throw storageError(`conflicting retained transaction ${transaction.clientTransactionId}`);\n }\n this.pending.set(transaction.clientTransactionId, clonePending(transaction));\n if (transaction.replicaId === this.writerReplicaId) {\n this.lastLocalReplicaCounter = Math.max(\n this.lastLocalReplicaCounter,\n transaction.replicaCounter,\n );\n }\n }\n if (\n this.pending.size > this.maxPendingTransactions ||\n this.pendingBytes() > this.maxPendingBytes\n ) {\n throw storageError(\"retained pending transaction WAL exceeds configured bounds\");\n }\n\n let stored: EditableArtifactStoredReplica | null;\n try {\n stored = await this.storage.loadReplica(this.storageScope);\n } catch (error) {\n // Confirmed replica state is a reconstructible cache. A malformed or\n // over-bound local record must not permanently brick this artifact; the\n // pending WAL remains separate and is deliberately preserved.\n if (!(error instanceof TypeError) && !(error instanceof RangeError)) {\n throw storageError(\"failed to load retained artifact replica\", error);\n }\n try {\n await this.storage.clearReplica(this.storageScope);\n } catch (clearError) {\n throw storageError(\"failed to clear invalid retained artifact replica\", clearError);\n }\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.retainedStorageHead = null;\n this.requireSnapshot = true;\n this.emit();\n return;\n }\n if (!stored) {\n this.requireSnapshot = true;\n this.emit();\n return;\n }\n this.retainedStorageHead = { cursor: stored.cursor, stateHash: stored.stateHash };\n try {\n await this.restoreReplica(stored);\n await this.replacePendingOverlay();\n } catch {\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.requireSnapshot = true;\n }\n this.emit();\n }\n\n private async restoreReplica(stored: EditableArtifactStoredReplica): Promise<void> {\n validateSnapshot(\n stored.snapshot,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.kernelVersion,\n this.modelSchemaVersion,\n this.maxSnapshotBytes,\n );\n if (stored.artifactId !== this.artifactId || stored.modality !== this.modality) {\n throw new TypeError(\"stored artifact authority mismatch\");\n }\n await this.kernel.reset();\n const loaded = await this.kernel.loadSnapshot(stored.snapshot);\n requireStateHash(loaded.stateHash, stored.snapshot.stateHash, \"retained snapshot\");\n requireDigest(loaded.digest, stored.snapshot.digest, \"retained snapshot\");\n if (stored.tail.length > this.maxStoredTailTransactions) {\n throw new RangeError(\"retained operation tail exceeds the configured bound\");\n }\n let cursor = stored.snapshot.sequence;\n let stateHash = stored.snapshot.stateHash;\n let causalFrontier =\n stored.snapshot.modality === \"spreadsheet\" ? stored.snapshot.causalFrontier : null;\n let nativeRevision =\n stored.snapshot.modality === \"spreadsheet\" ? null : stored.snapshot.nativeRevision;\n for (const transaction of stored.tail) {\n validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.maxCommittedTransactionBytes,\n );\n if (transaction.startSequence !== cursor + 1) {\n throw new TypeError(\"retained transaction tail is not contiguous\");\n }\n requireStateHash(transaction.priorStateHash, stateHash, \"retained transaction prior state\");\n const applied = await this.kernel.applyRecovered(transaction);\n requireStateHash(applied.stateHash, transaction.stateHash, \"retained transaction\");\n cursor = transaction.endSequence;\n stateHash = transaction.stateHash;\n if (transaction.modality === \"spreadsheet\") {\n causalFrontier = transaction.causalFrontier;\n } else {\n if (nativeRevision !== transaction.priorNativeRevision) {\n throw new TypeError(\"retained transaction native revision is not contiguous\");\n }\n nativeRevision = transaction.nativeRevision;\n }\n }\n if (stored.cursor !== cursor || stored.stateHash !== stateHash) {\n throw new TypeError(\"retained artifact cursor does not match its snapshot and tail\");\n }\n this.replica =\n stored.snapshot.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n snapshot: cloneSnapshot(stored.snapshot),\n cursor,\n stateHash,\n updatedAt: stored.updatedAt,\n causalFrontier: cloneFrontier(causalFrontier ?? []),\n }\n : {\n modality: stored.snapshot.modality,\n snapshot: cloneSnapshot(stored.snapshot),\n cursor,\n stateHash,\n updatedAt: stored.updatedAt,\n nativeRevision: requireNativeRevision(nativeRevision, \"retained native revision\"),\n };\n this.retainedTailTransactions = stored.tail.length;\n this.cursor = cursor;\n this.headSequence = cursor;\n }\n\n private async run(): Promise<void> {\n await this.initialize();\n let connectedBefore = false;\n let delayMs = this.reconnectDelayMs;\n while (!this.abortController.signal.aborted) {\n this.processingFailure = null;\n this.connectionReady = false;\n this.setState(\n this.requireSnapshot ? \"resyncing\" : connectedBefore ? \"reconnecting\" : \"connecting\",\n );\n try {\n await this.runConnection();\n connectedBefore = true;\n this.reconnectAttempt = 0;\n delayMs = this.reconnectDelayMs;\n } catch (error) {\n if (this.abortController.signal.aborted) break;\n if (this.state === \"live\") {\n // A connection that reached the verified live barrier was healthy;\n // only consecutive failures before that barrier consume the budget.\n this.reconnectAttempt = 0;\n delayMs = this.reconnectDelayMs;\n }\n const failure = asError(error);\n this.lastError = failure;\n if (failure instanceof EditableArtifactSyncError && failure.requiresSnapshot) {\n this.requireSnapshot = true;\n }\n if (\n failure instanceof EditableArtifactSyncError &&\n failure.code === \"unsupported_protocol\"\n ) {\n this.setState(\"unsupported\");\n this.rejectLiveWaiters(failure);\n return;\n }\n if (!isRetryableFailure(failure)) {\n this.fail(failure);\n return;\n }\n connectedBefore = true;\n this.reconnectAttempt += 1;\n this.emit();\n if (this.reconnectAttempt > this.maxReconnectAttempts) {\n this.fail(\n new EditableArtifactSyncError(\n \"reconnect_exhausted\",\n `artifact sync gave up after ${this.maxReconnectAttempts} reconnect attempts`,\n { cause: failure },\n ),\n );\n return;\n }\n } finally {\n // Every minted ticket owns exactly one live connection. Bootstrap,\n // replay, validation, and queue failures can all exit before the\n // transport's `closed` promise settles, so retire the socket here as\n // well as on the normal close path.\n this.activeConnection?.close(\"client_reconnect\");\n this.activeTicket = null;\n this.activeConnection = null;\n this.activeLimits = null;\n this.connectionReady = false;\n }\n if (this.abortController.signal.aborted) break;\n this.setState(this.requireSnapshot ? \"resyncing\" : \"reconnecting\");\n await this.scheduler.sleep(delayMs, this.abortController.signal).catch(() => {});\n delayMs = Math.min(Math.max(delayMs * 2, this.reconnectDelayMs), this.maxReconnectDelayMs);\n }\n }\n\n private async runConnection(): Promise<void> {\n const signal = this.abortController.signal;\n // Fence callbacks from the retired socket before ticket minting. A closed\n // adapter may still deliver a final queued callback while the next HTTP\n // ticket request is in flight.\n const epoch = ++this.activeEpoch;\n // A submit owned by the retired epoch may still settle, but must neither\n // block nor mutate the successor connection.\n this.flushTask = null;\n this.clearLiveQueue();\n const connectionReplicaId = this.desiredConnectionReplicaId();\n const ticket = await this.transport.mintTicket({\n artifactId: this.artifactId,\n replicaId: connectionReplicaId,\n signal,\n });\n this.validateTicket(ticket, connectionReplicaId);\n this.activeTicket = ticket;\n const resyncRevisionAtBootstrap = this.resyncRevision;\n\n // The transport must subscribe before the durable head is read. Messages\n // arriving during bootstrap are retained in the bounded queue below.\n const connection = await this.transport.openLive({\n ticket,\n after: this.cursor,\n stateHash: this.replica?.stateHash ?? null,\n resume:\n this.modality === \"spreadsheet\"\n ? { modality: \"spreadsheet\", causalFrontier: cloneFrontier(this.currentFrontier()) }\n : {\n modality: this.modality,\n nativeRevision: this.replica === null ? null : this.currentNativeRevision(),\n },\n requireSnapshot: this.requireSnapshot,\n signal,\n onMessage: (message) => this.enqueueLive(epoch, message),\n });\n this.activeConnection = connection;\n validateLiveLimits(connection.limits);\n this.activeLimits = connection.limits;\n boundedNonEmpty(connection.streamEpoch, \"connection.streamEpoch\", MAX_IDENTIFIER_BYTES);\n if (this.processingFailure) {\n connection.close(\"protocol_error\");\n throw this.processingFailure;\n }\n if (this.resyncRevision !== resyncRevisionAtBootstrap) {\n connection.close(\"resync_required\");\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live input was discarded before bootstrap; restarting from a verified snapshot\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n this.setState(this.requireSnapshot ? \"resyncing\" : \"syncing\");\n const bootstrap = await connection.readBootstrap({\n localCursor: this.replica ? this.cursor : null,\n localStateHash: this.replica?.stateHash ?? null,\n resume:\n this.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n localCausalFrontier: cloneFrontier(this.currentFrontier()),\n }\n : {\n modality: this.modality,\n localNativeRevision: this.replica === null ? null : this.currentNativeRevision(),\n },\n requireSnapshot: this.requireSnapshot,\n signal,\n });\n await this.applyBootstrap(bootstrap, connection, signal);\n if (this.resyncRevision !== resyncRevisionAtBootstrap) {\n this.requireSnapshot = true;\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live input was discarded during bootstrap; restarting from a verified snapshot\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n if (this.processingFailure) throw this.processingFailure;\n\n if (this.cursor < this.headSequence) {\n this.enqueueLive(epoch, {\n type: \"head\",\n artifactId: this.artifactId,\n headSequence: this.headSequence,\n });\n }\n\n this.connectionReady = true;\n this.scheduleDrain();\n await this.awaitDrain();\n if (this.processingFailure) throw this.processingFailure;\n if (this.requireSnapshot) {\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live queue requires a verified snapshot resync\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n\n this.lastError = null;\n this.reconnectAttempt = 0;\n this.setState(\"live\");\n this.resolveLiveWaiters();\n this.rotateReplicaConnectionIfNeeded();\n this.schedulePendingFlush();\n\n const closed = await waitForConnectionClose(connection, signal);\n this.connectionReady = false;\n await this.awaitDrain();\n if (this.processingFailure) throw this.processingFailure;\n if (signal.aborted) return;\n if (closed.reason === \"permission_changed\") {\n this.writable = false;\n this.emit();\n }\n throw transientError(\n closed.error ?? new TypeError(`artifact live connection closed: ${closed.reason}`),\n );\n }\n\n private async applyBootstrap(\n bootstrap: EditableArtifactBootstrap,\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n ): Promise<void> {\n if (bootstrap.artifactId !== this.artifactId) {\n throw invalidBootstrap(\"bootstrap artifact does not match the controller\");\n }\n if (bootstrap.modality !== this.modality) {\n throw invalidBootstrap(\"bootstrap modality does not match the controller\");\n }\n this.requireProtocol(bootstrap.protocolVersion);\n if (\n bootstrap.kernelVersion !== this.kernelVersion ||\n bootstrap.modelSchemaVersion !== this.modelSchemaVersion\n ) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `artifact kernel/schema ${bootstrap.kernelVersion}/${bootstrap.modelSchemaVersion} is incompatible with ${this.kernelVersion}/${this.modelSchemaVersion}`,\n );\n }\n requireSha256(bootstrap.headStateHash, \"bootstrap.headStateHash\");\n if (bootstrap.modality === \"spreadsheet\") {\n validateFrontier(bootstrap.headCausalFrontier, \"bootstrap.headCausalFrontier\");\n } else {\n requireNativeRevision(bootstrap.headNativeRevision, \"bootstrap.headNativeRevision\");\n }\n this.writable = bootstrap.writable;\n safeSequence(bootstrap.headSequence, \"bootstrap headSequence\");\n safeSequence(bootstrap.minimumReplaySequence, \"bootstrap minimumReplaySequence\");\n if (bootstrap.minimumReplaySequence > bootstrap.headSequence + 1) {\n throw invalidBootstrap(\"minimum replay sequence exceeds the durable head\");\n }\n // Bootstrap is the authoritative barrier for this new stream epoch and\n // may legitimately move backward during recovery.\n this.headSequence = bootstrap.headSequence;\n\n const mustReplace =\n this.requireSnapshot ||\n bootstrap.resyncRequired ||\n !this.replica ||\n this.cursor > bootstrap.headSequence ||\n this.cursor + 1 < bootstrap.minimumReplaySequence;\n const newerSnapshot = bootstrap.snapshot !== null && bootstrap.snapshot.sequence > this.cursor;\n if (mustReplace || newerSnapshot) {\n if (!bootstrap.snapshot) {\n throw invalidBootstrap(\"server required resync without a snapshot\", true);\n }\n await this.replaceSnapshot(bootstrap.snapshot);\n }\n if (!this.replica) throw invalidBootstrap(\"bootstrap did not establish a snapshot\", true);\n if (this.cursor > bootstrap.headSequence) {\n throw invalidBootstrap(\"local cursor is ahead of the durable artifact head\", true);\n }\n\n this.requireSnapshot = false;\n await this.reconcileTo(bootstrap.headSequence, connection, signal, false);\n await this.replacePendingOverlay();\n requireStateHash(this.replica.stateHash, bootstrap.headStateHash, \"bootstrap head barrier\");\n if (bootstrap.modality === \"spreadsheet\") {\n requireFrontier(\n this.currentFrontier(),\n bootstrap.headCausalFrontier,\n \"bootstrap head barrier\",\n );\n } else {\n requireNativeRevisionEqual(\n this.currentNativeRevision(),\n bootstrap.headNativeRevision,\n \"bootstrap head barrier\",\n );\n }\n await connection.acknowledge({\n sequence: this.cursor,\n stateHash: this.replica.stateHash,\n signal,\n });\n }\n\n private replaceSnapshot(snapshot: EditableArtifactStoredReplica[\"snapshot\"]): Promise<void> {\n return this.runCausalOperation(() => this.replaceSnapshotExclusive(snapshot));\n }\n\n private async replaceSnapshotExclusive(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n ): Promise<void> {\n validateSnapshot(\n snapshot,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.kernelVersion,\n this.modelSchemaVersion,\n this.maxSnapshotBytes,\n );\n await this.kernel.reset();\n const loaded = await this.kernel.loadSnapshot(snapshot);\n requireStateHash(loaded.stateHash, snapshot.stateHash, \"snapshot\");\n requireDigest(loaded.digest, snapshot.digest, \"snapshot\");\n const storedReplica: EditableArtifactStoredReplica = {\n artifactId: this.artifactId,\n modality: this.modality,\n snapshot: cloneSnapshot(snapshot),\n tail: [],\n cursor: snapshot.sequence,\n stateHash: snapshot.stateHash,\n updatedAt: this.scheduler.now(),\n };\n // Full replacement is one atomic storage generation swap and may move\n // backward during authoritative recovery. The pending WAL is separate.\n try {\n await this.storage.saveReplica(this.storageScope, storedReplica, this.retainedStorageHead);\n } catch (error) {\n if (error instanceof EditableArtifactStorageConflictError) {\n try {\n await this.reloadRetainedProjection();\n if (this.replica) return;\n } catch (reloadError) {\n throw invalidBootstrap(\n `could not adopt a concurrently retained artifact head: ${asError(reloadError).message}`,\n true,\n );\n }\n throw invalidBootstrap(\"concurrently retained artifact head disappeared\", true);\n }\n throw storageError(\"failed to retain verified artifact snapshot\", error);\n }\n this.retainedStorageHead = {\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n };\n this.replica =\n storedReplica.snapshot.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n snapshot: storedReplica.snapshot,\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n updatedAt: storedReplica.updatedAt,\n causalFrontier: cloneFrontier(storedReplica.snapshot.causalFrontier),\n }\n : {\n modality: storedReplica.snapshot.modality,\n snapshot: storedReplica.snapshot,\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n updatedAt: storedReplica.updatedAt,\n nativeRevision: storedReplica.snapshot.nativeRevision,\n };\n this.retainedTailTransactions = 0;\n this.cursor = snapshot.sequence;\n this.headSequence = Math.max(this.headSequence, snapshot.sequence);\n this.emit();\n }\n\n private async reconcileTo(\n target: number,\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n consumeHeadWatermark = true,\n ): Promise<void> {\n let replayThrough = safeSequence(target, \"replay target\");\n while (this.cursor < replayThrough) {\n const before = this.cursor;\n const page = await connection.replay({\n after: this.cursor,\n through: replayThrough,\n limit: this.replayPageSize,\n signal,\n });\n if (!page || typeof page !== \"object\") {\n throw invalidSequence(\"replay page must be an object\");\n }\n if (page.artifactId !== this.artifactId) {\n throw invalidSequence(\"replay page belongs to another artifact\");\n }\n if (!Array.isArray(page.transactions)) {\n throw invalidSequence(\"replay page transactions must be an array\");\n }\n if (page.transactions.length > this.replayPageSize) {\n throw invalidSequence(\"replay page exceeds the negotiated transaction count\");\n }\n safeSequence(page.headSequence, \"replay headSequence\");\n if (consumeHeadWatermark) replayThrough = Math.max(replayThrough, page.headSequence);\n this.headSequence = Math.max(this.headSequence, page.headSequence);\n let pageBytes = 0;\n for (const transaction of page.transactions) {\n validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.maxCommittedTransactionBytes,\n );\n pageBytes += estimateCommittedTransactionBytes(transaction);\n if (!Number.isSafeInteger(pageBytes) || pageBytes > this.maxReplayPageBytes) {\n throw invalidSequence(\"replay page exceeds the negotiated byte bound\");\n }\n }\n for (const transaction of page.transactions) {\n if (transaction.endSequence <= this.cursor) continue;\n if (transaction.endSequence > replayThrough) {\n throw invalidSequence(\"replay returned a transaction beyond the requested target\");\n }\n await this.applyCommitted(transaction);\n }\n if (this.cursor === before) {\n throw invalidSequence(\n `durable replay did not provide sequence ${this.cursor + 1} through ${target}`,\n );\n }\n }\n }\n\n private enqueueLive(epoch: number, message: EditableArtifactLiveMessage): void {\n if (epoch !== this.activeEpoch || this.abortController.signal.aborted) return;\n let bytes: number;\n try {\n validateLiveMessage(\n message,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.maxCommittedTransactionBytes,\n );\n bytes = estimateLiveMessageBytes(message);\n } catch (error) {\n this.processingFailure =\n error instanceof EditableArtifactSyncError\n ? error\n : invalidSequence(`invalid live message: ${asError(error).message}`);\n this.activeConnection?.close(\"protocol_error\");\n return;\n }\n if (\n this.liveQueue.length + 1 > this.maxQueuedMessages ||\n this.queuedBytes + bytes > this.maxQueuedBytes\n ) {\n this.requestSnapshotResync(\"bounded live queue overflow\");\n return;\n }\n this.liveQueue.push({ message, bytes });\n this.queuedBytes += bytes;\n this.emit();\n if (this.connectionReady) this.scheduleDrain();\n }\n\n private scheduleDrain(): void {\n if (!this.connectionReady || this.drainTask || this.liveQueue.length === 0) return;\n this.drainTask = this.drainLiveQueue()\n .catch((error: unknown) => {\n const failure = asError(error);\n this.processingFailure = failure;\n if (failure instanceof EditableArtifactSyncError && failure.requiresSnapshot) {\n this.requireSnapshot = true;\n }\n this.activeConnection?.close(\"client_reconcile_failed\");\n })\n .finally(() => {\n this.drainTask = null;\n if (this.connectionReady && this.liveQueue.length > 0 && !this.processingFailure) {\n this.scheduleDrain();\n }\n });\n }\n\n private async drainLiveQueue(): Promise<void> {\n const connection = this.activeConnection;\n if (!connection) return;\n while (this.connectionReady && this.liveQueue.length > 0) {\n const queued = this.liveQueue.shift();\n if (!queued) break;\n this.queuedBytes -= queued.bytes;\n const message = queued.message;\n if (message.type === \"resync_required\") {\n this.requestSnapshotResync(message.reason, \"resync_required\");\n break;\n }\n if (message.type === \"authorization\") {\n this.writable = message.writable;\n if (message.writable) {\n if (\n this.lastError instanceof EditableArtifactSyncError &&\n this.lastError.code === \"permission_changed\"\n ) {\n this.lastError = null;\n }\n this.schedulePendingFlush();\n }\n this.emit();\n continue;\n }\n if (message.type === \"head\") {\n this.headSequence = Math.max(this.headSequence, message.headSequence);\n await this.reconcileTo(message.headSequence, connection, this.abortController.signal);\n } else {\n const transaction = message.transaction;\n this.headSequence = Math.max(this.headSequence, transaction.endSequence);\n if (transaction.startSequence > this.cursor + 1) {\n await this.reconcileTo(\n transaction.startSequence - 1,\n connection,\n this.abortController.signal,\n );\n }\n await this.applyCommitted(transaction);\n }\n this.emit();\n }\n }\n\n private async awaitDrain(): Promise<void> {\n while (this.drainTask) await this.drainTask;\n }\n\n private applyCommitted(transaction: EditableArtifactCommittedTransaction): Promise<void> {\n return this.runCausalOperation(() => this.applyCommittedExclusive(transaction));\n }\n\n private async applyCommittedExclusive(\n transaction: EditableArtifactCommittedTransaction,\n ): Promise<void> {\n const embeddedPending = validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.maxCommittedTransactionBytes,\n );\n if (embeddedPending) {\n const pending = this.pending.get(embeddedPending.clientTransactionId);\n if (\n pending?.requestHash === embeddedPending.requestHash &&\n bytesEqual(pending.intentBytes, embeddedPending.intentBytes)\n ) {\n this.recordAcceptedMappingIdentity(transaction.transactionId, embeddedPending);\n }\n }\n if (transaction.endSequence <= this.cursor) {\n await this.settlePending(transaction, false);\n return;\n }\n if (transaction.startSequence !== this.cursor + 1) {\n throw invalidSequence(\n `expected committed sequence ${this.cursor + 1}, received ${transaction.startSequence}`,\n );\n }\n if (!this.replica)\n throw invalidBootstrap(\"cannot apply a transaction without a snapshot\", true);\n requireStateHash(transaction.priorStateHash, this.replica.stateHash, \"transaction prior state\");\n const accepted = this.acceptedMappings.get(transaction.transactionId);\n const orderedPending = this.orderedPending();\n // OGACO carries the canonical mutation and resulting frontier, but not the\n // caller's client transaction id. The server deliberately sends those\n // committed bytes before mutationAccepted. Suppress an exact request-hash\n // match only from speculative replay so the same CRDT dot is not applied\n // twice; retain the WAL until the later authority mapping settles identity.\n const provisionalProjectionMatches =\n transaction.modality === \"spreadsheet\" && accepted === undefined\n ? orderedPending.filter((pending) => pending.requestHash === transaction.requestHash)\n : [];\n if (provisionalProjectionMatches.length > 1) {\n throw invalidSequence(\"multiple pending transactions share one committed request hash\");\n }\n const provisionalProjectionMatch = provisionalProjectionMatches[0];\n const remainingPending = orderedPending.filter(\n (pending) =>\n (accepted === undefined ||\n pending.clientTransactionId !== accepted.clientTransactionId ||\n pending.requestHash !== accepted.requestHash) &&\n (provisionalProjectionMatch === undefined ||\n pending.clientTransactionId !== provisionalProjectionMatch.clientTransactionId ||\n pending.requestHash !== provisionalProjectionMatch.requestHash),\n );\n const updatedAt = this.scheduler.now();\n let applied: { stateHash: string };\n try {\n if (this.connectionReady) {\n const reconciled = await this.kernel.reconcileCommitted(transaction, remainingPending);\n this.setBlockedPending(reconciled.blockedPending);\n applied = reconciled;\n } else {\n applied = await this.kernel.applyRecovered(transaction);\n }\n requireStateHash(applied.stateHash, transaction.stateHash, \"committed transaction\");\n } catch (error) {\n await this.reloadRetainedProjection();\n throw error;\n }\n try {\n await this.storage.appendCommitted(this.storageScope, {\n artifactId: this.artifactId,\n expectedCursor: this.cursor,\n expectedStateHash: this.replica.stateHash,\n transaction: cloneCommitted(transaction),\n updatedAt,\n });\n } catch (error) {\n try {\n await this.reloadRetainedProjection();\n } catch (reloadError) {\n throw storageError(\"failed to reload retained artifact transaction state\", reloadError);\n }\n if (error instanceof EditableArtifactStorageConflictError) {\n // Another tab may have already advanced or compacted the same verified\n // log. Its atomic retained head is authoritative for this browser\n // cache; adopt it instead of failing an otherwise healthy live stream.\n if (this.replica && this.cursor >= transaction.endSequence) {\n await this.settlePending(transaction, false);\n const connection = this.activeConnection;\n if (connection) {\n await connection.acknowledge({\n sequence: this.cursor,\n stateHash: this.replica.stateHash,\n signal: this.abortController.signal,\n });\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n return;\n }\n throw invalidSequence(\n \"retained artifact head changed without covering the live transaction\",\n );\n }\n throw storageError(\"failed to retain committed artifact transaction\", error);\n }\n\n this.replica.cursor = transaction.endSequence;\n this.replica.stateHash = transaction.stateHash;\n this.replica.updatedAt = updatedAt;\n if (transaction.modality === \"spreadsheet\") {\n if (this.replica.modality !== \"spreadsheet\") {\n throw invalidSequence(\"spreadsheet transaction reached a serialized replica\");\n }\n this.replica.causalFrontier = cloneFrontier(transaction.causalFrontier);\n } else {\n if (this.replica.modality !== transaction.modality) {\n throw invalidSequence(\"serialized transaction modality does not match the replica\");\n }\n this.replica.nativeRevision = transaction.nativeRevision;\n }\n this.retainedTailTransactions += 1;\n this.cursor = transaction.endSequence;\n this.retainedStorageHead = {\n cursor: transaction.endSequence,\n stateHash: transaction.stateHash,\n };\n this.headSequence = Math.max(this.headSequence, transaction.endSequence);\n await this.settlePending(transaction, this.connectionReady);\n const connection = this.activeConnection;\n if (connection) {\n await connection.acknowledge({\n sequence: transaction.endSequence,\n stateHash: transaction.stateHash,\n signal: this.abortController.signal,\n });\n }\n if (this.retainedTailTransactions > this.maxStoredTailTransactions) {\n this.requestSnapshotResync(\"retained operation tail exceeded its bound\", \"resync_required\");\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n }\n\n private async reloadRetainedProjection(): Promise<void> {\n const stored = await this.storage.loadReplica(this.storageScope);\n if (!stored) {\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.retainedStorageHead = null;\n this.requireSnapshot = true;\n return;\n }\n this.retainedStorageHead = { cursor: stored.cursor, stateHash: stored.stateHash };\n await this.restoreReplica(stored);\n await this.replacePendingOverlay();\n }\n\n private async settlePending(\n transaction: EditableArtifactCommittedTransaction,\n overlayAlreadyReconciled: boolean,\n ): Promise<void> {\n const accepted = this.acceptedMappings.get(transaction.transactionId);\n if (!accepted || accepted.requestHash !== transaction.requestHash) return;\n const pending = this.pending.get(accepted.clientTransactionId);\n if (!pending || pending.requestHash !== accepted.requestHash) return;\n await this.storage.deletePending(this.storageScope, accepted.clientTransactionId);\n this.pending.delete(accepted.clientTransactionId);\n this.acceptedMappings.delete(transaction.transactionId);\n if (pending.replicaId === this.writerReplicaId) {\n this.lastLocalTransactionId = pending.clientTransactionId;\n this.lastLocalReplicaCounter = Math.max(this.lastLocalReplicaCounter, pending.replicaCounter);\n }\n this.submittedEpoch.delete(accepted.clientTransactionId);\n this.submitBlockedPending.delete(accepted.clientTransactionId);\n if (!overlayAlreadyReconciled) await this.replacePendingOverlay();\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n }\n\n private schedulePendingFlush(): void {\n if (\n this.flushTask ||\n this.state !== \"live\" ||\n !this.writable ||\n !this.activeTicket ||\n !this.activeConnection ||\n this.pending.size === 0\n ) {\n return;\n }\n const epoch = this.activeEpoch;\n const connection = this.activeConnection;\n let task!: Promise<void>;\n task = this.flushPending()\n .catch((error: unknown) => {\n if (epoch !== this.activeEpoch || connection !== this.activeConnection) return;\n const failure = asError(error);\n this.lastError = failure;\n this.processingFailure = failure;\n connection.close(\n isRetryableFailure(failure) ? \"pending_outcome_unknown\" : \"pending_rejected\",\n );\n })\n .finally(() => {\n this.flushTasks.delete(task);\n if (this.flushTask !== task) return;\n this.flushTask = null;\n if (this.state === \"live\" && !this.lastError && this.hasSubmittablePending()) {\n this.schedulePendingFlush();\n }\n });\n this.flushTask = task;\n this.flushTasks.add(task);\n }\n\n private async flushPending(): Promise<void> {\n const ticket = this.activeTicket;\n const connection = this.activeConnection;\n if (!ticket || !connection) return;\n const epoch = this.activeEpoch;\n const batch = this.orderedPending();\n for (const transaction of batch) {\n if (this.state !== \"live\" || ticket !== this.activeTicket || epoch !== this.activeEpoch)\n return;\n if (transaction.replicaId !== ticket.replicaId) continue;\n if (\n transaction.previousLocalTransactionId &&\n this.pending.has(transaction.previousLocalTransactionId)\n ) {\n continue;\n }\n if (this.pendingIsBlocked(transaction.clientTransactionId)) continue;\n if (this.submittedEpoch.get(transaction.clientTransactionId) === epoch) continue;\n this.submittedEpoch.set(transaction.clientTransactionId, epoch);\n let receipt: EditableArtifactSubmitReceipt;\n try {\n receipt = await connection.submit({\n transaction: clonePending(transaction),\n signal: this.abortController.signal,\n });\n } catch (error) {\n if (\n ticket !== this.activeTicket ||\n connection !== this.activeConnection ||\n epoch !== this.activeEpoch\n ) {\n return;\n }\n const failure = asError(error);\n const code = errorCode(failure);\n if (code === \"permission_changed\") {\n this.submittedEpoch.delete(transaction.clientTransactionId);\n this.writable = false;\n this.lastError = new EditableArtifactSyncError(\"permission_changed\", failure.message);\n this.emit();\n return;\n }\n if (isRetryableFailure(failure)) throw failure;\n if (code === \"closed\" || code === \"stale_epoch\") throw transientError(failure);\n this.submittedEpoch.delete(transaction.clientTransactionId);\n const blockedCode = boundedNonEmpty(\n code ?? \"submit_rejected\",\n \"submit rejection code\",\n MAX_IDENTIFIER_BYTES,\n );\n this.submitBlockedPending.set(transaction.clientTransactionId, {\n clientTransactionId: transaction.clientTransactionId,\n code: blockedCode,\n });\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n continue;\n }\n if (\n ticket !== this.activeTicket ||\n connection !== this.activeConnection ||\n epoch !== this.activeEpoch\n )\n return;\n if (\n !receipt ||\n typeof receipt !== \"object\" ||\n !receipt.committed ||\n typeof receipt.committed !== \"object\" ||\n receipt.artifactId !== this.artifactId ||\n receipt.clientTransactionId !== transaction.clientTransactionId ||\n receipt.requestHash !== transaction.requestHash ||\n receipt.committed.artifactId !== this.artifactId ||\n receipt.committed.transactionId !== receipt.transactionId ||\n receipt.committed.requestHash !== transaction.requestHash\n ) {\n throw invalidSequence(\"submit receipt identity does not match the pending transaction\");\n }\n validateCommittedTransaction(\n receipt.committed,\n this.artifactId,\n this.modality,\n this.protocolVersion,\n this.maxCommittedTransactionBytes,\n );\n this.recordAcceptedMapping(receipt);\n this.enqueueLive(epoch, {\n type: \"transaction.committed\",\n transaction: receipt.committed,\n });\n }\n }\n\n private recordAcceptedMapping(receipt: EditableArtifactSubmitReceipt): void {\n this.recordAcceptedMappingIdentity(receipt.transactionId, {\n clientTransactionId: receipt.clientTransactionId,\n requestHash: receipt.requestHash,\n });\n }\n\n private recordAcceptedMappingIdentity(\n transactionId: string,\n next: Readonly<{ clientTransactionId: string; requestHash: string }>,\n ): void {\n const existing = this.acceptedMappings.get(transactionId);\n if (\n existing &&\n (existing.clientTransactionId !== next.clientTransactionId ||\n existing.requestHash !== next.requestHash)\n ) {\n throw invalidSequence(\"authority reused a committed transaction id for another request\");\n }\n this.acceptedMappings.set(transactionId, Object.freeze({ ...next }));\n }\n\n private requestSnapshotResync(\n reason: string,\n code: \"queue_overflow\" | \"resync_required\" = \"queue_overflow\",\n ): void {\n this.resyncRevision += 1;\n this.requireSnapshot = true;\n this.lastError = new EditableArtifactSyncError(code, reason, {\n retryable: true,\n requiresSnapshot: true,\n });\n this.clearLiveQueue();\n this.activeConnection?.close(\"resync_required\");\n this.emit();\n }\n\n private clearLiveQueue(): void {\n this.liveQueue.length = 0;\n this.queuedBytes = 0;\n this.emit();\n }\n\n private validateTicket(ticket: EditableArtifactSyncTicket, expectedReplicaId: string): void {\n if (ticket.artifactId !== this.artifactId) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket belongs to another artifact\",\n );\n }\n if (ticket.modality !== this.modality) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket modality does not match the controller\",\n );\n }\n if (ticket.replicaId !== expectedReplicaId) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket is not bound to the requested writer replica\",\n );\n }\n this.requireProtocol(ticket.protocolVersion);\n boundedNonEmpty(ticket.token, \"ticket.token\", MAX_TICKET_BYTES);\n const expiresAt = Date.parse(ticket.expiresAt);\n if (!Number.isFinite(expiresAt)) {\n throw invalidBootstrap(\"sync ticket has an invalid expiry\");\n }\n if (expiresAt <= this.scheduler.now() + this.minTicketTtlMs) {\n throw transientError(new TypeError(\"sync ticket is expired or too close to expiry\"));\n }\n }\n\n private orderedPending(): EditableArtifactPendingTransaction[] {\n return orderPendingTransactions([...this.pending.values()]);\n }\n\n private hasSubmittablePending(): boolean {\n const activeReplicaId = this.activeTicket?.replicaId;\n return this.orderedPending().some(\n (transaction) =>\n transaction.replicaId === activeReplicaId &&\n this.submittedEpoch.get(transaction.clientTransactionId) !== this.activeEpoch &&\n !this.pendingIsBlocked(transaction.clientTransactionId) &&\n (!transaction.previousLocalTransactionId ||\n !this.pending.has(transaction.previousLocalTransactionId)),\n );\n }\n\n private pendingBytes(): number {\n let bytes = 0;\n for (const transaction of this.pending.values()) {\n bytes += transaction.commandBytes.byteLength + transaction.intentBytes.byteLength;\n if (!Number.isSafeInteger(bytes)) return Number.POSITIVE_INFINITY;\n }\n return bytes;\n }\n\n private currentFrontier(): EditableArtifactCausalFrontier {\n if (this.replica === null) return [];\n if (this.replica.modality !== \"spreadsheet\") {\n throw new TypeError(\"serialized artifacts do not have a causal frontier\");\n }\n return this.replica.causalFrontier;\n }\n\n private currentNativeRevision(): number {\n if (this.replica === null || this.replica.modality === \"spreadsheet\") {\n throw new TypeError(\"spreadsheet artifacts do not have a native revision\");\n }\n return this.replica.nativeRevision;\n }\n\n private desiredConnectionReplicaId(): string {\n return (\n this.orderedPending().find(\n (transaction) =>\n !this.pendingIsBlocked(transaction.clientTransactionId) &&\n (!transaction.previousLocalTransactionId ||\n !this.pending.has(transaction.previousLocalTransactionId)),\n )?.replicaId ?? this.writerReplicaId\n );\n }\n\n private rotateReplicaConnectionIfNeeded(): void {\n const ticket = this.activeTicket;\n if (!ticket || ticket.replicaId === this.desiredConnectionReplicaId()) return;\n this.activeConnection?.close(\"replica_changed\");\n }\n\n private async replacePendingOverlay(): Promise<void> {\n const projection = await this.kernel.replacePending(this.orderedPending());\n this.setBlockedPending(projection.blockedPending);\n }\n\n private pendingIsBlocked(clientTransactionId: string): boolean {\n const blockedIds = new Set([\n ...this.blockedPending.map((blocked) => blocked.clientTransactionId),\n ...this.submitBlockedPending.keys(),\n ]);\n let current = this.pending.get(clientTransactionId);\n const visited = new Set<string>();\n while (current) {\n if (blockedIds.has(current.clientTransactionId)) return true;\n const predecessor = current.previousLocalTransactionId;\n if (!predecessor || visited.has(predecessor)) return false;\n visited.add(predecessor);\n current = this.pending.get(predecessor);\n }\n return false;\n }\n\n private setBlockedPending(values: readonly EditableArtifactBlockedPending[]): void {\n const seen = new Set<string>();\n this.blockedPending = values.map((value) => {\n requireClientTransactionId(value.clientTransactionId, \"blocked clientTransactionId\");\n boundedNonEmpty(value.code, \"blocked code\", MAX_IDENTIFIER_BYTES);\n if (!this.pending.has(value.clientTransactionId) || seen.has(value.clientTransactionId)) {\n throw new TypeError(\"worker returned an invalid blocked pending identity\");\n }\n seen.add(value.clientTransactionId);\n return { ...value };\n });\n this.emit();\n }\n\n private allBlockedPending(): EditableArtifactBlockedPending[] {\n const byId = new Map<string, EditableArtifactBlockedPending>();\n for (const blocked of this.blockedPending) {\n byId.set(blocked.clientTransactionId, { ...blocked });\n }\n for (const blocked of this.submitBlockedPending.values()) {\n byId.set(blocked.clientTransactionId, { ...blocked });\n }\n return [...byId.values()].sort((left, right) =>\n compareCodeUnits(left.clientTransactionId, right.clientTransactionId),\n );\n }\n\n private requireProtocol(actual: number): void {\n if (actual !== this.protocolVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `artifact protocol ${actual} is incompatible with client ${this.protocolVersion}`,\n );\n }\n }\n\n private setState(state: EditableArtifactSyncState): void {\n if (this.state === state) return;\n this.state = state;\n this.emit();\n }\n\n private emit(): void {\n const view = this.getView();\n for (const listener of this.listeners) {\n try {\n listener(view);\n } catch {\n // Observers cannot own transport or kernel lifecycle.\n }\n }\n }\n\n private resolveLiveWaiters(): void {\n for (const waiter of this.liveWaiters) waiter.resolve();\n this.liveWaiters.clear();\n }\n\n private rejectLiveWaiters(error: Error): void {\n for (const waiter of this.liveWaiters) waiter.reject(error);\n this.liveWaiters.clear();\n }\n\n private fail(error: Error): void {\n this.lastError = error;\n this.setState(\"failed\");\n this.rejectLiveWaiters(error);\n this.activeConnection?.close(\"client_failed\");\n }\n}\n\nfunction validatePendingTransaction(\n transaction: EditableArtifactPendingTransaction,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n maxCommandBytes: number,\n): void {\n if (transaction.artifactId !== artifactId || transaction.modality !== modality) {\n throw new TypeError(\"pending artifact authority mismatch\");\n }\n requireClientTransactionId(transaction.clientTransactionId, \"clientTransactionId\");\n requireSha256(transaction.requestHash, \"requestHash\");\n requireReplicaId(transaction.replicaId, \"replicaId\");\n positiveU16(transaction.protocolVersion, \"protocolVersion\");\n positiveU16(transaction.modelSchemaVersion, \"modelSchemaVersion\");\n positiveU16(transaction.commandVersion, \"commandVersion\");\n positiveSafeInteger(transaction.replicaCounter, \"replicaCounter\");\n if (transaction.previousLocalTransactionId !== null) {\n requireClientTransactionId(\n transaction.previousLocalTransactionId,\n \"previousLocalTransactionId\",\n );\n if (transaction.previousLocalTransactionId === transaction.clientTransactionId) {\n throw new TypeError(\"a pending transaction cannot depend on itself\");\n }\n }\n if (!(transaction.commandBytes instanceof Uint8Array)) {\n throw new TypeError(\"commandBytes must be a Uint8Array\");\n }\n if (\n !(transaction.intentBytes instanceof Uint8Array) ||\n transaction.intentBytes.byteLength === 0\n ) {\n throw new TypeError(\"intentBytes must be a non-empty Uint8Array\");\n }\n if (transaction.intentBytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES) {\n throw new RangeError(\"intentBytes exceeds the configured bound\");\n }\n safeSequence(transaction.observedHeadSequence, \"observedHeadSequence\");\n if (transaction.commandBytes.byteLength === 0) throw new TypeError(\"commandBytes is empty\");\n if (transaction.commandBytes.byteLength > maxCommandBytes) {\n throw new RangeError(\"commandBytes exceeds the configured bound\");\n }\n nonNegativeSafeInteger(transaction.createdAt, \"createdAt\");\n const intent = decodeEditableArtifactMutationIntent(transaction.intentBytes);\n if (\n intent.artifactId !== transaction.artifactId ||\n intent.clientTransactionId !== transaction.clientTransactionId ||\n intent.replicaId !== transaction.replicaId ||\n intent.replicaCounter !== transaction.replicaCounter ||\n intent.previousLocalTransactionId !== transaction.previousLocalTransactionId ||\n intent.protocolVersion !== transaction.protocolVersion ||\n intent.modelSchemaVersion !== transaction.modelSchemaVersion ||\n intent.commandProtocolVersion !== transaction.commandVersion ||\n intent.observedHeadSequence !== transaction.observedHeadSequence ||\n !bytesEqual(intent.commandBytes, transaction.commandBytes)\n ) {\n throw new TypeError(\"pending fields do not exactly match their canonical OGATX envelope\");\n }\n editableArtifactCodecFor({\n durableModality: transaction.modality,\n modelSchemaVersion: transaction.modelSchemaVersion,\n commandProtocolVersion: transaction.commandVersion,\n }).command.assertCanonical(transaction.commandBytes);\n if (transaction.modality === \"spreadsheet\") {\n validateFrontier(transaction.causalBase, \"causalBase\");\n normalizeIdentifiers(transaction.selectiveUndoTargets, \"selectiveUndoTargets\");\n if (\n !identifiersEqual(intent.selectiveUndoOperationIds, transaction.selectiveUndoTargets) ||\n !frontiersEqual(intent.causalBase, transaction.causalBase)\n ) {\n throw new TypeError(\"spreadsheet pending causality does not match its OGATX envelope\");\n }\n } else {\n requireNativeRevision(transaction.observedNativeRevision, \"observedNativeRevision\");\n if (intent.causalBase.length !== 0 || intent.selectiveUndoOperationIds.length !== 0) {\n throw new TypeError(\"serialized pending transactions cannot carry CRDT causality\");\n }\n }\n if (\n hashEditableArtifactMutationIntentBytes(transaction.intentBytes) !== transaction.requestHash\n ) {\n throw new TypeError(\"pending requestHash does not match its canonical OGATX envelope\");\n }\n}\n\nfunction validateLiveLimits(limits: EditableArtifactLiveLimits): void {\n if (!limits || typeof limits !== \"object\" || Array.isArray(limits)) {\n throw new TypeError(\"live connection limits must be an object\");\n }\n positiveSafeInteger(limits.maxClientFrameBytes, \"limits.maxClientFrameBytes\");\n nonNegativeSafeInteger(limits.maxCommandBytes, \"limits.maxCommandBytes\");\n nonNegativeSafeInteger(limits.maxIntentBytes, \"limits.maxIntentBytes\");\n nonNegativeSafeInteger(\n limits.maxCommittedTransactionBytes,\n \"limits.maxCommittedTransactionBytes\",\n );\n positiveSafeInteger(limits.maxSnapshotBytes, \"limits.maxSnapshotBytes\");\n positiveSafeInteger(limits.maxInFlightTransactions, \"limits.maxInFlightTransactions\");\n positiveSafeInteger(limits.maxInFlightBytes, \"limits.maxInFlightBytes\");\n if (\n limits.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES ||\n limits.maxIntentBytes > EDITABLE_ARTIFACT_INTENT_MAX_BYTES ||\n limits.maxCommittedTransactionBytes > MAX_COMMITTED_TRANSACTION_BYTES\n ) {\n throw new TypeError(\"live connection advertised incompatible protocol limits\");\n }\n}\n\ntype ExpectedAuthoredPending = Readonly<{\n modality: EditableArtifactModality;\n clientTransactionId: string;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandVersion: number;\n replicaId: string;\n replicaCounter: number;\n previousLocalTransactionId: string | null;\n observedHeadSequence: number;\n commandBytes: Uint8Array;\n createdAt: number;\n causalBase?: EditableArtifactCausalFrontier;\n selectiveUndoTargets?: readonly string[];\n}>;\n\nfunction verifyAuthoredPending(\n actual: EditableArtifactPendingTransaction,\n expected: ExpectedAuthoredPending,\n): void {\n if (\n actual.modality !== expected.modality ||\n actual.clientTransactionId !== expected.clientTransactionId ||\n actual.protocolVersion !== expected.protocolVersion ||\n actual.modelSchemaVersion !== expected.modelSchemaVersion ||\n actual.commandVersion !== expected.commandVersion ||\n actual.replicaId !== expected.replicaId ||\n actual.replicaCounter !== expected.replicaCounter ||\n actual.previousLocalTransactionId !== expected.previousLocalTransactionId ||\n actual.observedHeadSequence !== expected.observedHeadSequence ||\n actual.createdAt !== expected.createdAt ||\n !bytesEqual(actual.commandBytes, expected.commandBytes)\n ) {\n throw new TypeError(\"worker authored a pending envelope that differs from its immutable input\");\n }\n if (actual.modality === \"spreadsheet\") {\n if (\n expected.causalBase === undefined ||\n expected.selectiveUndoTargets === undefined ||\n !identifiersEqual(actual.selectiveUndoTargets, expected.selectiveUndoTargets)\n ) {\n throw new TypeError(\"worker authored invalid spreadsheet pending metadata\");\n }\n requireFrontier(actual.causalBase, expected.causalBase, \"authored pending\");\n } else if (expected.causalBase !== undefined || expected.selectiveUndoTargets !== undefined) {\n throw new TypeError(\"worker authored serialized pending with spreadsheet metadata\");\n }\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n for (let index = 0; index < left.byteLength; index += 1) {\n if (left[index] !== right[index]) return false;\n }\n return true;\n}\n\nfunction validateCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n protocolVersion: number,\n maxCommittedTransactionBytes: number,\n): Readonly<{\n clientTransactionId: string;\n requestHash: string;\n intentBytes: Uint8Array;\n}> | null {\n if (transaction.artifactId !== artifactId || transaction.modality !== modality) {\n throw invalidSequence(\"transaction artifact authority mismatch\");\n }\n requireStableId(transaction.transactionId, \"transactionId\");\n requireSha256(transaction.requestHash, \"requestHash\");\n requireSha256(transaction.priorStateHash, \"priorStateHash\");\n requireSha256(transaction.stateHash, \"stateHash\");\n safeSequence(transaction.startSequence, \"transaction startSequence\");\n safeSequence(transaction.endSequence, \"transaction endSequence\");\n if (transaction.startSequence < 1 || transaction.endSequence < transaction.startSequence) {\n throw invalidSequence(\"transaction sequence interval is invalid\");\n }\n if (!(transaction.committedTransactionBytes instanceof Uint8Array)) {\n throw invalidSequence(\"transaction committedTransactionBytes must be a Uint8Array\");\n }\n if (transaction.committedTransactionBytes.byteLength === 0) {\n throw invalidSequence(\"transaction committedTransactionBytes is empty\");\n }\n if (transaction.committedTransactionBytes.byteLength > maxCommittedTransactionBytes) {\n throw invalidSequence(\"transaction committedTransactionBytes exceeds the configured bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n if (transaction.protocolVersion !== protocolVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `transaction protocol ${transaction.protocolVersion} is incompatible with client ${protocolVersion}`,\n );\n }\n validateFrontier(transaction.causalFrontier, \"causalFrontier\");\n let summary: ReturnType<typeof decodeCommittedTransactionSummary>;\n try {\n summary = decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n } catch (error) {\n throw invalidSequence(`invalid OGACO envelope: ${asError(error).message}`);\n }\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.operationProtocolVersion !== transaction.protocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n !frontiersEqual(summary.resultingCausalFrontier, transaction.causalFrontier)\n ) {\n throw invalidSequence(\"committed routing fields do not exactly match the OGACO envelope\");\n }\n return null;\n }\n requireNativeRevision(transaction.priorNativeRevision, \"transaction.priorNativeRevision\");\n requireNativeRevision(transaction.nativeRevision, \"transaction.nativeRevision\");\n let summary: ReturnType<typeof decodeEditableArtifactSerializedCommit>;\n try {\n summary = decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n } catch (error) {\n throw invalidSequence(`invalid OGAST envelope: ${asError(error).message}`);\n }\n if (\n summary.modality !== transaction.modality ||\n summary.transactionId !== transaction.transactionId ||\n summary.parentHeadSequence !== transaction.startSequence - 1 ||\n summary.resultHeadSequence !== transaction.endSequence ||\n summary.priorNativeRevision !== transaction.priorNativeRevision ||\n summary.nativeReceipt.revision !== transaction.nativeRevision ||\n summary.commitProtocolVersion !== transaction.commitProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n summary.requestHash !== transaction.requestHash ||\n summary.intent.artifactId !== transaction.artifactId\n ) {\n throw invalidSequence(\"committed routing fields do not exactly match the OGAST envelope\");\n }\n return Object.freeze({\n clientTransactionId: summary.intent.clientTransactionId,\n requestHash: summary.requestHash,\n intentBytes: summary.intentBytes,\n });\n}\n\nfunction validateSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n protocolVersion: number,\n kernelVersion: string,\n modelSchemaVersion: number,\n maxSnapshotBytes: number,\n): void {\n if (snapshot.artifactId !== artifactId || snapshot.modality !== modality) {\n throw invalidBootstrap(\"snapshot artifact authority mismatch\");\n }\n safeSequence(snapshot.sequence, \"snapshot sequence\");\n requireSha256(snapshot.stateHash, \"snapshot.stateHash\");\n requireSha256(snapshot.digest, \"snapshot.digest\");\n boundedNonEmpty(snapshot.kernelVersion, \"snapshot.kernelVersion\", MAX_KERNEL_VERSION_BYTES);\n positiveSafeInteger(snapshot.modelSchemaVersion, \"snapshot.modelSchemaVersion\");\n if (snapshot.modality === \"spreadsheet\") {\n validateFrontier(snapshot.causalFrontier, \"snapshot.causalFrontier\");\n if (snapshot.protocolVersion !== protocolVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `snapshot protocol ${snapshot.protocolVersion} is incompatible with client ${protocolVersion}`,\n );\n }\n } else {\n requireNativeRevision(snapshot.nativeRevision, \"snapshot.nativeRevision\");\n }\n if (\n snapshot.kernelVersion !== kernelVersion ||\n snapshot.modelSchemaVersion !== modelSchemaVersion\n ) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `snapshot kernel/schema ${snapshot.kernelVersion}/${snapshot.modelSchemaVersion} is incompatible with ${kernelVersion}/${modelSchemaVersion}`,\n );\n }\n if (!(snapshot.bytes instanceof Uint8Array)) {\n throw invalidBootstrap(\"snapshot bytes must be a Uint8Array\");\n }\n if (snapshot.bytes.byteLength === 0) throw invalidBootstrap(\"snapshot bytes is empty\");\n if (snapshot.bytes.byteLength > maxSnapshotBytes) {\n throw invalidBootstrap(\"snapshot bytes exceeds the configured bound\");\n }\n}\n\nfunction validateFrontier(frontier: EditableArtifactCausalFrontier, label: string): void {\n if (!Array.isArray(frontier)) throw new TypeError(`${label} must be an array`);\n if (frontier.length > MAX_FRONTIER_ACTORS) {\n throw new RangeError(`${label} exceeds ${MAX_FRONTIER_ACTORS} actors`);\n }\n let previous: string | null = null;\n for (const [index, entry] of frontier.entries()) {\n if (\n !entry ||\n typeof entry !== \"object\" ||\n Array.isArray(entry) ||\n Object.getPrototypeOf(entry) !== Object.prototype\n ) {\n throw new TypeError(`${label}[${index}] must be a plain object`);\n }\n requireReplicaId(entry.replicaId, `${label}[${index}].replicaId`);\n positiveSafeInteger(entry.counter, `${label}[${index}].counter`);\n if (previous !== null && compareCodeUnits(previous, entry.replicaId) >= 0) {\n throw new TypeError(`${label} must be strictly sorted and duplicate-free`);\n }\n previous = entry.replicaId;\n }\n}\n\nfunction validateLiveMessage(\n message: EditableArtifactLiveMessage,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n protocolVersion: number,\n maxCommittedTransactionBytes: number,\n): void {\n if (!message || typeof message !== \"object\") {\n throw invalidSequence(\"live message must be an object\");\n }\n if (message.type === \"transaction.committed\") {\n validateCommittedTransaction(\n message.transaction,\n artifactId,\n modality,\n protocolVersion,\n maxCommittedTransactionBytes,\n );\n return;\n }\n if (message.type === \"head\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live head belongs to another artifact\");\n }\n safeSequence(message.headSequence, \"live headSequence\");\n return;\n }\n if (message.type === \"authorization\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live authorization belongs to another artifact\");\n }\n if (typeof message.writable !== \"boolean\") {\n throw invalidSequence(\"live authorization writable must be boolean\");\n }\n return;\n }\n if (message.type === \"resync_required\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live resync belongs to another artifact\");\n }\n boundedNonEmpty(message.reason, \"live resync reason\", 8 * 1024);\n return;\n }\n throw invalidSequence(\"live message type is unsupported\");\n}\n\nfunction estimateLiveMessageBytes(message: EditableArtifactLiveMessage): number {\n if (message.type === \"transaction.committed\") {\n return estimateCommittedTransactionBytes(message.transaction);\n }\n if (message.type === \"resync_required\") {\n return new TextEncoder().encode(message.reason).byteLength + 128;\n }\n return 96;\n}\n\nfunction estimateCommittedTransactionBytes(\n transaction: EditableArtifactCommittedTransaction,\n): number {\n return (\n transaction.committedTransactionBytes.byteLength +\n 512 +\n (transaction.modality === \"spreadsheet\"\n ? transaction.causalFrontier.length * (MAX_IDENTIFIER_BYTES + 16)\n : 32)\n );\n}\n\nfunction requireStateHash(actual: string, expected: string, source: string): void {\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"kernel_diverged\",\n `${source} produced state hash ${actual}; expected ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction requireDigest(actual: string, expected: string, source: string): void {\n requireSha256(actual, `${source} computed digest`);\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"kernel_diverged\",\n `${source} bytes produced digest ${actual}; expected ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction requireFrontier(\n actual: EditableArtifactCausalFrontier,\n expected: EditableArtifactCausalFrontier,\n source: string,\n): void {\n if (\n actual.length !== expected.length ||\n actual.some(\n (entry, index) =>\n entry.replicaId !== expected[index]?.replicaId ||\n entry.counter !== expected[index]?.counter,\n )\n ) {\n throw new EditableArtifactSyncError(\n \"kernel_diverged\",\n `${source} causal frontier does not match the authoritative barrier`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction orderPendingTransactions(\n transactions: EditableArtifactPendingTransaction[],\n): EditableArtifactPendingTransaction[] {\n const byId = new Map<string, EditableArtifactPendingTransaction>();\n const replicaCounters = new Set<string>();\n for (const transaction of transactions) {\n if (byId.has(transaction.clientTransactionId)) {\n throw new TypeError(`duplicate pending transaction ${transaction.clientTransactionId}`);\n }\n const counterKey = `${transaction.replicaId}\\0${transaction.replicaCounter}`;\n if (replicaCounters.has(counterKey)) {\n throw new TypeError(\n `replica ${transaction.replicaId} reused counter ${transaction.replicaCounter}`,\n );\n }\n replicaCounters.add(counterKey);\n byId.set(transaction.clientTransactionId, transaction);\n }\n\n const children = new Map<string, string[]>();\n const indegree = new Map<string, number>();\n for (const transaction of transactions) {\n let count = 0;\n const dependency = transaction.previousLocalTransactionId;\n if (dependency && byId.has(dependency)) {\n const list = children.get(dependency) ?? [];\n list.push(transaction.clientTransactionId);\n children.set(dependency, list);\n count += 1;\n }\n indegree.set(transaction.clientTransactionId, count);\n }\n\n const ready = transactions\n .filter((transaction) => indegree.get(transaction.clientTransactionId) === 0)\n .sort(comparePendingStable);\n const ordered: EditableArtifactPendingTransaction[] = [];\n while (ready.length > 0) {\n const transaction = ready.shift();\n if (!transaction) break;\n ordered.push(transaction);\n for (const childId of children.get(transaction.clientTransactionId) ?? []) {\n const next = (indegree.get(childId) ?? 0) - 1;\n indegree.set(childId, next);\n if (next === 0) {\n const child = byId.get(childId);\n if (child) insertSorted(ready, child, comparePendingStable);\n }\n }\n }\n if (ordered.length !== transactions.length) {\n throw new TypeError(\"pending transaction dependencies contain a cycle\");\n }\n return ordered;\n}\n\nfunction comparePendingStable(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): number {\n const replica = compareCodeUnits(left.replicaId, right.replicaId);\n if (replica !== 0) return replica;\n if (left.replicaCounter !== right.replicaCounter) {\n return left.replicaCounter < right.replicaCounter ? -1 : 1;\n }\n if (left.createdAt !== right.createdAt) return left.createdAt < right.createdAt ? -1 : 1;\n return compareCodeUnits(left.clientTransactionId, right.clientTransactionId);\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction insertSorted<T>(values: T[], value: T, compare: (left: T, right: T) => number): void {\n let low = 0;\n let high = values.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (compare(values[middle] as T, value) <= 0) low = middle + 1;\n else high = middle;\n }\n values.splice(low, 0, value);\n}\n\nfunction cloneSnapshot(\n snapshot: EditableArtifactSpreadsheetSnapshot,\n): EditableArtifactSpreadsheetSnapshot;\nfunction cloneSnapshot(\n snapshot: EditableArtifactSerializedSnapshot,\n): EditableArtifactSerializedSnapshot;\nfunction cloneSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n): EditableArtifactStoredReplica[\"snapshot\"];\nfunction cloneSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n): EditableArtifactStoredReplica[\"snapshot\"] {\n return snapshot.modality === \"spreadsheet\"\n ? {\n ...snapshot,\n causalFrontier: cloneFrontier(snapshot.causalFrontier),\n bytes: snapshot.bytes.slice(),\n }\n : { ...snapshot, bytes: snapshot.bytes.slice() };\n}\n\nfunction cloneCommitted(\n transaction: EditableArtifactSpreadsheetCommittedTransaction,\n): EditableArtifactSpreadsheetCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactSerializedCommittedTransaction,\n): EditableArtifactSerializedCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n }\n : {\n ...transaction,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction clonePending(\n transaction: EditableArtifactSpreadsheetPendingTransaction,\n): EditableArtifactSpreadsheetPendingTransaction;\nfunction clonePending(\n transaction: Exclude<EditableArtifactPendingTransaction, { modality: \"spreadsheet\" }>,\n): Exclude<EditableArtifactPendingTransaction, { modality: \"spreadsheet\" }>;\nfunction clonePending(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction;\nfunction clonePending(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalBase: cloneFrontier(transaction.causalBase),\n selectiveUndoTargets: [...transaction.selectiveUndoTargets],\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n }\n : {\n ...transaction,\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n };\n}\n\nfunction safeSequence(value: number, label: string): number {\n return nonNegativeSafeInteger(value, label);\n}\n\nfunction requireModality(value: unknown): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(\"artifact modality is invalid\");\n }\n return value;\n}\n\nfunction requireNativeRevision(value: number | null, label: string): number {\n if (value === null || !Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction requireNativeRevisionEqual(actual: number, expected: number, source: string): void {\n requireNativeRevision(actual, `${source} actual native revision`);\n requireNativeRevision(expected, `${source} expected native revision`);\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"kernel_diverged\",\n `${source} native revision ${actual} does not match ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) throw new RangeError(`${label} must be positive`);\n return value;\n}\n\nfunction positiveU16(value: number, label: string): number {\n const validated = positiveSafeInteger(value, label);\n if (validated > 0xffff) throw new RangeError(`${label} must fit an unsigned 16-bit integer`);\n return validated;\n}\n\nfunction nonNegativeSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction requireNonEmpty(value: string, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction boundedNonEmpty(value: string, label: string, maxBytes: number): string {\n requireNonEmpty(value, label);\n if (new TextEncoder().encode(value).byteLength > maxBytes) {\n throw new RangeError(`${label} exceeds ${maxBytes} UTF-8 bytes`);\n }\n return value;\n}\n\nfunction requireSha256(value: string, label: string): string {\n if (!/^sha256:[a-f0-9]{64}$/.test(value)) {\n throw new TypeError(`${label} must be a canonical sha256: digest`);\n }\n return value;\n}\n\nfunction requireStableId(value: string, label: string): string {\n if (!/^(?!0{32}$)[a-f0-9]{32}$/u.test(value)) {\n throw new TypeError(`${label} must be 32 lowercase nonzero hex characters`);\n }\n return value;\n}\n\nfunction requireClientTransactionId(value: string, label: string): string {\n if (!/^[A-Za-z0-9._:-]{1,200}$/u.test(value)) {\n throw new TypeError(`${label} must be a canonical portable transaction id`);\n }\n return value;\n}\n\nfunction requireReplicaId(value: string, label: string): string {\n if (!/^(?!0{16}$)[a-f0-9]{16}$/.test(value)) {\n throw new TypeError(`${label} must be 16 lowercase nonzero hex characters`);\n }\n return value;\n}\n\nfunction defaultWriterReplicaId(): string {\n for (;;) {\n const bytes = crypto.getRandomValues(new Uint8Array(8));\n const value = [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n if (value !== \"0000000000000000\") return value;\n }\n}\n\nexport function editableArtifactCacheNamespace(authority: EditableArtifactCacheAuthority): string {\n const origin = new URL(authority.deploymentOrigin).origin;\n if (!origin.startsWith(\"https://\") && !origin.startsWith(\"http://\")) {\n throw new TypeError(\"storageAuthority.deploymentOrigin must be HTTP(S)\");\n }\n return JSON.stringify([\n origin,\n boundedNonEmpty(authority.accountId, \"storageAuthority.accountId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(authority.workspaceId, \"storageAuthority.workspaceId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(authority.principalId, \"storageAuthority.principalId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(\n authority.authorizationEpoch,\n \"storageAuthority.authorizationEpoch\",\n MAX_IDENTIFIER_BYTES,\n ),\n ]);\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n return frontier.map((entry) => ({ ...entry }));\n}\n\nfunction frontiersEqual(\n left: readonly Readonly<{ replicaId: string; counter: number }>[],\n right: readonly Readonly<{ replicaId: string; counter: number }>[],\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nfunction normalizeIdentifiers(values: readonly string[], label: string): readonly string[] {\n if (!Array.isArray(values)) throw new TypeError(`${label} must be an array`);\n if (values.length > 1_024) throw new RangeError(`${label} exceeds 1024 entries`);\n const normalized = values.map((value, index) =>\n boundedNonEmpty(value, `${label}[${index}]`, MAX_IDENTIFIER_BYTES),\n );\n normalized.sort(compareCodeUnits);\n for (let index = 1; index < normalized.length; index += 1) {\n if (normalized[index - 1] === normalized[index]) {\n throw new TypeError(`${label} contains a duplicate identifier`);\n }\n }\n return normalized;\n}\n\nfunction identifiersEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction invalidBootstrap(message: string, retryable = false): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_bootstrap\", message, {\n retryable,\n requiresSnapshot: retryable,\n });\n}\n\nfunction invalidSequence(message: string): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_sequence\", message, {\n retryable: true,\n requiresSnapshot: true,\n });\n}\n\nfunction transientError(cause: unknown): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_bootstrap\", \"artifact transport interrupted\", {\n retryable: true,\n cause,\n });\n}\n\nfunction storageError(message: string, cause?: unknown): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"storage_failed\", message, { cause });\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction errorCode(error: Error): string | null {\n const code = (error as Error & { code?: unknown }).code;\n return typeof code === \"string\" && code.length > 0 ? code : null;\n}\n\nfunction isRetryableFailure(error: Error): boolean {\n if (error instanceof EditableArtifactSyncError) return error.retryable;\n return (error as Error & { retryable?: unknown }).retryable === true;\n}\n\nfunction isTerminal(state: EditableArtifactSyncState): boolean {\n return state === \"unsupported\" || state === \"failed\" || state === \"closed\";\n}\n\nfunction waitForConnectionClose(\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n): Promise<Awaited<EditableArtifactLiveConnection[\"closed\"]>> {\n if (signal.aborted) return Promise.resolve({ reason: \"closed\" });\n return new Promise((resolve, reject) => {\n let settled = false;\n const finish = (value: Awaited<EditableArtifactLiveConnection[\"closed\"]>): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n };\n const fail = (error: unknown): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n };\n const onAbort = (): void => finish({ reason: \"closed\" });\n signal.addEventListener(\"abort\", onAbort, { once: true });\n void connection.closed.then(finish, fail);\n });\n}\n\nconst defaultScheduler: EditableArtifactSyncScheduler = {\n now: () => Date.now(),\n sleep: async (delayMs, signal) => {\n if (signal.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n const onAbort = () => done();\n function done() {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n },\n};\n","export type EditableArtifactSyncErrorCode =\n | \"unsupported_protocol\"\n | \"invalid_bootstrap\"\n | \"invalid_sequence\"\n | \"kernel_diverged\"\n | \"queue_overflow\"\n | \"resync_required\"\n | \"permission_changed\"\n | \"storage_failed\"\n | \"pending_conflict\"\n | \"reconnect_exhausted\";\n\nexport class EditableArtifactSyncError extends Error {\n readonly code: EditableArtifactSyncErrorCode;\n readonly retryable: boolean;\n readonly requiresSnapshot: boolean;\n\n constructor(\n code: EditableArtifactSyncErrorCode,\n message: string,\n options: { retryable?: boolean; requiresSnapshot?: boolean; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"EditableArtifactSyncError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.requiresSnapshot = options.requiresSnapshot ?? false;\n }\n}\n\n/** Transport adapters wrap retryable network failures in this typed error. */\nexport class EditableArtifactTransportError extends Error {\n readonly code: string | undefined;\n readonly retryable: boolean;\n readonly outcomeUnknown: boolean;\n\n constructor(\n message: string,\n options: {\n code?: string;\n retryable?: boolean;\n outcomeUnknown?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"EditableArtifactTransportError\";\n this.code = options.code;\n this.retryable = options.retryable ?? true;\n this.outcomeUnknown = options.outcomeUnknown ?? false;\n }\n}\n","import {\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeEditableArtifactMutationIntent,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { decodeCommittedTransactionSummary } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { editableArtifactCodecFor } from \"@opengeni/contracts/editable-artifact-codec-registry\";\nimport { decodeEditableArtifactSerializedCommit } from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport type {\n EditableArtifactCommittedTransaction,\n EditableArtifactCausalFrontier,\n EditableArtifactId,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactSnapshot,\n EditableArtifactStoredReplica,\n} from \"./types\";\n\n/** Durable browser state required to resume one artifact without inventing state. */\nexport type EditableArtifactStoragePort = {\n loadReplica: (\n scope: EditableArtifactStorageScope,\n ) => Promise<EditableArtifactStoredReplica | null>;\n /** Rare full snapshot/resync replacement. Replaces the retained journal atomically. */\n saveReplica: (\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ) => Promise<void>;\n /** Hot path: exact-CAS one verified committed transaction onto the retained journal. */\n appendCommitted: (\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ) => Promise<void>;\n /** Clears the reconstructible server state but deliberately preserves local edits. */\n clearReplica: (scope: EditableArtifactStorageScope) => Promise<void>;\n listPending: (\n scope: EditableArtifactStorageScope,\n ) => Promise<EditableArtifactPendingTransaction[]>;\n putPending: (\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ) => Promise<void>;\n deletePending: (\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ) => Promise<void>;\n};\n\n/** Stable authorization/cache partition supplied by the authenticated host. */\nexport type EditableArtifactStorageScope = {\n namespace: string;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n};\n\nexport type EditableArtifactAppendCommittedInput = {\n artifactId: EditableArtifactId;\n expectedCursor: number;\n expectedStateHash: string;\n transaction: EditableArtifactCommittedTransaction;\n updatedAt: number;\n};\n\nexport type EditableArtifactExpectedStoredHead = Readonly<{\n cursor: number;\n stateHash: string;\n}> | null;\n\n/** A stable id was reused for different content. Retrying cannot resolve this. */\nexport class EditableArtifactStorageConflictError extends Error {\n readonly code = \"editable_artifact_storage_conflict\" as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"EditableArtifactStorageConflictError\";\n }\n}\n\n/**\n * Deterministic in-memory implementation for tests, SSR, and non-persistent\n * hosts. All values cross the port by copy, matching IndexedDB structured-clone\n * behavior and preventing callers from mutating retained authority by alias.\n */\nexport class MemoryEditableArtifactStorage implements EditableArtifactStoragePort {\n readonly #replicas = new Map<string, Map<EditableArtifactId, MemoryStoredReplica>>();\n readonly #pending = new Map<\n string,\n Map<EditableArtifactId, Map<string, EditableArtifactPendingTransaction>>\n >();\n\n async loadReplica(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactStoredReplica | null> {\n assertScope(scope);\n const replica = this.#replicas.get(scope.namespace)?.get(scope.artifactId);\n return replica === undefined ? null : cloneMemoryStoredReplica(replica);\n }\n\n async saveReplica(\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, replica.artifactId);\n assertScopeModality(scope, replica.modality);\n assertStoredReplica(replica);\n const namespace = getOrCreate(this.#replicas, scope.namespace);\n const existing = namespace.get(scope.artifactId);\n assertReplacementCanApply(existing?.head, expectedHead, replica.artifactId);\n namespace.set(scope.artifactId, toMemoryStoredReplica(replica));\n }\n\n async appendCommitted(\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, input.artifactId);\n assertScopeModality(scope, input.transaction.modality);\n assertAppendInput(input);\n const replica = this.#replicas.get(scope.namespace)?.get(scope.artifactId);\n if (replica === undefined) throw missingReplicaConflict(input.artifactId);\n if (\n replica.head.cursor >= input.transaction.endSequence &&\n replica.tail.some((transaction) => committedTransactionsEqual(transaction, input.transaction))\n ) {\n return;\n }\n assertAppendCanApply(\n {\n cursor: replica.head.cursor,\n stateHash: replica.head.stateHash,\n modality: replica.head.modality,\n ...(replica.head.snapshot.modality === \"spreadsheet\"\n ? { protocolVersion: replica.head.snapshot.protocolVersion }\n : {}),\n },\n input,\n );\n const transactionBytes = committedStorageBytes(input.transaction);\n if (replica.tail.length >= HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"committed transaction store exceeds its count bound\");\n }\n const nextTailBytes = checkedAggregateBytes(\n replica.tailBytes,\n transactionBytes,\n HARD_MAX_COMMITTED_BYTES,\n \"committed transaction store\",\n );\n replica.tail.push(cloneCommittedTransaction(input.transaction));\n replica.tailBytes = nextTailBytes;\n replica.head.cursor = input.transaction.endSequence;\n replica.head.stateHash = input.transaction.stateHash;\n replica.head.updatedAt = input.updatedAt;\n }\n\n async clearReplica(scope: EditableArtifactStorageScope): Promise<void> {\n assertScope(scope);\n const namespace = this.#replicas.get(scope.namespace);\n namespace?.delete(scope.artifactId);\n if (namespace?.size === 0) this.#replicas.delete(scope.namespace);\n }\n\n async listPending(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactPendingTransaction[]> {\n assertScope(scope);\n return [...(this.#pending.get(scope.namespace)?.get(scope.artifactId)?.values() ?? [])]\n .sort(comparePendingTransactions)\n .map(clonePendingTransaction);\n }\n\n async putPending(\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, transaction.artifactId);\n assertScopeModality(scope, transaction.modality);\n assertPendingTransaction(transaction);\n const namespace = getOrCreate(this.#pending, scope.namespace);\n const artifactPending = getOrCreate(namespace, scope.artifactId);\n const existing = artifactPending.get(transaction.clientTransactionId);\n assertPendingCanReplace(existing, transaction);\n if (existing === undefined) {\n if (artifactPending.size >= HARD_MAX_PENDING_TRANSACTIONS) {\n throw new RangeError(\"pending transaction store exceeds its count bound\");\n }\n let aggregateBytes = pendingStorageBytes(transaction);\n if (aggregateBytes > HARD_MAX_PENDING_BYTES) {\n throw new RangeError(\"pending transaction store exceeds its byte bound\");\n }\n for (const retained of artifactPending.values()) {\n aggregateBytes = checkedAggregateBytes(\n aggregateBytes,\n pendingStorageBytes(retained),\n HARD_MAX_PENDING_BYTES,\n \"pending transaction store\",\n );\n }\n artifactPending.set(transaction.clientTransactionId, clonePendingTransaction(transaction));\n }\n }\n\n async deletePending(\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ): Promise<void> {\n assertScope(scope);\n const namespace = this.#pending.get(scope.namespace);\n const artifactPending = namespace?.get(scope.artifactId);\n artifactPending?.delete(clientTransactionId);\n if (artifactPending?.size === 0) namespace?.delete(scope.artifactId);\n if (namespace?.size === 0) this.#pending.delete(scope.namespace);\n }\n}\n\ntype StoredReplicaHead = Omit<EditableArtifactStoredReplica, \"tail\">;\n\ntype MemoryStoredReplica = {\n head: StoredReplicaHead;\n tail: EditableArtifactCommittedTransaction[];\n tailBytes: number;\n};\n\ntype IndexedDbStoredReplicaHead = Omit<StoredReplicaHead, \"snapshot\"> & {\n namespace: string;\n /** Absent only on legacy spreadsheet records. */\n modality?: EditableArtifactModality;\n /** Spreadsheet-only; absent for serialized modalities. */\n protocolVersion?: number;\n tailCount: number;\n tailBytes: number;\n};\ntype IndexedDbStoredSnapshot = EditableArtifactSnapshot & { namespace: string };\ntype IndexedDbCommittedTransaction = EditableArtifactCommittedTransaction & {\n namespace: string;\n};\ntype IndexedDbPendingTransaction = EditableArtifactPendingTransaction & {\n namespace: string;\n /** V3 IndexedDB key-path alias; always exactly clientTransactionId. */\n transactionId: string;\n};\nconst DATABASE_VERSION = 3;\nconst REPLICA_HEAD_STORE = \"replicas\";\nconst SNAPSHOT_STORE = \"snapshots\";\nconst COMMITTED_STORE = \"committedTransactions\";\nconst COMMITTED_BY_SCOPE_INDEX = \"byScope\";\nconst PENDING_STORE = \"pendingTransactions\";\nconst PENDING_BY_SCOPE_INDEX = \"byScope\";\nconst HARD_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst HARD_MAX_COMMITTED_TRANSACTIONS = 65_536;\nconst HARD_MAX_COMMITTED_BYTES = 256 * 1024 * 1024;\nconst HARD_MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nconst HARD_MAX_PENDING_TRANSACTIONS = 1_024;\nconst HARD_MAX_PENDING_BYTES = 128 * 1024 * 1024;\nconst HARD_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst HARD_MAX_INTENT_BYTES = EDITABLE_ARTIFACT_INTENT_MAX_BYTES;\n\nexport type IndexedDbEditableArtifactStorageOptions = {\n databaseName?: string;\n indexedDB?: IDBFactory;\n};\n\n/**\n * IndexedDB-backed browser storage. Writes that depend on an existing value do\n * their comparison and mutation in the same IDB transaction, so tabs cannot\n * silently replace a newer cursor or reuse an idempotency key for other bytes.\n */\nexport class IndexedDbEditableArtifactStorage implements EditableArtifactStoragePort {\n readonly #databaseName: string;\n readonly #factory: IDBFactory;\n #databasePromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexedDbEditableArtifactStorageOptions = {}) {\n const factory = options.indexedDB ?? globalThis.indexedDB;\n if (factory === undefined) {\n throw new Error(\"IndexedDB is unavailable; provide an indexedDB implementation\");\n }\n this.#factory = factory;\n this.#databaseName = options.databaseName ?? \"opengeni-editable-artifacts\";\n }\n\n async loadReplica(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactStoredReplica | null> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readonly\",\n );\n const completed = transactionResult(transaction);\n const headRequest = requestResult<IndexedDbStoredReplicaHead | undefined>(\n transaction.objectStore(REPLICA_HEAD_STORE).get(scopeKey(ownedScope)),\n );\n const snapshotRequest = requestResult<IndexedDbStoredSnapshot | undefined>(\n transaction.objectStore(SNAPSHOT_STORE).get(scopeKey(ownedScope)),\n );\n const tailRequest = readBoundedIndexValues<IndexedDbCommittedTransaction>(\n transaction,\n transaction.objectStore(COMMITTED_STORE).index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(ownedScope),\n HARD_MAX_COMMITTED_TRANSACTIONS,\n HARD_MAX_COMMITTED_BYTES,\n (value) => {\n if (!(value.committedTransactionBytes instanceof Uint8Array)) {\n throw new TypeError(\"retained committedTransactionBytes must be a Uint8Array\");\n }\n return committedStorageBytes(value);\n },\n );\n let head: IndexedDbStoredReplicaHead | undefined;\n let snapshot: IndexedDbStoredSnapshot | undefined;\n let tail: IndexedDbCommittedTransaction[];\n try {\n [head, snapshot, tail] = await Promise.all([headRequest, snapshotRequest, tailRequest]);\n await completed;\n } catch (error) {\n await completed.catch(() => undefined);\n throw error;\n }\n if (head === undefined) {\n if (snapshot !== undefined || tail.length !== 0) {\n throw new TypeError(`artifact ${ownedScope.artifactId} has retained state without a head`);\n }\n return null;\n }\n if (snapshot === undefined) {\n throw new TypeError(`artifact ${ownedScope.artifactId} has no retained snapshot`);\n }\n if (head.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained replica namespace does not match its storage key\");\n }\n if (snapshot.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained snapshot namespace does not match its storage key\");\n }\n let retainedTailBytes = 0;\n for (const committed of tail) {\n if (committed.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained journal namespace does not match its storage key\");\n }\n retainedTailBytes = checkedAggregateBytes(\n retainedTailBytes,\n committedStorageBytes(committed),\n HARD_MAX_COMMITTED_BYTES,\n \"retained committed transaction store\",\n );\n }\n assertStoredHeadAccounting(head, tail.length, retainedTailBytes);\n const {\n namespace: _headNamespace,\n protocolVersion: retainedProtocolVersion,\n tailCount: _tailCount,\n tailBytes: _tailBytes,\n ...storedHead\n } = head;\n const { namespace: _snapshotNamespace, ...rawStoredSnapshot } = snapshot;\n const storedSnapshot = normalizeStoredSnapshot(rawStoredSnapshot, ownedScope.modality);\n const normalizedTail = tail\n .map(({ namespace: _transactionNamespace, ...value }) =>\n normalizeStoredCommitted(value, ownedScope.modality),\n )\n .sort(compareCommittedTransactions);\n const headModality = head.modality ?? \"spreadsheet\";\n if (headModality !== ownedScope.modality) {\n throw new TypeError(\"retained head modality does not match its storage scope\");\n }\n if (\n storedSnapshot.modality === \"spreadsheet\" &&\n retainedProtocolVersion !== storedSnapshot.protocolVersion\n )\n throw new TypeError(\"retained head protocol does not match its snapshot\");\n const replica: EditableArtifactStoredReplica = {\n ...storedHead,\n modality: ownedScope.modality,\n snapshot: storedSnapshot,\n tail: normalizedTail,\n };\n assertStoredReplica(replica);\n // IndexedDB already returned a structured clone owned by this call. The\n // namespace-stripped objects are not retained by the adapter, so another\n // full copy (including every snapshot/journal byte) adds no isolation.\n return replica;\n }\n\n async saveReplica(\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedReplica = cloneStoredReplica(replica);\n const ownedExpectedHead = cloneExpectedStoredHead(expectedHead);\n assertScopeMatchesArtifact(ownedScope, ownedReplica.artifactId);\n assertScopeModality(ownedScope, ownedReplica.modality);\n assertStoredReplica(ownedReplica);\n const database = await this.#database();\n await replaceIndexedDbReplica(database, ownedScope, ownedReplica, ownedExpectedHead);\n }\n\n async appendCommitted(\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedInput: EditableArtifactAppendCommittedInput = {\n ...input,\n transaction: cloneCommittedTransaction(input.transaction),\n };\n assertScopeMatchesArtifact(ownedScope, ownedInput.artifactId);\n assertScopeModality(ownedScope, ownedInput.transaction.modality);\n assertAppendInput(ownedInput);\n const database = await this.#database();\n await appendIndexedDbCommitted(database, ownedScope, ownedInput);\n }\n\n async clearReplica(scope: EditableArtifactStorageScope): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n await clearIndexedDbReplica(database, ownedScope);\n }\n\n async listPending(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactPendingTransaction[]> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(PENDING_STORE, \"readonly\");\n const completed = transactionResult(transaction);\n let values: IndexedDbPendingTransaction[];\n try {\n values = await readBoundedIndexValues<IndexedDbPendingTransaction>(\n transaction,\n transaction.objectStore(PENDING_STORE).index(PENDING_BY_SCOPE_INDEX),\n scopeKey(ownedScope),\n HARD_MAX_PENDING_TRANSACTIONS,\n HARD_MAX_PENDING_BYTES,\n (value) => {\n if (\n !(value.commandBytes instanceof Uint8Array) ||\n !(value.intentBytes instanceof Uint8Array)\n ) {\n throw new TypeError(\"retained pending bytes must be Uint8Arrays\");\n }\n return pendingStorageBytes(value);\n },\n );\n await completed;\n } catch (error) {\n await completed.catch(() => undefined);\n throw error;\n }\n return values\n .map(({ namespace, transactionId, ...value }) => {\n if (namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained pending namespace does not match its storage key\");\n }\n if (transactionId !== value.clientTransactionId) {\n throw new TypeError(\"retained pending key does not match clientTransactionId\");\n }\n const normalized = normalizeStoredPending(value, ownedScope.modality);\n assertPendingTransaction(normalized);\n return normalized;\n })\n .sort(comparePendingTransactions);\n }\n\n async putPending(\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedTransaction = clonePendingTransaction(transaction);\n assertScopeMatchesArtifact(ownedScope, ownedTransaction.artifactId);\n assertScopeModality(ownedScope, ownedTransaction.modality);\n assertPendingTransaction(ownedTransaction);\n const stored: IndexedDbPendingTransaction = {\n ...ownedTransaction,\n namespace: ownedScope.namespace,\n transactionId: ownedTransaction.clientTransactionId,\n };\n const database = await this.#database();\n await putIndexedDbPending(database, ownedScope, stored);\n }\n\n async deletePending(\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(PENDING_STORE, \"readwrite\");\n transaction\n .objectStore(PENDING_STORE)\n .delete([ownedScope.namespace, ownedScope.artifactId, clientTransactionId]);\n await transactionResult(transaction);\n }\n\n async close(): Promise<void> {\n const databasePromise = this.#databasePromise;\n this.#databasePromise = null;\n if (databasePromise !== null) (await databasePromise).close();\n }\n\n #database(): Promise<IDBDatabase> {\n if (this.#databasePromise === null) {\n const opening = openDatabase(this.#factory, this.#databaseName);\n this.#databasePromise = opening;\n void opening.then(\n (database) => {\n database.onclose = () => {\n if (this.#databasePromise === opening) this.#databasePromise = null;\n };\n database.onversionchange = () => {\n database.close();\n if (this.#databasePromise === opening) this.#databasePromise = null;\n };\n },\n () => {\n if (this.#databasePromise === opening) this.#databasePromise = null;\n },\n );\n }\n return this.#databasePromise;\n }\n}\n\nfunction cloneSnapshot(snapshot: EditableArtifactSnapshot): EditableArtifactSnapshot {\n return snapshot.modality === \"spreadsheet\"\n ? {\n ...snapshot,\n causalFrontier: cloneFrontier(snapshot.causalFrontier),\n bytes: snapshot.bytes.slice(),\n }\n : { ...snapshot, bytes: snapshot.bytes.slice() };\n}\n\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n }\n : {\n ...transaction,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction clonePendingTransaction(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalBase: cloneFrontier(transaction.causalBase),\n selectiveUndoTargets: [...transaction.selectiveUndoTargets],\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n }\n : {\n ...transaction,\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n };\n}\n\nfunction cloneStoredReplica(replica: EditableArtifactStoredReplica): EditableArtifactStoredReplica {\n return {\n ...replica,\n snapshot: cloneSnapshot(replica.snapshot),\n tail: replica.tail.map(cloneCommittedTransaction),\n };\n}\n\nfunction cloneStorageScope(scope: EditableArtifactStorageScope): EditableArtifactStorageScope {\n const owned = {\n namespace: scope.namespace,\n artifactId: scope.artifactId,\n modality: scope.modality,\n };\n assertScope(owned);\n return owned;\n}\n\nfunction cloneExpectedStoredHead(\n head: EditableArtifactExpectedStoredHead,\n): EditableArtifactExpectedStoredHead {\n if (head === null) return null;\n const owned = { cursor: head.cursor, stateHash: head.stateHash };\n assertSequence(owned.cursor, \"expected retained cursor\");\n assertNonEmpty(owned.stateHash, \"expected retained stateHash\");\n return owned;\n}\n\nfunction cloneStoredReplicaHead(replica: StoredReplicaHead): StoredReplicaHead {\n return { ...replica, snapshot: cloneSnapshot(replica.snapshot) };\n}\n\nfunction toStoredReplicaHead(replica: EditableArtifactStoredReplica): StoredReplicaHead {\n const { tail: _tail, ...head } = replica;\n return cloneStoredReplicaHead(head);\n}\n\nfunction toMemoryStoredReplica(replica: EditableArtifactStoredReplica): MemoryStoredReplica {\n return {\n head: toStoredReplicaHead(replica),\n tail: replica.tail.map(cloneCommittedTransaction),\n tailBytes: committedTailBytes(replica.tail),\n };\n}\n\nfunction cloneMemoryStoredReplica(replica: MemoryStoredReplica): EditableArtifactStoredReplica {\n return {\n ...cloneStoredReplicaHead(replica.head),\n tail: replica.tail.map(cloneCommittedTransaction),\n };\n}\n\nfunction assertStoredReplica(replica: EditableArtifactStoredReplica): void {\n assertStableId(replica.artifactId, \"artifactId\");\n assertModality(replica.modality, \"modality\");\n if (replica.snapshot.modality !== replica.modality) {\n throw new TypeError(\"stored snapshot modality does not match its replica\");\n }\n if (replica.snapshot.artifactId !== replica.artifactId) {\n throw new TypeError(\"stored snapshot artifactId does not match its replica\");\n }\n assertSequence(replica.snapshot.sequence, \"snapshot.sequence\");\n assertSequence(replica.cursor, \"cursor\");\n assertTimestamp(replica.updatedAt, \"updatedAt\");\n assertBytes(replica.snapshot.bytes, \"snapshot.bytes\");\n if (replica.snapshot.bytes.byteLength > HARD_MAX_SNAPSHOT_BYTES) {\n throw new RangeError(\"stored snapshot exceeds its hard byte bound\");\n }\n assertSha256(replica.snapshot.stateHash, \"snapshot.stateHash\");\n assertSha256(replica.snapshot.digest, \"snapshot.digest\");\n if (replica.snapshot.modality === \"spreadsheet\") {\n assertFrontier(replica.snapshot.causalFrontier, \"snapshot.causalFrontier\");\n assertPositiveInteger(replica.snapshot.protocolVersion, \"snapshot.protocolVersion\");\n } else {\n assertSequence(replica.snapshot.nativeRevision, \"snapshot.nativeRevision\");\n }\n assertNonEmpty(replica.snapshot.kernelVersion, \"snapshot.kernelVersion\");\n assertPositiveInteger(replica.snapshot.modelSchemaVersion, \"snapshot.modelSchemaVersion\");\n assertSha256(replica.stateHash, \"stateHash\");\n\n let cursor = replica.snapshot.sequence;\n let stateHash = replica.snapshot.stateHash;\n let nativeRevision =\n replica.snapshot.modality === \"spreadsheet\" ? null : replica.snapshot.nativeRevision;\n if (replica.tail.length > HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"stored committed tail exceeds its count bound\");\n }\n let tailBytes = 0;\n for (const transaction of replica.tail) {\n assertCommittedTransaction(transaction, replica.artifactId);\n if (transaction.modality !== replica.modality) {\n throw new TypeError(\"stored committed tail modality does not match its replica\");\n }\n tailBytes = checkedAggregateBytes(\n tailBytes,\n committedStorageBytes(transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"stored committed tail\",\n );\n if (transaction.startSequence !== cursor + 1) {\n throw new TypeError(\"stored committed tail must be contiguous after its snapshot\");\n }\n if (\n transaction.modality === \"spreadsheet\" &&\n replica.snapshot.modality === \"spreadsheet\" &&\n transaction.protocolVersion !== replica.snapshot.protocolVersion\n )\n throw new TypeError(\"stored committed tail protocol does not match its snapshot\");\n if (transaction.modality !== \"spreadsheet\") {\n if (nativeRevision !== transaction.priorNativeRevision) {\n throw new TypeError(\"stored serialized tail prior native revision does not match\");\n }\n nativeRevision = transaction.nativeRevision;\n }\n if (transaction.priorStateHash !== stateHash) {\n throw new TypeError(\"stored committed tail priorStateHash does not match prior state\");\n }\n cursor = transaction.endSequence;\n stateHash = transaction.stateHash;\n }\n if (cursor !== replica.cursor) {\n throw new TypeError(\"stored cursor is not reconstructible from snapshot plus committed tail\");\n }\n if (stateHash !== replica.stateHash) {\n throw new TypeError(\"stored stateHash does not match snapshot plus committed tail\");\n }\n}\n\nfunction committedStorageBytes(\n transaction: Pick<EditableArtifactCommittedTransaction, \"committedTransactionBytes\">,\n): number {\n if (!(transaction.committedTransactionBytes instanceof Uint8Array)) {\n throw new TypeError(\"committedTransactionBytes must be a Uint8Array\");\n }\n return transaction.committedTransactionBytes.byteLength + 512;\n}\n\nfunction committedTailBytes(transactions: readonly EditableArtifactCommittedTransaction[]): number {\n let bytes = 0;\n for (const transaction of transactions) {\n bytes = checkedAggregateBytes(\n bytes,\n committedStorageBytes(transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"stored committed tail\",\n );\n }\n return bytes;\n}\n\nfunction pendingStorageBytes(\n transaction: Pick<EditableArtifactPendingTransaction, \"commandBytes\" | \"intentBytes\">,\n): number {\n if (\n !(transaction.commandBytes instanceof Uint8Array) ||\n !(transaction.intentBytes instanceof Uint8Array)\n ) {\n throw new TypeError(\"pending transaction bytes must be Uint8Arrays\");\n }\n const bytes = transaction.commandBytes.byteLength + transaction.intentBytes.byteLength;\n if (!Number.isSafeInteger(bytes)) {\n throw new RangeError(\"pending transaction byte size is not a safe integer\");\n }\n return bytes;\n}\n\nfunction checkedAggregateBytes(\n retainedBytes: number,\n addedBytes: number,\n maximumBytes: number,\n label: string,\n): number {\n if (!Number.isSafeInteger(retainedBytes) || retainedBytes < 0) {\n throw new TypeError(`${label} has invalid retained byte accounting`);\n }\n if (!Number.isSafeInteger(addedBytes) || addedBytes < 0) {\n throw new TypeError(`${label} has an invalid added byte size`);\n }\n const aggregateBytes = retainedBytes + addedBytes;\n if (!Number.isSafeInteger(aggregateBytes) || aggregateBytes > maximumBytes) {\n throw new RangeError(`${label} exceeds its byte bound`);\n }\n return aggregateBytes;\n}\n\nfunction assertStoredHeadAccounting(\n head: IndexedDbStoredReplicaHead,\n tailCount: number,\n tailBytes: number,\n): void {\n assertSequence(head.tailCount, \"retained head tailCount\");\n assertSequence(head.tailBytes, \"retained head tailBytes\");\n if (head.tailCount !== tailCount || head.tailBytes !== tailBytes) {\n throw new TypeError(\"retained head journal accounting does not match its transactions\");\n }\n}\n\nfunction assertAppendInput(input: EditableArtifactAppendCommittedInput): void {\n assertNonEmpty(input.artifactId, \"artifactId\");\n assertSequence(input.expectedCursor, \"expectedCursor\");\n assertNonEmpty(input.expectedStateHash, \"expectedStateHash\");\n assertTimestamp(input.updatedAt, \"updatedAt\");\n assertCommittedTransaction(input.transaction, input.artifactId);\n if (input.transaction.startSequence !== input.expectedCursor + 1) {\n throw new TypeError(\"committed append must begin immediately after expectedCursor\");\n }\n if (input.transaction.priorStateHash !== input.expectedStateHash) {\n throw new TypeError(\"committed append priorStateHash must equal expectedStateHash\");\n }\n}\n\nfunction assertCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n artifactId: EditableArtifactId,\n): void {\n if (transaction.artifactId !== artifactId) {\n throw new TypeError(\"committed transaction artifactId does not match its replica\");\n }\n assertStableId(transaction.transactionId, \"transactionId\");\n assertSha256(transaction.requestHash, \"requestHash\");\n assertSequence(transaction.startSequence, \"startSequence\");\n assertSequence(transaction.endSequence, \"endSequence\");\n if (transaction.endSequence < transaction.startSequence) {\n throw new TypeError(\"committed transaction has an inverted sequence interval\");\n }\n assertSha256(transaction.priorStateHash, \"priorStateHash\");\n assertSha256(transaction.stateHash, \"stateHash\");\n assertModality(transaction.modality, \"transaction.modality\");\n assertBytes(transaction.committedTransactionBytes, \"committedTransactionBytes\");\n if (transaction.committedTransactionBytes.byteLength > HARD_MAX_COMMITTED_TRANSACTION_BYTES) {\n throw new RangeError(\"committedTransactionBytes exceeds its hard byte bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n assertFrontier(transaction.causalFrontier, \"causalFrontier\");\n assertPositiveInteger(transaction.protocolVersion, \"protocolVersion\");\n const summary = decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.operationProtocolVersion !== transaction.protocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n !frontiersEqual(summary.resultingCausalFrontier, transaction.causalFrontier)\n )\n throw new TypeError(\"committed fields do not exactly match their OGACO envelope\");\n return;\n }\n assertSequence(transaction.priorNativeRevision, \"priorNativeRevision\");\n assertSequence(transaction.nativeRevision, \"nativeRevision\");\n assertPositiveInteger(transaction.commitProtocolVersion, \"commitProtocolVersion\");\n const summary = decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.requestHash !== transaction.requestHash ||\n summary.parentHeadSequence + 1 !== transaction.startSequence ||\n summary.resultHeadSequence !== transaction.endSequence ||\n summary.priorNativeRevision !== transaction.priorNativeRevision ||\n summary.nativeReceipt.revision !== transaction.nativeRevision ||\n summary.commitProtocolVersion !== transaction.commitProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash\n )\n throw new TypeError(\"committed fields do not exactly match their OGAST envelope\");\n}\n\nfunction assertPendingTransaction(transaction: EditableArtifactPendingTransaction): void {\n assertStableId(transaction.artifactId, \"artifactId\");\n assertClientTransactionId(transaction.clientTransactionId, \"clientTransactionId\");\n assertSha256(transaction.requestHash, \"requestHash\");\n assertPositiveU16(transaction.protocolVersion, \"protocolVersion\");\n assertPositiveU16(transaction.modelSchemaVersion, \"modelSchemaVersion\");\n assertPositiveU16(transaction.commandVersion, \"commandVersion\");\n assertReplicaId(transaction.replicaId, \"replicaId\");\n assertPositiveInteger(transaction.replicaCounter, \"replicaCounter\");\n if (transaction.previousLocalTransactionId !== null) {\n assertClientTransactionId(transaction.previousLocalTransactionId, \"previousLocalTransactionId\");\n if (transaction.previousLocalTransactionId === transaction.clientTransactionId) {\n throw new TypeError(\"pending transaction cannot depend on itself\");\n }\n }\n assertModality(transaction.modality, \"pending.modality\");\n assertTimestamp(transaction.createdAt, \"createdAt\");\n assertSequence(transaction.observedHeadSequence, \"observedHeadSequence\");\n assertBytes(transaction.commandBytes, \"commandBytes\");\n assertBytes(transaction.intentBytes, \"intentBytes\");\n if (transaction.commandBytes.byteLength > HARD_MAX_COMMAND_BYTES) {\n throw new RangeError(\"commandBytes exceeds its hard byte bound\");\n }\n if (transaction.intentBytes.byteLength > HARD_MAX_INTENT_BYTES) {\n throw new RangeError(\"intentBytes exceeds its hard byte bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n assertFrontier(transaction.causalBase, \"causalBase\");\n assertIdentifiers(transaction.selectiveUndoTargets, \"selectiveUndoTargets\");\n assertCanonicalSpreadsheetArtifactCommandBytes(transaction.commandBytes);\n } else {\n assertSequence(transaction.observedNativeRevision, \"observedNativeRevision\");\n editableArtifactCodecFor({\n durableModality: transaction.modality,\n modelSchemaVersion: transaction.modelSchemaVersion,\n commandProtocolVersion: transaction.commandVersion,\n }).command.assertCanonical(transaction.commandBytes);\n }\n const intent = decodeEditableArtifactMutationIntent(transaction.intentBytes);\n if (\n intent.artifactId !== transaction.artifactId ||\n intent.clientTransactionId !== transaction.clientTransactionId ||\n intent.replicaId !== transaction.replicaId ||\n intent.replicaCounter !== transaction.replicaCounter ||\n intent.previousLocalTransactionId !== transaction.previousLocalTransactionId ||\n intent.protocolVersion !== transaction.protocolVersion ||\n intent.modelSchemaVersion !== transaction.modelSchemaVersion ||\n intent.commandProtocolVersion !== transaction.commandVersion ||\n intent.observedHeadSequence !== transaction.observedHeadSequence ||\n !bytesEqual(intent.commandBytes, transaction.commandBytes)\n ) {\n throw new TypeError(\"pending fields do not exactly match their OGATX envelope\");\n }\n if (\n transaction.modality === \"spreadsheet\"\n ? !frontiersEqual(intent.causalBase, transaction.causalBase) ||\n !identifiersEqual(intent.selectiveUndoOperationIds, transaction.selectiveUndoTargets)\n : intent.causalBase.length !== 0 || intent.selectiveUndoOperationIds.length !== 0\n )\n throw new TypeError(\"pending causality does not match its durable modality\");\n if (\n hashEditableArtifactMutationIntentBytes(transaction.intentBytes) !== transaction.requestHash\n ) {\n throw new TypeError(\"pending requestHash does not match its OGATX envelope\");\n }\n}\n\nfunction assertAppendCanApply(\n head: Pick<StoredReplicaHead, \"cursor\" | \"stateHash\"> & {\n modality?: EditableArtifactModality;\n protocolVersion?: number;\n },\n input: EditableArtifactAppendCommittedInput,\n): void {\n if (head.cursor !== input.expectedCursor || head.stateHash !== input.expectedStateHash) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} retained head no longer matches append expectation`,\n );\n }\n const headModality = head.modality ?? \"spreadsheet\";\n if (input.transaction.modality !== headModality) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} append modality does not match retained snapshot`,\n );\n }\n if (\n input.transaction.modality === \"spreadsheet\" &&\n input.transaction.protocolVersion !== head.protocolVersion\n ) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} append protocol does not match retained snapshot`,\n );\n }\n}\n\nfunction assertReplacementCanApply(\n head:\n | (Pick<StoredReplicaHead, \"cursor\" | \"stateHash\"> & {\n protocolVersion?: number;\n })\n | undefined,\n expectedHead: EditableArtifactExpectedStoredHead,\n artifactId: EditableArtifactId,\n): void {\n if (expectedHead === null) {\n if (head === undefined) return;\n } else if (\n head !== undefined &&\n head.cursor === expectedHead.cursor &&\n head.stateHash === expectedHead.stateHash\n ) {\n return;\n }\n throw new EditableArtifactStorageConflictError(\n `artifact ${artifactId} retained head changed before snapshot replacement`,\n );\n}\n\nfunction missingReplicaConflict(\n artifactId: EditableArtifactId,\n): EditableArtifactStorageConflictError {\n return new EditableArtifactStorageConflictError(\n `artifact ${artifactId} has no retained replica to append to`,\n );\n}\n\nfunction compareCommittedTransactions(\n left: EditableArtifactCommittedTransaction,\n right: EditableArtifactCommittedTransaction,\n): number {\n if (left.startSequence !== right.startSequence) {\n return left.startSequence < right.startSequence ? -1 : 1;\n }\n if (left.transactionId === right.transactionId) return 0;\n return left.transactionId < right.transactionId ? -1 : 1;\n}\n\nfunction assertPendingCanReplace(\n existing: EditableArtifactPendingTransaction | undefined,\n next: EditableArtifactPendingTransaction,\n): void {\n if (existing !== undefined && !pendingTransactionsEqual(existing, next)) {\n throw new EditableArtifactStorageConflictError(\n `pending transaction ${next.clientTransactionId} was reused with different immutable content`,\n );\n }\n}\n\nfunction pendingTransactionsEqual(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): boolean {\n return (\n left.artifactId === right.artifactId &&\n left.modality === right.modality &&\n left.clientTransactionId === right.clientTransactionId &&\n left.requestHash === right.requestHash &&\n left.protocolVersion === right.protocolVersion &&\n left.modelSchemaVersion === right.modelSchemaVersion &&\n left.commandVersion === right.commandVersion &&\n left.replicaId === right.replicaId &&\n left.replicaCounter === right.replicaCounter &&\n left.previousLocalTransactionId === right.previousLocalTransactionId &&\n left.observedHeadSequence === right.observedHeadSequence &&\n left.createdAt === right.createdAt &&\n (left.modality === \"spreadsheet\" && right.modality === \"spreadsheet\"\n ? frontiersEqual(left.causalBase, right.causalBase) &&\n identifiersEqual(left.selectiveUndoTargets, right.selectiveUndoTargets)\n : left.modality !== \"spreadsheet\" &&\n right.modality !== \"spreadsheet\" &&\n left.observedNativeRevision === right.observedNativeRevision) &&\n bytesEqual(left.commandBytes, right.commandBytes) &&\n bytesEqual(left.intentBytes, right.intentBytes)\n );\n}\n\nfunction committedTransactionsEqual(\n left: EditableArtifactCommittedTransaction,\n right: EditableArtifactCommittedTransaction,\n): boolean {\n return (\n left.artifactId === right.artifactId &&\n left.modality === right.modality &&\n left.transactionId === right.transactionId &&\n left.requestHash === right.requestHash &&\n left.startSequence === right.startSequence &&\n left.endSequence === right.endSequence &&\n left.priorStateHash === right.priorStateHash &&\n left.stateHash === right.stateHash &&\n (left.modality === \"spreadsheet\" && right.modality === \"spreadsheet\"\n ? left.protocolVersion === right.protocolVersion &&\n frontiersEqual(left.causalFrontier, right.causalFrontier)\n : left.modality !== \"spreadsheet\" &&\n right.modality !== \"spreadsheet\" &&\n left.priorNativeRevision === right.priorNativeRevision &&\n left.nativeRevision === right.nativeRevision &&\n left.commitProtocolVersion === right.commitProtocolVersion) &&\n bytesEqual(left.committedTransactionBytes, right.committedTransactionBytes)\n );\n}\n\nfunction frontiersEqual(\n left: EditableArtifactCausalFrontier,\n right: EditableArtifactCausalFrontier,\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n for (let index = 0; index < left.byteLength; index += 1) {\n if (left[index] !== right[index]) return false;\n }\n return true;\n}\n\nfunction comparePendingTransactions(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): number {\n if (left.replicaCounter !== right.replicaCounter) {\n return left.replicaCounter < right.replicaCounter ? -1 : 1;\n }\n if (left.createdAt !== right.createdAt) return left.createdAt < right.createdAt ? -1 : 1;\n if (left.clientTransactionId === right.clientTransactionId) return 0;\n return left.clientTransactionId < right.clientTransactionId ? -1 : 1;\n}\n\nfunction assertScope(scope: EditableArtifactStorageScope): void {\n assertNonEmpty(scope.namespace, \"storage namespace\");\n assertStableId(scope.artifactId, \"storage artifactId\");\n assertModality(scope.modality, \"storage modality\");\n}\n\nfunction assertModality(value: unknown, path: string): asserts value is EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(`${path} must be document, spreadsheet, or presentation`);\n }\n}\n\nfunction assertScopeMatchesArtifact(\n scope: EditableArtifactStorageScope,\n artifactId: EditableArtifactId,\n): void {\n assertScope(scope);\n if (scope.artifactId !== artifactId) {\n throw new TypeError(\"storage scope artifactId does not match the retained value\");\n }\n}\n\nfunction assertScopeModality(\n scope: EditableArtifactStorageScope,\n modality: EditableArtifactModality,\n): void {\n if (scope.modality !== modality) {\n throw new TypeError(\"storage scope modality does not match the retained value\");\n }\n}\n\nfunction normalizeStoredSnapshot(\n snapshot: Omit<IndexedDbStoredSnapshot, \"namespace\">,\n modality: EditableArtifactModality,\n): EditableArtifactSnapshot {\n const retainedModality =\n (snapshot as { modality?: EditableArtifactModality }).modality ?? \"spreadsheet\";\n if (retainedModality !== modality) {\n throw new TypeError(\"retained snapshot modality does not match its storage scope\");\n }\n return { ...snapshot, modality } as EditableArtifactSnapshot;\n}\n\nfunction normalizeStoredCommitted(\n transaction: Omit<IndexedDbCommittedTransaction, \"namespace\">,\n modality: EditableArtifactModality,\n): EditableArtifactCommittedTransaction {\n const retainedModality =\n (transaction as { modality?: EditableArtifactModality }).modality ?? \"spreadsheet\";\n if (retainedModality !== modality) {\n throw new TypeError(\"retained transaction modality does not match its storage scope\");\n }\n return { ...transaction, modality } as EditableArtifactCommittedTransaction;\n}\n\nfunction normalizeStoredPending(\n transaction: Omit<IndexedDbPendingTransaction, \"namespace\" | \"transactionId\">,\n modality: EditableArtifactModality,\n): EditableArtifactPendingTransaction {\n const retainedModality =\n (transaction as { modality?: EditableArtifactModality }).modality ?? \"spreadsheet\";\n if (retainedModality !== modality) {\n throw new TypeError(\"retained pending modality does not match its storage scope\");\n }\n return { ...transaction, modality } as EditableArtifactPendingTransaction;\n}\n\nfunction scopeKey(scope: EditableArtifactStorageScope): [string, EditableArtifactId] {\n return [scope.namespace, scope.artifactId];\n}\n\nfunction getOrCreate<OuterKey, InnerKey, Value>(\n outer: Map<OuterKey, Map<InnerKey, Value>>,\n key: OuterKey,\n): Map<InnerKey, Value> {\n const existing = outer.get(key);\n if (existing !== undefined) return existing;\n const created = new Map<InnerKey, Value>();\n outer.set(key, created);\n return created;\n}\n\nfunction assertFrontier(frontier: EditableArtifactCausalFrontier, path: string): void {\n if (!Array.isArray(frontier)) throw new TypeError(`${path} must be an array`);\n let previous: string | null = null;\n for (const [index, entry] of frontier.entries()) {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n Array.isArray(entry) ||\n Object.getPrototypeOf(entry) !== Object.prototype\n ) {\n throw new TypeError(`${path}[${index}] must be a plain object`);\n }\n assertReplicaId(entry.replicaId, `${path}[${index}].replicaId`);\n assertPositiveInteger(entry.counter, `${path}[${index}].counter`);\n if (previous !== null && previous >= entry.replicaId) {\n throw new TypeError(`${path} must be strictly sorted and duplicate-free`);\n }\n previous = entry.replicaId;\n }\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n return frontier.map((entry) => ({ ...entry }));\n}\n\nfunction assertIdentifiers(values: readonly string[], path: string): void {\n if (!Array.isArray(values)) throw new TypeError(`${path} must be an array`);\n let previous: string | null = null;\n for (const value of values) {\n assertStableId(value, path);\n if (previous !== null && previous >= value) {\n throw new TypeError(`${path} must be strictly sorted and duplicate-free`);\n }\n previous = value;\n }\n}\n\nfunction identifiersEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction assertBytes(value: Uint8Array, path: string): void {\n if (!(value instanceof Uint8Array)) throw new TypeError(`${path} must be a Uint8Array`);\n}\n\nfunction assertSequence(value: number, path: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${path} must be a non-negative safe integer`);\n }\n}\n\nfunction assertPositiveInteger(value: number, path: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${path} must be a positive safe integer`);\n }\n}\n\nfunction assertPositiveU16(value: number, path: string): void {\n assertPositiveInteger(value, path);\n if (value > 0xffff) throw new TypeError(`${path} must fit an unsigned 16-bit integer`);\n}\n\nfunction assertTimestamp(value: number, path: string): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new TypeError(`${path} must be a non-negative finite number`);\n }\n}\n\nfunction assertNonEmpty(\n value: unknown,\n path: string,\n maximumCodeUnits = 4_096,\n): asserts value is string {\n if (typeof value !== \"string\") throw new TypeError(`${path} must be a string`);\n if (value.length === 0) throw new TypeError(`${path} must not be empty`);\n if (value.length > maximumCodeUnits) {\n throw new RangeError(`${path} exceeds its string bound`);\n }\n}\n\nfunction assertStableId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^(?!0{32}$)[a-f0-9]{32}$/u.test(value)) {\n throw new TypeError(`${path} must be 32 lowercase nonzero hex characters`);\n }\n}\n\nfunction assertReplicaId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^(?!0{16}$)[a-f0-9]{16}$/u.test(value)) {\n throw new TypeError(`${path} must be 16 lowercase nonzero hex characters`);\n }\n}\n\nfunction assertClientTransactionId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^[A-Za-z0-9._:-]{1,200}$/u.test(value)) {\n throw new TypeError(`${path} must be a canonical portable transaction id`);\n }\n}\n\nfunction assertSha256(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^sha256:[a-f0-9]{64}$/u.test(value)) {\n throw new TypeError(`${path} must be a canonical sha256 digest`);\n }\n}\n\nfunction openDatabase(factory: IDBFactory, databaseName: string): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = factory.open(databaseName, DATABASE_VERSION);\n let rejectedWhileBlocked = false;\n request.onerror = () => reject(request.error ?? new Error(\"failed to open artifact storage\"));\n request.onblocked = () => {\n rejectedWhileBlocked = true;\n reject(new Error(\"artifact storage upgrade is blocked\"));\n };\n request.onupgradeneeded = (event) => {\n const database = request.result;\n if (event.oldVersion < 2) {\n // V1 records had no principal partition. They cannot be attributed\n // safely, so discard this rebuildable cache instead of guessing scope.\n for (const name of [REPLICA_HEAD_STORE, SNAPSHOT_STORE, PENDING_STORE, COMMITTED_STORE]) {\n if (database.objectStoreNames.contains(name)) database.deleteObjectStore(name);\n }\n } else if (event.oldVersion < 3) {\n // V2 heads did not retain constant-time journal accounting. Confirmed\n // state is reconstructible, so rebuild it while preserving the pending WAL.\n for (const name of [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE]) {\n if (database.objectStoreNames.contains(name)) database.deleteObjectStore(name);\n }\n }\n if (!database.objectStoreNames.contains(REPLICA_HEAD_STORE)) {\n database.createObjectStore(REPLICA_HEAD_STORE, {\n keyPath: [\"namespace\", \"artifactId\"],\n });\n }\n if (!database.objectStoreNames.contains(SNAPSHOT_STORE)) {\n database.createObjectStore(SNAPSHOT_STORE, {\n keyPath: [\"namespace\", \"artifactId\"],\n });\n }\n if (!database.objectStoreNames.contains(COMMITTED_STORE)) {\n const committed = database.createObjectStore(COMMITTED_STORE, {\n keyPath: [\"namespace\", \"artifactId\", \"startSequence\"],\n });\n committed.createIndex(COMMITTED_BY_SCOPE_INDEX, [\"namespace\", \"artifactId\"], {\n unique: false,\n });\n }\n if (!database.objectStoreNames.contains(PENDING_STORE)) {\n const pending = database.createObjectStore(PENDING_STORE, {\n keyPath: [\"namespace\", \"artifactId\", \"transactionId\"],\n });\n pending.createIndex(PENDING_BY_SCOPE_INDEX, [\"namespace\", \"artifactId\"], {\n unique: false,\n });\n }\n };\n request.onsuccess = () => {\n if (rejectedWhileBlocked) request.result.close();\n else resolve(request.result);\n };\n });\n}\n\nfunction replaceIndexedDbReplica(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readwrite\",\n );\n const headStore = transaction.objectStore(REPLICA_HEAD_STORE);\n const snapshotStore = transaction.objectStore(SNAPSHOT_STORE);\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n\n const headRead = headStore.get(scopeKey(scope));\n headRead.onerror = () => {\n semanticError = headRead.error ?? new Error(\"artifact replica head lookup failed\");\n };\n headRead.onsuccess = () => {\n try {\n const retained = headRead.result as IndexedDbStoredReplicaHead | undefined;\n if (\n retained !== undefined &&\n (retained.namespace !== scope.namespace || retained.artifactId !== scope.artifactId)\n ) {\n throw new TypeError(\"retained replica head does not match its storage key\");\n }\n assertReplacementCanApply(retained, expectedHead, replica.artifactId);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n return;\n }\n deleteIndexedDbScope(\n committedStore.index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(scope),\n () => {\n try {\n for (const committed of replica.tail) {\n const stored: IndexedDbCommittedTransaction = {\n ...committed,\n namespace: scope.namespace,\n };\n committedStore.add(stored);\n }\n const head: IndexedDbStoredReplicaHead = {\n namespace: scope.namespace,\n artifactId: replica.artifactId,\n cursor: replica.cursor,\n stateHash: replica.stateHash,\n updatedAt: replica.updatedAt,\n modality: replica.modality,\n ...(replica.snapshot.modality === \"spreadsheet\"\n ? { protocolVersion: replica.snapshot.protocolVersion }\n : {}),\n tailCount: replica.tail.length,\n tailBytes: committedTailBytes(replica.tail),\n };\n const snapshot: IndexedDbStoredSnapshot = {\n ...replica.snapshot,\n namespace: scope.namespace,\n };\n snapshotStore.put(snapshot);\n headStore.put(head);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n },\n (error) => {\n semanticError = error;\n transaction.abort();\n },\n );\n };\n });\n}\n\nfunction appendIndexedDbCommitted(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction([REPLICA_HEAD_STORE, COMMITTED_STORE], \"readwrite\");\n const headStore = transaction.objectStore(REPLICA_HEAD_STORE);\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n\n const headRead = headStore.get(scopeKey(scope));\n headRead.onerror = () => {\n semanticError = headRead.error ?? new Error(\"artifact replica head lookup failed\");\n };\n headRead.onsuccess = () => {\n try {\n const head = headRead.result as IndexedDbStoredReplicaHead | undefined;\n if (head === undefined) throw missingReplicaConflict(scope.artifactId);\n if (head.namespace !== scope.namespace || head.artifactId !== scope.artifactId) {\n throw new TypeError(\"retained replica does not match its storage key\");\n }\n assertSequence(head.tailCount, \"retained head tailCount\");\n assertSequence(head.tailBytes, \"retained head tailBytes\");\n if (\n head.tailCount > HARD_MAX_COMMITTED_TRANSACTIONS ||\n head.tailBytes > HARD_MAX_COMMITTED_BYTES\n ) {\n throw new RangeError(\"retained head journal accounting exceeds its hard bound\");\n }\n if (head.cursor !== input.expectedCursor || head.stateHash !== input.expectedStateHash) {\n const retainedRead = committedStore.get([\n scope.namespace,\n scope.artifactId,\n input.transaction.startSequence,\n ]);\n retainedRead.onerror = () => {\n semanticError =\n retainedRead.error ?? new Error(\"artifact committed transaction lookup failed\");\n };\n retainedRead.onsuccess = () => {\n try {\n const retained = retainedRead.result as IndexedDbCommittedTransaction | undefined;\n if (\n head.cursor >= input.transaction.endSequence &&\n retained !== undefined &&\n retained.namespace === scope.namespace &&\n committedTransactionsEqual(retained, input.transaction)\n ) {\n return;\n }\n assertAppendCanApply(head, input);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n };\n return;\n }\n assertAppendCanApply(head, input);\n if (head.tailCount >= HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"committed transaction store exceeds its count bound\");\n }\n const nextTailBytes = checkedAggregateBytes(\n head.tailBytes,\n committedStorageBytes(input.transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"committed transaction store\",\n );\n const committed: IndexedDbCommittedTransaction = {\n ...input.transaction,\n namespace: scope.namespace,\n };\n committedStore.add(committed);\n const nextHead: IndexedDbStoredReplicaHead = {\n ...head,\n cursor: input.transaction.endSequence,\n stateHash: input.transaction.stateHash,\n updatedAt: input.updatedAt,\n tailCount: head.tailCount + 1,\n tailBytes: nextTailBytes,\n };\n headStore.put(nextHead);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n };\n });\n}\n\nfunction clearIndexedDbReplica(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readwrite\",\n );\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n transaction.objectStore(REPLICA_HEAD_STORE).delete(scopeKey(scope));\n transaction.objectStore(SNAPSHOT_STORE).delete(scopeKey(scope));\n deleteIndexedDbScope(\n committedStore.index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(scope),\n () => undefined,\n (error) => {\n semanticError = error;\n transaction.abort();\n },\n );\n });\n}\n\nfunction deleteIndexedDbScope(\n index: IDBIndex,\n query: IDBValidKey,\n onComplete: () => void,\n onError: (error: unknown) => void,\n): void {\n const cursorRequest = index.openKeyCursor(query);\n cursorRequest.onerror = () =>\n onError(cursorRequest.error ?? new Error(\"artifact storage delete cursor failed\"));\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor === null) {\n onComplete();\n return;\n }\n try {\n // Queue deletion and cursor advancement from the cursor callback while\n // the read/write transaction is definitely active. Waiting for a\n // separate delete callback before `continue()` is not portable across\n // real browser IndexedDB implementations. A key-only cursor avoids\n // deserializing the value but must delete through the object store.\n const deletion = index.objectStore.delete(cursor.primaryKey);\n deletion.onerror = () =>\n onError(deletion.error ?? new Error(\"artifact storage journal delete failed\"));\n cursor.continue();\n } catch (error) {\n onError(error);\n }\n };\n}\n\nfunction rejectTransaction(\n reject: (reason?: unknown) => void,\n transaction: IDBTransaction,\n semanticError?: unknown,\n): void {\n reject(\n semanticError ??\n transaction.error ??\n new Error(\"artifact storage transaction failed or was aborted\"),\n );\n}\n\nfunction requestResult<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error(\"artifact storage request failed\"));\n });\n}\n\nfunction transactionResult(transaction: IDBTransaction): Promise<void> {\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onabort = () =>\n reject(transaction.error ?? new Error(\"artifact storage transaction was aborted\"));\n });\n}\n\nfunction readBoundedIndexValues<T>(\n transaction: IDBTransaction,\n index: IDBIndex,\n query: IDBValidKey,\n maximumCount: number,\n maximumBytes: number,\n measure: (value: T) => number,\n): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const values: T[] = [];\n let aggregateBytes = 0;\n let settled = false;\n const request = index.openCursor(query);\n const fail = (error: unknown): void => {\n if (settled) return;\n settled = true;\n try {\n transaction.abort();\n } catch {\n // The transaction may already be aborting because the cursor failed.\n }\n reject(error);\n };\n request.onerror = () => fail(request.error ?? new Error(\"artifact storage cursor failed\"));\n request.onsuccess = () => {\n if (settled) return;\n const cursor = request.result;\n if (cursor === null) {\n settled = true;\n resolve(values);\n return;\n }\n try {\n const value = cursor.value as T;\n if (values.length >= maximumCount) {\n throw new RangeError(\"artifact storage cursor exceeds its count bound\");\n }\n const measured = measure(value);\n if (!Number.isSafeInteger(measured) || measured < 0) {\n throw new TypeError(\"artifact storage cursor returned an invalid byte measurement\");\n }\n aggregateBytes += measured;\n if (!Number.isSafeInteger(aggregateBytes) || aggregateBytes > maximumBytes) {\n throw new RangeError(\"artifact storage cursor exceeds its byte bound\");\n }\n values.push(value);\n cursor.continue();\n } catch (error) {\n fail(error);\n }\n };\n });\n}\n\nfunction putIndexedDbPending(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n value: IndexedDbPendingTransaction,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(PENDING_STORE, \"readwrite\", {\n durability: \"strict\",\n });\n const store = transaction.objectStore(PENDING_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () =>\n reject(\n semanticError ?? transaction.error ?? new Error(\"artifact pending transaction was aborted\"),\n );\n\n const abort = (error: unknown): void => {\n semanticError ??= error;\n try {\n transaction.abort();\n } catch {\n // A failed request may already be aborting the transaction.\n }\n };\n\n const read = store.get([scope.namespace, scope.artifactId, value.transactionId]);\n read.onerror = () => {\n semanticError = read.error ?? new Error(\"artifact pending lookup failed\");\n };\n read.onsuccess = () => {\n try {\n const existing = read.result as IndexedDbPendingTransaction | undefined;\n assertPendingCanReplace(existing, value);\n if (existing !== undefined) return;\n } catch (error) {\n abort(error);\n return;\n }\n\n let retainedCount = 0;\n let aggregateBytes: number;\n try {\n aggregateBytes = pendingStorageBytes(value);\n if (aggregateBytes > HARD_MAX_PENDING_BYTES) {\n throw new RangeError(\"pending transaction store exceeds its byte bound\");\n }\n } catch (error) {\n abort(error);\n return;\n }\n\n const cursorRequest = store.index(PENDING_BY_SCOPE_INDEX).openCursor(scopeKey(scope));\n cursorRequest.onerror = () => {\n semanticError = cursorRequest.error ?? new Error(\"artifact pending bound cursor failed\");\n };\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor === null) {\n store.add(value);\n return;\n }\n try {\n const retained = cursor.value as IndexedDbPendingTransaction;\n if (retained.namespace !== scope.namespace || retained.artifactId !== scope.artifactId) {\n throw new TypeError(\"retained pending transaction does not match its index key\");\n }\n assertPendingTransaction(retained);\n retainedCount += 1;\n if (retainedCount >= HARD_MAX_PENDING_TRANSACTIONS) {\n throw new RangeError(\"pending transaction store exceeds its count bound\");\n }\n aggregateBytes = checkedAggregateBytes(\n aggregateBytes,\n pendingStorageBytes(retained),\n HARD_MAX_PENDING_BYTES,\n \"pending transaction store\",\n );\n cursor.continue();\n } catch (error) {\n abort(error);\n }\n };\n };\n });\n}\n","import { DOCUMENT_ARTIFACT_COMMAND_VERSION } from \"@opengeni/contracts/document-artifact-commands\";\nimport { PRESENTATION_ARTIFACT_COMMAND_VERSION } from \"@opengeni/contracts/presentation-artifact-commands\";\nimport { SPREADSHEET_ARTIFACT_COMMAND_VERSION } from \"@opengeni/contracts/spreadsheet-artifact-commands\";\n\nimport type { EditableArtifactCacheAuthority } from \"./controller\";\nimport {\n createEditableArtifactHttpLiveTransport,\n type CreateEditableArtifactHttpLiveTransportOptions,\n} from \"./http-live-transport\";\nimport { createEditableArtifactSession, type EditableArtifactSession } from \"./session\";\nimport type { EditableArtifactStoragePort } from \"./storage\";\nimport type { EditableArtifactModality } from \"./types\";\nimport {\n createBrowserEditableArtifactWorkerKernel,\n type CreateBrowserEditableArtifactWorkerKernelOptions,\n} from \"./worker/browser-client\";\n\nexport type EditableArtifactBrowserRuntime = Omit<\n CreateBrowserEditableArtifactWorkerKernelOptions,\n \"modality\" | \"kernelVersion\" | \"protocolVersion\" | \"modelSchemaVersion\" | \"commandVersion\"\n> &\n Readonly<{\n /** Exact native/WASM build identity admitted by the API. */\n kernelVersion: string;\n modelSchemaVersion: number;\n protocolVersion?: number;\n commandVersion: number;\n }>;\n\nexport type CreateBrowserEditableArtifactSessionOptions = Readonly<{\n baseUrl: string | URL;\n workspaceId: string;\n artifact: Readonly<{ id: string; modality: EditableArtifactModality }>;\n /** Exact login/grant partition; rotate authorizationEpoch on authority changes. */\n storageAuthority: EditableArtifactCacheAuthority;\n runtime: EditableArtifactBrowserRuntime;\n transport?: Omit<\n CreateEditableArtifactHttpLiveTransportOptions,\n \"baseUrl\" | \"workspaceId\" | \"protocolVersion\" | \"kernelVersion\" | \"modelSchemaVersion\"\n >;\n storage?: EditableArtifactStoragePort;\n /** Reuse the replica used to create the artifact when opening it immediately. */\n replicaId?: string;\n}>;\n\n/**\n * One production browser composition point: verified WASM Worker, durable WAL,\n * authenticated HTTP/WebSocket transport, replay, and modality projections.\n */\nexport function createBrowserEditableArtifactSession(\n options: CreateBrowserEditableArtifactSessionOptions,\n): EditableArtifactSession {\n const baseUrl = canonicalBaseUrl(options.baseUrl);\n const workspaceId = boundedIdentity(options.workspaceId, \"workspaceId\");\n assertCacheAuthority(options.storageAuthority, baseUrl, workspaceId);\n const protocolVersion = positiveVersion(options.runtime.protocolVersion ?? 1, \"protocolVersion\");\n const modelSchemaVersion = positiveVersion(\n options.runtime.modelSchemaVersion,\n \"modelSchemaVersion\",\n );\n const kernelVersion = boundedIdentity(options.runtime.kernelVersion, \"kernelVersion\", 512);\n const commandVersion = positiveVersion(options.runtime.commandVersion, \"commandVersion\");\n const expectedCommandVersion = commandVersionFor(options.artifact.modality);\n if (commandVersion !== expectedCommandVersion) {\n throw new TypeError(\n `commandVersion ${commandVersion} is incompatible with ${options.artifact.modality} ${expectedCommandVersion}`,\n );\n }\n const {\n kernelVersion: _kernelVersion,\n modelSchemaVersion: _modelSchemaVersion,\n protocolVersion: _protocolVersion,\n commandVersion: _commandVersion,\n ...workerOptions\n } = options.runtime;\n const worker = createBrowserEditableArtifactWorkerKernel({\n ...workerOptions,\n modality: options.artifact.modality,\n kernelVersion,\n protocolVersion,\n modelSchemaVersion,\n commandVersion,\n });\n const replicaId = options.replicaId;\n try {\n const transport = createEditableArtifactHttpLiveTransport({\n ...options.transport,\n baseUrl,\n workspaceId,\n protocolVersion,\n kernelVersion,\n modelSchemaVersion,\n });\n return createEditableArtifactSession({\n artifactId: options.artifact.id,\n modality: options.artifact.modality,\n storageAuthority: options.storageAuthority,\n transport,\n worker,\n ...(options.storage ? { storage: options.storage } : {}),\n kernelVersion,\n modelSchemaVersion,\n commandVersion,\n protocolVersion,\n ...(replicaId ? { writerReplicaIdFactory: () => replicaId } : {}),\n ownsWorker: true,\n });\n } catch (error) {\n void worker.dispose().catch(() => undefined);\n throw error;\n }\n}\n\n/** Generates the portable 64-bit nonzero replica identity used by create/open. */\nexport function createEditableArtifactReplicaId(): string {\n for (;;) {\n const value = [...crypto.getRandomValues(new Uint8Array(8))]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n if (value !== \"0000000000000000\") return value;\n }\n}\n\nfunction commandVersionFor(modality: EditableArtifactModality): number {\n switch (modality) {\n case \"spreadsheet\":\n return SPREADSHEET_ARTIFACT_COMMAND_VERSION;\n case \"document\":\n return DOCUMENT_ARTIFACT_COMMAND_VERSION;\n case \"presentation\":\n return PRESENTATION_ARTIFACT_COMMAND_VERSION;\n }\n}\n\nfunction canonicalBaseUrl(value: string | URL): URL {\n const url = new URL(value);\n if (url.username || url.password || url.search || url.hash) {\n throw new TypeError(\"baseUrl must not contain credentials, query, or fragment\");\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new TypeError(\"baseUrl must use HTTP or HTTPS\");\n }\n return url;\n}\n\nfunction assertCacheAuthority(\n authority: EditableArtifactCacheAuthority,\n baseUrl: URL,\n workspaceId: string,\n): void {\n if (new URL(authority.deploymentOrigin).origin !== baseUrl.origin) {\n throw new TypeError(\"storageAuthority deployment origin does not match baseUrl\");\n }\n if (authority.workspaceId !== workspaceId) {\n throw new TypeError(\"storageAuthority workspace does not match workspaceId\");\n }\n}\n\nfunction boundedIdentity(value: string, label: string, maximum = 256): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.trim() !== value ||\n new TextEncoder().encode(value).byteLength > maximum\n ) {\n throw new TypeError(`${label} is malformed`);\n }\n return value;\n}\n\nfunction positiveVersion(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 1 || value > 65_535) {\n throw new TypeError(`${label} must be a positive 16-bit integer`);\n }\n return value;\n}\n","import {\n decodeEditableArtifactLiveServerWireFrame,\n encodeEditableArtifactLiveAppliedWireFrame,\n encodeEditableArtifactLiveMutationWireFrame,\n encodeEditableArtifactLiveOpenWireFrame,\n type EditableArtifactLiveOpenWireFrame,\n type EditableArtifactLiveCommittedTransaction as ContractCommittedTransaction,\n type EditableArtifactLiveServerFrame,\n} from \"@opengeni/contracts/editable-artifact-live\";\nimport {\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { MAX_COMMITTED_TRANSACTION_BYTES } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { EditableArtifactSyncError, EditableArtifactTransportError } from \"./errors\";\nimport { OPENGENI_API_CONTRACT_HEADER, OPENGENI_API_CONTRACT_REVISION } from \"../types\";\nimport type {\n EditableArtifactBootstrap,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactLiveClose,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactReplayPage,\n EditableArtifactSnapshot,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n} from \"./types\";\n\nconst LIVE_PATH = \"/v1/editable-artifacts/live\";\nconst LIVE_SUBPROTOCOL = \"opengeni-artifact-v1\";\nconst DEFAULT_MAX_SERVER_FRAME_BYTES = 8 * 1024 * 1024 + 64 * 1024;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_HANDSHAKE_TIMEOUT_MS = 20_000;\nconst DEFAULT_SUBMIT_TIMEOUT_MS = 30_000;\nconst MAX_TICKET_RESPONSE_BYTES = 16 * 1024;\nconst SHA256 = /^sha256:[0-9a-f]{64}$/u;\nconst STABLE_ID = /^(?!0{32}$)[0-9a-f]{32}$/u;\nconst REPLICA_ID = /^(?!0{16}$)[0-9a-f]{16}$/u;\n\nexport type EditableArtifactWebSocketMessageEvent = Readonly<{ data: unknown }>;\nexport type EditableArtifactWebSocketCloseEvent = Readonly<{\n code?: number;\n reason?: string;\n}>;\n\nexport type EditableArtifactWebSocketLike = {\n binaryType: string;\n readonly protocol: string;\n readonly readyState: number;\n send(data: Uint8Array | ArrayBuffer): void;\n close(code?: number, reason?: string): void;\n addEventListener(type: \"open\", listener: () => void): void;\n addEventListener(\n type: \"message\",\n listener: (event: EditableArtifactWebSocketMessageEvent) => void,\n ): void;\n addEventListener(type: \"error\", listener: () => void): void;\n addEventListener(\n type: \"close\",\n listener: (event: EditableArtifactWebSocketCloseEvent) => void,\n ): void;\n removeEventListener(type: \"open\", listener: () => void): void;\n removeEventListener(\n type: \"message\",\n listener: (event: EditableArtifactWebSocketMessageEvent) => void,\n ): void;\n removeEventListener(type: \"error\", listener: () => void): void;\n removeEventListener(\n type: \"close\",\n listener: (event: EditableArtifactWebSocketCloseEvent) => void,\n ): void;\n};\n\nexport type CreateEditableArtifactHttpLiveTransportOptions = Readonly<{\n baseUrl: string | URL;\n workspaceId: string;\n protocolVersion: number;\n kernelVersion: string;\n modelSchemaVersion: number;\n apiKey?: string;\n headers?: Readonly<Record<string, string>> | (() => Readonly<Record<string, string>>);\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n webSocketUrl?: string | URL;\n webSocketFactory?: (url: string, protocol: string) => EditableArtifactWebSocketLike;\n allowInsecureDevelopmentTransport?: boolean;\n maximumServerFrameBytes?: number;\n maximumSnapshotBytes?: number;\n handshakeTimeoutMs?: number;\n submitTimeoutMs?: number;\n}>;\n\n/**\n * Production HTTP + authenticated binary WebSocket transport. The one-use\n * ticket is sent only inside the first OGALV frame, never in the socket URL.\n */\nexport function createEditableArtifactHttpLiveTransport(\n options: CreateEditableArtifactHttpLiveTransportOptions,\n): EditableArtifactSyncTransport {\n return new HttpLiveTransport(options);\n}\n\nclass HttpLiveTransport implements EditableArtifactSyncTransport {\n private readonly baseUrl: URL;\n private readonly socketUrl: URL;\n private readonly workspaceId: string;\n private readonly protocolVersion: number;\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly apiKey: string | undefined;\n private readonly headerSource: CreateEditableArtifactHttpLiveTransportOptions[\"headers\"];\n private readonly credentials: RequestCredentials;\n private readonly fetchImpl: typeof fetch;\n private readonly webSocketFactory: NonNullable<\n CreateEditableArtifactHttpLiveTransportOptions[\"webSocketFactory\"]\n >;\n private readonly maximumServerFrameBytes: number;\n private readonly maximumSnapshotBytes: number;\n private readonly handshakeTimeoutMs: number;\n private readonly submitTimeoutMs: number;\n\n constructor(options: CreateEditableArtifactHttpLiveTransportOptions) {\n this.baseUrl = transportBaseUrl(options.baseUrl);\n this.socketUrl = socketUrl(options.webSocketUrl, this.baseUrl);\n const insecure = options.allowInsecureDevelopmentTransport ?? false;\n requireTransportSecurity(this.baseUrl, this.socketUrl, insecure);\n this.workspaceId = boundedString(options.workspaceId, \"workspaceId\", 256);\n this.protocolVersion = positiveU16(options.protocolVersion, \"protocolVersion\");\n this.kernelVersion = boundedString(options.kernelVersion, \"kernelVersion\", 512);\n this.modelSchemaVersion = positiveU16(options.modelSchemaVersion, \"modelSchemaVersion\");\n this.apiKey = options.apiKey;\n if (this.apiKey !== undefined) boundedString(this.apiKey, \"apiKey\", 16 * 1024);\n this.headerSource = options.headers;\n this.credentials = options.credentials ?? \"same-origin\";\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.webSocketFactory = options.webSocketFactory ?? defaultWebSocketFactory;\n this.maximumServerFrameBytes = positiveBounded(\n options.maximumServerFrameBytes ?? DEFAULT_MAX_SERVER_FRAME_BYTES,\n 128 * 1024 * 1024,\n \"maximumServerFrameBytes\",\n );\n this.maximumSnapshotBytes = positiveBounded(\n options.maximumSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n \"maximumSnapshotBytes\",\n );\n this.handshakeTimeoutMs = positiveBounded(\n options.handshakeTimeoutMs ?? DEFAULT_HANDSHAKE_TIMEOUT_MS,\n 5 * 60_000,\n \"handshakeTimeoutMs\",\n );\n this.submitTimeoutMs = positiveBounded(\n options.submitTimeoutMs ?? DEFAULT_SUBMIT_TIMEOUT_MS,\n 5 * 60_000,\n \"submitTimeoutMs\",\n );\n }\n\n async mintTicket(input: {\n artifactId: string;\n replicaId: string;\n signal: AbortSignal;\n }): Promise<EditableArtifactSyncTicket> {\n requireStableId(input.artifactId, \"artifactId\");\n requireReplicaId(input.replicaId);\n input.signal.throwIfAborted();\n const url = childUrl(\n this.baseUrl,\n `/v1/workspaces/${encodeURIComponent(this.workspaceId)}/editable-artifacts/${encodeURIComponent(input.artifactId)}/live-ticket`,\n );\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"POST\",\n credentials: this.credentials,\n headers: {\n ...this.headers(),\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n replicaId: input.replicaId,\n protocolVersion: this.protocolVersion,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n }),\n signal: input.signal,\n });\n } catch (cause) {\n input.signal.throwIfAborted();\n throw new EditableArtifactTransportError(\"editable artifact ticket request failed\", {\n code: \"ticket_transport_error\",\n cause,\n });\n }\n if (!response.ok) {\n await response.body?.cancel(\"ticket request rejected\").catch(() => undefined);\n throw new EditableArtifactTransportError(\n `editable artifact ticket request failed with HTTP ${response.status}`,\n {\n code: response.status === 403 ? \"permission_changed\" : \"ticket_rejected\",\n retryable: response.status === 408 || response.status === 429 || response.status >= 500,\n },\n );\n }\n const value = await readBoundedJson(response, MAX_TICKET_RESPONSE_BYTES);\n return validateTicket(value, input.artifactId, input.replicaId, this.protocolVersion);\n }\n\n async openLive(input: {\n ticket: EditableArtifactSyncTicket;\n after: number;\n stateHash: string | null;\n resume:\n | { modality: \"spreadsheet\"; causalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; nativeRevision: number | null };\n requireSnapshot: boolean;\n signal: AbortSignal;\n onMessage: (message: EditableArtifactLiveMessage) => void;\n }): Promise<EditableArtifactLiveConnection> {\n if (input.resume.modality !== input.ticket.modality) {\n throw new TypeError(\"live resume modality does not match its ticket\");\n }\n if (\n input.resume.modality !== \"spreadsheet\" &&\n (input.stateHash === null) !== (input.resume.nativeRevision === null)\n ) {\n throw new TypeError(\n \"serialized live resume state hash and native revision must be present together\",\n );\n }\n const socket = this.webSocketFactory(this.socketUrl.href, LIVE_SUBPROTOCOL);\n const commonResume = {\n localCursor: input.stateHash === null ? null : safeSequence(input.after, \"after\"),\n localStateHash: input.stateHash,\n requireSnapshot: input.requireSnapshot || input.stateHash === null,\n } as const;\n const resume: EditableArtifactLiveOpenWireFrame[\"resume\"] =\n input.resume.modality === \"spreadsheet\"\n ? {\n ...commonResume,\n localCausalFrontier: cloneFrontier(input.resume.causalFrontier),\n }\n : {\n ...commonResume,\n modality: input.resume.modality,\n localNativeRevision: input.resume.nativeRevision,\n };\n const connection = new HttpLiveConnection({\n socket,\n ticket: input.ticket,\n resume,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n maximumServerFrameBytes: this.maximumServerFrameBytes,\n maximumSnapshotBytes: this.maximumSnapshotBytes,\n handshakeTimeoutMs: this.handshakeTimeoutMs,\n submitTimeoutMs: this.submitTimeoutMs,\n signal: input.signal,\n onMessage: input.onMessage,\n });\n await connection.ready();\n return connection;\n }\n\n private headers(): Readonly<Record<string, string>> {\n const supplied =\n typeof this.headerSource === \"function\" ? this.headerSource() : this.headerSource;\n return {\n ...(supplied ?? {}),\n [OPENGENI_API_CONTRACT_HEADER]: OPENGENI_API_CONTRACT_REVISION,\n ...(this.apiKey ? { authorization: `Bearer ${this.apiKey}` } : {}),\n };\n }\n}\n\ntype ConnectionInput = Readonly<{\n socket: EditableArtifactWebSocketLike;\n ticket: EditableArtifactSyncTicket;\n resume: EditableArtifactLiveOpenWireFrame[\"resume\"];\n kernelVersion: string;\n modelSchemaVersion: number;\n maximumServerFrameBytes: number;\n maximumSnapshotBytes: number;\n handshakeTimeoutMs: number;\n submitTimeoutMs: number;\n signal: AbortSignal;\n onMessage: (message: EditableArtifactLiveMessage) => void;\n}>;\n\ntype OmitEach<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\ntype SnapshotAssembly = {\n metadata: OmitEach<\n Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n \"bytes\" | \"offset\" | \"final\"\n >;\n bytes: Uint8Array;\n nextOffset: number;\n};\n\ntype PendingSubmission = {\n pending: EditableArtifactPendingTransaction;\n deferred: Deferred<EditableArtifactSubmitReceipt>;\n accepted: Extract<EditableArtifactLiveServerFrame, { type: \"mutationAccepted\" }> | null;\n timeout: ReturnType<typeof setTimeout>;\n sent: boolean;\n};\n\nclass HttpLiveConnection implements EditableArtifactLiveConnection {\n private readonly socket: EditableArtifactWebSocketLike;\n private readonly ticket: EditableArtifactSyncTicket;\n private readonly resume: EditableArtifactLiveOpenWireFrame[\"resume\"];\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly maximumServerFrameBytes: number;\n private readonly maximumSnapshotBytes: number;\n private readonly submitTimeoutMs: number;\n private readonly signal: AbortSignal;\n private readonly onMessage: (message: EditableArtifactLiveMessage) => void;\n private readonly readyDeferred = new Deferred<void>();\n private readonly closedDeferred = new Deferred<EditableArtifactLiveClose>();\n private readonly firstPostOpen = new Deferred<\n \"snapshot\" | \"transaction\" | \"barrier\" | \"resync\"\n >();\n private readonly snapshotDeferred = new Deferred<EditableArtifactSnapshot>();\n private readonly progressWaiters = new Set<Deferred<void>>();\n private readonly replayByStart = new Map<number, EditableArtifactCommittedTransaction>();\n private readonly transactionsById = new Map<string, EditableArtifactCommittedTransaction>();\n private readonly submissions = new Map<string, PendingSubmission>();\n private openFrame: Extract<EditableArtifactLiveServerFrame, { type: \"open\" }> | null = null;\n private snapshotAssembly: SnapshotAssembly | null = null;\n private snapshot: EditableArtifactSnapshot | null = null;\n private terminal: Error | null = null;\n private localClose = false;\n private bootstrapRead = false;\n private bootstrapDelivered = false;\n private messageTail: Promise<void> = Promise.resolve();\n private targetHead = 0;\n private barrierSequence: number | null = null;\n private handshakeTimer: ReturnType<typeof setTimeout>;\n\n constructor(input: ConnectionInput) {\n this.socket = input.socket;\n this.ticket = input.ticket;\n this.resume = input.resume;\n this.kernelVersion = input.kernelVersion;\n this.modelSchemaVersion = input.modelSchemaVersion;\n this.maximumServerFrameBytes = input.maximumServerFrameBytes;\n this.maximumSnapshotBytes = input.maximumSnapshotBytes;\n this.submitTimeoutMs = input.submitTimeoutMs;\n this.signal = input.signal;\n this.onMessage = input.onMessage;\n this.socket.binaryType = \"arraybuffer\";\n this.socket.addEventListener(\"open\", this.handleOpen);\n this.socket.addEventListener(\"message\", this.handleMessage);\n this.socket.addEventListener(\"error\", this.handleError);\n this.socket.addEventListener(\"close\", this.handleClose);\n this.signal.addEventListener(\"abort\", this.handleAbort, { once: true });\n this.handshakeTimer = setTimeout(() => {\n this.fail(new EditableArtifactTransportError(\"editable artifact live handshake timed out\"));\n }, input.handshakeTimeoutMs);\n }\n\n get streamEpoch(): string {\n return this.requireOpen().streamEpoch;\n }\n\n get limits(): EditableArtifactLiveLimits {\n const frame = this.requireOpen();\n return Object.freeze({\n maxClientFrameBytes: frame.maxClientFrameBytes,\n maxCommandBytes: frame.maxCommandBytes,\n maxIntentBytes: frame.maxIntentBytes,\n maxCommittedTransactionBytes: frame.maxCommittedTransactionBytes,\n maxSnapshotBytes: frame.maxSnapshotBytes,\n maxInFlightTransactions: frame.maxInFlightTransactions,\n maxInFlightBytes: frame.maxInFlightBytes,\n });\n }\n\n readonly closed = this.closedDeferred.promise;\n\n async ready(): Promise<void> {\n await abortable(this.readyDeferred.promise, this.signal);\n }\n\n async readBootstrap(input: {\n localCursor: number | null;\n localStateHash: string | null;\n resume:\n | { modality: \"spreadsheet\"; localCausalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; localNativeRevision: number | null };\n requireSnapshot: boolean;\n signal: AbortSignal;\n }): Promise<EditableArtifactBootstrap> {\n if (this.bootstrapRead) throw new TypeError(\"live bootstrap may only be read once\");\n this.bootstrapRead = true;\n const open = this.requireOpen();\n if (input.resume.modality !== this.ticket.modality) {\n throw new TypeError(\"bootstrap resume modality does not match its ticket\");\n }\n if (\n input.resume.modality !== \"spreadsheet\" &&\n ((input.localCursor === null) !== (input.localStateHash === null) ||\n (input.localStateHash === null) !== (input.resume.localNativeRevision === null))\n ) {\n throw new TypeError(\n \"serialized bootstrap cursor, state hash, and native revision must be present together\",\n );\n }\n const first = await abortable(this.firstPostOpen.promise, input.signal);\n if (first === \"resync\") {\n clearTimeout(this.handshakeTimer);\n throw new EditableArtifactSyncError(\"resync_required\", \"server requires a fresh snapshot\", {\n retryable: true,\n requiresSnapshot: true,\n });\n }\n let snapshot: EditableArtifactSnapshot | null = null;\n if (first === \"snapshot\")\n snapshot = await abortable(this.snapshotDeferred.promise, input.signal);\n if (input.requireSnapshot && snapshot === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"server omitted the required snapshot\",\n {\n requiresSnapshot: true,\n },\n );\n }\n const boundarySequence = snapshot?.sequence ?? input.localCursor;\n const boundaryStateHash = snapshot?.stateHash ?? input.localStateHash;\n if (boundarySequence === null || boundaryStateHash === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"live stream established no state boundary\",\n {\n requiresSnapshot: true,\n },\n );\n }\n if (boundarySequence > open.headSequence) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"local state is ahead of the live head\",\n {\n requiresSnapshot: true,\n },\n );\n }\n const commonBootstrap = {\n artifactId: this.ticket.artifactId,\n protocolVersion: this.ticket.protocolVersion,\n headSequence: boundarySequence,\n headStateHash: boundaryStateHash,\n kernelVersion: snapshot?.kernelVersion ?? this.kernelVersion,\n modelSchemaVersion: snapshot?.modelSchemaVersion ?? this.modelSchemaVersion,\n writable: open.writable,\n minimumReplaySequence: open.minimumReplaySequence,\n snapshot,\n resyncRequired: false,\n } as const;\n const bootstrap: EditableArtifactBootstrap =\n this.ticket.modality === \"spreadsheet\"\n ? {\n ...commonBootstrap,\n modality: \"spreadsheet\",\n headCausalFrontier: cloneFrontier(\n snapshot?.modality === \"spreadsheet\"\n ? snapshot.causalFrontier\n : input.resume.modality === \"spreadsheet\"\n ? input.resume.localCausalFrontier\n : [],\n ),\n }\n : {\n ...commonBootstrap,\n modality: this.ticket.modality,\n headNativeRevision: serializedBoundaryRevision(\n snapshot,\n input.resume,\n this.ticket.modality,\n ),\n };\n this.bootstrapDelivered = true;\n clearTimeout(this.handshakeTimer);\n return bootstrap;\n }\n\n async replay(input: {\n after: number;\n through: number;\n limit: number;\n signal: AbortSignal;\n }): Promise<EditableArtifactReplayPage> {\n const after = safeSequence(input.after, \"replay after\");\n const through = safeSequence(input.through, \"replay through\");\n const limit = positiveBounded(input.limit, 10_000, \"replay limit\");\n if (after >= through) {\n return {\n artifactId: this.ticket.artifactId,\n transactions: [],\n headSequence: this.targetHead,\n };\n }\n while (true) {\n this.throwIfTerminal();\n const transactions: EditableArtifactCommittedTransaction[] = [];\n let expected = after + 1;\n while (transactions.length < limit) {\n const transaction = this.replayByStart.get(expected);\n if (!transaction || transaction.endSequence > through) break;\n transactions.push(transaction);\n expected = transaction.endSequence + 1;\n }\n if (transactions.length > 0) {\n return {\n artifactId: this.ticket.artifactId,\n transactions: transactions.map(cloneCommitted),\n headSequence: this.targetHead,\n };\n }\n if (this.barrierSequence !== null && this.barrierSequence >= through) {\n throw new EditableArtifactSyncError(\n \"invalid_sequence\",\n `live stream omitted committed sequence ${after + 1}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n await this.waitForProgress(input.signal);\n }\n }\n\n async submit(input: {\n transaction: EditableArtifactPendingTransaction;\n signal: AbortSignal;\n }): Promise<EditableArtifactSubmitReceipt> {\n this.throwIfTerminal();\n const open = this.requireOpen();\n const pending = input.transaction;\n if (pending.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"pending transaction belongs to another artifact\");\n }\n if (pending.protocolVersion !== this.ticket.protocolVersion) {\n throw new EditableArtifactTransportError(\"pending protocol does not match live stream\", {\n code: \"unsupported\",\n retryable: false,\n });\n }\n if (\n pending.commandBytes.byteLength >\n Math.min(open.maxCommandBytes, EDITABLE_ARTIFACT_COMMAND_MAX_BYTES)\n ) {\n throw new EditableArtifactTransportError(\"pending command exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n if (\n pending.intentBytes.byteLength >\n Math.min(open.maxIntentBytes, EDITABLE_ARTIFACT_INTENT_MAX_BYTES)\n ) {\n throw new EditableArtifactTransportError(\"pending intent exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n if (hashEditableArtifactMutationIntentBytes(pending.intentBytes) !== pending.requestHash) {\n throw new TypeError(\"pending requestHash does not bind its exact OGATX bytes\");\n }\n if (this.submissions.has(pending.requestHash)) {\n throw new TypeError(\"pending request is already submitted on this stream\");\n }\n const frame = encodeEditableArtifactLiveMutationWireFrame({\n type: \"mutation\",\n protocolVersion: pending.protocolVersion,\n artifactId: pending.artifactId,\n streamEpoch: open.streamEpoch,\n requestHash: pending.requestHash,\n intentBytes: pending.intentBytes,\n });\n if (frame.byteLength > open.maxClientFrameBytes) {\n throw new EditableArtifactTransportError(\"pending frame exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n const deferred = new Deferred<EditableArtifactSubmitReceipt>();\n const submission: PendingSubmission = {\n pending,\n deferred,\n accepted: null,\n sent: false,\n timeout: setTimeout(() => {\n if (!this.submissions.delete(pending.requestHash)) return;\n deferred.reject(\n new EditableArtifactTransportError(\"pending mutation response timed out\", {\n code: \"submit_timeout\",\n outcomeUnknown: true,\n }),\n );\n this.close(\"submit_timeout\");\n }, this.submitTimeoutMs),\n };\n this.submissions.set(pending.requestHash, submission);\n try {\n input.signal.throwIfAborted();\n this.socket.send(frame);\n submission.sent = true;\n } catch (cause) {\n clearTimeout(submission.timeout);\n this.submissions.delete(pending.requestHash);\n input.signal.throwIfAborted();\n throw new EditableArtifactTransportError(\"pending mutation send failed\", {\n code: \"transport_error\",\n outcomeUnknown: true,\n cause,\n });\n }\n return await abortable(deferred.promise, input.signal);\n }\n\n async acknowledge(input: {\n sequence: number;\n stateHash: string;\n signal: AbortSignal;\n }): Promise<void> {\n this.throwIfTerminal();\n input.signal.throwIfAborted();\n const frame = encodeEditableArtifactLiveAppliedWireFrame({\n type: \"applied\",\n protocolVersion: this.ticket.protocolVersion,\n artifactId: this.ticket.artifactId,\n streamEpoch: this.streamEpoch,\n sequence: safeSequence(input.sequence, \"acknowledged sequence\"),\n stateHash: requireSha256(input.stateHash, \"acknowledged stateHash\"),\n });\n if (frame.byteLength > this.limits.maxClientFrameBytes) {\n throw new TypeError(\"acknowledgement exceeds negotiated live limit\");\n }\n try {\n this.socket.send(frame);\n } catch (cause) {\n throw new EditableArtifactTransportError(\"live acknowledgement send failed\", { cause });\n }\n for (const [start, transaction] of this.replayByStart) {\n if (transaction.endSequence <= input.sequence) this.replayByStart.delete(start);\n }\n }\n\n close(reason = \"closed\"): void {\n if (this.terminal) return;\n this.localClose = true;\n try {\n this.socket.close(1000, boundedCloseReason(reason));\n } finally {\n this.finish({ reason: \"closed\" });\n }\n }\n\n private readonly handleOpen = (): void => {\n if (this.signal.aborted) {\n this.close(\"aborted\");\n return;\n }\n try {\n if (this.socket.protocol !== LIVE_SUBPROTOCOL) {\n throw new EditableArtifactTransportError(\n \"editable artifact WebSocket did not negotiate the required subprotocol\",\n { code: \"protocol_mismatch\" },\n );\n }\n this.socket.send(\n encodeEditableArtifactLiveOpenWireFrame({\n type: \"open\",\n protocolVersion: this.ticket.protocolVersion,\n artifactId: this.ticket.artifactId,\n token: this.ticket.token,\n resume: this.resume,\n }),\n );\n } catch (cause) {\n this.fail(\n cause instanceof EditableArtifactTransportError\n ? cause\n : new EditableArtifactTransportError(\"live open frame send failed\", { cause }),\n );\n }\n };\n\n private readonly handleMessage = (event: EditableArtifactWebSocketMessageEvent): void => {\n this.messageTail = this.messageTail\n .then(async () => {\n const bytes = await binaryMessage(event.data, this.maximumServerFrameBytes);\n this.handleServerFrame(decodeEditableArtifactLiveServerWireFrame(bytes));\n })\n .catch((cause: unknown) => {\n this.fail(\n cause instanceof Error\n ? cause\n : new EditableArtifactTransportError(\"invalid live server frame\", { cause }),\n );\n });\n };\n\n private readonly handleError = (): void => {\n this.fail(new EditableArtifactTransportError(\"editable artifact WebSocket failed\"));\n };\n\n private readonly handleClose = (event: EditableArtifactWebSocketCloseEvent): void => {\n if (this.terminal) return;\n const reason = event.reason ?? \"transport_error\";\n if (RESYNC_CLOSE_REASONS.has(reason)) {\n this.onMessage({\n type: \"resync_required\",\n artifactId: this.ticket.artifactId,\n reason,\n });\n }\n this.finish({ reason: this.localClose ? \"closed\" : closeReason(reason) });\n };\n\n private readonly handleAbort = (): void => this.close(\"aborted\");\n\n private handleServerFrame(frame: EditableArtifactLiveServerFrame): void {\n if (this.terminal) return;\n if (this.openFrame === null) {\n if (frame.type !== \"open\") throw new TypeError(\"first live server frame must be open\");\n this.validateIdentity(frame);\n this.validateNegotiatedLimits(frame);\n this.openFrame = frame;\n this.targetHead = frame.headSequence;\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.headSequence,\n });\n this.readyDeferred.resolve();\n return;\n }\n if (frame.type === \"open\") throw new TypeError(\"live server sent a second open frame\");\n this.validateIdentity(frame);\n switch (frame.type) {\n case \"snapshot\":\n this.consumeSnapshot(frame);\n return;\n case \"transaction\": {\n if (frame.transaction.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"live transaction belongs to another artifact\");\n }\n if (transactionModality(frame.transaction) !== this.ticket.modality) {\n throw new TypeError(\"live transaction modality mismatch\");\n }\n if (\n (frame.transaction.modality === undefined ||\n frame.transaction.modality === \"spreadsheet\") &&\n frame.transaction.protocolVersion !== this.ticket.protocolVersion\n )\n throw new TypeError(\"live transaction protocol mismatch\");\n if (\n frame.transaction.committedTransactionBytes.byteLength >\n this.limits.maxCommittedTransactionBytes\n ) {\n throw new RangeError(\"live transaction exceeds negotiated committed byte limit\");\n }\n const transaction = cloneCommitted(frame.transaction);\n const existing = this.replayByStart.get(transaction.startSequence);\n if (existing && existing.transactionId !== transaction.transactionId) {\n throw new TypeError(\"live stream reused a committed sequence\");\n }\n this.replayByStart.set(transaction.startSequence, transaction);\n if (this.submissions.has(transaction.requestHash)) {\n this.transactionsById.set(transaction.transactionId, transaction);\n }\n this.targetHead = Math.max(this.targetHead, transaction.endSequence);\n this.firstPostOpen.resolve(\"transaction\");\n if (this.bootstrapDelivered) {\n this.onMessage({\n type: \"transaction.committed\",\n transaction: cloneCommitted(transaction),\n });\n }\n this.trySettleAccepted(transaction.transactionId);\n this.notifyProgress();\n return;\n }\n case \"barrier\":\n this.barrierSequence = frame.sequence;\n this.targetHead = Math.max(this.targetHead, frame.sequence);\n this.firstPostOpen.resolve(\"barrier\");\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.sequence,\n });\n this.notifyProgress();\n return;\n case \"watermark\":\n this.targetHead = Math.max(this.targetHead, frame.headSequence);\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.headSequence,\n });\n this.notifyProgress();\n return;\n case \"resyncRequired\":\n this.firstPostOpen.resolve(\"resync\");\n this.onMessage({\n type: \"resync_required\",\n artifactId: this.ticket.artifactId,\n reason: frame.reason,\n });\n this.notifyProgress();\n return;\n case \"authorizationChanged\":\n this.onMessage({\n type: \"authorization\",\n artifactId: this.ticket.artifactId,\n writable: frame.writable,\n });\n return;\n case \"mutationAccepted\":\n this.acceptMutation(frame);\n return;\n case \"mutationRejected\":\n this.rejectMutation(frame);\n return;\n case \"applied\":\n return;\n }\n }\n\n private consumeSnapshot(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n ): void {\n this.firstPostOpen.resolve(\"snapshot\");\n if (frame.totalBytes > Math.min(this.limits.maxSnapshotBytes, this.maximumSnapshotBytes)) {\n throw new RangeError(\"live snapshot exceeds negotiated browser limit\");\n }\n if (frame.protocolVersion !== this.ticket.protocolVersion) {\n throw new TypeError(\"live snapshot protocol mismatch\");\n }\n if (serverModality(frame.modality) !== this.ticket.modality) {\n throw new TypeError(\"live snapshot modality mismatch\");\n }\n if (this.snapshotAssembly === null) {\n if (frame.offset !== 0) throw new TypeError(\"live snapshot does not start at byte zero\");\n const { bytes: _bytes, offset: _offset, final: _final, ...metadata } = frame;\n this.snapshotAssembly = {\n metadata,\n bytes: new Uint8Array(frame.totalBytes),\n nextOffset: 0,\n };\n }\n const assembly = this.snapshotAssembly;\n if (\n frame.offset !== assembly.nextOffset ||\n frame.totalBytes !== assembly.metadata.totalBytes ||\n frame.sequence !== assembly.metadata.sequence ||\n frame.stateHash !== assembly.metadata.stateHash ||\n frame.digest !== assembly.metadata.digest ||\n frame.kernelVersion !== assembly.metadata.kernelVersion ||\n frame.modelSchemaVersion !== assembly.metadata.modelSchemaVersion ||\n !snapshotChunkAuthorityEqual(frame, assembly.metadata)\n ) {\n throw new TypeError(\"live snapshot chunks do not share one identity\");\n }\n assembly.bytes.set(frame.bytes, frame.offset);\n assembly.nextOffset += frame.bytes.byteLength;\n if (!frame.final) return;\n if (assembly.nextOffset !== assembly.bytes.byteLength) {\n throw new TypeError(\"live snapshot is incomplete\");\n }\n const commonSnapshot = {\n artifactId: this.ticket.artifactId,\n sequence: frame.sequence,\n stateHash: frame.stateHash,\n digest: frame.digest,\n kernelVersion: frame.kernelVersion,\n modelSchemaVersion: frame.modelSchemaVersion,\n bytes: assembly.bytes,\n } as const;\n const snapshot: EditableArtifactSnapshot =\n \"causalFrontier\" in frame\n ? Object.freeze({\n ...commonSnapshot,\n modality: \"spreadsheet\" as const,\n causalFrontier: cloneFrontier(frame.causalFrontier),\n protocolVersion: frame.protocolVersion,\n })\n : Object.freeze({\n ...commonSnapshot,\n modality: requireSerializedModality(frame.modality),\n nativeRevision: frame.nativeRevision,\n });\n this.snapshot = snapshot;\n this.snapshotDeferred.resolve(snapshot);\n this.notifyProgress();\n }\n\n private acceptMutation(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"mutationAccepted\" }>,\n ): void {\n const submission = this.submissions.get(frame.requestHash);\n if (!submission) return;\n if (frame.clientTransactionId !== submission.pending.clientTransactionId) {\n throw new TypeError(\"mutation acceptance changed the client transaction identity\");\n }\n submission.accepted = frame;\n this.trySettleAccepted(frame.transactionId);\n }\n\n private trySettleAccepted(transactionId: string): void {\n const transaction = this.transactionsById.get(transactionId);\n if (!transaction) return;\n const submission = this.submissions.get(transaction.requestHash);\n if (!submission?.accepted || submission.accepted.transactionId !== transactionId) return;\n const accepted = submission.accepted;\n if (\n accepted.startSequence !== transaction.startSequence ||\n accepted.endSequence !== transaction.endSequence ||\n accepted.stateHash !== transaction.stateHash ||\n accepted.requestHash !== transaction.requestHash\n ) {\n throw new TypeError(\"mutation acceptance does not match its committed transaction\");\n }\n clearTimeout(submission.timeout);\n this.submissions.delete(transaction.requestHash);\n this.transactionsById.delete(transaction.transactionId);\n submission.deferred.resolve({\n artifactId: this.ticket.artifactId,\n clientTransactionId: accepted.clientTransactionId,\n transactionId: transaction.transactionId,\n requestHash: transaction.requestHash,\n committed: cloneCommitted(transaction),\n });\n }\n\n private rejectMutation(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"mutationRejected\" }>,\n ): void {\n const submission = this.submissions.get(frame.requestHash);\n if (!submission) return;\n clearTimeout(submission.timeout);\n this.submissions.delete(frame.requestHash);\n submission.deferred.reject(\n new EditableArtifactTransportError(`editable artifact mutation rejected: ${frame.code}`, {\n code: frame.code,\n retryable: frame.retryable,\n outcomeUnknown: false,\n }),\n );\n }\n\n private validateIdentity(frame: EditableArtifactLiveServerFrame): void {\n if (frame.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"live server frame belongs to another artifact\");\n }\n if (frame.protocolVersion !== this.ticket.protocolVersion) {\n throw new TypeError(\"live server frame protocol mismatch\");\n }\n if (frame.type === \"open\" && serverModality(frame.modality) !== this.ticket.modality) {\n throw new TypeError(\"live open modality does not match its ticket\");\n }\n if (this.openFrame && frame.streamEpoch !== this.openFrame.streamEpoch) {\n throw new TypeError(\"live server frame belongs to another stream epoch\");\n }\n }\n\n private validateNegotiatedLimits(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"open\" }>,\n ): void {\n if (\n frame.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES ||\n frame.maxIntentBytes > EDITABLE_ARTIFACT_INTENT_MAX_BYTES ||\n frame.maxCommittedTransactionBytes > MAX_COMMITTED_TRANSACTION_BYTES\n ) {\n throw new TypeError(\"live server advertised incompatible protocol limits\");\n }\n }\n\n private requireOpen(): Extract<EditableArtifactLiveServerFrame, { type: \"open\" }> {\n if (!this.openFrame) throw new TypeError(\"live stream has not completed its handshake\");\n return this.openFrame;\n }\n\n private throwIfTerminal(): void {\n if (this.terminal) throw this.terminal;\n this.signal.throwIfAborted();\n }\n\n private waitForProgress(signal: AbortSignal): Promise<void> {\n this.throwIfTerminal();\n const deferred = new Deferred<void>();\n this.progressWaiters.add(deferred);\n return abortable(deferred.promise, signal).finally(() => this.progressWaiters.delete(deferred));\n }\n\n private notifyProgress(): void {\n for (const waiter of this.progressWaiters) waiter.resolve();\n this.progressWaiters.clear();\n }\n\n private fail(error: Error): void {\n if (this.terminal) return;\n this.finish({ reason: \"transport_error\", error });\n try {\n this.socket.close(4400, \"invalid_frame\");\n } catch {\n // Terminal state above is authoritative even if the host socket throws.\n }\n }\n\n private finish(input: { reason: EditableArtifactLiveClose[\"reason\"]; error?: Error }): void {\n if (this.terminal) return;\n clearTimeout(this.handshakeTimer);\n this.terminal =\n input.error ?? new EditableArtifactTransportError(\"editable artifact live stream closed\");\n this.socket.removeEventListener(\"open\", this.handleOpen);\n this.socket.removeEventListener(\"message\", this.handleMessage);\n this.socket.removeEventListener(\"error\", this.handleError);\n this.socket.removeEventListener(\"close\", this.handleClose);\n this.signal.removeEventListener(\"abort\", this.handleAbort);\n this.readyDeferred.reject(this.terminal);\n this.firstPostOpen.reject(this.terminal);\n this.snapshotDeferred.reject(this.terminal);\n this.notifyProgress();\n for (const submission of this.submissions.values()) {\n clearTimeout(submission.timeout);\n submission.deferred.reject(\n new EditableArtifactTransportError(\"live stream closed before mutation outcome\", {\n code: \"transport_error\",\n outcomeUnknown: submission.sent,\n cause: input.error,\n }),\n );\n }\n this.submissions.clear();\n this.closedDeferred.resolve({\n reason: input.reason,\n ...(input.error ? { error: input.error } : {}),\n });\n }\n}\n\nclass Deferred<T> {\n readonly promise: Promise<T>;\n private resolvePromise!: (value: T | PromiseLike<T>) => void;\n private rejectPromise!: (reason?: unknown) => void;\n private settled = false;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolvePromise = resolve;\n this.rejectPromise = reject;\n });\n // Several lifecycle barriers are intentionally rejectable before a caller\n // starts awaiting them; mark the rejection observed without changing it.\n void this.promise.catch(() => undefined);\n }\n\n resolve(\n value: T extends void ? undefined : T = undefined as T extends void ? undefined : T,\n ): void {\n if (this.settled) return;\n this.settled = true;\n this.resolvePromise(value as T);\n }\n\n reject(reason: unknown): void {\n if (this.settled) return;\n this.settled = true;\n this.rejectPromise(reason);\n }\n}\n\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction | ContractCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n if (transaction.modality === undefined || transaction.modality === \"spreadsheet\") {\n return {\n ...transaction,\n modality: \"spreadsheet\",\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n }\n if (!(\"priorNativeRevision\" in transaction)) {\n throw new TypeError(\"serialized transaction lacks native revision metadata\");\n }\n return {\n artifactId: transaction.artifactId,\n transactionId: transaction.transactionId,\n requestHash: transaction.requestHash,\n startSequence: transaction.startSequence,\n endSequence: transaction.endSequence,\n priorStateHash: transaction.priorStateHash,\n stateHash: transaction.stateHash,\n modality: requireSerializedModality(transaction.modality),\n priorNativeRevision: transaction.priorNativeRevision,\n nativeRevision: transaction.nativeRevision,\n commitProtocolVersion: transaction.commitProtocolVersion,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction transactionModality(\n transaction: EditableArtifactCommittedTransaction | ContractCommittedTransaction,\n): EditableArtifactModality {\n return transaction.modality ?? \"spreadsheet\";\n}\n\nfunction serverModality(value: EditableArtifactModality | undefined): EditableArtifactModality {\n return value ?? \"spreadsheet\";\n}\n\nfunction serializedBoundaryRevision(\n snapshot: EditableArtifactSnapshot | null,\n resume:\n | { modality: \"spreadsheet\"; localCausalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; localNativeRevision: number | null },\n modality: \"document\" | \"presentation\",\n): number {\n if (snapshot !== null) {\n if (snapshot.modality !== modality) throw new TypeError(\"snapshot modality mismatch\");\n return snapshot.nativeRevision;\n }\n if (resume.modality !== modality || resume.localNativeRevision === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"serialized live stream established no native revision boundary\",\n { requiresSnapshot: true },\n );\n }\n return resume.localNativeRevision;\n}\n\nfunction snapshotChunkAuthorityEqual(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n metadata: SnapshotAssembly[\"metadata\"],\n): boolean {\n const modality = serverModality(frame.modality);\n if (modality !== serverModality(metadata.modality)) return false;\n if (\"causalFrontier\" in frame) {\n if (!(\"causalFrontier\" in metadata)) return false;\n return frontiersEqual(frame.causalFrontier, metadata.causalFrontier);\n }\n if (!(\"nativeRevision\" in metadata)) return false;\n return frame.nativeRevision === metadata.nativeRevision;\n}\n\nfunction requireSerializedModality(\n value: EditableArtifactModality | undefined,\n): \"document\" | \"presentation\" {\n if (value !== \"document\" && value !== \"presentation\") {\n throw new TypeError(\"serialized artifact modality is invalid\");\n }\n return value;\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n if (!Array.isArray(frontier) || frontier.length > 1_024) {\n throw new TypeError(\"causal frontier is invalid\");\n }\n let previous = \"\";\n return frontier.map((entry) => {\n requireReplicaId(entry.replicaId);\n if (!Number.isSafeInteger(entry.counter) || entry.counter <= 0 || entry.replicaId <= previous) {\n throw new TypeError(\"causal frontier must be positive, sorted, and duplicate-free\");\n }\n previous = entry.replicaId;\n return { replicaId: entry.replicaId, counter: entry.counter };\n });\n}\n\nfunction frontiersEqual(\n left: EditableArtifactCausalFrontier,\n right: EditableArtifactCausalFrontier,\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nasync function binaryMessage(value: unknown, maximumBytes: number): Promise<Uint8Array> {\n if (value instanceof ArrayBuffer) {\n if (value.byteLength > maximumBytes)\n throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(value);\n }\n if (ArrayBuffer.isView(value)) {\n if (value.byteLength > maximumBytes)\n throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength).slice();\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n if (value.size > maximumBytes) throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(await value.arrayBuffer());\n }\n throw new TypeError(\"editable artifact live transport accepts binary frames only\");\n}\n\nasync function readBoundedJson(response: Response, maximumBytes: number): Promise<unknown> {\n const declared = response.headers.get(\"content-length\");\n if (declared !== null) {\n const length = Number(declared);\n if (!Number.isSafeInteger(length) || length < 0 || length > maximumBytes) {\n await response.body?.cancel(\"ticket response exceeds byte limit\").catch(() => undefined);\n throw new TypeError(\"ticket response content-length is invalid\");\n }\n }\n const reader = response.body?.getReader();\n if (!reader) throw new TypeError(\"ticket response has no body\");\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n total += result.value.byteLength;\n if (total > maximumBytes) throw new RangeError(\"ticket response exceeds byte limit\");\n chunks.push(result.value);\n }\n } catch (error) {\n await reader.cancel(\"ticket response rejected\").catch(() => undefined);\n throw error;\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n let text: string;\n try {\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n return JSON.parse(text) as unknown;\n } catch (cause) {\n throw new TypeError(\"ticket response is not valid UTF-8 JSON\", { cause });\n }\n}\n\nfunction validateTicket(\n value: unknown,\n artifactId: string,\n replicaId: string,\n protocolVersion: number,\n): EditableArtifactSyncTicket {\n if (!isPlainRecord(value)) throw new TypeError(\"ticket response must be an object\");\n const keys = Object.keys(value).sort();\n const expected = [\"artifactId\", \"expiresAt\", \"modality\", \"protocolVersion\", \"replicaId\", \"token\"];\n if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {\n throw new TypeError(\"ticket response has unknown or missing fields\");\n }\n if (\n value.artifactId !== artifactId ||\n value.replicaId !== replicaId ||\n value.protocolVersion !== protocolVersion\n ) {\n throw new TypeError(\"ticket response identity does not match its request\");\n }\n const modality = requireModality(value.modality, \"ticket modality\");\n if (\n typeof value.token !== \"string\" ||\n value.token.length > 4_096 ||\n !/^[A-Za-z0-9._~-]+$/u.test(value.token)\n ) {\n throw new TypeError(\"ticket token is invalid\");\n }\n if (typeof value.expiresAt !== \"string\" || !Number.isFinite(Date.parse(value.expiresAt))) {\n throw new TypeError(\"ticket expiry is invalid\");\n }\n return {\n artifactId,\n modality,\n replicaId,\n token: value.token,\n expiresAt: value.expiresAt,\n protocolVersion,\n };\n}\n\nfunction requireModality(value: unknown, label: string): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(`${label} is invalid`);\n }\n return value;\n}\n\nfunction transportBaseUrl(value: string | URL): URL {\n const base = resolveUrl(value, \"baseUrl\");\n if (base.username || base.password || base.search || base.hash) {\n throw new TypeError(\"baseUrl must not contain credentials, query, or fragment\");\n }\n if (base.protocol !== \"http:\" && base.protocol !== \"https:\") {\n throw new TypeError(\"baseUrl must use HTTP or HTTPS\");\n }\n return base;\n}\n\nfunction socketUrl(value: string | URL | undefined, baseUrl: URL): URL {\n const url =\n value === undefined ? childUrl(baseUrl, LIVE_PATH) : resolveUrl(value, \"webSocketUrl\");\n if (url.username || url.password || url.search || url.hash) {\n throw new TypeError(\"webSocketUrl must not contain credentials, query, or fragment\");\n }\n url.protocol =\n url.protocol === \"https:\" ? \"wss:\" : url.protocol === \"http:\" ? \"ws:\" : url.protocol;\n if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new TypeError(\"webSocketUrl must use WS or WSS\");\n }\n return url;\n}\n\nfunction childUrl(base: URL, path: string): URL {\n const result = new URL(base.href);\n result.pathname = `${result.pathname.replace(/\\/+$/u, \"\")}${path}`;\n result.search = \"\";\n result.hash = \"\";\n return result;\n}\n\nfunction resolveUrl(value: string | URL, label: string): URL {\n if (value instanceof URL) return new URL(value.href);\n try {\n return new URL(value, typeof location === \"undefined\" ? undefined : location.href);\n } catch (cause) {\n throw new TypeError(`${label} must be an absolute URL outside a browser`, { cause });\n }\n}\n\nfunction requireTransportSecurity(base: URL, socket: URL, allowInsecure: boolean): void {\n if (allowInsecure) return;\n if (base.protocol !== \"https:\" || socket.protocol !== \"wss:\") {\n throw new TypeError(\"editable artifact production transport requires HTTPS and WSS\");\n }\n}\n\nfunction defaultWebSocketFactory(url: string, protocol: string): EditableArtifactWebSocketLike {\n if (typeof WebSocket === \"undefined\") {\n throw new TypeError(\"WebSocket is unavailable; provide webSocketFactory\");\n }\n return new WebSocket(url, protocol) as unknown as EditableArtifactWebSocketLike;\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n signal.throwIfAborted();\n return new Promise<T>((resolve, reject) => {\n const abort = (): void => reject(signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"));\n signal.addEventListener(\"abort\", abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", abort);\n reject(error);\n },\n );\n });\n}\n\nfunction requireStableId(value: unknown, label: string): asserts value is string {\n if (typeof value !== \"string\" || !STABLE_ID.test(value)) {\n throw new TypeError(`${label} must be 32 lowercase nonzero hex characters`);\n }\n}\n\nfunction requireReplicaId(value: unknown): asserts value is string {\n if (typeof value !== \"string\" || !REPLICA_ID.test(value)) {\n throw new TypeError(\"replicaId must be 16 lowercase nonzero hex characters\");\n }\n}\n\nfunction requireSha256(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !SHA256.test(value)) throw new TypeError(`${label} is invalid`);\n return value;\n}\n\nfunction boundedString(value: unknown, label: string, maximum: number): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.length > maximum ||\n value.trim() !== value\n ) {\n throw new TypeError(`${label} is invalid`);\n }\n return value;\n}\n\nfunction safeSequence(value: unknown, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0)\n throw new TypeError(`${label} is invalid`);\n return value as number;\n}\n\nfunction positiveU16(value: unknown, label: string): number {\n const number = positiveBounded(value, 0xffff, label);\n return number;\n}\n\nfunction positiveBounded(value: unknown, maximum: number, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0 || (value as number) > maximum) {\n throw new TypeError(`${label} is invalid`);\n }\n return value as number;\n}\n\nfunction boundedCloseReason(value: string): string {\n return value.length <= 100 && /^[\\x20-\\x7e]*$/u.test(value) ? value : \"closed\";\n}\n\nfunction closeReason(value: string): EditableArtifactLiveClose[\"reason\"] {\n if (value === \"permission_changed\") return \"permission_changed\";\n if (value === \"ticket_expired\" || value === \"ticket_replayed\") return \"ticket_expired\";\n return value === \"closed\" ? \"closed\" : \"transport_error\";\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nconst RESYNC_CLOSE_REASONS = new Set([\n \"retention_gap\",\n \"durable_gap\",\n \"invalid_ack\",\n \"slow_client\",\n \"oversized_frame\",\n]);\n","import {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n editableArtifactStableId,\n encodeSpreadsheetArtifactCommandBatch,\n spreadsheetSheetId,\n type SpreadsheetArtifactCommandBatch,\n type SpreadsheetSheetPrecondition,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n encodeDocumentArtifactCommandBatch,\n type DocumentArtifactCommandBatch,\n type DocumentArtifactParagraphStyle,\n type DocumentArtifactStoryTarget,\n type DocumentArtifactTextRun,\n} from \"@opengeni/contracts/document-artifact-commands\";\nimport {\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n encodePresentationArtifactCommandBatch,\n type PresentationArtifactCommandBatch,\n type PresentationArtifactFill,\n} from \"@opengeni/contracts/presentation-artifact-commands\";\nimport {\n createEditableArtifactSyncController,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactQueueCommandsInput,\n type EditableArtifactSyncController,\n} from \"./controller\";\nimport { IndexedDbEditableArtifactStorage } from \"./storage\";\nimport type {\n EditableArtifactPendingTransaction,\n EditableArtifactModality,\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n EditableArtifactSyncListener,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n EditableSpreadsheetMetadataProjection,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetViewportProjection,\n EditableSpreadsheetViewportQuery,\n} from \"./types\";\n\nconst DEFAULT_VIEWPORT_MAX_CELLS = 262_144;\nconst DEFAULT_VIEWPORT_MAX_BYTES = 8 * 1024 * 1024;\nconst MAX_VIEWPORT_AREA = 1_048_576;\nconst UINT32_MAX = 0xffff_ffff;\n\nexport type CreateEditableArtifactSessionOptions = Omit<\n CreateEditableArtifactSyncControllerOptions,\n \"kernel\" | \"storage\"\n> &\n Readonly<{\n /** Dedicated Worker client; canonical artifact state never enters the UI thread. */\n worker: EditableArtifactWorkerKernel;\n /** Defaults to the browser IndexedDB WAL/verified-replica store. */\n storage?: CreateEditableArtifactSyncControllerOptions[\"storage\"];\n /** Close/dispose the Worker when this session closes. Defaults to true. */\n ownsWorker?: boolean;\n }>;\n\nexport type EditableSpreadsheetViewportListener = (\n projection: EditableSpreadsheetViewportProjection,\n) => void;\n\nexport type EditableSpreadsheetViewportSubscriptionOptions = Readonly<{\n onError?: (error: Error) => void;\n}>;\n\nexport type EditableSpreadsheetMetadataListener = (\n projection: EditableSpreadsheetMetadataProjection,\n) => void;\n\nexport type ApplySpreadsheetCommandsOptions = Readonly<{\n selectiveUndoTargets?: readonly string[];\n clientTransactionId?: string;\n}>;\n\nexport type ApplySerializedArtifactCommandsOptions = Readonly<{\n clientTransactionId?: string;\n}>;\n\nexport type CreateSpreadsheetSheetInput = Readonly<{\n name: string;\n after?: SpreadsheetSheetPrecondition | null;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n sheetId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreateSpreadsheetSheetResult = Readonly<{\n sheetId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\nexport type CreateDocumentParagraphInput = Readonly<{\n target?: DocumentArtifactStoryTarget;\n runs?: readonly DocumentArtifactTextRun[];\n style?: DocumentArtifactParagraphStyle;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n paragraphId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreateDocumentParagraphResult = Readonly<{\n paragraphId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\nexport type CreatePresentationSlideInput = Readonly<{\n index: number;\n title?: string;\n layoutId?: string | null;\n background?: PresentationArtifactFill;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n slideId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreatePresentationSlideResult = Readonly<{\n slideId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\n/**\n * Public browser editing session. It owns sync, WAL recovery, live replay, and\n * one Worker-resident speculative kernel. The main thread sees only bounded\n * immutable projections and authored command receipts.\n */\nexport interface EditableArtifactSession {\n readonly artifactId: string;\n readonly modality: EditableArtifactModality;\n start(): void;\n whenReady(): Promise<void>;\n close(): Promise<void>;\n getView(): EditableArtifactSyncView;\n subscribe(listener: EditableArtifactSyncListener): () => void;\n queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction>;\n /** Pure OGASC encoding followed by the ordinary Worker/WAL authoring path. */\n applySpreadsheetCommands(\n batch: SpreadsheetArtifactCommandBatch,\n options?: ApplySpreadsheetCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n applyDocumentCommands(\n batch: DocumentArtifactCommandBatch,\n options?: ApplySerializedArtifactCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n applyPresentationCommands(\n batch: PresentationArtifactCommandBatch,\n options?: ApplySerializedArtifactCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n /** Allocates a collision-resistant offline sheet id and submits one OGASC create. */\n createSpreadsheetSheet(input: CreateSpreadsheetSheetInput): Promise<CreateSpreadsheetSheetResult>;\n /** Allocates a collision-resistant id in the document namespace and appends one paragraph. */\n createDocumentParagraph(\n input?: CreateDocumentParagraphInput,\n ): Promise<CreateDocumentParagraphResult>;\n /** Allocates a collision-resistant stable id and inserts one slide. */\n createPresentationSlide(\n input: CreatePresentationSlideInput,\n ): Promise<CreatePresentationSlideResult>;\n querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): Promise<EditableSpreadsheetViewportProjection>;\n subscribeSpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n listener: EditableSpreadsheetViewportListener,\n options?: EditableSpreadsheetViewportSubscriptionOptions,\n ): () => void;\n querySpreadsheetMetadata(\n query?: EditableSpreadsheetMetadataQuery,\n ): Promise<EditableSpreadsheetMetadataProjection>;\n subscribeSpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery,\n listener: EditableSpreadsheetMetadataListener,\n options?: EditableSpreadsheetViewportSubscriptionOptions,\n ): () => void;\n queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection>;\n queryPresentation(query: EditablePresentationQuery): Promise<EditablePresentationProjection>;\n queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection>;\n queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection>;\n}\n\n/** Creates and starts one independently durable browser editing session. */\nexport function createEditableArtifactSession(\n options: CreateEditableArtifactSessionOptions,\n): EditableArtifactSession {\n const storage = options.storage ?? new IndexedDbEditableArtifactStorage();\n const controller = createEditableArtifactSyncController({\n ...options,\n storage,\n kernel: options.worker,\n });\n const session = new EditableArtifactSessionImpl(\n controller,\n options.worker,\n options.ownsWorker ?? true,\n );\n session.start();\n return session;\n}\n\ntype ProjectionChannel = {\n readonly query: EditableSpreadsheetViewportQuery;\n readonly listeners: Map<\n EditableSpreadsheetViewportListener,\n EditableSpreadsheetViewportSubscriptionOptions\n >;\n generation: number;\n running: boolean;\n requested: boolean;\n last: EditableSpreadsheetViewportProjection | null;\n};\n\ntype MetadataChannel = {\n readonly query: Required<EditableSpreadsheetMetadataQuery>;\n readonly listeners: Map<\n EditableSpreadsheetMetadataListener,\n EditableSpreadsheetViewportSubscriptionOptions\n >;\n generation: number;\n running: boolean;\n requested: boolean;\n last: EditableSpreadsheetMetadataProjection | null;\n};\n\nclass EditableArtifactSessionImpl implements EditableArtifactSession {\n readonly artifactId: string;\n readonly modality: EditableArtifactModality;\n\n private readonly channels = new Map<string, ProjectionChannel>();\n private readonly metadataChannels = new Map<string, MetadataChannel>();\n private releaseController: (() => void) | null = null;\n private closed = false;\n private lastProjectionInvalidator = \"\";\n\n constructor(\n private readonly controller: EditableArtifactSyncController,\n private readonly worker: EditableArtifactWorkerKernel,\n private readonly ownsWorker: boolean,\n ) {\n this.artifactId = controller.artifactId;\n this.modality = controller.modality;\n }\n\n start(): void {\n this.requireOpen();\n if (!this.releaseController) {\n this.releaseController = this.controller.subscribe((view) => {\n const invalidator = projectionInvalidator(view);\n if (invalidator !== this.lastProjectionInvalidator) {\n this.lastProjectionInvalidator = invalidator;\n for (const channel of this.channels.values()) this.requestChannel(channel);\n for (const channel of this.metadataChannels.values())\n this.requestMetadataChannel(channel);\n }\n });\n }\n this.controller.start();\n }\n\n async whenReady(): Promise<void> {\n this.requireOpen();\n this.start();\n await this.controller.whenLive();\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.releaseController?.();\n this.releaseController = null;\n this.channels.clear();\n this.metadataChannels.clear();\n await this.controller.close();\n if (this.ownsWorker) {\n const candidate = this.worker as EditableArtifactWorkerKernel & {\n dispose?: () => Promise<void>;\n };\n await candidate.dispose?.();\n }\n }\n\n getView(): EditableArtifactSyncView {\n return this.controller.getView();\n }\n\n subscribe(listener: EditableArtifactSyncListener): () => void {\n this.requireOpen();\n return this.controller.subscribe(listener);\n }\n\n async queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n return await this.controller.queueCommands(input);\n }\n\n async applySpreadsheetCommands(\n batch: SpreadsheetArtifactCommandBatch,\n options: ApplySpreadsheetCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const commandBytes = encodeSpreadsheetArtifactCommandBatch(batch);\n return await this.queueCommands({\n commandBytes,\n ...(options.selectiveUndoTargets === undefined\n ? {}\n : { selectiveUndoTargets: options.selectiveUndoTargets }),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async applyDocumentCommands(\n batch: DocumentArtifactCommandBatch,\n options: ApplySerializedArtifactCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"document\");\n return await this.queueCommands({\n commandBytes: encodeDocumentArtifactCommandBatch(batch),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async applyPresentationCommands(\n batch: PresentationArtifactCommandBatch,\n options: ApplySerializedArtifactCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n return await this.queueCommands({\n commandBytes: encodePresentationArtifactCommandBatch(batch),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async createSpreadsheetSheet(\n input: CreateSpreadsheetSheetInput,\n ): Promise<CreateSpreadsheetSheetResult> {\n this.requireOpen();\n const sheetId = spreadsheetSheetId(input.sheetId ?? randomStableId());\n const pending = await this.applySpreadsheetCommands(\n {\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"sheet.create\",\n sheetId,\n name: input.name,\n after: input.after ?? null,\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ sheetId, pending });\n }\n\n async createDocumentParagraph(\n input: CreateDocumentParagraphInput = {},\n ): Promise<CreateDocumentParagraphResult> {\n this.requireOpen();\n this.requireModality(\"document\");\n const summary = await this.queryDocument({ kind: \"summary\" });\n const facts = summary.items[0];\n if (\n summary.items.length !== 1 ||\n facts?.kind !== \"summary\" ||\n summary.nextCursor !== null ||\n summary.truncated\n ) {\n throw new Error(\"Document summary projection is malformed\");\n }\n const paragraphId = input.paragraphId ?? randomDocumentId(\"p\", facts.idNamespace);\n const pending = await this.applyDocumentCommands(\n {\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"paragraph.add\",\n target: input.target ?? { kind: \"body\" },\n id: paragraphId,\n runs: input.runs ?? [],\n style: input.style ?? {},\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ paragraphId, pending });\n }\n\n async createPresentationSlide(\n input: CreatePresentationSlideInput,\n ): Promise<CreatePresentationSlideResult> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n const slideId = editableArtifactStableId(input.slideId ?? randomStableId());\n const pending = await this.applyPresentationCommands(\n {\n version: PRESENTATION_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"slide.create\",\n id: slideId,\n index: input.index,\n title: input.title ?? \"\",\n layoutId: input.layoutId ?? null,\n background: input.background ?? { kind: \"solid\", color: 0xffffffff },\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ slideId, pending });\n }\n\n async querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): Promise<EditableSpreadsheetViewportProjection> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeViewportQuery(query);\n await this.whenReady();\n this.requireOpen();\n return await this.worker.querySpreadsheetViewport(normalized);\n }\n\n subscribeSpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n listener: EditableSpreadsheetViewportListener,\n options: EditableSpreadsheetViewportSubscriptionOptions = {},\n ): () => void {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeViewportQuery(query);\n const key = viewportQueryKey(normalized);\n let channel = this.channels.get(key);\n if (!channel) {\n channel = {\n query: normalized,\n listeners: new Map(),\n generation: 0,\n running: false,\n requested: false,\n last: null,\n };\n this.channels.set(key, channel);\n }\n channel.listeners.set(listener, options);\n if (channel.last) listener(channel.last);\n else this.requestChannel(channel);\n return () => {\n const current = this.channels.get(key);\n if (!current) return;\n current.listeners.delete(listener);\n if (current.listeners.size === 0) {\n current.generation += 1;\n this.channels.delete(key);\n }\n };\n }\n\n async querySpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery = {},\n ): Promise<EditableSpreadsheetMetadataProjection> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeMetadataQuery(query);\n await this.whenReady();\n this.requireOpen();\n return await this.worker.querySpreadsheetMetadata(normalized);\n }\n\n subscribeSpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery,\n listener: EditableSpreadsheetMetadataListener,\n options: EditableSpreadsheetViewportSubscriptionOptions = {},\n ): () => void {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeMetadataQuery(query);\n const key = `${normalized.maxSheets}:${normalized.maxBytes}`;\n let channel = this.metadataChannels.get(key);\n if (!channel) {\n channel = {\n query: normalized,\n listeners: new Map(),\n generation: 0,\n running: false,\n requested: false,\n last: null,\n };\n this.metadataChannels.set(key, channel);\n }\n channel.listeners.set(listener, options);\n if (channel.last) listener(channel.last);\n else this.requestMetadataChannel(channel);\n return () => {\n const current = this.metadataChannels.get(key);\n if (!current) return;\n current.listeners.delete(listener);\n if (current.listeners.size === 0) {\n current.generation += 1;\n this.metadataChannels.delete(key);\n }\n };\n }\n\n async queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection> {\n this.requireOpen();\n this.requireModality(\"document\");\n await this.whenReady();\n this.requireOpen();\n return await this.worker.queryDocument(query);\n }\n\n async queryPresentation(\n query: EditablePresentationQuery,\n ): Promise<EditablePresentationProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n return await this.worker.queryPresentation(query);\n }\n\n async queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n const response = await this.worker.queryPresentation(query);\n if (\n response.kind !== \"slide-catalog\" ||\n response.startSlide !== query.startSlide ||\n response.slides.length > query.maxSlides ||\n response.projectedTextBytes > query.maxTextBytes\n ) {\n throw new TypeError(\"presentation slide catalog response is malformed\");\n }\n return response;\n }\n\n async queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n const response = await this.worker.queryPresentation(query);\n if (\n response.kind !== \"editor-slide\" ||\n response.slide.id !== query.slideId ||\n response.nodes.length > query.maxNodes ||\n response.projectedTextBytes > query.maxTextBytes\n ) {\n throw new TypeError(\"presentation editor slide response is malformed\");\n }\n return response;\n }\n\n private requestChannel(channel: ProjectionChannel): void {\n if (this.closed || channel.listeners.size === 0) return;\n channel.requested = true;\n if (channel.running) return;\n channel.running = true;\n void this.runChannel(channel);\n }\n\n private async runChannel(channel: ProjectionChannel): Promise<void> {\n try {\n while (!this.closed && channel.listeners.size > 0 && channel.requested) {\n channel.requested = false;\n const generation = ++channel.generation;\n try {\n const projection = await this.querySpreadsheetViewport(channel.query);\n if (this.closed || generation !== channel.generation || channel.listeners.size === 0) {\n continue;\n }\n channel.last = projection;\n for (const listener of channel.listeners.keys()) listener(projection);\n } catch (error) {\n if (this.closed || generation !== channel.generation) continue;\n const failure = asError(error);\n for (const options of channel.listeners.values()) options.onError?.(failure);\n }\n }\n } finally {\n channel.running = false;\n if (channel.requested && !this.closed && channel.listeners.size > 0) {\n this.requestChannel(channel);\n }\n }\n }\n\n private requestMetadataChannel(channel: MetadataChannel): void {\n if (this.closed || channel.listeners.size === 0) return;\n channel.requested = true;\n if (channel.running) return;\n channel.running = true;\n void this.runMetadataChannel(channel);\n }\n\n private async runMetadataChannel(channel: MetadataChannel): Promise<void> {\n try {\n while (!this.closed && channel.listeners.size > 0 && channel.requested) {\n channel.requested = false;\n const generation = ++channel.generation;\n try {\n const projection = await this.querySpreadsheetMetadata(channel.query);\n if (this.closed || generation !== channel.generation || channel.listeners.size === 0) {\n continue;\n }\n channel.last = projection;\n for (const listener of channel.listeners.keys()) listener(projection);\n } catch (error) {\n if (this.closed || generation !== channel.generation) continue;\n const failure = asError(error);\n for (const options of channel.listeners.values()) options.onError?.(failure);\n }\n }\n } finally {\n channel.running = false;\n if (channel.requested && !this.closed && channel.listeners.size > 0) {\n this.requestMetadataChannel(channel);\n }\n }\n }\n\n private requireOpen(): void {\n if (this.closed) throw new Error(\"editable artifact session is closed\");\n }\n\n private requireModality(expected: EditableArtifactModality): void {\n if (this.modality !== expected) {\n throw new TypeError(`${expected} operation requires a ${expected} artifact session`);\n }\n }\n}\n\nfunction normalizeViewportQuery(\n input: EditableSpreadsheetViewportQuery,\n): EditableSpreadsheetViewportQuery {\n const sheetId = stableId(input.sheetId, \"sheetId\");\n const startRow = uint32(input.startRow, \"startRow\");\n const startColumn = uint32(input.startColumn, \"startColumn\");\n const rowCount = positiveUint32(input.rowCount, \"rowCount\");\n const columnCount = positiveUint32(input.columnCount, \"columnCount\");\n if (startRow + rowCount - 1 > UINT32_MAX || startColumn + columnCount - 1 > UINT32_MAX) {\n throw new RangeError(\"spreadsheet viewport exceeds the uint32 coordinate space\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > MAX_VIEWPORT_AREA) {\n throw new RangeError(`spreadsheet viewport area exceeds ${MAX_VIEWPORT_AREA} cells`);\n }\n const maxCells = positiveUint32(input.maxCells ?? DEFAULT_VIEWPORT_MAX_CELLS, \"maxCells\");\n const maxBytes = positiveUint32(input.maxBytes ?? DEFAULT_VIEWPORT_MAX_BYTES, \"maxBytes\");\n if (maxCells > DEFAULT_VIEWPORT_MAX_CELLS) {\n throw new RangeError(`maxCells exceeds ${DEFAULT_VIEWPORT_MAX_CELLS}`);\n }\n if (maxBytes > DEFAULT_VIEWPORT_MAX_BYTES) {\n throw new RangeError(`maxBytes exceeds ${DEFAULT_VIEWPORT_MAX_BYTES}`);\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction viewportQueryKey(query: EditableSpreadsheetViewportQuery): string {\n return `${query.sheetId}:${query.startRow}:${query.startColumn}:${query.rowCount}:${query.columnCount}:${query.maxCells}:${query.maxBytes}`;\n}\n\nfunction normalizeMetadataQuery(\n input: EditableSpreadsheetMetadataQuery,\n): Required<EditableSpreadsheetMetadataQuery> {\n const maxSheets = positiveUint32(input.maxSheets ?? 4_096, \"maxSheets\");\n const maxBytes = positiveUint32(input.maxBytes ?? DEFAULT_VIEWPORT_MAX_BYTES, \"maxBytes\");\n if (maxSheets > 262_144) throw new RangeError(\"maxSheets exceeds 262144\");\n if (maxBytes > DEFAULT_VIEWPORT_MAX_BYTES) {\n throw new RangeError(`maxBytes exceeds ${DEFAULT_VIEWPORT_MAX_BYTES}`);\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction projectionInvalidator(view: EditableArtifactSyncView): string {\n return `${view.state}:${view.cursor}:${view.headSequence}:${view.pendingTransactions}:${view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\")}`;\n}\n\nfunction stableId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !/^[0-9a-f]{32}$/u.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);\n }\n return value;\n}\n\nfunction uint32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction positiveUint32(value: unknown, label: string): number {\n const output = uint32(value, label);\n if (output === 0) throw new TypeError(`${label} must be positive`);\n return output;\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(\"editable artifact projection failed\");\n}\n\nfunction randomStableId(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n // Sheet object ids require nonzero allocator namespace and counter halves.\n if (bytes.subarray(0, 8).every((value) => value === 0)) bytes[0] = 1;\n if (bytes.subarray(8).every((value) => value === 0)) bytes[8] = 1;\n let value = 0n;\n for (let index = 0; index < bytes.length; index += 1) {\n value |= BigInt(bytes[index]!) << BigInt(index * 8);\n }\n return value.toString(16).padStart(32, \"0\");\n}\n\nfunction randomDocumentId(prefix: \"p\", namespace: bigint): string {\n if (namespace < 0n || namespace > 0xffff_ffff_ffff_ffffn) {\n throw new Error(\"Document id namespace is malformed\");\n }\n const maximumCounter = BigInt(Number.MAX_SAFE_INTEGER) - 1n;\n for (;;) {\n const bytes = crypto.getRandomValues(new Uint8Array(7));\n bytes[0] = bytes[0]! & 0x1f;\n let counter = 0n;\n for (const byte of bytes) counter = (counter << 8n) | BigInt(byte);\n if (counter > 0n && counter <= maximumCounter) {\n return `${prefix}/${namespace.toString(16).padStart(16, \"0\")}${counter\n .toString(16)\n .padStart(16, \"0\")}`;\n }\n }\n}\n","import {\n decodeSpreadsheetMetadataKernelProjection,\n decodeSpreadsheetViewportKernelProjection,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n encodeSpreadsheetMetadataKernelQuery,\n encodeSpreadsheetViewportKernelQuery,\n spreadsheetSheetId,\n SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n type SpreadsheetArtifactViewportQuery,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n decodeDocumentArtifactQueryResponse,\n encodeDocumentArtifactQuery,\n} from \"@opengeni/contracts/document-artifact-query\";\nimport {\n decodePresentationArtifactQueryResponse,\n encodePresentationArtifactQuery,\n} from \"@opengeni/contracts/presentation-artifact-query\";\nimport type {\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactWorkerKernel,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetViewportQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n} from \"../types\";\nimport {\n ArtifactWorkerRpcKind,\n DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,\n decodeArtifactWorkerRpcMessage,\n encodeArtifactWorkerRpcMessage,\n ownedTransferBuffer,\n transferListForArtifactWorkerRpcMessage,\n type ArtifactWorkerRpcLimits,\n type ArtifactWorkerRpcMessage,\n} from \"./rpc-protocol\";\nimport {\n decodeErrorPayload,\n decodePendingListMetadata,\n decodeProjectionResponse,\n decodeStateResponse,\n encodeAuthorPendingMetadata,\n encodeCommittedMetadata,\n encodeInitialize,\n encodePendingListMetadata,\n encodeReconcileMetadata,\n encodeSnapshotMetadata,\n type ArtifactWorkerInitializeInput,\n} from \"./wire-codec\";\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 20_000;\nconst DEFAULT_INITIALIZATION_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst DEFAULT_MAX_INTENT_BYTES = EDITABLE_ARTIFACT_INTENT_MAX_BYTES;\nconst DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_QUERY_BYTES = 256;\nconst DEFAULT_MAX_QUERY_RESPONSE_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_PENDING_TRANSACTIONS = 1_024;\nconst DEFAULT_MAX_PENDING_AGGREGATE_BYTES = 64 * 1024 * 1024;\nconst MAX_CLIENT_QUEUED_REQUESTS = 64;\nconst MAX_VIEWPORT_AREA = 1_048_576;\nconst UINT32_MAX = 0xffff_ffff;\n\nexport type ArtifactWorkerClientMessageEvent = { data: unknown };\nexport type ArtifactWorkerClientErrorEvent = { error?: unknown; message?: string };\n\nexport type ArtifactWorkerClientEndpoint = {\n postMessage: (message: ArtifactWorkerRpcMessage, transfer: Transferable[]) => void;\n addEventListener: {\n (type: \"message\", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;\n (\n type: \"error\" | \"messageerror\",\n listener: (event: ArtifactWorkerClientErrorEvent) => void,\n ): void;\n };\n removeEventListener: {\n (type: \"message\", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;\n (\n type: \"error\" | \"messageerror\",\n listener: (event: ArtifactWorkerClientErrorEvent) => void,\n ): void;\n };\n terminate: () => void;\n};\n\nexport type CreateBrowserEditableArtifactWorkerKernelOptions = {\n modality: EditableArtifactModality;\n /** Exact package/runtime identity; checked before the Worker accepts state. */\n kernelVersion: string;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandVersion: number;\n /**\n * Prebuilt module-Worker entry. No blob/eval worker is ever synthesized.\n * Bundler example: import `workerUrl` from\n * `@opengeni/sdk/editable-artifacts/worker?worker&url`, then pass it here.\n */\n workerUrl: string | URL;\n /** wasm-bindgen ESM glue built from the pinned artifact kernel. */\n wasmGlueUrl: string | URL;\n /** Exact `.wasm` asset paired with the glue. */\n wasmBinaryUrl: string | URL;\n /**\n * Origin hosting the embedding application. Browser runtimes default to\n * `location.origin`; non-browser/custom Worker hosts must supply it.\n */\n applicationOrigin?: string | URL;\n /** Additional explicitly trusted asset origins; same-origin is the default. */\n allowedAssetOrigins?: readonly string[];\n /** Only for local development. Production assets must use HTTPS. */\n allowInsecureDevelopmentAssets?: boolean;\n requestTimeoutMs?: number;\n initializationTimeoutMs?: number;\n maximumSnapshotBytes?: number;\n maximumCommandBytes?: number;\n maximumIntentBytes?: number;\n maximumCommittedTransactionBytes?: number;\n maximumQueryBytes?: number;\n maximumQueryResponseBytes?: number;\n maximumPendingTransactions?: number;\n maximumPendingAggregateBytes?: number;\n rpcLimits?: Readonly<ArtifactWorkerRpcLimits>;\n workerFactory?: (\n url: URL,\n options: { type: \"module\"; name: string },\n ) => ArtifactWorkerClientEndpoint;\n};\n\nexport type BrowserEditableArtifactWorkerKernel = EditableArtifactWorkerKernel & {\n queryPresentationSlideCatalog: (\n query: EditablePresentationSlideCatalogQuery,\n ) => Promise<EditablePresentationSlideCatalogProjection>;\n queryPresentationEditorSlide: (\n query: EditablePresentationEditorSlideQuery,\n ) => Promise<EditablePresentationEditorSlideProjection>;\n /** Requests bounded graceful cleanup, then terminates the Worker. Idempotent. */\n dispose: () => Promise<void>;\n /** Retires a failed generation; the next method call lazily starts a fresh Worker. */\n restart: () => void;\n};\n\nexport class ArtifactWorkerClientError extends Error {\n readonly code: string;\n readonly retryable: boolean;\n\n constructor(\n code: string,\n message: string,\n options: { retryable?: boolean; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"ArtifactWorkerClientError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n }\n}\n\ntype RpcResult = {\n metadata: Uint8Array;\n segments: Uint8Array[];\n};\n\ntype PendingRequest = {\n resolve: (result: RpcResult) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype WorkerGeneration = {\n endpoint: ArtifactWorkerClientEndpoint;\n generation: number;\n nextRequestId: number;\n pending: Map<number, PendingRequest>;\n ready: Promise<void>;\n initialized: boolean;\n onMessage: (event: ArtifactWorkerClientMessageEvent) => void;\n onError: (event: ArtifactWorkerClientErrorEvent) => void;\n};\n\nexport function createBrowserEditableArtifactWorkerKernel(\n options: CreateBrowserEditableArtifactWorkerKernelOptions,\n): BrowserEditableArtifactWorkerKernel {\n return new BrowserArtifactWorkerKernelClient(options);\n}\n\nclass BrowserArtifactWorkerKernelClient implements BrowserEditableArtifactWorkerKernel {\n private readonly workerUrl: URL;\n private readonly initialization: ArtifactWorkerInitializeInput;\n private readonly requestTimeoutMs: number;\n private readonly initializationTimeoutMs: number;\n private readonly maximumPendingAggregateBytes: number;\n private readonly maximumQueuedTransferBytes: number;\n private readonly rpcLimits: Readonly<ArtifactWorkerRpcLimits>;\n private readonly workerFactory: NonNullable<\n CreateBrowserEditableArtifactWorkerKernelOptions[\"workerFactory\"]\n >;\n private generationCounter = 0;\n private admittedRequests = 0;\n private admittedTransferBytes = 0;\n private active: WorkerGeneration | null = null;\n private disposed = false;\n\n constructor(options: CreateBrowserEditableArtifactWorkerKernelOptions) {\n this.workerUrl = canonicalUrl(options.workerUrl, \"workerUrl\");\n const wasmGlueUrl = canonicalUrl(options.wasmGlueUrl, \"wasmGlueUrl\");\n const wasmBinaryUrl = canonicalUrl(options.wasmBinaryUrl, \"wasmBinaryUrl\");\n validateAssetPolicy(\n [this.workerUrl, wasmGlueUrl, wasmBinaryUrl],\n resolveApplicationOrigin(options.applicationOrigin),\n options.allowedAssetOrigins ?? [],\n options.allowInsecureDevelopmentAssets ?? false,\n );\n const modality = requireModality(options.modality);\n const modalityQueryBytes =\n modality === \"document\" ? 256 : modality === \"presentation\" ? 96 : 68;\n this.initialization = {\n modality,\n kernelVersion: boundedVersion(options.kernelVersion, \"kernelVersion\"),\n protocolVersion: positiveVersion(options.protocolVersion, \"protocolVersion\"),\n modelSchemaVersion: positiveVersion(options.modelSchemaVersion, \"modelSchemaVersion\"),\n commandVersion: positiveVersion(options.commandVersion, \"commandVersion\"),\n wasmGlueUrl: wasmGlueUrl.href,\n wasmBinaryUrl: wasmBinaryUrl.href,\n maximumSnapshotBytes: boundedMaximum(\n options.maximumSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n DEFAULT_MAX_SNAPSHOT_BYTES,\n \"maximumSnapshotBytes\",\n ),\n maximumCommandBytes: boundedMaximum(\n options.maximumCommandBytes ?? DEFAULT_MAX_COMMAND_BYTES,\n DEFAULT_MAX_COMMAND_BYTES,\n \"maximumCommandBytes\",\n ),\n maximumIntentBytes: boundedMaximum(\n options.maximumIntentBytes ?? DEFAULT_MAX_INTENT_BYTES,\n DEFAULT_MAX_INTENT_BYTES,\n \"maximumIntentBytes\",\n ),\n maximumCommittedTransactionBytes: boundedMaximum(\n options.maximumCommittedTransactionBytes ?? DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES,\n DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES,\n \"maximumCommittedTransactionBytes\",\n ),\n maximumQueryBytes: boundedMaximum(\n options.maximumQueryBytes ?? modalityQueryBytes,\n DEFAULT_MAX_QUERY_BYTES,\n \"maximumQueryBytes\",\n ),\n maximumQueryResponseBytes: boundedMaximum(\n options.maximumQueryResponseBytes ?? DEFAULT_MAX_QUERY_RESPONSE_BYTES,\n DEFAULT_MAX_QUERY_RESPONSE_BYTES,\n \"maximumQueryResponseBytes\",\n ),\n maximumPendingTransactions: boundedMaximum(\n options.maximumPendingTransactions ?? DEFAULT_MAX_PENDING_TRANSACTIONS,\n DEFAULT_MAX_PENDING_TRANSACTIONS,\n \"maximumPendingTransactions\",\n ),\n };\n this.maximumPendingAggregateBytes = boundedMaximum(\n options.maximumPendingAggregateBytes ?? DEFAULT_MAX_PENDING_AGGREGATE_BYTES,\n DEFAULT_MAX_PENDING_AGGREGATE_BYTES,\n \"maximumPendingAggregateBytes\",\n );\n this.maximumQueuedTransferBytes = Math.max(\n this.initialization.maximumSnapshotBytes,\n this.initialization.maximumCommittedTransactionBytes + this.maximumPendingAggregateBytes,\n this.initialization.maximumCommandBytes,\n );\n this.requestTimeoutMs = positiveSafeInteger(\n options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,\n \"requestTimeoutMs\",\n );\n this.initializationTimeoutMs = positiveSafeInteger(\n options.initializationTimeoutMs ?? DEFAULT_INITIALIZATION_TIMEOUT_MS,\n \"initializationTimeoutMs\",\n );\n this.rpcLimits = normalizeClientRpcLimits(\n options.rpcLimits ?? DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,\n );\n this.workerFactory = options.workerFactory ?? defaultWorkerFactory;\n }\n\n async reset(): Promise<void> {\n return await this.withAdmission(0, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.Reset);\n requireEmptyResult(result, \"reset\");\n });\n }\n\n async loadSnapshot(\n snapshot: Parameters<EditableArtifactWorkerKernel[\"loadSnapshot\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"loadSnapshot\"]> {\n const transferBytes = this.segmentByteLength(\n snapshot.bytes,\n this.initialization.maximumSnapshotBytes,\n \"snapshot\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n snapshot.bytes,\n this.initialization.maximumSnapshotBytes,\n \"snapshot\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.LoadSnapshot,\n encodeSnapshotMetadata(snapshot),\n [segment],\n );\n if (result.segments.length !== 0)\n throw clientError(\"invalid_response\", \"snapshot response has segments\");\n const decoded = decodeStateResponse(result.metadata);\n if (!decoded.digest)\n throw clientError(\"invalid_response\", \"snapshot response omitted its digest\");\n return { stateHash: decoded.stateHash, digest: decoded.digest };\n });\n }\n\n async applyRecovered(\n transaction: Parameters<EditableArtifactWorkerKernel[\"applyRecovered\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"applyRecovered\"]> {\n const transferBytes = this.segmentByteLength(\n transaction.committedTransactionBytes,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed operation\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n transaction.committedTransactionBytes,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed operation\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.ApplyRecovered,\n encodeCommittedMetadata(transaction),\n [segment],\n );\n if (result.segments.length !== 0)\n throw clientError(\"invalid_response\", \"apply response has segments\");\n const decoded = decodeStateResponse(result.metadata);\n if (decoded.digest)\n throw clientError(\"invalid_response\", \"apply response unexpectedly contains a digest\");\n return { stateHash: decoded.stateHash };\n });\n }\n\n async reconcileCommitted(\n transaction: Parameters<EditableArtifactWorkerKernel[\"reconcileCommitted\"]>[0],\n remainingPending: Parameters<EditableArtifactWorkerKernel[\"reconcileCommitted\"]>[1],\n ): ReturnType<EditableArtifactWorkerKernel[\"reconcileCommitted\"]> {\n const transferBytes = this.measurePendingTransfer(\n remainingPending,\n transaction.committedTransactionBytes,\n );\n return await this.withAdmission(transferBytes, async () => {\n const segments = this.pendingSegments(\n remainingPending,\n transaction.committedTransactionBytes,\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.ReconcileCommitted,\n encodeReconcileMetadata(transaction, remainingPending),\n segments,\n );\n if (result.segments.length !== 0) {\n throw clientError(\"invalid_response\", \"reconcile response has segments\");\n }\n const decoded = decodeProjectionResponse(result.metadata);\n if (!decoded.stateHash)\n throw clientError(\"invalid_response\", \"reconcile response omitted stateHash\");\n return { stateHash: decoded.stateHash, blockedPending: decoded.blockedPending };\n });\n }\n\n async replacePending(\n transactions: Parameters<EditableArtifactWorkerKernel[\"replacePending\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"replacePending\"]> {\n const transferBytes = this.measurePendingTransfer(transactions);\n return await this.withAdmission(transferBytes, async () => {\n const segments = this.pendingSegments(transactions);\n const result = await this.request(\n ArtifactWorkerRpcKind.ReplacePending,\n encodePendingListMetadata(transactions),\n segments,\n );\n if (result.segments.length !== 0) {\n throw clientError(\"invalid_response\", \"pending response has segments\");\n }\n const decoded = decodeProjectionResponse(result.metadata);\n if (decoded.stateHash) {\n throw clientError(\"invalid_response\", \"pending response unexpectedly contains stateHash\");\n }\n return { blockedPending: decoded.blockedPending };\n });\n }\n\n async authorPending(\n input: Parameters<EditableArtifactWorkerKernel[\"authorPending\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"authorPending\"]> {\n if (input.modality !== this.initialization.modality) {\n throw clientError(\"modality_mismatch\", \"pending modality does not match Worker\", false);\n }\n const transferBytes = this.segmentByteLength(\n input.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n input.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.AuthorPending,\n encodeAuthorPendingMetadata(input),\n [segment],\n );\n const pending = decodePendingListMetadata(\n result.metadata,\n result.segments,\n this.initialization.maximumPendingTransactions,\n );\n if (pending.length !== 1)\n throw clientError(\"invalid_response\", \"author response count is invalid\");\n return pending[0]!;\n });\n }\n\n async querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): ReturnType<EditableArtifactWorkerKernel[\"querySpreadsheetViewport\"]> {\n if (this.initialization.modality !== \"spreadsheet\") {\n throw clientError(\n \"modality_mismatch\",\n \"spreadsheet query requires a spreadsheet Worker\",\n false,\n );\n }\n const normalized = normalizeViewportQuery(query);\n const queryBytes = encodeSpreadsheetViewportKernelQuery(normalized);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"spreadsheet viewport response is malformed\");\n }\n return decodeSpreadsheetViewportKernelProjection(result.segments[0]!, normalized);\n });\n }\n\n async querySpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery = {},\n ): ReturnType<EditableArtifactWorkerKernel[\"querySpreadsheetMetadata\"]> {\n if (this.initialization.modality !== \"spreadsheet\") {\n throw clientError(\n \"modality_mismatch\",\n \"spreadsheet query requires a spreadsheet Worker\",\n false,\n );\n }\n const normalized = normalizeMetadataQuery(query);\n const queryBytes = encodeSpreadsheetMetadataKernelQuery(normalized);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"spreadsheet metadata response is malformed\");\n }\n return decodeSpreadsheetMetadataKernelProjection(result.segments[0]!, normalized);\n });\n }\n\n async queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection> {\n if (this.initialization.modality !== \"document\") {\n throw clientError(\"modality_mismatch\", \"document query requires a document Worker\", false);\n }\n const queryBytes = encodeDocumentArtifactQuery(query);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"document projection response is malformed\");\n }\n return decodeDocumentArtifactQueryResponse(result.segments[0]!);\n });\n }\n\n async queryPresentation(\n query: EditablePresentationQuery,\n ): Promise<EditablePresentationProjection> {\n if (this.initialization.modality !== \"presentation\") {\n throw clientError(\n \"modality_mismatch\",\n \"presentation query requires a presentation Worker\",\n false,\n );\n }\n const queryBytes = encodePresentationArtifactQuery(query);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"presentation projection response is malformed\");\n }\n if (result.segments[0]!.byteLength > query.maxBytes) {\n throw clientError(\n \"invalid_response\",\n \"presentation projection exceeds its requested bound\",\n );\n }\n const response = decodePresentationArtifactQueryResponse(result.segments[0]!);\n assertPresentationProjectionMatchesQuery(query, response);\n return response;\n });\n }\n\n async queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection> {\n const response = await this.queryPresentation(query);\n if (response.kind !== \"slide-catalog\") {\n throw clientError(\"invalid_response\", \"presentation slide catalog response is malformed\");\n }\n return response;\n }\n\n async queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection> {\n const response = await this.queryPresentation(query);\n if (response.kind !== \"editor-slide\") {\n throw clientError(\"invalid_response\", \"presentation editor slide response is malformed\");\n }\n return response;\n }\n\n restart(): void {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n this.retire(\n this.active,\n clientError(\"worker_restarted\", \"artifact Worker generation was retired\", true),\n );\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n const active = this.active;\n if (active?.initialized && this.active === active) {\n await this.requestOn(\n active,\n ArtifactWorkerRpcKind.Dispose,\n undefined,\n undefined,\n 1_000,\n ).catch(() => {});\n }\n this.retire(active, clientError(\"disposed\", \"artifact Worker client is disposed\"));\n }\n\n private async request(\n kind: ArtifactWorkerRpcKind,\n metadata?: Uint8Array,\n segments?: ArrayBuffer[],\n ): Promise<RpcResult> {\n const active = await this.ensureActive();\n return await this.requestOn(active, kind, metadata, segments, this.requestTimeoutMs);\n }\n\n private async ensureActive(): Promise<WorkerGeneration> {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n if (!this.active) this.spawn();\n const active = this.active!;\n await active.ready;\n if (this.active !== active) return await this.ensureActive();\n return active;\n }\n\n private spawn(): void {\n this.generationCounter += 1;\n if (this.generationCounter > 0xffffffff) {\n throw clientError(\"generation_exhausted\", \"artifact Worker generation space is exhausted\");\n }\n const endpoint = this.workerFactory(this.workerUrl, {\n type: \"module\",\n name: `opengeni-artifact-${this.generationCounter}`,\n });\n const active: WorkerGeneration = {\n endpoint,\n generation: this.generationCounter,\n nextRequestId: 1,\n pending: new Map(),\n ready: Promise.resolve(),\n initialized: false,\n onMessage: () => {},\n onError: () => {},\n };\n active.onMessage = (event) => this.receive(active, event);\n active.onError = (event) => {\n this.retire(\n active,\n clientError(\n \"worker_crashed\",\n event.message || \"artifact Worker crashed\",\n true,\n event.error,\n ),\n );\n };\n endpoint.addEventListener(\"message\", active.onMessage);\n endpoint.addEventListener(\"error\", active.onError);\n endpoint.addEventListener(\"messageerror\", active.onError);\n this.active = active;\n active.ready = this.requestOn(\n active,\n ArtifactWorkerRpcKind.Initialize,\n encodeInitialize(this.initialization),\n undefined,\n this.initializationTimeoutMs,\n )\n .then((result) => {\n requireEmptyResult(result, \"initialize\");\n active.initialized = true;\n })\n .catch((error: unknown) => {\n const failure =\n error instanceof Error\n ? error\n : clientError(\"initialization_failed\", \"artifact Worker initialization failed\", true);\n this.retire(active, failure);\n throw failure;\n });\n active.ready.catch(() => {});\n }\n\n private requestOn(\n active: WorkerGeneration,\n kind: ArtifactWorkerRpcKind,\n metadata: Uint8Array | undefined,\n segments: ArrayBuffer[] | undefined,\n timeoutMs: number,\n ): Promise<RpcResult> {\n if (this.active !== active) {\n return Promise.reject(\n clientError(\"stale_generation\", \"artifact Worker generation is retired\", true),\n );\n }\n const requestId = nextRequestId(active);\n const message = encodeArtifactWorkerRpcMessage({\n kind,\n generation: active.generation,\n requestId,\n ...(metadata ? { metadata } : {}),\n ...(segments ? { segments } : {}),\n limits: this.rpcLimits,\n });\n return new Promise<RpcResult>((resolve, reject) => {\n const timeout = setTimeout(() => {\n if (!active.pending.has(requestId)) return;\n this.sendCancel(active, requestId);\n this.retire(\n active,\n clientError(\"worker_timeout\", `artifact Worker request exceeded ${timeoutMs}ms`, true),\n );\n }, timeoutMs);\n active.pending.set(requestId, { resolve, reject, timeout });\n try {\n active.endpoint.postMessage(message, transferListForArtifactWorkerRpcMessage(message));\n } catch (error) {\n clearTimeout(timeout);\n active.pending.delete(requestId);\n const failure = clientError(\n \"post_failed\",\n \"failed to post artifact Worker request\",\n true,\n error,\n );\n reject(failure);\n this.retire(active, failure);\n }\n });\n }\n\n private receive(active: WorkerGeneration, event: ArtifactWorkerClientMessageEvent): void {\n if (this.active !== active) return;\n let frame;\n try {\n frame = decodeArtifactWorkerRpcMessage(event.data, this.rpcLimits);\n } catch (error) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker sent an invalid frame\", true, error),\n );\n return;\n }\n if (frame.generation !== active.generation) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker response generation is invalid\", true),\n );\n return;\n }\n if (\n frame.flags !== 0 ||\n (frame.kind !== ArtifactWorkerRpcKind.Response && frame.kind !== ArtifactWorkerRpcKind.Error)\n ) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker sent an unexpected frame\", true),\n );\n return;\n }\n const pending = active.pending.get(frame.requestId);\n if (!pending) return;\n active.pending.delete(frame.requestId);\n clearTimeout(pending.timeout);\n if (frame.kind === ArtifactWorkerRpcKind.Error) {\n if (frame.segments.length !== 0) {\n pending.reject(clientError(\"invalid_response\", \"artifact Worker error has segments\", true));\n return;\n }\n try {\n const error = decodeErrorPayload(frame.metadata);\n pending.reject(\n new ArtifactWorkerClientError(error.code, error.message, { retryable: error.retryable }),\n );\n } catch (decodeError) {\n pending.reject(\n clientError(\"invalid_response\", \"artifact Worker error is malformed\", true, decodeError),\n );\n }\n return;\n }\n pending.resolve({ metadata: frame.metadata, segments: frame.segments });\n }\n\n private sendCancel(active: WorkerGeneration, requestId: number): void {\n if (this.active !== active) return;\n try {\n const message = encodeArtifactWorkerRpcMessage({\n kind: ArtifactWorkerRpcKind.Cancel,\n generation: active.generation,\n requestId,\n limits: this.rpcLimits,\n });\n active.endpoint.postMessage(message, transferListForArtifactWorkerRpcMessage(message));\n } catch {\n // The watchdog immediately terminates the generation; cancel is best-effort.\n }\n }\n\n private retire(active: WorkerGeneration | null, error: Error): void {\n if (!active || this.active !== active) return;\n this.active = null;\n active.endpoint.removeEventListener(\"message\", active.onMessage);\n active.endpoint.removeEventListener(\"error\", active.onError);\n active.endpoint.removeEventListener(\"messageerror\", active.onError);\n active.endpoint.terminate();\n for (const request of active.pending.values()) {\n clearTimeout(request.timeout);\n request.reject(error);\n }\n active.pending.clear();\n }\n\n private pendingSegments(\n transactions: readonly EditableArtifactPendingTransaction[],\n committedTransaction?: Uint8Array,\n ): ArrayBuffer[] {\n const segments: ArrayBuffer[] = [];\n if (committedTransaction) {\n const segment = this.ownedSegment(\n committedTransaction,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed transaction\",\n );\n segments.push(segment);\n }\n for (const transaction of transactions) {\n const command = this.ownedSegment(\n transaction.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const intent = this.ownedSegment(\n transaction.intentBytes,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n \"pending intent\",\n );\n segments.push(command, intent);\n }\n return segments;\n }\n\n private measurePendingTransfer(\n transactions: readonly EditableArtifactPendingTransaction[],\n committedTransaction?: Uint8Array,\n ): number {\n if (\n !Array.isArray(transactions) ||\n transactions.length > this.initialization.maximumPendingTransactions\n ) {\n throw clientError(\"limit_exceeded\", \"pending transaction count exceeds its limit\");\n }\n let pendingBytes = 0;\n for (const transaction of transactions) {\n const commandBytes = this.segmentByteLength(\n transaction.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const intentBytes = this.segmentByteLength(\n transaction.intentBytes,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n \"pending intent\",\n );\n pendingBytes += commandBytes + intentBytes;\n if (!Number.isSafeInteger(pendingBytes) || pendingBytes > this.maximumPendingAggregateBytes) {\n throw clientError(\"limit_exceeded\", \"pending transfer exceeds its aggregate byte limit\");\n }\n }\n const committedBytes =\n committedTransaction === undefined\n ? 0\n : this.segmentByteLength(\n committedTransaction,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed transaction\",\n );\n return pendingBytes + committedBytes;\n }\n\n private async withAdmission<T>(transferBytes: number, operation: () => Promise<T>): Promise<T> {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n if (\n this.admittedRequests >= MAX_CLIENT_QUEUED_REQUESTS ||\n !Number.isSafeInteger(this.admittedTransferBytes + transferBytes) ||\n this.admittedTransferBytes + transferBytes > this.maximumQueuedTransferBytes\n ) {\n throw clientError(\n \"client_busy\",\n \"artifact Worker request queue exceeds its bounded capacity\",\n true,\n );\n }\n this.admittedRequests += 1;\n this.admittedTransferBytes += transferBytes;\n try {\n return await operation();\n } finally {\n this.admittedRequests -= 1;\n this.admittedTransferBytes -= transferBytes;\n }\n }\n\n private segmentByteLength(bytes: Uint8Array, maximumBytes: number, label: string): number {\n if (!(bytes instanceof Uint8Array) || bytes.byteLength === 0) {\n throw clientError(\"invalid_bytes\", `${label} must be non-empty bytes`);\n }\n if (bytes.byteLength > maximumBytes) {\n throw clientError(\"limit_exceeded\", `${label} exceeds its byte limit`);\n }\n return bytes.byteLength;\n }\n\n private ownedSegment(bytes: Uint8Array, maximumBytes: number, label: string): ArrayBuffer {\n this.segmentByteLength(bytes, maximumBytes, label);\n return ownedTransferBuffer(bytes);\n }\n}\n\nfunction nextRequestId(active: WorkerGeneration): number {\n for (let attempts = 0; attempts < 0xffffffff; attempts += 1) {\n const candidate = active.nextRequestId;\n active.nextRequestId = candidate === 0xffffffff ? 1 : candidate + 1;\n if (!active.pending.has(candidate)) return candidate;\n }\n throw clientError(\"request_exhausted\", \"artifact Worker request id space is exhausted\");\n}\n\nfunction requireEmptyResult(result: RpcResult, label: string): void {\n if (result.metadata.byteLength !== 0 || result.segments.length !== 0) {\n throw clientError(\"invalid_response\", `${label} response must be empty`);\n }\n}\n\nfunction canonicalUrl(input: string | URL, label: string): URL {\n let url: URL;\n try {\n url = input instanceof URL ? new URL(input.href) : new URL(input);\n } catch (error) {\n throw clientError(\"invalid_asset_url\", `${label} must be an absolute URL`, false, error);\n }\n if (url.username || url.password || url.hash) {\n throw clientError(\"invalid_asset_url\", `${label} must not contain credentials or a fragment`);\n }\n return url;\n}\n\nfunction validateAssetPolicy(\n urls: readonly URL[],\n applicationOrigin: string | null,\n configuredOrigins: readonly string[],\n allowInsecureDevelopmentAssets: boolean,\n): void {\n const allowedOrigins = new Set<string>();\n if (applicationOrigin !== null) allowedOrigins.add(applicationOrigin);\n for (const originInput of configuredOrigins) {\n const origin = canonicalUrl(originInput, \"allowedAssetOrigins entry\").origin;\n allowedOrigins.add(origin);\n }\n for (const url of urls) {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\" && url.protocol !== \"file:\") {\n throw clientError(\"invalid_asset_url\", `unsupported artifact asset scheme: ${url.protocol}`);\n }\n const loopback =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n const secure = url.protocol === \"https:\" || (url.protocol === \"http:\" && loopback);\n if (!secure && !allowInsecureDevelopmentAssets) {\n throw clientError(\n \"insecure_asset_url\",\n \"artifact Worker assets must use HTTPS (loopback HTTP allowed)\",\n );\n }\n if (!allowedOrigins.has(url.origin)) {\n throw clientError(\n \"untrusted_asset_origin\",\n `artifact Worker asset origin is not allowed: ${url.origin}`,\n );\n }\n }\n}\n\nfunction resolveApplicationOrigin(input: string | URL | undefined): string | null {\n if (input !== undefined) return canonicalUrl(input, \"applicationOrigin\").origin;\n const location = globalThis.location;\n if (location && typeof location.origin === \"string\" && location.origin !== \"null\") {\n return canonicalUrl(location.origin, \"application origin\").origin;\n }\n return null;\n}\n\nfunction boundedMaximum(value: number, hardMaximum: number, label: string): number {\n positiveSafeInteger(value, label);\n if (value > hardMaximum)\n throw clientError(\"invalid_limit\", `${label} exceeds its hard safety ceiling`);\n return value;\n}\n\nfunction normalizeClientRpcLimits(\n input: Readonly<ArtifactWorkerRpcLimits>,\n): Readonly<ArtifactWorkerRpcLimits> {\n const values = {\n maxMetadataBytes: positiveSafeInteger(input.maxMetadataBytes, \"rpcLimits.maxMetadataBytes\"),\n maxSegmentBytes: positiveSafeInteger(input.maxSegmentBytes, \"rpcLimits.maxSegmentBytes\"),\n maxTotalSegmentBytes: positiveSafeInteger(\n input.maxTotalSegmentBytes,\n \"rpcLimits.maxTotalSegmentBytes\",\n ),\n maxSegments: positiveSafeInteger(input.maxSegments, \"rpcLimits.maxSegments\"),\n };\n for (const key of Object.keys(values) as Array<keyof ArtifactWorkerRpcLimits>) {\n if (values[key] > DEFAULT_ARTIFACT_WORKER_RPC_LIMITS[key]) {\n throw clientError(\n \"invalid_limit\",\n `rpcLimits.${key} exceeds the dedicated Worker hard limit`,\n );\n }\n }\n return Object.freeze(values);\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw clientError(\"invalid_number\", `${label} must be a positive safe integer`);\n }\n return value;\n}\n\nfunction positiveVersion(value: number, label: string): number {\n const version = positiveSafeInteger(value, label);\n if (version > 65_535) throw clientError(\"invalid_number\", `${label} exceeds uint16`);\n return version;\n}\n\nfunction boundedVersion(value: string, label: string): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.trim() !== value ||\n new TextEncoder().encode(value).byteLength > 512\n ) {\n throw clientError(\"invalid_runtime_identity\", `${label} is malformed`);\n }\n return value;\n}\n\nfunction normalizeViewportQuery(\n query: EditableSpreadsheetViewportQuery,\n): SpreadsheetArtifactViewportQuery {\n if (!query || typeof query !== \"object\") {\n throw clientError(\"invalid_query\", \"spreadsheet viewport query must be an object\");\n }\n const sheetId = spreadsheetSheetId(requireStableId(query.sheetId, \"query.sheetId\"));\n const startRow = uint32(query.startRow, \"query.startRow\");\n const startColumn = uint32(query.startColumn, \"query.startColumn\");\n const rowCount = positiveUint32(query.rowCount, \"query.rowCount\");\n const columnCount = positiveUint32(query.columnCount, \"query.columnCount\");\n if (startRow + rowCount - 1 > UINT32_MAX || startColumn + columnCount - 1 > UINT32_MAX) {\n throw clientError(\"invalid_query\", \"spreadsheet viewport exceeds uint32 coordinates\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > MAX_VIEWPORT_AREA) {\n throw clientError(\"limit_exceeded\", `spreadsheet viewport exceeds ${MAX_VIEWPORT_AREA} cells`);\n }\n const maxCells = positiveUint32(\n query.maxCells ?? SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n \"query.maxCells\",\n );\n const maxBytes = positiveUint32(\n query.maxBytes ?? SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n \"query.maxBytes\",\n );\n if (maxCells > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw clientError(\"limit_exceeded\", \"spreadsheet viewport maxCells exceeds its hard bound\");\n }\n if (maxBytes > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw clientError(\"limit_exceeded\", \"spreadsheet viewport maxBytes exceeds its hard bound\");\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction normalizeMetadataQuery(\n query: EditableSpreadsheetMetadataQuery,\n): Required<EditableSpreadsheetMetadataQuery> {\n if (!query || typeof query !== \"object\") {\n throw clientError(\"invalid_query\", \"spreadsheet metadata query must be an object\");\n }\n const maxSheets = positiveUint32(query.maxSheets ?? 4_096, \"query.maxSheets\");\n const maxBytes = positiveUint32(\n query.maxBytes ?? SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n \"query.maxBytes\",\n );\n if (maxSheets > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw clientError(\"limit_exceeded\", \"spreadsheet metadata maxSheets exceeds its hard bound\");\n }\n if (maxBytes > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw clientError(\"limit_exceeded\", \"spreadsheet metadata maxBytes exceeds its hard bound\");\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction assertPresentationProjectionMatchesQuery(\n query: EditablePresentationQuery,\n response: EditablePresentationProjection,\n): void {\n if (query.kind !== response.kind) {\n throw clientError(\"invalid_response\", \"presentation projection kind does not match its query\");\n }\n if (query.kind === \"resolved-slide\" && response.kind === \"resolved-slide\") {\n if (response.slideId !== query.slideId || response.nodes.length > query.maxNodes)\n throw clientError(\n \"invalid_response\",\n \"resolved presentation projection does not match its query\",\n );\n } else if (query.kind === \"slide-catalog\" && response.kind === \"slide-catalog\") {\n if (\n response.startSlide !== query.startSlide ||\n response.slides.length > query.maxSlides ||\n response.projectedTextBytes > query.maxTextBytes\n )\n throw clientError(\"invalid_response\", \"presentation slide catalog does not match its query\");\n } else if (query.kind === \"editor-slide\" && response.kind === \"editor-slide\") {\n if (\n response.slide.id !== query.slideId ||\n response.nodes.length > query.maxNodes ||\n response.projectedTextBytes > query.maxTextBytes\n )\n throw clientError(\"invalid_response\", \"presentation editor slide does not match its query\");\n } else if (\n (query.kind === \"viewport\" || query.kind === \"hit-test\") &&\n (response.kind === \"viewport\" || response.kind === \"hit-test\") &&\n response.nodes.length > query.maxNodes\n ) {\n throw clientError(\"invalid_response\", \"presentation projection exceeds its requested nodes\");\n }\n}\n\nfunction uint32(value: number, label: string): number {\n if (!Number.isInteger(value) || value < 0 || value > UINT32_MAX) {\n throw clientError(\"invalid_query\", `${label} must be a uint32`);\n }\n return value;\n}\n\nfunction positiveUint32(value: number, label: string): number {\n const output = uint32(value, label);\n if (output === 0) throw clientError(\"invalid_query\", `${label} must be positive`);\n return output;\n}\n\nfunction requireStableId(value: string, label: string): string {\n if (!/^[0-9a-f]{32}$/u.test(value) || /^0+$/u.test(value)) {\n throw clientError(\n \"invalid_query\",\n `${label} must be nonzero fixed-width lowercase hexadecimal text`,\n );\n }\n return value;\n}\n\nfunction requireModality(value: unknown): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw clientError(\"invalid_modality\", \"artifact modality is invalid\");\n }\n return value;\n}\n\nfunction defaultWorkerFactory(\n url: URL,\n options: { type: \"module\"; name: string },\n): ArtifactWorkerClientEndpoint {\n if (typeof globalThis.Worker !== \"function\") {\n throw clientError(\n \"worker_unavailable\",\n \"browser artifact Worker is unavailable in this SSR/runtime environment\",\n );\n }\n return new globalThis.Worker(url, options) as unknown as ArtifactWorkerClientEndpoint;\n}\n\nfunction clientError(\n code: string,\n message: string,\n retryable = false,\n cause?: unknown,\n): ArtifactWorkerClientError {\n return new ArtifactWorkerClientError(code, message, {\n retryable,\n ...(cause === undefined ? {} : { cause }),\n });\n}\n","import {\n createEditableArtifactSyncController,\n editableArtifactCacheNamespace,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactSyncController,\n} from \"./controller\";\nimport type { EditableArtifactId } from \"./types\";\n\nexport type EditableArtifactSyncLease = {\n controller: EditableArtifactSyncController;\n release: () => void;\n};\n\nexport type EditableArtifactSyncControllerFactory = (\n artifactId: EditableArtifactId,\n) => CreateEditableArtifactSyncControllerOptions;\n\n/** Owns one ref-counted controller per exact auth/cache authority + artifact. */\nexport class EditableArtifactSyncPool {\n private readonly entries = new Map<\n string,\n {\n controller: EditableArtifactSyncController;\n references: number;\n retirementRevision: number;\n }\n >();\n\n constructor(private readonly optionsFor: EditableArtifactSyncControllerFactory) {}\n\n acquire(artifactId: EditableArtifactId): EditableArtifactSyncLease {\n // Resolve current authority on every acquisition. A pool may outlive one\n // login; artifact id alone is never sufficient cache/socket identity.\n const options = this.optionsFor(artifactId);\n const key = JSON.stringify([\n editableArtifactCacheNamespace(options.storageAuthority),\n artifactId,\n ]);\n let entry = this.entries.get(key);\n if (!entry) {\n const controller = createEditableArtifactSyncController(options);\n entry = { controller, references: 0, retirementRevision: 0 };\n this.entries.set(key, entry);\n controller.start();\n }\n entry.retirementRevision += 1;\n entry.references += 1;\n let released = false;\n return {\n controller: entry.controller,\n release: () => {\n if (released) return;\n released = true;\n const current = this.entries.get(key);\n if (!current || current.controller !== entry?.controller) return;\n current.references -= 1;\n if (current.references === 0) {\n const retirementRevision = ++current.retirementRevision;\n // React StrictMode and route transitions may release/reacquire in the\n // same task. Keep the one live controller through that handoff.\n queueMicrotask(() => {\n const latest = this.entries.get(key);\n if (\n latest !== current ||\n latest.references !== 0 ||\n latest.retirementRevision !== retirementRevision\n ) {\n return;\n }\n this.entries.delete(key);\n void latest.controller.close();\n });\n }\n },\n };\n }\n\n get size(): number {\n return this.entries.size;\n }\n}\n","export {\n createEditableArtifactSyncController,\n editableArtifactCacheNamespace,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactCacheAuthority,\n type EditableArtifactQueueCommandsInput,\n type EditableArtifactSyncController,\n} from \"./controller\";\nexport {\n createBrowserEditableArtifactSession,\n createEditableArtifactReplicaId,\n} from \"./browser-session\";\nexport type {\n CreateBrowserEditableArtifactSessionOptions,\n EditableArtifactBrowserRuntime,\n} from \"./browser-session\";\nexport { EditableArtifactSyncError, EditableArtifactTransportError } from \"./errors\";\nexport type { EditableArtifactSyncErrorCode } from \"./errors\";\nexport { createEditableArtifactHttpLiveTransport } from \"./http-live-transport\";\nexport type {\n CreateEditableArtifactHttpLiveTransportOptions,\n EditableArtifactWebSocketCloseEvent,\n EditableArtifactWebSocketLike,\n EditableArtifactWebSocketMessageEvent,\n} from \"./http-live-transport\";\nexport {\n EditableArtifactStorageConflictError,\n IndexedDbEditableArtifactStorage,\n MemoryEditableArtifactStorage,\n} from \"./storage\";\nexport type {\n EditableArtifactAppendCommittedInput,\n EditableArtifactExpectedStoredHead,\n EditableArtifactStoragePort,\n EditableArtifactStorageScope,\n IndexedDbEditableArtifactStorageOptions,\n} from \"./storage\";\nexport { EditableArtifactSyncPool } from \"./pool\";\nexport type { EditableArtifactSyncControllerFactory, EditableArtifactSyncLease } from \"./pool\";\nexport { createEditableArtifactSession } from \"./session\";\nexport type {\n CreateEditableArtifactSessionOptions,\n ApplySerializedArtifactCommandsOptions,\n ApplySpreadsheetCommandsOptions,\n CreateDocumentParagraphInput,\n CreateDocumentParagraphResult,\n CreatePresentationSlideInput,\n CreatePresentationSlideResult,\n CreateSpreadsheetSheetInput,\n CreateSpreadsheetSheetResult,\n EditableArtifactSession,\n EditableSpreadsheetMetadataListener,\n EditableSpreadsheetViewportListener,\n EditableSpreadsheetViewportSubscriptionOptions,\n} from \"./session\";\nexport type {\n EditableArtifactBootstrap,\n EditableArtifactBlockedPending,\n EditableArtifactCausalEntry,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactId,\n EditableArtifactModality,\n EditableArtifactLiveClose,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactPendingTransaction,\n EditableArtifactSerializedCommittedTransaction,\n EditableArtifactSerializedModality,\n EditableArtifactSerializedPendingTransaction,\n EditableArtifactSerializedSnapshot,\n EditableArtifactReplayPage,\n EditableArtifactSnapshot,\n EditableArtifactSpreadsheetCommittedTransaction,\n EditableArtifactSpreadsheetPendingTransaction,\n EditableArtifactSpreadsheetSnapshot,\n EditableArtifactStoredReplica,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncListener,\n EditableArtifactSyncScheduler,\n EditableArtifactSyncState,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n EditableSpreadsheetCellValue,\n EditableSpreadsheetFormulaError,\n EditableSpreadsheetMetadataProjection,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetProjectedCell,\n EditableSpreadsheetSheetMetadata,\n EditableSpreadsheetUsedBounds,\n EditableSpreadsheetViewportProjection,\n EditableSpreadsheetViewportQuery,\n} from \"./types\";\nexport {\n ArtifactWorkerClientError,\n createBrowserEditableArtifactWorkerKernel,\n} from \"./worker/browser-client\";\nexport type {\n ArtifactWorkerClientEndpoint,\n ArtifactWorkerClientErrorEvent,\n ArtifactWorkerClientMessageEvent,\n BrowserEditableArtifactWorkerKernel,\n CreateBrowserEditableArtifactWorkerKernelOptions,\n} from \"./worker/browser-client\";\n\n// Exact spreadsheet command construction used by SDK-backed UI adapters.\n// Re-exporting the narrow codec leaf keeps React consumers on the SDK public\n// boundary instead of coupling them directly to contracts internals.\nexport {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n editableArtifactStableId,\n spreadsheetSheetId,\n type SpreadsheetArtifactCommandBatch,\n type SpreadsheetCellInput,\n type SpreadsheetSheetGeneration,\n} from \"@opengeni/contracts/spreadsheet-artifact-commands\";\n\nexport {\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n encodeDocumentArtifactCommandBatch,\n type DocumentArtifactCommand,\n type DocumentArtifactCommandBatch,\n type DocumentArtifactCommentReply,\n type DocumentArtifactId,\n type DocumentArtifactPageGeometry,\n type DocumentArtifactPageGeometryProjection,\n type DocumentArtifactParagraphStyle,\n type DocumentArtifactProjection,\n type DocumentArtifactProjectionItem,\n type DocumentArtifactQuery,\n type DocumentArtifactQueryLimits,\n type DocumentArtifactTableStyle,\n type DocumentArtifactTextRange,\n type DocumentArtifactTextRun,\n type DocumentArtifactTextStyle,\n type DocumentArtifactTextStylePatch,\n} from \"@opengeni/contracts/document-artifact-commands\";\n\nexport {\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n PRESENTATION_ARTIFACT_QUERY_MAX_NODES,\n PRESENTATION_ARTIFACT_QUERY_MAX_SLIDES,\n PRESENTATION_ARTIFACT_QUERY_MAX_TEXT_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encodePresentationArtifactCommandBatch,\n type PresentationArtifactEditorSceneNode,\n type PresentationArtifactEditorSlideResponse,\n type PresentationArtifactFill,\n type PresentationArtifactLine,\n type PresentationArtifactNodeKind,\n type PresentationArtifactOwner,\n type PresentationArtifactRect,\n type PresentationArtifactRichText,\n type PresentationArtifactCommand,\n type PresentationArtifactCommandBatch,\n type PresentationArtifactSlideCatalogItem,\n type PresentationArtifactSlideCatalogResponse,\n type PresentationArtifactSlideLayoutFacts,\n type PresentationArtifactTableCell,\n type PresentationArtifactTextParagraph,\n type PresentationArtifactTextRun,\n type PresentationArtifactTextStyle,\n type PresentationArtifactTransform,\n} from \"@opengeni/contracts/presentation-artifact-commands\";\n"],"mappings":"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","names":["decodeEditableArtifactMutationIntent","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","hashEditableArtifactMutationIntentBytes","decodeCommittedTransactionSummary","editableArtifactCodecFor","decodeEditableArtifactSerializedCommit","summary","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","bytesEqual","identifiersEqual","cloneFrontier","cloneSnapshot","connection","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","decodeEditableArtifactMutationIntent","editableArtifactCodecFor","frontiersEqual","hashEditableArtifactMutationIntentBytes","summary","decodeCommittedTransactionSummary","decodeEditableArtifactSerializedCommit","DOCUMENT_ARTIFACT_COMMAND_VERSION","PRESENTATION_ARTIFACT_COMMAND_VERSION","SPREADSHEET_ARTIFACT_COMMAND_VERSION","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","hashEditableArtifactMutationIntentBytes","MAX_COMMITTED_TRANSACTION_BYTES","DEFAULT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","positiveU16","requireStableId","requireReplicaId","safeSequence","cloneFrontier","cloneCommitted","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","hashEditableArtifactMutationIntentBytes","requireSha256","MAX_COMMITTED_TRANSACTION_BYTES","frontiersEqual","requireModality","asError","value","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","spreadsheetSheetId","DEFAULT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","DEFAULT_MAX_COMMAND_BYTES","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","DEFAULT_MAX_PENDING_TRANSACTIONS","MAX_VIEWPORT_AREA","UINT32_MAX","requireModality","positiveSafeInteger","normalizeViewportQuery","normalizeMetadataQuery","location","spreadsheetSheetId","requireStableId","uint32","positiveUint32","positiveVersion","SPREADSHEET_ARTIFACT_COMMAND_VERSION","DOCUMENT_ARTIFACT_COMMAND_VERSION","PRESENTATION_ARTIFACT_COMMAND_VERSION","SPREADSHEET_ARTIFACT_COMMAND_VERSION","editableArtifactStableId","spreadsheetSheetId","DOCUMENT_ARTIFACT_COMMAND_VERSION","encodeDocumentArtifactCommandBatch","PRESENTATION_ARTIFACT_COMMAND_VERSION","encodePresentationArtifactCommandBatch"]}
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifacts/controller.ts","../src/editable-artifacts/errors.ts","../src/editable-artifacts/open-failure.ts","../src/editable-artifacts/storage.ts","../src/editable-artifacts/browser-session.ts","../src/editable-artifacts/http-live-transport.ts","../src/editable-artifacts/session.ts","../src/editable-artifacts/worker/browser-client.ts","../src/editable-artifacts/pool.ts","../src/editable-artifacts/index.ts"],"sourcesContent":["import {\n decodeEditableArtifactMutationIntent,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n decodeCommittedTransactionSummary,\n MAX_COMMITTED_TRANSACTION_BYTES,\n} from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { editableArtifactCodecFor } from \"@opengeni/contracts/editable-artifact-codec-registry\";\nimport { EDITABLE_ARTIFACT_LIVE_WIRE_VERSION } from \"@opengeni/contracts/editable-artifact-live\";\nimport { decodeEditableArtifactSerializedCommit } from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport { SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from \"@opengeni/contracts/editable-artifact-versions\";\nimport { EditableArtifactSyncError } from \"./errors\";\nimport {\n classifyEditableArtifactOpenFailure,\n type EditableArtifactOpenFailureReporter,\n} from \"./open-failure\";\nimport { EditableArtifactStorageConflictError } from \"./storage\";\nimport type { EditableArtifactStoragePort, EditableArtifactStorageScope } from \"./storage\";\nimport type {\n EditableArtifactBootstrap,\n EditableArtifactBlockedPending,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactId,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactSerializedCommittedTransaction,\n EditableArtifactSerializedModality,\n EditableArtifactSerializedSnapshot,\n EditableArtifactSpreadsheetCommittedTransaction,\n EditableArtifactSpreadsheetPendingTransaction,\n EditableArtifactSpreadsheetSnapshot,\n EditableArtifactStoredReplica,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncListener,\n EditableArtifactSyncScheduler,\n EditableArtifactSyncState,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n} from \"./types\";\n\nconst DEFAULT_REPLAY_PAGE_SIZE = 256;\nconst DEFAULT_MAX_QUEUE_MESSAGES = 512;\nconst DEFAULT_MAX_QUEUE_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_STORED_TAIL = 8_192;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst DEFAULT_MAX_OPERATION_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_REPLAY_PAGE_BYTES = 32 * 1024 * 1024;\nconst DEFAULT_MAX_PENDING_TRANSACTIONS = 256;\nconst DEFAULT_MAX_PENDING_BYTES = 32 * 1024 * 1024;\nconst DEFAULT_MIN_TICKET_TTL_MS = 5_000;\nconst MAX_IDENTIFIER_BYTES = 256;\nconst MAX_KERNEL_VERSION_BYTES = 512;\nconst MAX_TICKET_BYTES = 4_096;\nconst MAX_FRONTIER_ACTORS = 1_024;\n\nexport type CreateEditableArtifactSyncControllerOptions = {\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n /** Authenticated cache authority; every field participates in IndexedDB partitioning. */\n storageAuthority: EditableArtifactCacheAuthority;\n transport: EditableArtifactSyncTransport;\n storage: EditableArtifactStoragePort;\n kernel: EditableArtifactWorkerKernel;\n kernelVersion: string;\n modelSchemaVersion: number;\n commandVersion: number;\n protocolVersion: number;\n replayPageSize?: number;\n maxQueuedMessages?: number;\n maxQueuedBytes?: number;\n maxStoredTailTransactions?: number;\n maxSnapshotBytes?: number;\n maxCommandBytes?: number;\n maxCommittedTransactionBytes?: number;\n maxReplayPageBytes?: number;\n maxPendingTransactions?: number;\n maxPendingBytes?: number;\n minTicketTtlMs?: number;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n maxReconnectAttempts?: number;\n scheduler?: EditableArtifactSyncScheduler;\n clientTransactionIdFactory?: () => string;\n /** Receives bounded categories/codes only; never workbook or formula content. */\n onOpenFailure?: EditableArtifactOpenFailureReporter;\n /** Tests/embedded runtimes may inject; defaults to a fresh per-controller UUID. */\n writerReplicaIdFactory?: () => string;\n};\n\nexport type EditableArtifactCacheAuthority = {\n deploymentOrigin: string;\n accountId: string;\n workspaceId: string;\n principalId: string;\n /** Host-auth revision/session epoch; rotate on logout, grant change, or account switch. */\n authorizationEpoch: string;\n};\n\nexport type EditableArtifactQueueCommandsInput = {\n commandBytes: Uint8Array;\n selectiveUndoTargets?: readonly string[];\n /** Optional deterministic ID for host-driven retries before WAL persistence. */\n clientTransactionId?: string;\n};\n\nexport type EditableArtifactSyncController = {\n readonly artifactId: EditableArtifactId;\n readonly modality: EditableArtifactModality;\n start: () => void;\n whenLive: () => Promise<void>;\n close: () => Promise<void>;\n getView: () => EditableArtifactSyncView;\n subscribe: (listener: EditableArtifactSyncListener) => () => void;\n /** Kernel authors/hashes the immutable envelope; SDK WAL persists before delivery. */\n queueCommands: (\n input: EditableArtifactQueueCommandsInput,\n ) => Promise<EditableArtifactPendingTransaction>;\n};\n\ntype QueuedLiveMessage = {\n message: EditableArtifactLiveMessage;\n bytes: number;\n};\n\ntype LiveWaiter = {\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\ntype ControllerReplicaCommon = {\n cursor: number;\n stateHash: string;\n updatedAt: number;\n};\n\ntype ControllerReplica = ControllerReplicaCommon &\n (\n | {\n modality: \"spreadsheet\";\n snapshot: EditableArtifactSpreadsheetSnapshot;\n causalFrontier: EditableArtifactCausalFrontier;\n }\n | {\n modality: EditableArtifactSerializedModality;\n snapshot: EditableArtifactSerializedSnapshot;\n nativeRevision: number;\n }\n );\n\nexport function createEditableArtifactSyncController(\n options: CreateEditableArtifactSyncControllerOptions,\n): EditableArtifactSyncController {\n return new EditableArtifactSyncControllerImpl(options);\n}\n\nclass EditableArtifactSyncControllerImpl implements EditableArtifactSyncController {\n readonly artifactId: EditableArtifactId;\n readonly modality: EditableArtifactModality;\n\n private readonly transport: EditableArtifactSyncTransport;\n private readonly storage: EditableArtifactStoragePort;\n private readonly storageScope: EditableArtifactStorageScope;\n private readonly kernel: EditableArtifactWorkerKernel;\n private readonly writerReplicaId: string;\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly commandVersion: number;\n private readonly protocolVersion: number;\n private readonly replayPageSize: number;\n private readonly maxQueuedMessages: number;\n private readonly maxQueuedBytes: number;\n private readonly maxStoredTailTransactions: number;\n private readonly maxSnapshotBytes: number;\n private readonly maxCommandBytes: number;\n private readonly maxCommittedTransactionBytes: number;\n private readonly maxReplayPageBytes: number;\n private readonly maxPendingTransactions: number;\n private readonly maxPendingBytes: number;\n private readonly minTicketTtlMs: number;\n private readonly reconnectDelayMs: number;\n private readonly maxReconnectDelayMs: number;\n private readonly maxReconnectAttempts: number;\n private readonly scheduler: EditableArtifactSyncScheduler;\n private readonly clientTransactionIdFactory: () => string;\n private readonly onOpenFailure: EditableArtifactOpenFailureReporter | undefined;\n\n private readonly abortController = new AbortController();\n private readonly listeners = new Set<EditableArtifactSyncListener>();\n private readonly liveWaiters = new Set<LiveWaiter>();\n private readonly pending = new Map<string, EditableArtifactPendingTransaction>();\n private blockedPending: readonly EditableArtifactBlockedPending[] = [];\n private readonly submitBlockedPending = new Map<string, EditableArtifactBlockedPending>();\n\n private state: EditableArtifactSyncState = \"idle\";\n private cursor = 0;\n private headSequence = 0;\n private reconnectAttempt = 0;\n private lastError: Error | null = null;\n private writable = false;\n private replica: ControllerReplica | null = null;\n private retainedTailTransactions = 0;\n private retainedStorageHead: { cursor: number; stateHash: string } | null = null;\n private initialized = false;\n private initializeTask: Promise<void> | null = null;\n private runTask: Promise<void> | null = null;\n private activeTicket: EditableArtifactSyncTicket | null = null;\n private activeConnection: EditableArtifactLiveConnection | null = null;\n private activeLimits: EditableArtifactLiveLimits | null = null;\n private activeEpoch = 0;\n private connectionReady = false;\n private requireSnapshot = false;\n private queuedBytes = 0;\n private readonly liveQueue: QueuedLiveMessage[] = [];\n private drainTask: Promise<void> | null = null;\n private processingFailure: Error | null = null;\n private flushTask: Promise<void> | null = null;\n private readonly flushTasks = new Set<Promise<void>>();\n /**\n * Serializes every operation that moves the Worker and controller causal\n * heads. The Worker commits before its RPC response reaches this thread, so\n * authoring must not observe the controller cursor during that response gap.\n */\n private causalTail: Promise<void> = Promise.resolve();\n private resyncRevision = 0;\n private readonly submittedEpoch = new Map<string, number>();\n /** Receipt-proven mapping from authoritative OGACO/OGAST ids to caller OGATX ids. */\n private readonly acceptedMappings = new Map<\n string,\n Readonly<{ clientTransactionId: string; requestHash: string }>\n >();\n private lastLocalTransactionId: string | null = null;\n private lastLocalReplicaCounter = 0;\n\n constructor(options: CreateEditableArtifactSyncControllerOptions) {\n this.artifactId = requireStableId(options.artifactId, \"artifactId\");\n this.modality = requireModality(options.modality);\n this.transport = options.transport;\n this.storage = options.storage;\n this.storageScope = {\n namespace: editableArtifactCacheNamespace(options.storageAuthority),\n artifactId: this.artifactId,\n modality: this.modality,\n };\n this.kernel = options.kernel;\n this.writerReplicaId = boundedNonEmpty(\n (options.writerReplicaIdFactory ?? defaultWriterReplicaId)(),\n \"writerReplicaId\",\n MAX_IDENTIFIER_BYTES,\n );\n requireReplicaId(this.writerReplicaId, \"writerReplicaId\");\n this.kernelVersion = boundedNonEmpty(\n options.kernelVersion,\n \"kernelVersion\",\n MAX_KERNEL_VERSION_BYTES,\n );\n this.modelSchemaVersion = positiveSafeInteger(options.modelSchemaVersion, \"modelSchemaVersion\");\n this.commandVersion = positiveSafeInteger(options.commandVersion, \"commandVersion\");\n this.protocolVersion = positiveSafeInteger(options.protocolVersion, \"protocolVersion\");\n if (this.protocolVersion !== EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION) {\n throw new TypeError(\"protocolVersion is incompatible with the current intent protocol\");\n }\n this.replayPageSize = positiveSafeInteger(\n options.replayPageSize ?? DEFAULT_REPLAY_PAGE_SIZE,\n \"replayPageSize\",\n );\n this.maxQueuedMessages = positiveSafeInteger(\n options.maxQueuedMessages ?? DEFAULT_MAX_QUEUE_MESSAGES,\n \"maxQueuedMessages\",\n );\n this.maxQueuedBytes = positiveSafeInteger(\n options.maxQueuedBytes ?? DEFAULT_MAX_QUEUE_BYTES,\n \"maxQueuedBytes\",\n );\n this.maxStoredTailTransactions = positiveSafeInteger(\n options.maxStoredTailTransactions ?? DEFAULT_MAX_STORED_TAIL,\n \"maxStoredTailTransactions\",\n );\n this.maxSnapshotBytes = positiveSafeInteger(\n options.maxSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n \"maxSnapshotBytes\",\n );\n this.maxCommandBytes = positiveSafeInteger(\n options.maxCommandBytes ?? DEFAULT_MAX_COMMAND_BYTES,\n \"maxCommandBytes\",\n );\n if (this.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES) {\n throw new RangeError(\"maxCommandBytes exceeds the editable-artifact contract bound\");\n }\n this.maxCommittedTransactionBytes = positiveSafeInteger(\n options.maxCommittedTransactionBytes ?? DEFAULT_MAX_OPERATION_BYTES,\n \"maxCommittedTransactionBytes\",\n );\n this.maxReplayPageBytes = positiveSafeInteger(\n options.maxReplayPageBytes ?? DEFAULT_MAX_REPLAY_PAGE_BYTES,\n \"maxReplayPageBytes\",\n );\n this.maxPendingTransactions = positiveSafeInteger(\n options.maxPendingTransactions ?? DEFAULT_MAX_PENDING_TRANSACTIONS,\n \"maxPendingTransactions\",\n );\n this.maxPendingBytes = positiveSafeInteger(\n options.maxPendingBytes ?? DEFAULT_MAX_PENDING_BYTES,\n \"maxPendingBytes\",\n );\n this.minTicketTtlMs = nonNegativeSafeInteger(\n options.minTicketTtlMs ?? DEFAULT_MIN_TICKET_TTL_MS,\n \"minTicketTtlMs\",\n );\n this.reconnectDelayMs = nonNegativeSafeInteger(\n options.reconnectDelayMs ?? 250,\n \"reconnectDelayMs\",\n );\n this.maxReconnectDelayMs = nonNegativeSafeInteger(\n options.maxReconnectDelayMs ?? 5_000,\n \"maxReconnectDelayMs\",\n );\n this.maxReconnectAttempts =\n options.maxReconnectAttempts === undefined\n ? Number.POSITIVE_INFINITY\n : nonNegativeSafeInteger(options.maxReconnectAttempts, \"maxReconnectAttempts\");\n this.scheduler = options.scheduler ?? defaultScheduler;\n this.clientTransactionIdFactory =\n options.clientTransactionIdFactory ?? (() => crypto.randomUUID());\n this.onOpenFailure = options.onOpenFailure;\n }\n\n start(): void {\n if (this.runTask || this.state === \"closed\") return;\n this.runTask = this.run().catch((error: unknown) => {\n if (this.abortController.signal.aborted) return;\n const failure = asError(error);\n this.reportOpenFailure(failure);\n if (failure instanceof EditableArtifactSyncError && failure.code === \"unsupported_protocol\") {\n this.lastError = failure;\n this.setState(\"unsupported\");\n this.rejectLiveWaiters(failure);\n return;\n }\n this.fail(failure);\n });\n }\n\n async whenLive(): Promise<void> {\n if (this.state === \"live\") return;\n if (isTerminal(this.state)) throw this.lastError ?? new Error(`artifact sync is ${this.state}`);\n this.start();\n await new Promise<void>((resolve, reject) => {\n this.liveWaiters.add({ resolve, reject });\n });\n }\n\n async close(): Promise<void> {\n if (this.state === \"closed\") return;\n this.abortController.abort();\n this.activeEpoch += 1;\n this.connectionReady = false;\n this.activeConnection?.close(\"client_closed\");\n this.activeConnection = null;\n this.clearLiveQueue();\n if (this.runTask) await this.runTask.catch(() => {});\n await Promise.allSettled([...this.flushTasks]);\n await this.causalTail.catch(() => {});\n this.setState(\"closed\");\n this.rejectLiveWaiters(new Error(\"artifact sync controller closed\"));\n }\n\n getView(): EditableArtifactSyncView {\n return {\n artifactId: this.artifactId,\n modality: this.modality,\n state: this.state,\n cursor: this.cursor,\n headSequence: this.headSequence,\n writable: this.writable,\n pendingTransactions: this.pending.size,\n blockedPending: this.allBlockedPending(),\n queuedMessages: this.liveQueue.length,\n reconnectAttempt: this.reconnectAttempt,\n lastError: this.lastError,\n };\n }\n\n subscribe(listener: EditableArtifactSyncListener): () => void {\n this.listeners.add(listener);\n listener(this.getView());\n return () => this.listeners.delete(listener);\n }\n\n queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n if (!(input.commandBytes instanceof Uint8Array)) {\n return Promise.reject(new TypeError(\"commandBytes must be a Uint8Array\"));\n }\n const captured: EditableArtifactQueueCommandsInput = {\n ...input,\n commandBytes: input.commandBytes.slice(),\n ...(input.selectiveUndoTargets === undefined\n ? {}\n : { selectiveUndoTargets: [...input.selectiveUndoTargets] }),\n };\n return this.runCausalOperation(() => this.queueCommandsExclusive(captured));\n }\n\n private runCausalOperation<Result>(operation: () => Promise<Result>): Promise<Result> {\n const result = this.causalTail.then(operation);\n this.causalTail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n private async queueCommandsExclusive(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n if (this.abortController.signal.aborted) {\n throw new Error(\"artifact sync controller is closed\");\n }\n if (!(input.commandBytes instanceof Uint8Array) || input.commandBytes.byteLength === 0) {\n throw new TypeError(\"commandBytes must be a non-empty Uint8Array\");\n }\n const effectiveCommandBytes = Math.min(\n this.maxCommandBytes,\n this.activeLimits?.maxCommandBytes ?? this.maxCommandBytes,\n );\n if (input.commandBytes.byteLength > effectiveCommandBytes) {\n throw new RangeError(\"commandBytes exceeds the configured bound\");\n }\n await this.initialize();\n if (this.abortController.signal.aborted) {\n throw new Error(\"artifact sync controller is closed\");\n }\n const clientTransactionId = requireClientTransactionId(\n input.clientTransactionId ?? this.clientTransactionIdFactory(),\n \"clientTransactionId\",\n );\n const selectiveUndoTargets = normalizeIdentifiers(\n input.selectiveUndoTargets ?? [],\n \"selectiveUndoTargets\",\n );\n if (this.modality !== \"spreadsheet\" && selectiveUndoTargets.length > 0) {\n throw new TypeError(\"selective undo is only supported for spreadsheet artifacts\");\n }\n const existing = this.pending.get(clientTransactionId);\n if (existing) {\n if (\n existing.modality !== this.modality ||\n !bytesEqual(existing.commandBytes, input.commandBytes) ||\n (existing.modality === \"spreadsheet\" &&\n !identifiersEqual(existing.selectiveUndoTargets, selectiveUndoTargets))\n ) {\n throw new TypeError(\n `clientTransactionId ${clientTransactionId} is already bound to other commands`,\n );\n }\n if (this.replica) {\n try {\n await this.replacePendingOverlay();\n } catch (error) {\n this.requestSnapshotResync(\n `artifact Worker could not restore pending projection: ${asError(error).message}`,\n \"resync_required\",\n );\n }\n }\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n return clonePending(existing);\n }\n if (this.modality !== \"spreadsheet\" && this.allBlockedPending().length > 0) {\n throw new EditableArtifactSyncError(\n \"pending_conflict\",\n \"resolve the stale serialized edit before authoring another command\",\n );\n }\n if (this.pending.size >= this.maxPendingTransactions) {\n throw new RangeError(\"pending transaction count exceeds the configured bound\");\n }\n if (this.pendingBytes() + input.commandBytes.byteLength > this.maxPendingBytes) {\n throw new RangeError(\"pending transaction bytes exceed the configured bound\");\n }\n const foreignPending = this.orderedPending().find(\n (transaction) => transaction.replicaId !== this.writerReplicaId,\n );\n if (foreignPending) {\n throw new Error(\n \"pending edits from a prior writer must settle before authoring dependent commands\",\n );\n }\n const previous = this.orderedPending()\n .filter((transaction) => transaction.replicaId === this.writerReplicaId)\n .at(-1);\n const confirmedCounter =\n this.modality === \"spreadsheet\"\n ? (this.currentFrontier().find((entry) => entry.replicaId === this.writerReplicaId)\n ?.counter ?? 0)\n : this.lastLocalReplicaCounter;\n if (previous && previous.replicaCounter < confirmedCounter) {\n throw new Error(\"pending writer counter is behind its confirmed causal frontier\");\n }\n const replicaCounter = positiveSafeInteger(\n (previous?.replicaCounter ?? confirmedCounter) + 1,\n \"replicaCounter\",\n );\n const previousLocalTransactionId = previous?.clientTransactionId ?? this.lastLocalTransactionId;\n if (replicaCounter > 1 && previousLocalTransactionId === null) {\n throw new Error(\"writer replica epoch was reused without its causal predecessor\");\n }\n const createdAt = this.scheduler.now();\n const observedHeadSequence =\n this.modality === \"spreadsheet\" ? this.cursor : this.cursor + this.pending.size;\n const authored = await this.kernel.authorPending({\n modality: this.modality,\n protocolVersion: this.protocolVersion,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n commandVersion: this.commandVersion,\n artifactId: this.artifactId,\n clientTransactionId,\n replicaId: this.writerReplicaId,\n replicaCounter,\n previousLocalTransactionId,\n observedHeadSequence,\n ...(this.modality === \"spreadsheet\"\n ? {\n causalBase: cloneFrontier(this.currentFrontier()),\n selectiveUndoTargets,\n }\n : {}),\n commandBytes: input.commandBytes.slice(),\n createdAt,\n });\n validatePendingTransaction(authored, this.artifactId, this.modality, this.maxCommandBytes);\n if (\n this.activeLimits !== null &&\n authored.intentBytes.byteLength > this.activeLimits.maxIntentBytes\n ) {\n throw new RangeError(\"intentBytes exceeds the negotiated live bound\");\n }\n if (\n this.pendingBytes() + authored.commandBytes.byteLength + authored.intentBytes.byteLength >\n this.maxPendingBytes\n ) {\n throw new RangeError(\"pending transaction bytes exceed the configured bound\");\n }\n verifyAuthoredPending(authored, {\n modality: this.modality,\n clientTransactionId,\n replicaId: this.writerReplicaId,\n replicaCounter,\n previousLocalTransactionId,\n protocolVersion: this.protocolVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n commandVersion: this.commandVersion,\n observedHeadSequence,\n ...(this.modality === \"spreadsheet\"\n ? {\n causalBase: this.currentFrontier(),\n selectiveUndoTargets,\n }\n : {}),\n commandBytes: input.commandBytes,\n createdAt,\n });\n await this.storage.putPending(this.storageScope, clonePending(authored));\n this.pending.set(authored.clientTransactionId, clonePending(authored));\n if (this.replica) {\n try {\n await this.replacePendingOverlay();\n } catch (error) {\n // The WAL write is the acceptance boundary. Never report this command\n // as rejected after its immutable intent is durable; rebuild the\n // speculative projection from authority + WAL on the next connection.\n this.requestSnapshotResync(\n `artifact Worker could not project durable pending intent: ${asError(error).message}`,\n \"resync_required\",\n );\n }\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n return clonePending(authored);\n }\n\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n if (this.initializeTask) return await this.initializeTask;\n this.initializeTask = this.initializeOnce();\n try {\n await this.initializeTask;\n this.initialized = true;\n } finally {\n this.initializeTask = null;\n }\n }\n\n private async initializeOnce(): Promise<void> {\n const pending = await this.storage.listPending(this.storageScope);\n for (const transaction of pending) {\n validatePendingTransaction(transaction, this.artifactId, this.modality, this.maxCommandBytes);\n if (\n transaction.protocolVersion !== this.protocolVersion ||\n transaction.modelSchemaVersion !== this.modelSchemaVersion ||\n transaction.commandVersion !== this.commandVersion\n ) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `retained pending transaction ${transaction.clientTransactionId} uses incompatible protocol/schema/command versions`,\n );\n }\n const existing = this.pending.get(transaction.clientTransactionId);\n if (existing && existing.requestHash !== transaction.requestHash) {\n throw storageError(`conflicting retained transaction ${transaction.clientTransactionId}`);\n }\n this.pending.set(transaction.clientTransactionId, clonePending(transaction));\n if (transaction.replicaId === this.writerReplicaId) {\n this.lastLocalReplicaCounter = Math.max(\n this.lastLocalReplicaCounter,\n transaction.replicaCounter,\n );\n }\n }\n if (\n this.pending.size > this.maxPendingTransactions ||\n this.pendingBytes() > this.maxPendingBytes\n ) {\n throw storageError(\"retained pending transaction WAL exceeds configured bounds\");\n }\n\n let stored: EditableArtifactStoredReplica | null;\n try {\n stored = await this.storage.loadReplica(this.storageScope);\n } catch (error) {\n // Confirmed replica state is a reconstructible cache. A malformed or\n // over-bound local record must not permanently brick this artifact; the\n // pending WAL remains separate and is deliberately preserved.\n if (!(error instanceof TypeError) && !(error instanceof RangeError)) {\n throw storageError(\"failed to load retained artifact replica\", error);\n }\n try {\n await this.storage.clearReplica(this.storageScope);\n } catch (clearError) {\n throw storageError(\"failed to clear invalid retained artifact replica\", clearError);\n }\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.retainedStorageHead = null;\n this.requireSnapshot = true;\n this.emit();\n return;\n }\n if (!stored) {\n this.requireSnapshot = true;\n this.emit();\n return;\n }\n this.retainedStorageHead = { cursor: stored.cursor, stateHash: stored.stateHash };\n try {\n await this.restoreReplica(stored);\n await this.replacePendingOverlay();\n } catch (error) {\n this.reportOpenFailure(error);\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.requireSnapshot = true;\n }\n this.emit();\n }\n\n private async restoreReplica(stored: EditableArtifactStoredReplica): Promise<void> {\n validateSnapshot(\n stored.snapshot,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n this.modelSchemaVersion,\n this.maxSnapshotBytes,\n );\n if (stored.artifactId !== this.artifactId || stored.modality !== this.modality) {\n throw new TypeError(\"stored artifact authority mismatch\");\n }\n await this.kernel.reset();\n const loaded = await this.kernel.loadSnapshot(stored.snapshot);\n requireStateHash(loaded.stateHash, stored.snapshot.stateHash, \"retained snapshot\");\n requireDigest(loaded.digest, stored.snapshot.digest, \"retained snapshot\");\n if (stored.tail.length > this.maxStoredTailTransactions) {\n throw new RangeError(\"retained operation tail exceeds the configured bound\");\n }\n let cursor = stored.snapshot.sequence;\n let stateHash = stored.snapshot.stateHash;\n let causalFrontier =\n stored.snapshot.modality === \"spreadsheet\" ? stored.snapshot.causalFrontier : null;\n let nativeRevision =\n stored.snapshot.modality === \"spreadsheet\" ? null : stored.snapshot.nativeRevision;\n for (const transaction of stored.tail) {\n validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n this.maxCommittedTransactionBytes,\n );\n if (transaction.startSequence !== cursor + 1) {\n throw new TypeError(\"retained transaction tail is not contiguous\");\n }\n requireStateHash(transaction.priorStateHash, stateHash, \"retained transaction prior state\");\n const applied = await this.kernel.applyRecovered(transaction);\n requireStateHash(applied.stateHash, transaction.stateHash, \"retained transaction\");\n cursor = transaction.endSequence;\n stateHash = transaction.stateHash;\n if (transaction.modality === \"spreadsheet\") {\n causalFrontier = transaction.causalFrontier;\n } else {\n if (nativeRevision !== transaction.priorNativeRevision) {\n throw new TypeError(\"retained transaction native revision is not contiguous\");\n }\n nativeRevision = transaction.nativeRevision;\n }\n }\n if (stored.cursor !== cursor || stored.stateHash !== stateHash) {\n throw new TypeError(\"retained artifact cursor does not match its snapshot and tail\");\n }\n this.replica =\n stored.snapshot.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n snapshot: cloneSnapshot(stored.snapshot),\n cursor,\n stateHash,\n updatedAt: stored.updatedAt,\n causalFrontier: cloneFrontier(causalFrontier ?? []),\n }\n : {\n modality: stored.snapshot.modality,\n snapshot: cloneSnapshot(stored.snapshot),\n cursor,\n stateHash,\n updatedAt: stored.updatedAt,\n nativeRevision: requireNativeRevision(nativeRevision, \"retained native revision\"),\n };\n this.retainedTailTransactions = stored.tail.length;\n this.cursor = cursor;\n this.headSequence = cursor;\n }\n\n private async run(): Promise<void> {\n await this.initialize();\n let connectedBefore = false;\n let delayMs = this.reconnectDelayMs;\n while (!this.abortController.signal.aborted) {\n this.processingFailure = null;\n this.connectionReady = false;\n this.setState(\n this.requireSnapshot ? \"resyncing\" : connectedBefore ? \"reconnecting\" : \"connecting\",\n );\n try {\n await this.runConnection();\n connectedBefore = true;\n this.reconnectAttempt = 0;\n delayMs = this.reconnectDelayMs;\n } catch (error) {\n if (this.abortController.signal.aborted) break;\n if (this.state === \"live\") {\n // A connection that reached the verified live barrier was healthy;\n // only consecutive failures before that barrier consume the budget.\n this.reconnectAttempt = 0;\n delayMs = this.reconnectDelayMs;\n }\n const failure = asError(error);\n this.reportOpenFailure(failure);\n this.lastError = failure;\n if (failure instanceof EditableArtifactSyncError && failure.requiresSnapshot) {\n this.requireSnapshot = true;\n }\n if (\n failure instanceof EditableArtifactSyncError &&\n failure.code === \"unsupported_protocol\"\n ) {\n this.setState(\"unsupported\");\n this.rejectLiveWaiters(failure);\n return;\n }\n if (!isRetryableFailure(failure)) {\n this.fail(failure);\n return;\n }\n connectedBefore = true;\n this.reconnectAttempt += 1;\n this.emit();\n if (this.reconnectAttempt > this.maxReconnectAttempts) {\n this.fail(\n new EditableArtifactSyncError(\n \"reconnect_exhausted\",\n `artifact sync gave up after ${this.maxReconnectAttempts} reconnect attempts`,\n { cause: failure },\n ),\n );\n return;\n }\n } finally {\n // Every minted ticket owns exactly one live connection. Bootstrap,\n // replay, validation, and queue failures can all exit before the\n // transport's `closed` promise settles, so retire the socket here as\n // well as on the normal close path.\n this.activeConnection?.close(\"client_reconnect\");\n this.activeTicket = null;\n this.activeConnection = null;\n this.activeLimits = null;\n this.connectionReady = false;\n }\n if (this.abortController.signal.aborted) break;\n this.setState(this.requireSnapshot ? \"resyncing\" : \"reconnecting\");\n await this.scheduler.sleep(delayMs, this.abortController.signal).catch(() => {});\n delayMs = Math.min(Math.max(delayMs * 2, this.reconnectDelayMs), this.maxReconnectDelayMs);\n }\n }\n\n private async runConnection(): Promise<void> {\n const signal = this.abortController.signal;\n // Fence callbacks from the retired socket before ticket minting. A closed\n // adapter may still deliver a final queued callback while the next HTTP\n // ticket request is in flight.\n const epoch = ++this.activeEpoch;\n // A submit owned by the retired epoch may still settle, but must neither\n // block nor mutate the successor connection.\n this.flushTask = null;\n this.clearLiveQueue();\n const connectionReplicaId = this.desiredConnectionReplicaId();\n const ticket = await this.transport.mintTicket({\n artifactId: this.artifactId,\n replicaId: connectionReplicaId,\n signal,\n });\n this.validateTicket(ticket, connectionReplicaId);\n this.activeTicket = ticket;\n const resyncRevisionAtBootstrap = this.resyncRevision;\n\n // The transport must subscribe before the durable head is read. Messages\n // arriving during bootstrap are retained in the bounded queue below.\n const connection = await this.transport.openLive({\n ticket,\n after: this.cursor,\n stateHash: this.replica?.stateHash ?? null,\n resume:\n this.modality === \"spreadsheet\"\n ? { modality: \"spreadsheet\", causalFrontier: cloneFrontier(this.currentFrontier()) }\n : {\n modality: this.modality,\n nativeRevision: this.replica === null ? null : this.currentNativeRevision(),\n },\n requireSnapshot: this.requireSnapshot,\n signal,\n onMessage: (message) => this.enqueueLive(epoch, message),\n });\n this.activeConnection = connection;\n validateLiveLimits(connection.limits);\n this.activeLimits = connection.limits;\n boundedNonEmpty(connection.streamEpoch, \"connection.streamEpoch\", MAX_IDENTIFIER_BYTES);\n if (this.processingFailure) {\n connection.close(\"protocol_error\");\n throw this.processingFailure;\n }\n if (this.resyncRevision !== resyncRevisionAtBootstrap) {\n connection.close(\"resync_required\");\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live input was discarded before bootstrap; restarting from a verified snapshot\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n this.setState(this.requireSnapshot ? \"resyncing\" : \"syncing\");\n const bootstrap = await connection.readBootstrap({\n localCursor: this.replica ? this.cursor : null,\n localStateHash: this.replica?.stateHash ?? null,\n resume:\n this.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n localCausalFrontier: cloneFrontier(this.currentFrontier()),\n }\n : {\n modality: this.modality,\n localNativeRevision: this.replica === null ? null : this.currentNativeRevision(),\n },\n requireSnapshot: this.requireSnapshot,\n signal,\n });\n await this.applyBootstrap(bootstrap, connection, signal);\n if (this.resyncRevision !== resyncRevisionAtBootstrap) {\n this.requireSnapshot = true;\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live input was discarded during bootstrap; restarting from a verified snapshot\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n if (this.processingFailure) throw this.processingFailure;\n\n if (this.cursor < this.headSequence) {\n this.enqueueLive(epoch, {\n type: \"head\",\n artifactId: this.artifactId,\n headSequence: this.headSequence,\n });\n }\n\n this.connectionReady = true;\n this.scheduleDrain();\n await this.awaitDrain();\n if (this.processingFailure) throw this.processingFailure;\n if (this.requireSnapshot) {\n throw new EditableArtifactSyncError(\n \"queue_overflow\",\n \"live queue requires a verified snapshot resync\",\n { retryable: true, requiresSnapshot: true },\n );\n }\n\n this.lastError = null;\n this.reconnectAttempt = 0;\n this.setState(\"live\");\n this.resolveLiveWaiters();\n this.rotateReplicaConnectionIfNeeded();\n this.schedulePendingFlush();\n\n const closed = await waitForConnectionClose(connection, signal);\n this.connectionReady = false;\n await this.awaitDrain();\n if (this.processingFailure) throw this.processingFailure;\n if (signal.aborted) return;\n if (closed.reason === \"permission_changed\") {\n this.writable = false;\n this.emit();\n }\n throw transientError(\n closed.error ?? new TypeError(`artifact live connection closed: ${closed.reason}`),\n );\n }\n\n private async applyBootstrap(\n bootstrap: EditableArtifactBootstrap,\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n ): Promise<void> {\n if (bootstrap.artifactId !== this.artifactId) {\n throw invalidBootstrap(\"bootstrap artifact does not match the controller\");\n }\n if (bootstrap.modality !== this.modality) {\n throw invalidBootstrap(\"bootstrap modality does not match the controller\");\n }\n this.requireLiveProtocol(bootstrap.liveProtocolVersion);\n if (bootstrap.modelSchemaVersion !== this.modelSchemaVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `artifact schema ${bootstrap.modelSchemaVersion} is incompatible with ${this.modelSchemaVersion}`,\n );\n }\n requireSha256(bootstrap.headStateHash, \"bootstrap.headStateHash\");\n if (bootstrap.modality === \"spreadsheet\") {\n validateFrontier(bootstrap.headCausalFrontier, \"bootstrap.headCausalFrontier\");\n } else {\n requireNativeRevision(bootstrap.headNativeRevision, \"bootstrap.headNativeRevision\");\n }\n this.writable = bootstrap.writable;\n safeSequence(bootstrap.headSequence, \"bootstrap headSequence\");\n safeSequence(bootstrap.minimumReplaySequence, \"bootstrap minimumReplaySequence\");\n if (bootstrap.minimumReplaySequence > bootstrap.headSequence + 1) {\n throw invalidBootstrap(\"minimum replay sequence exceeds the durable head\");\n }\n // Bootstrap is the authoritative barrier for this new stream epoch and\n // may legitimately move backward during recovery.\n this.headSequence = bootstrap.headSequence;\n\n const mustReplace =\n this.requireSnapshot ||\n bootstrap.resyncRequired ||\n !this.replica ||\n this.cursor > bootstrap.headSequence ||\n this.cursor + 1 < bootstrap.minimumReplaySequence;\n const newerSnapshot = bootstrap.snapshot !== null && bootstrap.snapshot.sequence > this.cursor;\n if (mustReplace || newerSnapshot) {\n if (!bootstrap.snapshot) {\n throw invalidBootstrap(\"server required resync without a snapshot\", true);\n }\n await this.replaceSnapshot(bootstrap.snapshot);\n }\n if (!this.replica) throw invalidBootstrap(\"bootstrap did not establish a snapshot\", true);\n if (this.cursor > bootstrap.headSequence) {\n throw invalidBootstrap(\"local cursor is ahead of the durable artifact head\", true);\n }\n\n this.requireSnapshot = false;\n await this.reconcileTo(bootstrap.headSequence, connection, signal, false);\n await this.replacePendingOverlay();\n requireStateHash(this.replica.stateHash, bootstrap.headStateHash, \"bootstrap head barrier\");\n if (bootstrap.modality === \"spreadsheet\") {\n requireFrontier(\n this.currentFrontier(),\n bootstrap.headCausalFrontier,\n \"bootstrap head barrier\",\n );\n } else {\n requireNativeRevisionEqual(\n this.currentNativeRevision(),\n bootstrap.headNativeRevision,\n \"bootstrap head barrier\",\n );\n }\n await connection.acknowledge({\n sequence: this.cursor,\n stateHash: this.replica.stateHash,\n signal,\n });\n }\n\n private replaceSnapshot(snapshot: EditableArtifactStoredReplica[\"snapshot\"]): Promise<void> {\n return this.runCausalOperation(() => this.replaceSnapshotExclusive(snapshot));\n }\n\n private async replaceSnapshotExclusive(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n ): Promise<void> {\n validateSnapshot(\n snapshot,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n this.modelSchemaVersion,\n this.maxSnapshotBytes,\n );\n await this.kernel.reset();\n const loaded = await this.kernel.loadSnapshot(snapshot);\n requireStateHash(loaded.stateHash, snapshot.stateHash, \"snapshot\");\n requireDigest(loaded.digest, snapshot.digest, \"snapshot\");\n const storedReplica: EditableArtifactStoredReplica = {\n artifactId: this.artifactId,\n modality: this.modality,\n snapshot: cloneSnapshot(snapshot),\n tail: [],\n cursor: snapshot.sequence,\n stateHash: snapshot.stateHash,\n updatedAt: this.scheduler.now(),\n };\n // Full replacement is one atomic storage generation swap and may move\n // backward during authoritative recovery. The pending WAL is separate.\n try {\n await this.storage.saveReplica(this.storageScope, storedReplica, this.retainedStorageHead);\n } catch (error) {\n if (error instanceof EditableArtifactStorageConflictError) {\n try {\n await this.reloadRetainedProjection();\n if (this.replica) return;\n } catch (reloadError) {\n throw invalidBootstrap(\n `could not adopt a concurrently retained artifact head: ${asError(reloadError).message}`,\n true,\n );\n }\n throw invalidBootstrap(\"concurrently retained artifact head disappeared\", true);\n }\n throw storageError(\"failed to retain verified artifact snapshot\", error);\n }\n this.retainedStorageHead = {\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n };\n this.replica =\n storedReplica.snapshot.modality === \"spreadsheet\"\n ? {\n modality: \"spreadsheet\",\n snapshot: storedReplica.snapshot,\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n updatedAt: storedReplica.updatedAt,\n causalFrontier: cloneFrontier(storedReplica.snapshot.causalFrontier),\n }\n : {\n modality: storedReplica.snapshot.modality,\n snapshot: storedReplica.snapshot,\n cursor: storedReplica.cursor,\n stateHash: storedReplica.stateHash,\n updatedAt: storedReplica.updatedAt,\n nativeRevision: storedReplica.snapshot.nativeRevision,\n };\n this.retainedTailTransactions = 0;\n this.cursor = snapshot.sequence;\n this.headSequence = Math.max(this.headSequence, snapshot.sequence);\n this.emit();\n }\n\n private async reconcileTo(\n target: number,\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n consumeHeadWatermark = true,\n ): Promise<void> {\n let replayThrough = safeSequence(target, \"replay target\");\n while (this.cursor < replayThrough) {\n const before = this.cursor;\n const page = await connection.replay({\n after: this.cursor,\n through: replayThrough,\n limit: this.replayPageSize,\n signal,\n });\n if (!page || typeof page !== \"object\") {\n throw invalidSequence(\"replay page must be an object\");\n }\n if (page.artifactId !== this.artifactId) {\n throw invalidSequence(\"replay page belongs to another artifact\");\n }\n if (!Array.isArray(page.transactions)) {\n throw invalidSequence(\"replay page transactions must be an array\");\n }\n if (page.transactions.length > this.replayPageSize) {\n throw invalidSequence(\"replay page exceeds the negotiated transaction count\");\n }\n safeSequence(page.headSequence, \"replay headSequence\");\n if (consumeHeadWatermark) replayThrough = Math.max(replayThrough, page.headSequence);\n this.headSequence = Math.max(this.headSequence, page.headSequence);\n let pageBytes = 0;\n for (const transaction of page.transactions) {\n validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n this.maxCommittedTransactionBytes,\n );\n pageBytes += estimateCommittedTransactionBytes(transaction);\n if (!Number.isSafeInteger(pageBytes) || pageBytes > this.maxReplayPageBytes) {\n throw invalidSequence(\"replay page exceeds the negotiated byte bound\");\n }\n }\n for (const transaction of page.transactions) {\n if (transaction.endSequence <= this.cursor) continue;\n if (transaction.endSequence > replayThrough) {\n throw invalidSequence(\"replay returned a transaction beyond the requested target\");\n }\n await this.applyCommitted(transaction);\n }\n if (this.cursor === before) {\n throw invalidSequence(\n `durable replay did not provide sequence ${this.cursor + 1} through ${target}`,\n );\n }\n }\n }\n\n private enqueueLive(epoch: number, message: EditableArtifactLiveMessage): void {\n if (epoch !== this.activeEpoch || this.abortController.signal.aborted) return;\n let bytes: number;\n try {\n validateLiveMessage(\n message,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n this.maxCommittedTransactionBytes,\n );\n bytes = estimateLiveMessageBytes(message);\n } catch (error) {\n this.processingFailure =\n error instanceof EditableArtifactSyncError\n ? error\n : invalidSequence(`invalid live message: ${asError(error).message}`);\n this.activeConnection?.close(\"protocol_error\");\n return;\n }\n if (\n this.liveQueue.length + 1 > this.maxQueuedMessages ||\n this.queuedBytes + bytes > this.maxQueuedBytes\n ) {\n this.requestSnapshotResync(\"bounded live queue overflow\");\n return;\n }\n this.liveQueue.push({ message, bytes });\n this.queuedBytes += bytes;\n this.emit();\n if (this.connectionReady) this.scheduleDrain();\n }\n\n private scheduleDrain(): void {\n if (!this.connectionReady || this.drainTask || this.liveQueue.length === 0) return;\n this.drainTask = this.drainLiveQueue()\n .catch((error: unknown) => {\n const failure = asError(error);\n this.processingFailure = failure;\n if (failure instanceof EditableArtifactSyncError && failure.requiresSnapshot) {\n this.requireSnapshot = true;\n }\n this.activeConnection?.close(\"client_reconcile_failed\");\n })\n .finally(() => {\n this.drainTask = null;\n if (this.connectionReady && this.liveQueue.length > 0 && !this.processingFailure) {\n this.scheduleDrain();\n }\n });\n }\n\n private async drainLiveQueue(): Promise<void> {\n const connection = this.activeConnection;\n if (!connection) return;\n while (this.connectionReady && this.liveQueue.length > 0) {\n const queued = this.liveQueue.shift();\n if (!queued) break;\n this.queuedBytes -= queued.bytes;\n const message = queued.message;\n if (message.type === \"resync_required\") {\n this.requestSnapshotResync(message.reason, \"resync_required\");\n break;\n }\n if (message.type === \"authorization\") {\n this.writable = message.writable;\n if (message.writable) {\n if (\n this.lastError instanceof EditableArtifactSyncError &&\n this.lastError.code === \"permission_changed\"\n ) {\n this.lastError = null;\n }\n this.schedulePendingFlush();\n }\n this.emit();\n continue;\n }\n if (message.type === \"head\") {\n this.headSequence = Math.max(this.headSequence, message.headSequence);\n await this.reconcileTo(message.headSequence, connection, this.abortController.signal);\n } else {\n const transaction = message.transaction;\n this.headSequence = Math.max(this.headSequence, transaction.endSequence);\n if (transaction.startSequence > this.cursor + 1) {\n await this.reconcileTo(\n transaction.startSequence - 1,\n connection,\n this.abortController.signal,\n );\n }\n await this.applyCommitted(transaction);\n }\n this.emit();\n }\n }\n\n private async awaitDrain(): Promise<void> {\n while (this.drainTask) await this.drainTask;\n }\n\n private applyCommitted(transaction: EditableArtifactCommittedTransaction): Promise<void> {\n return this.runCausalOperation(() => this.applyCommittedExclusive(transaction));\n }\n\n private async applyCommittedExclusive(\n transaction: EditableArtifactCommittedTransaction,\n ): Promise<void> {\n const embeddedPending = validateCommittedTransaction(\n transaction,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n this.maxCommittedTransactionBytes,\n );\n if (embeddedPending) {\n const pending = this.pending.get(embeddedPending.clientTransactionId);\n if (\n pending?.requestHash === embeddedPending.requestHash &&\n bytesEqual(pending.intentBytes, embeddedPending.intentBytes)\n ) {\n this.recordAcceptedMappingIdentity(transaction.transactionId, embeddedPending);\n }\n }\n if (transaction.endSequence <= this.cursor) {\n await this.settlePending(transaction, false);\n return;\n }\n if (transaction.startSequence !== this.cursor + 1) {\n throw invalidSequence(\n `expected committed sequence ${this.cursor + 1}, received ${transaction.startSequence}`,\n );\n }\n if (!this.replica)\n throw invalidBootstrap(\"cannot apply a transaction without a snapshot\", true);\n requireStateHash(transaction.priorStateHash, this.replica.stateHash, \"transaction prior state\");\n const accepted = this.acceptedMappings.get(transaction.transactionId);\n const orderedPending = this.orderedPending();\n // OGACO carries the canonical mutation and resulting frontier, but not the\n // caller's client transaction id. The server deliberately sends those\n // committed bytes before mutationAccepted. Suppress an exact request-hash\n // match only from speculative replay so the same CRDT dot is not applied\n // twice; retain the WAL until the later authority mapping settles identity.\n const provisionalProjectionMatches =\n transaction.modality === \"spreadsheet\" && accepted === undefined\n ? orderedPending.filter((pending) => pending.requestHash === transaction.requestHash)\n : [];\n if (provisionalProjectionMatches.length > 1) {\n throw invalidSequence(\"multiple pending transactions share one committed request hash\");\n }\n const provisionalProjectionMatch = provisionalProjectionMatches[0];\n const remainingPending = orderedPending.filter(\n (pending) =>\n (accepted === undefined ||\n pending.clientTransactionId !== accepted.clientTransactionId ||\n pending.requestHash !== accepted.requestHash) &&\n (provisionalProjectionMatch === undefined ||\n pending.clientTransactionId !== provisionalProjectionMatch.clientTransactionId ||\n pending.requestHash !== provisionalProjectionMatch.requestHash),\n );\n const updatedAt = this.scheduler.now();\n let applied: { stateHash: string };\n try {\n if (this.connectionReady) {\n const reconciled = await this.kernel.reconcileCommitted(transaction, remainingPending);\n this.setBlockedPending(reconciled.blockedPending);\n applied = reconciled;\n } else {\n applied = await this.kernel.applyRecovered(transaction);\n }\n requireStateHash(applied.stateHash, transaction.stateHash, \"committed transaction\");\n } catch (error) {\n await this.reloadRetainedProjection();\n throw error;\n }\n try {\n await this.storage.appendCommitted(this.storageScope, {\n artifactId: this.artifactId,\n expectedCursor: this.cursor,\n expectedStateHash: this.replica.stateHash,\n transaction: cloneCommitted(transaction),\n updatedAt,\n });\n } catch (error) {\n try {\n await this.reloadRetainedProjection();\n } catch (reloadError) {\n throw storageError(\"failed to reload retained artifact transaction state\", reloadError);\n }\n if (error instanceof EditableArtifactStorageConflictError) {\n // Another tab may have already advanced or compacted the same verified\n // log. Its atomic retained head is authoritative for this browser\n // cache; adopt it instead of failing an otherwise healthy live stream.\n if (this.replica && this.cursor >= transaction.endSequence) {\n await this.settlePending(transaction, false);\n const connection = this.activeConnection;\n if (connection) {\n await connection.acknowledge({\n sequence: this.cursor,\n stateHash: this.replica.stateHash,\n signal: this.abortController.signal,\n });\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n return;\n }\n throw invalidSequence(\n \"retained artifact head changed without covering the live transaction\",\n );\n }\n throw storageError(\"failed to retain committed artifact transaction\", error);\n }\n\n this.replica.cursor = transaction.endSequence;\n this.replica.stateHash = transaction.stateHash;\n this.replica.updatedAt = updatedAt;\n if (transaction.modality === \"spreadsheet\") {\n if (this.replica.modality !== \"spreadsheet\") {\n throw invalidSequence(\"spreadsheet transaction reached a serialized replica\");\n }\n this.replica.causalFrontier = cloneFrontier(transaction.causalFrontier);\n } else {\n if (this.replica.modality !== transaction.modality) {\n throw invalidSequence(\"serialized transaction modality does not match the replica\");\n }\n this.replica.nativeRevision = transaction.nativeRevision;\n }\n this.retainedTailTransactions += 1;\n this.cursor = transaction.endSequence;\n this.retainedStorageHead = {\n cursor: transaction.endSequence,\n stateHash: transaction.stateHash,\n };\n this.headSequence = Math.max(this.headSequence, transaction.endSequence);\n await this.settlePending(transaction, this.connectionReady);\n const connection = this.activeConnection;\n if (connection) {\n await connection.acknowledge({\n sequence: transaction.endSequence,\n stateHash: transaction.stateHash,\n signal: this.abortController.signal,\n });\n }\n if (this.retainedTailTransactions > this.maxStoredTailTransactions) {\n this.requestSnapshotResync(\"retained operation tail exceeded its bound\", \"resync_required\");\n }\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n }\n\n private async reloadRetainedProjection(): Promise<void> {\n const stored = await this.storage.loadReplica(this.storageScope);\n if (!stored) {\n await this.kernel.reset();\n this.replica = null;\n this.retainedTailTransactions = 0;\n this.cursor = 0;\n this.headSequence = 0;\n this.retainedStorageHead = null;\n this.requireSnapshot = true;\n return;\n }\n this.retainedStorageHead = { cursor: stored.cursor, stateHash: stored.stateHash };\n await this.restoreReplica(stored);\n await this.replacePendingOverlay();\n }\n\n private async settlePending(\n transaction: EditableArtifactCommittedTransaction,\n overlayAlreadyReconciled: boolean,\n ): Promise<void> {\n const accepted = this.acceptedMappings.get(transaction.transactionId);\n if (!accepted || accepted.requestHash !== transaction.requestHash) return;\n const pending = this.pending.get(accepted.clientTransactionId);\n if (!pending || pending.requestHash !== accepted.requestHash) return;\n await this.storage.deletePending(this.storageScope, accepted.clientTransactionId);\n this.pending.delete(accepted.clientTransactionId);\n this.acceptedMappings.delete(transaction.transactionId);\n if (pending.replicaId === this.writerReplicaId) {\n this.lastLocalTransactionId = pending.clientTransactionId;\n this.lastLocalReplicaCounter = Math.max(this.lastLocalReplicaCounter, pending.replicaCounter);\n }\n this.submittedEpoch.delete(accepted.clientTransactionId);\n this.submitBlockedPending.delete(accepted.clientTransactionId);\n if (!overlayAlreadyReconciled) await this.replacePendingOverlay();\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n if (this.state === \"live\") this.schedulePendingFlush();\n }\n\n private schedulePendingFlush(): void {\n if (\n this.flushTask ||\n this.state !== \"live\" ||\n !this.writable ||\n !this.activeTicket ||\n !this.activeConnection ||\n this.pending.size === 0\n ) {\n return;\n }\n const epoch = this.activeEpoch;\n const connection = this.activeConnection;\n let task!: Promise<void>;\n task = this.flushPending()\n .catch((error: unknown) => {\n if (epoch !== this.activeEpoch || connection !== this.activeConnection) return;\n const failure = asError(error);\n this.lastError = failure;\n this.processingFailure = failure;\n connection.close(\n isRetryableFailure(failure) ? \"pending_outcome_unknown\" : \"pending_rejected\",\n );\n })\n .finally(() => {\n this.flushTasks.delete(task);\n if (this.flushTask !== task) return;\n this.flushTask = null;\n if (this.state === \"live\" && !this.lastError && this.hasSubmittablePending()) {\n this.schedulePendingFlush();\n }\n });\n this.flushTask = task;\n this.flushTasks.add(task);\n }\n\n private async flushPending(): Promise<void> {\n const ticket = this.activeTicket;\n const connection = this.activeConnection;\n if (!ticket || !connection) return;\n const epoch = this.activeEpoch;\n const batch = this.orderedPending();\n for (const transaction of batch) {\n if (this.state !== \"live\" || ticket !== this.activeTicket || epoch !== this.activeEpoch)\n return;\n if (transaction.replicaId !== ticket.replicaId) continue;\n if (\n transaction.previousLocalTransactionId &&\n this.pending.has(transaction.previousLocalTransactionId)\n ) {\n continue;\n }\n if (this.pendingIsBlocked(transaction.clientTransactionId)) continue;\n if (this.submittedEpoch.get(transaction.clientTransactionId) === epoch) continue;\n this.submittedEpoch.set(transaction.clientTransactionId, epoch);\n let receipt: EditableArtifactSubmitReceipt;\n try {\n receipt = await connection.submit({\n transaction: clonePending(transaction),\n signal: this.abortController.signal,\n });\n } catch (error) {\n if (\n ticket !== this.activeTicket ||\n connection !== this.activeConnection ||\n epoch !== this.activeEpoch\n ) {\n return;\n }\n const failure = asError(error);\n const code = errorCode(failure);\n if (code === \"permission_changed\") {\n this.submittedEpoch.delete(transaction.clientTransactionId);\n this.writable = false;\n this.lastError = new EditableArtifactSyncError(\"permission_changed\", failure.message);\n this.emit();\n return;\n }\n if (isRetryableFailure(failure)) throw failure;\n if (code === \"closed\" || code === \"stale_epoch\") throw transientError(failure);\n this.submittedEpoch.delete(transaction.clientTransactionId);\n const blockedCode = boundedNonEmpty(\n code ?? \"submit_rejected\",\n \"submit rejection code\",\n MAX_IDENTIFIER_BYTES,\n );\n this.submitBlockedPending.set(transaction.clientTransactionId, {\n clientTransactionId: transaction.clientTransactionId,\n code: blockedCode,\n });\n this.emit();\n this.rotateReplicaConnectionIfNeeded();\n continue;\n }\n if (\n ticket !== this.activeTicket ||\n connection !== this.activeConnection ||\n epoch !== this.activeEpoch\n )\n return;\n if (\n !receipt ||\n typeof receipt !== \"object\" ||\n !receipt.committed ||\n typeof receipt.committed !== \"object\" ||\n receipt.artifactId !== this.artifactId ||\n receipt.clientTransactionId !== transaction.clientTransactionId ||\n receipt.requestHash !== transaction.requestHash ||\n receipt.committed.artifactId !== this.artifactId ||\n receipt.committed.transactionId !== receipt.transactionId ||\n receipt.committed.requestHash !== transaction.requestHash\n ) {\n throw invalidSequence(\"submit receipt identity does not match the pending transaction\");\n }\n validateCommittedTransaction(\n receipt.committed,\n this.artifactId,\n this.modality,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n this.maxCommittedTransactionBytes,\n );\n this.recordAcceptedMapping(receipt);\n this.enqueueLive(epoch, {\n type: \"transaction.committed\",\n transaction: receipt.committed,\n });\n }\n }\n\n private recordAcceptedMapping(receipt: EditableArtifactSubmitReceipt): void {\n this.recordAcceptedMappingIdentity(receipt.transactionId, {\n clientTransactionId: receipt.clientTransactionId,\n requestHash: receipt.requestHash,\n });\n }\n\n private recordAcceptedMappingIdentity(\n transactionId: string,\n next: Readonly<{ clientTransactionId: string; requestHash: string }>,\n ): void {\n const existing = this.acceptedMappings.get(transactionId);\n if (\n existing &&\n (existing.clientTransactionId !== next.clientTransactionId ||\n existing.requestHash !== next.requestHash)\n ) {\n throw invalidSequence(\"authority reused a committed transaction id for another request\");\n }\n this.acceptedMappings.set(transactionId, Object.freeze({ ...next }));\n }\n\n private requestSnapshotResync(\n reason: string,\n code: \"queue_overflow\" | \"resync_required\" = \"queue_overflow\",\n ): void {\n this.resyncRevision += 1;\n this.requireSnapshot = true;\n this.lastError = new EditableArtifactSyncError(code, reason, {\n retryable: true,\n requiresSnapshot: true,\n });\n this.clearLiveQueue();\n this.activeConnection?.close(\"resync_required\");\n this.emit();\n }\n\n private clearLiveQueue(): void {\n this.liveQueue.length = 0;\n this.queuedBytes = 0;\n this.emit();\n }\n\n private validateTicket(ticket: EditableArtifactSyncTicket, expectedReplicaId: string): void {\n if (ticket.artifactId !== this.artifactId) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket belongs to another artifact\",\n );\n }\n if (ticket.modality !== this.modality) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket modality does not match the controller\",\n );\n }\n if (ticket.replicaId !== expectedReplicaId) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n \"sync ticket is not bound to the requested writer replica\",\n );\n }\n this.requireLiveProtocol(ticket.protocolVersion);\n boundedNonEmpty(ticket.token, \"ticket.token\", MAX_TICKET_BYTES);\n const expiresAt = Date.parse(ticket.expiresAt);\n if (!Number.isFinite(expiresAt)) {\n throw invalidBootstrap(\"sync ticket has an invalid expiry\");\n }\n if (expiresAt <= this.scheduler.now() + this.minTicketTtlMs) {\n throw transientError(new TypeError(\"sync ticket is expired or too close to expiry\"));\n }\n }\n\n private orderedPending(): EditableArtifactPendingTransaction[] {\n return orderPendingTransactions([...this.pending.values()]);\n }\n\n private hasSubmittablePending(): boolean {\n const activeReplicaId = this.activeTicket?.replicaId;\n return this.orderedPending().some(\n (transaction) =>\n transaction.replicaId === activeReplicaId &&\n this.submittedEpoch.get(transaction.clientTransactionId) !== this.activeEpoch &&\n !this.pendingIsBlocked(transaction.clientTransactionId) &&\n (!transaction.previousLocalTransactionId ||\n !this.pending.has(transaction.previousLocalTransactionId)),\n );\n }\n\n private pendingBytes(): number {\n let bytes = 0;\n for (const transaction of this.pending.values()) {\n bytes += transaction.commandBytes.byteLength + transaction.intentBytes.byteLength;\n if (!Number.isSafeInteger(bytes)) return Number.POSITIVE_INFINITY;\n }\n return bytes;\n }\n\n private currentFrontier(): EditableArtifactCausalFrontier {\n if (this.replica === null) return [];\n if (this.replica.modality !== \"spreadsheet\") {\n throw new TypeError(\"serialized artifacts do not have a causal frontier\");\n }\n return this.replica.causalFrontier;\n }\n\n private currentNativeRevision(): number {\n if (this.replica === null || this.replica.modality === \"spreadsheet\") {\n throw new TypeError(\"spreadsheet artifacts do not have a native revision\");\n }\n return this.replica.nativeRevision;\n }\n\n private desiredConnectionReplicaId(): string {\n return (\n this.orderedPending().find(\n (transaction) =>\n !this.pendingIsBlocked(transaction.clientTransactionId) &&\n (!transaction.previousLocalTransactionId ||\n !this.pending.has(transaction.previousLocalTransactionId)),\n )?.replicaId ?? this.writerReplicaId\n );\n }\n\n private rotateReplicaConnectionIfNeeded(): void {\n const ticket = this.activeTicket;\n if (!ticket || ticket.replicaId === this.desiredConnectionReplicaId()) return;\n this.activeConnection?.close(\"replica_changed\");\n }\n\n private async replacePendingOverlay(): Promise<void> {\n const projection = await this.kernel.replacePending(this.orderedPending());\n this.setBlockedPending(projection.blockedPending);\n }\n\n private pendingIsBlocked(clientTransactionId: string): boolean {\n const blockedIds = new Set([\n ...this.blockedPending.map((blocked) => blocked.clientTransactionId),\n ...this.submitBlockedPending.keys(),\n ]);\n let current = this.pending.get(clientTransactionId);\n const visited = new Set<string>();\n while (current) {\n if (blockedIds.has(current.clientTransactionId)) return true;\n const predecessor = current.previousLocalTransactionId;\n if (!predecessor || visited.has(predecessor)) return false;\n visited.add(predecessor);\n current = this.pending.get(predecessor);\n }\n return false;\n }\n\n private setBlockedPending(values: readonly EditableArtifactBlockedPending[]): void {\n const seen = new Set<string>();\n this.blockedPending = values.map((value) => {\n requireClientTransactionId(value.clientTransactionId, \"blocked clientTransactionId\");\n boundedNonEmpty(value.code, \"blocked code\", MAX_IDENTIFIER_BYTES);\n if (!this.pending.has(value.clientTransactionId) || seen.has(value.clientTransactionId)) {\n throw new TypeError(\"worker returned an invalid blocked pending identity\");\n }\n seen.add(value.clientTransactionId);\n return { ...value };\n });\n this.emit();\n }\n\n private allBlockedPending(): EditableArtifactBlockedPending[] {\n const byId = new Map<string, EditableArtifactBlockedPending>();\n for (const blocked of this.blockedPending) {\n byId.set(blocked.clientTransactionId, { ...blocked });\n }\n for (const blocked of this.submitBlockedPending.values()) {\n byId.set(blocked.clientTransactionId, { ...blocked });\n }\n return [...byId.values()].sort((left, right) =>\n compareCodeUnits(left.clientTransactionId, right.clientTransactionId),\n );\n }\n\n private requireLiveProtocol(actual: number): void {\n if (actual !== EDITABLE_ARTIFACT_LIVE_WIRE_VERSION) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `live protocol ${actual} is incompatible with ${EDITABLE_ARTIFACT_LIVE_WIRE_VERSION}`,\n );\n }\n }\n\n private setState(state: EditableArtifactSyncState): void {\n if (this.state === state) return;\n this.state = state;\n this.emit();\n }\n\n private emit(): void {\n const view = this.getView();\n for (const listener of this.listeners) {\n try {\n listener(view);\n } catch {\n // Observers cannot own transport or kernel lifecycle.\n }\n }\n }\n\n private resolveLiveWaiters(): void {\n for (const waiter of this.liveWaiters) waiter.resolve();\n this.liveWaiters.clear();\n }\n\n private rejectLiveWaiters(error: Error): void {\n for (const waiter of this.liveWaiters) waiter.reject(error);\n this.liveWaiters.clear();\n }\n\n private reportOpenFailure(error: unknown): void {\n const event = classifyEditableArtifactOpenFailure(error);\n if (event === null || this.onOpenFailure === undefined) return;\n try {\n this.onOpenFailure(event);\n } catch {\n // Observability must never change recovery or availability behavior.\n }\n }\n\n private fail(error: Error): void {\n this.lastError = error;\n this.setState(\"failed\");\n this.rejectLiveWaiters(error);\n this.activeConnection?.close(\"client_failed\");\n }\n}\n\nfunction validatePendingTransaction(\n transaction: EditableArtifactPendingTransaction,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n maxCommandBytes: number,\n): void {\n if (transaction.artifactId !== artifactId || transaction.modality !== modality) {\n throw new TypeError(\"pending artifact authority mismatch\");\n }\n requireClientTransactionId(transaction.clientTransactionId, \"clientTransactionId\");\n requireSha256(transaction.requestHash, \"requestHash\");\n requireReplicaId(transaction.replicaId, \"replicaId\");\n positiveU16(transaction.protocolVersion, \"protocolVersion\");\n positiveU16(transaction.modelSchemaVersion, \"modelSchemaVersion\");\n positiveU16(transaction.commandVersion, \"commandVersion\");\n positiveSafeInteger(transaction.replicaCounter, \"replicaCounter\");\n if (transaction.previousLocalTransactionId !== null) {\n requireClientTransactionId(\n transaction.previousLocalTransactionId,\n \"previousLocalTransactionId\",\n );\n if (transaction.previousLocalTransactionId === transaction.clientTransactionId) {\n throw new TypeError(\"a pending transaction cannot depend on itself\");\n }\n }\n if (!(transaction.commandBytes instanceof Uint8Array)) {\n throw new TypeError(\"commandBytes must be a Uint8Array\");\n }\n if (\n !(transaction.intentBytes instanceof Uint8Array) ||\n transaction.intentBytes.byteLength === 0\n ) {\n throw new TypeError(\"intentBytes must be a non-empty Uint8Array\");\n }\n if (transaction.intentBytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES) {\n throw new RangeError(\"intentBytes exceeds the configured bound\");\n }\n safeSequence(transaction.observedHeadSequence, \"observedHeadSequence\");\n if (transaction.commandBytes.byteLength === 0) throw new TypeError(\"commandBytes is empty\");\n if (transaction.commandBytes.byteLength > maxCommandBytes) {\n throw new RangeError(\"commandBytes exceeds the configured bound\");\n }\n nonNegativeSafeInteger(transaction.createdAt, \"createdAt\");\n const intent = decodeEditableArtifactMutationIntent(transaction.intentBytes);\n if (\n intent.artifactId !== transaction.artifactId ||\n intent.clientTransactionId !== transaction.clientTransactionId ||\n intent.replicaId !== transaction.replicaId ||\n intent.replicaCounter !== transaction.replicaCounter ||\n intent.previousLocalTransactionId !== transaction.previousLocalTransactionId ||\n intent.protocolVersion !== transaction.protocolVersion ||\n intent.modelSchemaVersion !== transaction.modelSchemaVersion ||\n intent.commandProtocolVersion !== transaction.commandVersion ||\n intent.observedHeadSequence !== transaction.observedHeadSequence ||\n !bytesEqual(intent.commandBytes, transaction.commandBytes)\n ) {\n throw new TypeError(\"pending fields do not exactly match their canonical OGATX envelope\");\n }\n editableArtifactCodecFor({\n durableModality: transaction.modality,\n modelSchemaVersion: transaction.modelSchemaVersion,\n commandProtocolVersion: transaction.commandVersion,\n }).command.assertCanonical(transaction.commandBytes);\n if (transaction.modality === \"spreadsheet\") {\n validateFrontier(transaction.causalBase, \"causalBase\");\n normalizeIdentifiers(transaction.selectiveUndoTargets, \"selectiveUndoTargets\");\n if (\n !identifiersEqual(intent.selectiveUndoOperationIds, transaction.selectiveUndoTargets) ||\n !frontiersEqual(intent.causalBase, transaction.causalBase)\n ) {\n throw new TypeError(\"spreadsheet pending causality does not match its OGATX envelope\");\n }\n } else {\n requireNativeRevision(transaction.observedNativeRevision, \"observedNativeRevision\");\n if (intent.causalBase.length !== 0 || intent.selectiveUndoOperationIds.length !== 0) {\n throw new TypeError(\"serialized pending transactions cannot carry CRDT causality\");\n }\n }\n if (\n hashEditableArtifactMutationIntentBytes(transaction.intentBytes) !== transaction.requestHash\n ) {\n throw new TypeError(\"pending requestHash does not match its canonical OGATX envelope\");\n }\n}\n\nfunction validateLiveLimits(limits: EditableArtifactLiveLimits): void {\n if (!limits || typeof limits !== \"object\" || Array.isArray(limits)) {\n throw new TypeError(\"live connection limits must be an object\");\n }\n positiveSafeInteger(limits.maxClientFrameBytes, \"limits.maxClientFrameBytes\");\n nonNegativeSafeInteger(limits.maxCommandBytes, \"limits.maxCommandBytes\");\n nonNegativeSafeInteger(limits.maxIntentBytes, \"limits.maxIntentBytes\");\n nonNegativeSafeInteger(\n limits.maxCommittedTransactionBytes,\n \"limits.maxCommittedTransactionBytes\",\n );\n positiveSafeInteger(limits.maxSnapshotBytes, \"limits.maxSnapshotBytes\");\n positiveSafeInteger(limits.maxInFlightTransactions, \"limits.maxInFlightTransactions\");\n positiveSafeInteger(limits.maxInFlightBytes, \"limits.maxInFlightBytes\");\n if (\n limits.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES ||\n limits.maxIntentBytes > EDITABLE_ARTIFACT_INTENT_MAX_BYTES ||\n limits.maxCommittedTransactionBytes > MAX_COMMITTED_TRANSACTION_BYTES\n ) {\n throw new TypeError(\"live connection advertised incompatible protocol limits\");\n }\n}\n\ntype ExpectedAuthoredPending = Readonly<{\n modality: EditableArtifactModality;\n clientTransactionId: string;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandVersion: number;\n replicaId: string;\n replicaCounter: number;\n previousLocalTransactionId: string | null;\n observedHeadSequence: number;\n commandBytes: Uint8Array;\n createdAt: number;\n causalBase?: EditableArtifactCausalFrontier;\n selectiveUndoTargets?: readonly string[];\n}>;\n\nfunction verifyAuthoredPending(\n actual: EditableArtifactPendingTransaction,\n expected: ExpectedAuthoredPending,\n): void {\n if (\n actual.modality !== expected.modality ||\n actual.clientTransactionId !== expected.clientTransactionId ||\n actual.protocolVersion !== expected.protocolVersion ||\n actual.modelSchemaVersion !== expected.modelSchemaVersion ||\n actual.commandVersion !== expected.commandVersion ||\n actual.replicaId !== expected.replicaId ||\n actual.replicaCounter !== expected.replicaCounter ||\n actual.previousLocalTransactionId !== expected.previousLocalTransactionId ||\n actual.observedHeadSequence !== expected.observedHeadSequence ||\n actual.createdAt !== expected.createdAt ||\n !bytesEqual(actual.commandBytes, expected.commandBytes)\n ) {\n throw new TypeError(\"worker authored a pending envelope that differs from its immutable input\");\n }\n if (actual.modality === \"spreadsheet\") {\n if (\n expected.causalBase === undefined ||\n expected.selectiveUndoTargets === undefined ||\n !identifiersEqual(actual.selectiveUndoTargets, expected.selectiveUndoTargets)\n ) {\n throw new TypeError(\"worker authored invalid spreadsheet pending metadata\");\n }\n requireFrontier(actual.causalBase, expected.causalBase, \"authored pending\");\n } else if (expected.causalBase !== undefined || expected.selectiveUndoTargets !== undefined) {\n throw new TypeError(\"worker authored serialized pending with spreadsheet metadata\");\n }\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n for (let index = 0; index < left.byteLength; index += 1) {\n if (left[index] !== right[index]) return false;\n }\n return true;\n}\n\nfunction validateCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n operationProtocolVersion: number,\n maxCommittedTransactionBytes: number,\n): Readonly<{\n clientTransactionId: string;\n requestHash: string;\n intentBytes: Uint8Array;\n}> | null {\n if (transaction.artifactId !== artifactId || transaction.modality !== modality) {\n throw invalidSequence(\"transaction artifact authority mismatch\");\n }\n requireStableId(transaction.transactionId, \"transactionId\");\n requireSha256(transaction.requestHash, \"requestHash\");\n requireSha256(transaction.priorStateHash, \"priorStateHash\");\n requireSha256(transaction.stateHash, \"stateHash\");\n safeSequence(transaction.startSequence, \"transaction startSequence\");\n safeSequence(transaction.endSequence, \"transaction endSequence\");\n if (transaction.startSequence < 1 || transaction.endSequence < transaction.startSequence) {\n throw invalidSequence(\"transaction sequence interval is invalid\");\n }\n if (!(transaction.committedTransactionBytes instanceof Uint8Array)) {\n throw invalidSequence(\"transaction committedTransactionBytes must be a Uint8Array\");\n }\n if (transaction.committedTransactionBytes.byteLength === 0) {\n throw invalidSequence(\"transaction committedTransactionBytes is empty\");\n }\n if (transaction.committedTransactionBytes.byteLength > maxCommittedTransactionBytes) {\n throw invalidSequence(\"transaction committedTransactionBytes exceeds the configured bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n if (transaction.operationProtocolVersion !== operationProtocolVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `transaction operation protocol ${transaction.operationProtocolVersion} is incompatible with ${operationProtocolVersion}`,\n );\n }\n validateFrontier(transaction.causalFrontier, \"causalFrontier\");\n let summary: ReturnType<typeof decodeCommittedTransactionSummary>;\n try {\n summary = decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n } catch (error) {\n throw invalidSequence(`invalid OGACO envelope: ${asError(error).message}`);\n }\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.operationProtocolVersion !== transaction.operationProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n !frontiersEqual(summary.resultingCausalFrontier, transaction.causalFrontier)\n ) {\n throw invalidSequence(\"committed routing fields do not exactly match the OGACO envelope\");\n }\n return null;\n }\n requireNativeRevision(transaction.priorNativeRevision, \"transaction.priorNativeRevision\");\n requireNativeRevision(transaction.nativeRevision, \"transaction.nativeRevision\");\n let summary: ReturnType<typeof decodeEditableArtifactSerializedCommit>;\n try {\n summary = decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n } catch (error) {\n throw invalidSequence(`invalid OGAST envelope: ${asError(error).message}`);\n }\n if (\n summary.modality !== transaction.modality ||\n summary.transactionId !== transaction.transactionId ||\n summary.parentHeadSequence !== transaction.startSequence - 1 ||\n summary.resultHeadSequence !== transaction.endSequence ||\n summary.priorNativeRevision !== transaction.priorNativeRevision ||\n summary.nativeReceipt.revision !== transaction.nativeRevision ||\n summary.commitProtocolVersion !== transaction.commitProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n summary.requestHash !== transaction.requestHash ||\n summary.intent.artifactId !== transaction.artifactId\n ) {\n throw invalidSequence(\"committed routing fields do not exactly match the OGAST envelope\");\n }\n return Object.freeze({\n clientTransactionId: summary.intent.clientTransactionId,\n requestHash: summary.requestHash,\n intentBytes: summary.intentBytes,\n });\n}\n\nfunction validateSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n operationProtocolVersion: number,\n snapshotVersion: number,\n modelSchemaVersion: number,\n maxSnapshotBytes: number,\n): void {\n if (snapshot.artifactId !== artifactId || snapshot.modality !== modality) {\n throw invalidBootstrap(\"snapshot artifact authority mismatch\");\n }\n safeSequence(snapshot.sequence, \"snapshot sequence\");\n requireSha256(snapshot.stateHash, \"snapshot.stateHash\");\n requireSha256(snapshot.digest, \"snapshot.digest\");\n boundedNonEmpty(snapshot.kernelVersion, \"snapshot.kernelVersion\", MAX_KERNEL_VERSION_BYTES);\n positiveSafeInteger(snapshot.modelSchemaVersion, \"snapshot.modelSchemaVersion\");\n if (snapshot.modality === \"spreadsheet\") {\n validateFrontier(snapshot.causalFrontier, \"snapshot.causalFrontier\");\n if (\n snapshot.operationProtocolVersion !== operationProtocolVersion ||\n snapshot.snapshotVersion !== snapshotVersion\n ) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `snapshot operation/state versions ${snapshot.operationProtocolVersion}/${snapshot.snapshotVersion} are incompatible with ${operationProtocolVersion}/${snapshotVersion}`,\n );\n }\n } else {\n requireNativeRevision(snapshot.nativeRevision, \"snapshot.nativeRevision\");\n }\n if (snapshot.modelSchemaVersion !== modelSchemaVersion) {\n throw new EditableArtifactSyncError(\n \"unsupported_protocol\",\n `snapshot schema ${snapshot.modelSchemaVersion} is incompatible with ${modelSchemaVersion}`,\n );\n }\n if (!(snapshot.bytes instanceof Uint8Array)) {\n throw invalidBootstrap(\"snapshot bytes must be a Uint8Array\");\n }\n if (snapshot.bytes.byteLength === 0) throw invalidBootstrap(\"snapshot bytes is empty\");\n if (snapshot.bytes.byteLength > maxSnapshotBytes) {\n throw invalidBootstrap(\"snapshot bytes exceeds the configured bound\");\n }\n}\n\nfunction validateFrontier(frontier: EditableArtifactCausalFrontier, label: string): void {\n if (!Array.isArray(frontier)) throw new TypeError(`${label} must be an array`);\n if (frontier.length > MAX_FRONTIER_ACTORS) {\n throw new RangeError(`${label} exceeds ${MAX_FRONTIER_ACTORS} actors`);\n }\n let previous: string | null = null;\n for (const [index, entry] of frontier.entries()) {\n if (\n !entry ||\n typeof entry !== \"object\" ||\n Array.isArray(entry) ||\n Object.getPrototypeOf(entry) !== Object.prototype\n ) {\n throw new TypeError(`${label}[${index}] must be a plain object`);\n }\n requireReplicaId(entry.replicaId, `${label}[${index}].replicaId`);\n positiveSafeInteger(entry.counter, `${label}[${index}].counter`);\n if (previous !== null && compareCodeUnits(previous, entry.replicaId) >= 0) {\n throw new TypeError(`${label} must be strictly sorted and duplicate-free`);\n }\n previous = entry.replicaId;\n }\n}\n\nfunction validateLiveMessage(\n message: EditableArtifactLiveMessage,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n operationProtocolVersion: number,\n maxCommittedTransactionBytes: number,\n): void {\n if (!message || typeof message !== \"object\") {\n throw invalidSequence(\"live message must be an object\");\n }\n if (message.type === \"transaction.committed\") {\n validateCommittedTransaction(\n message.transaction,\n artifactId,\n modality,\n operationProtocolVersion,\n maxCommittedTransactionBytes,\n );\n return;\n }\n if (message.type === \"head\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live head belongs to another artifact\");\n }\n safeSequence(message.headSequence, \"live headSequence\");\n return;\n }\n if (message.type === \"authorization\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live authorization belongs to another artifact\");\n }\n if (typeof message.writable !== \"boolean\") {\n throw invalidSequence(\"live authorization writable must be boolean\");\n }\n return;\n }\n if (message.type === \"resync_required\") {\n if (message.artifactId !== artifactId) {\n throw invalidSequence(\"live resync belongs to another artifact\");\n }\n boundedNonEmpty(message.reason, \"live resync reason\", 8 * 1024);\n return;\n }\n throw invalidSequence(\"live message type is unsupported\");\n}\n\nfunction estimateLiveMessageBytes(message: EditableArtifactLiveMessage): number {\n if (message.type === \"transaction.committed\") {\n return estimateCommittedTransactionBytes(message.transaction);\n }\n if (message.type === \"resync_required\") {\n return new TextEncoder().encode(message.reason).byteLength + 128;\n }\n return 96;\n}\n\nfunction estimateCommittedTransactionBytes(\n transaction: EditableArtifactCommittedTransaction,\n): number {\n return (\n transaction.committedTransactionBytes.byteLength +\n 512 +\n (transaction.modality === \"spreadsheet\"\n ? transaction.causalFrontier.length * (MAX_IDENTIFIER_BYTES + 16)\n : 32)\n );\n}\n\nfunction requireStateHash(actual: string, expected: string, source: string): void {\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"authored_causal_mismatch\",\n `${source} produced state hash ${actual}; expected ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction requireDigest(actual: string, expected: string, source: string): void {\n requireSha256(actual, `${source} computed digest`);\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"byte_corruption\",\n `${source} bytes produced digest ${actual}; expected ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction requireFrontier(\n actual: EditableArtifactCausalFrontier,\n expected: EditableArtifactCausalFrontier,\n source: string,\n): void {\n if (\n actual.length !== expected.length ||\n actual.some(\n (entry, index) =>\n entry.replicaId !== expected[index]?.replicaId ||\n entry.counter !== expected[index]?.counter,\n )\n ) {\n throw new EditableArtifactSyncError(\n \"authored_causal_mismatch\",\n `${source} causal frontier does not match the authoritative barrier`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction orderPendingTransactions(\n transactions: EditableArtifactPendingTransaction[],\n): EditableArtifactPendingTransaction[] {\n const byId = new Map<string, EditableArtifactPendingTransaction>();\n const replicaCounters = new Set<string>();\n for (const transaction of transactions) {\n if (byId.has(transaction.clientTransactionId)) {\n throw new TypeError(`duplicate pending transaction ${transaction.clientTransactionId}`);\n }\n const counterKey = `${transaction.replicaId}\\0${transaction.replicaCounter}`;\n if (replicaCounters.has(counterKey)) {\n throw new TypeError(\n `replica ${transaction.replicaId} reused counter ${transaction.replicaCounter}`,\n );\n }\n replicaCounters.add(counterKey);\n byId.set(transaction.clientTransactionId, transaction);\n }\n\n const children = new Map<string, string[]>();\n const indegree = new Map<string, number>();\n for (const transaction of transactions) {\n let count = 0;\n const dependency = transaction.previousLocalTransactionId;\n if (dependency && byId.has(dependency)) {\n const list = children.get(dependency) ?? [];\n list.push(transaction.clientTransactionId);\n children.set(dependency, list);\n count += 1;\n }\n indegree.set(transaction.clientTransactionId, count);\n }\n\n const ready = transactions\n .filter((transaction) => indegree.get(transaction.clientTransactionId) === 0)\n .sort(comparePendingStable);\n const ordered: EditableArtifactPendingTransaction[] = [];\n while (ready.length > 0) {\n const transaction = ready.shift();\n if (!transaction) break;\n ordered.push(transaction);\n for (const childId of children.get(transaction.clientTransactionId) ?? []) {\n const next = (indegree.get(childId) ?? 0) - 1;\n indegree.set(childId, next);\n if (next === 0) {\n const child = byId.get(childId);\n if (child) insertSorted(ready, child, comparePendingStable);\n }\n }\n }\n if (ordered.length !== transactions.length) {\n throw new TypeError(\"pending transaction dependencies contain a cycle\");\n }\n return ordered;\n}\n\nfunction comparePendingStable(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): number {\n const replica = compareCodeUnits(left.replicaId, right.replicaId);\n if (replica !== 0) return replica;\n if (left.replicaCounter !== right.replicaCounter) {\n return left.replicaCounter < right.replicaCounter ? -1 : 1;\n }\n if (left.createdAt !== right.createdAt) return left.createdAt < right.createdAt ? -1 : 1;\n return compareCodeUnits(left.clientTransactionId, right.clientTransactionId);\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction insertSorted<T>(values: T[], value: T, compare: (left: T, right: T) => number): void {\n let low = 0;\n let high = values.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (compare(values[middle] as T, value) <= 0) low = middle + 1;\n else high = middle;\n }\n values.splice(low, 0, value);\n}\n\nfunction cloneSnapshot(\n snapshot: EditableArtifactSpreadsheetSnapshot,\n): EditableArtifactSpreadsheetSnapshot;\nfunction cloneSnapshot(\n snapshot: EditableArtifactSerializedSnapshot,\n): EditableArtifactSerializedSnapshot;\nfunction cloneSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n): EditableArtifactStoredReplica[\"snapshot\"];\nfunction cloneSnapshot(\n snapshot: EditableArtifactStoredReplica[\"snapshot\"],\n): EditableArtifactStoredReplica[\"snapshot\"] {\n return snapshot.modality === \"spreadsheet\"\n ? {\n ...snapshot,\n causalFrontier: cloneFrontier(snapshot.causalFrontier),\n bytes: snapshot.bytes.slice(),\n }\n : { ...snapshot, bytes: snapshot.bytes.slice() };\n}\n\nfunction cloneCommitted(\n transaction: EditableArtifactSpreadsheetCommittedTransaction,\n): EditableArtifactSpreadsheetCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactSerializedCommittedTransaction,\n): EditableArtifactSerializedCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction;\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n }\n : {\n ...transaction,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction clonePending(\n transaction: EditableArtifactSpreadsheetPendingTransaction,\n): EditableArtifactSpreadsheetPendingTransaction;\nfunction clonePending(\n transaction: Exclude<EditableArtifactPendingTransaction, { modality: \"spreadsheet\" }>,\n): Exclude<EditableArtifactPendingTransaction, { modality: \"spreadsheet\" }>;\nfunction clonePending(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction;\nfunction clonePending(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalBase: cloneFrontier(transaction.causalBase),\n selectiveUndoTargets: [...transaction.selectiveUndoTargets],\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n }\n : {\n ...transaction,\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n };\n}\n\nfunction safeSequence(value: number, label: string): number {\n return nonNegativeSafeInteger(value, label);\n}\n\nfunction requireModality(value: unknown): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(\"artifact modality is invalid\");\n }\n return value;\n}\n\nfunction requireNativeRevision(value: number | null, label: string): number {\n if (value === null || !Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction requireNativeRevisionEqual(actual: number, expected: number, source: string): void {\n requireNativeRevision(actual, `${source} actual native revision`);\n requireNativeRevision(expected, `${source} expected native revision`);\n if (actual !== expected) {\n throw new EditableArtifactSyncError(\n \"authored_causal_mismatch\",\n `${source} native revision ${actual} does not match ${expected}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) throw new RangeError(`${label} must be positive`);\n return value;\n}\n\nfunction positiveU16(value: number, label: string): number {\n const validated = positiveSafeInteger(value, label);\n if (validated > 0xffff) throw new RangeError(`${label} must fit an unsigned 16-bit integer`);\n return validated;\n}\n\nfunction nonNegativeSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`${label} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction requireNonEmpty(value: string, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction boundedNonEmpty(value: string, label: string, maxBytes: number): string {\n requireNonEmpty(value, label);\n if (new TextEncoder().encode(value).byteLength > maxBytes) {\n throw new RangeError(`${label} exceeds ${maxBytes} UTF-8 bytes`);\n }\n return value;\n}\n\nfunction requireSha256(value: string, label: string): string {\n if (!/^sha256:[a-f0-9]{64}$/.test(value)) {\n throw new TypeError(`${label} must be a canonical sha256: digest`);\n }\n return value;\n}\n\nfunction requireStableId(value: string, label: string): string {\n if (!/^(?!0{32}$)[a-f0-9]{32}$/u.test(value)) {\n throw new TypeError(`${label} must be 32 lowercase nonzero hex characters`);\n }\n return value;\n}\n\nfunction requireClientTransactionId(value: string, label: string): string {\n if (!/^[A-Za-z0-9._:-]{1,200}$/u.test(value)) {\n throw new TypeError(`${label} must be a canonical portable transaction id`);\n }\n return value;\n}\n\nfunction requireReplicaId(value: string, label: string): string {\n if (!/^(?!0{16}$)[a-f0-9]{16}$/.test(value)) {\n throw new TypeError(`${label} must be 16 lowercase nonzero hex characters`);\n }\n return value;\n}\n\nfunction defaultWriterReplicaId(): string {\n for (;;) {\n const bytes = crypto.getRandomValues(new Uint8Array(8));\n const value = [...bytes].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n if (value !== \"0000000000000000\") return value;\n }\n}\n\nexport function editableArtifactCacheNamespace(authority: EditableArtifactCacheAuthority): string {\n const origin = new URL(authority.deploymentOrigin).origin;\n if (!origin.startsWith(\"https://\") && !origin.startsWith(\"http://\")) {\n throw new TypeError(\"storageAuthority.deploymentOrigin must be HTTP(S)\");\n }\n return JSON.stringify([\n origin,\n boundedNonEmpty(authority.accountId, \"storageAuthority.accountId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(authority.workspaceId, \"storageAuthority.workspaceId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(authority.principalId, \"storageAuthority.principalId\", MAX_IDENTIFIER_BYTES),\n boundedNonEmpty(\n authority.authorizationEpoch,\n \"storageAuthority.authorizationEpoch\",\n MAX_IDENTIFIER_BYTES,\n ),\n ]);\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n return frontier.map((entry) => ({ ...entry }));\n}\n\nfunction frontiersEqual(\n left: readonly Readonly<{ replicaId: string; counter: number }>[],\n right: readonly Readonly<{ replicaId: string; counter: number }>[],\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nfunction normalizeIdentifiers(values: readonly string[], label: string): readonly string[] {\n if (!Array.isArray(values)) throw new TypeError(`${label} must be an array`);\n if (values.length > 1_024) throw new RangeError(`${label} exceeds 1024 entries`);\n const normalized = values.map((value, index) =>\n boundedNonEmpty(value, `${label}[${index}]`, MAX_IDENTIFIER_BYTES),\n );\n normalized.sort(compareCodeUnits);\n for (let index = 1; index < normalized.length; index += 1) {\n if (normalized[index - 1] === normalized[index]) {\n throw new TypeError(`${label} contains a duplicate identifier`);\n }\n }\n return normalized;\n}\n\nfunction identifiersEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction invalidBootstrap(message: string, retryable = false): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_bootstrap\", message, {\n retryable,\n requiresSnapshot: retryable,\n });\n}\n\nfunction invalidSequence(message: string): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_sequence\", message, {\n retryable: true,\n requiresSnapshot: true,\n });\n}\n\nfunction transientError(cause: unknown): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"invalid_bootstrap\", \"artifact transport interrupted\", {\n retryable: true,\n cause,\n });\n}\n\nfunction storageError(message: string, cause?: unknown): EditableArtifactSyncError {\n return new EditableArtifactSyncError(\"storage_failed\", message, { cause });\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction errorCode(error: Error): string | null {\n const code = (error as Error & { code?: unknown }).code;\n return typeof code === \"string\" && code.length > 0 ? code : null;\n}\n\nfunction isRetryableFailure(error: Error): boolean {\n if (error instanceof EditableArtifactSyncError) return error.retryable;\n return (error as Error & { retryable?: unknown }).retryable === true;\n}\n\nfunction isTerminal(state: EditableArtifactSyncState): boolean {\n return state === \"unsupported\" || state === \"failed\" || state === \"closed\";\n}\n\nfunction waitForConnectionClose(\n connection: EditableArtifactLiveConnection,\n signal: AbortSignal,\n): Promise<Awaited<EditableArtifactLiveConnection[\"closed\"]>> {\n if (signal.aborted) return Promise.resolve({ reason: \"closed\" });\n return new Promise((resolve, reject) => {\n let settled = false;\n const finish = (value: Awaited<EditableArtifactLiveConnection[\"closed\"]>): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n };\n const fail = (error: unknown): void => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n };\n const onAbort = (): void => finish({ reason: \"closed\" });\n signal.addEventListener(\"abort\", onAbort, { once: true });\n void connection.closed.then(finish, fail);\n });\n}\n\nconst defaultScheduler: EditableArtifactSyncScheduler = {\n now: () => Date.now(),\n sleep: async (delayMs, signal) => {\n if (signal.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n const onAbort = () => done();\n function done() {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n },\n};\n","export type EditableArtifactSyncErrorCode =\n | \"unsupported_protocol\"\n | \"invalid_bootstrap\"\n | \"invalid_sequence\"\n | \"kernel_diverged\"\n | \"byte_corruption\"\n | \"authored_causal_mismatch\"\n | \"queue_overflow\"\n | \"resync_required\"\n | \"permission_changed\"\n | \"storage_failed\"\n | \"pending_conflict\"\n | \"reconnect_exhausted\";\n\nexport class EditableArtifactSyncError extends Error {\n readonly code: EditableArtifactSyncErrorCode;\n readonly retryable: boolean;\n readonly requiresSnapshot: boolean;\n\n constructor(\n code: EditableArtifactSyncErrorCode,\n message: string,\n options: { retryable?: boolean; requiresSnapshot?: boolean; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"EditableArtifactSyncError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.requiresSnapshot = options.requiresSnapshot ?? false;\n }\n}\n\n/** Transport adapters wrap retryable network failures in this typed error. */\nexport class EditableArtifactTransportError extends Error {\n readonly code: string | undefined;\n readonly retryable: boolean;\n readonly outcomeUnknown: boolean;\n\n constructor(\n message: string,\n options: {\n code?: string;\n retryable?: boolean;\n outcomeUnknown?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"EditableArtifactTransportError\";\n this.code = options.code;\n this.retryable = options.retryable ?? true;\n this.outcomeUnknown = options.outcomeUnknown ?? false;\n }\n}\n","export type EditableArtifactOpenFailureCategory =\n | \"unsupported_old_format\"\n | \"byte_corruption\"\n | \"authored_causal_mismatch\"\n | \"runtime_package_mismatch\"\n | \"projection_parity_ci_failure\";\n\n/** Content-free, bounded telemetry safe to emit for workbook-open failures. */\nexport type EditableArtifactOpenFailureEvent = Readonly<{\n category: EditableArtifactOpenFailureCategory;\n code: string;\n}>;\n\nexport type EditableArtifactOpenFailureReporter = (event: EditableArtifactOpenFailureEvent) => void;\n\nconst BYTE_CORRUPTION_CODES = new Set([\n \"byte_corruption\",\n \"artifact_bad_magic\",\n \"artifact_checksum_mismatch\",\n \"artifact_invalid_collaboration_snapshot\",\n \"artifact_invalid_snapshot\",\n \"artifact_invalid_tag\",\n \"artifact_invalid_utf8\",\n \"artifact_non_canonical\",\n \"artifact_trailing_bytes\",\n \"artifact_truncated\",\n]);\nconst AUTHORED_CAUSAL_CODES = new Set([\n \"artifact_state_mismatch\",\n \"authored_causal_mismatch\",\n \"committed_metadata_mismatch\",\n \"invalid_frontier\",\n \"kernel_diverged\",\n]);\nconst RUNTIME_PACKAGE_CODES = new Set([\n \"artifact_runtime_incompatible\",\n \"artifact_runtime_integrity\",\n \"artifact_runtime_manifest_invalid\",\n \"artifact_runtime_unavailable\",\n \"artifact_runtime_unsupported_target\",\n \"incompatible_wasm_build\",\n \"runtime_identity_mismatch\",\n]);\n\n/** Maps only stable error codes; messages and workbook/formula content are ignored. */\nexport function classifyEditableArtifactOpenFailure(\n error: unknown,\n): EditableArtifactOpenFailureEvent | null {\n const code = normalizedErrorCode(error);\n if (code === null) return null;\n let category: EditableArtifactOpenFailureCategory | null = null;\n if (code === \"unsupported_protocol\" || code === \"artifact_unsupported_version\") {\n category = \"unsupported_old_format\";\n } else if (BYTE_CORRUPTION_CODES.has(code)) {\n category = \"byte_corruption\";\n } else if (AUTHORED_CAUSAL_CODES.has(code)) {\n category = \"authored_causal_mismatch\";\n } else if (RUNTIME_PACKAGE_CODES.has(code)) {\n category = \"runtime_package_mismatch\";\n } else if (code === \"artifact_runtime_projection_parity\") {\n category = \"projection_parity_ci_failure\";\n }\n return category === null ? null : Object.freeze({ category, code });\n}\n\nfunction normalizedErrorCode(error: unknown): string | null {\n if (typeof error !== \"object\" || error === null) return null;\n let descriptor: PropertyDescriptor | undefined;\n try {\n descriptor = Object.getOwnPropertyDescriptor(error, \"code\");\n } catch {\n return null;\n }\n if (!descriptor || !(\"value\" in descriptor)) return null;\n const value = descriptor.value;\n if (typeof value !== \"string\") return null;\n const code = value.toLowerCase();\n return /^[a-z][a-z0-9_]{0,127}$/u.test(code) ? code : null;\n}\n","import {\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeEditableArtifactMutationIntent,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { decodeCommittedTransactionSummary } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { editableArtifactCodecFor } from \"@opengeni/contracts/editable-artifact-codec-registry\";\nimport { decodeEditableArtifactSerializedCommit } from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport type {\n EditableArtifactCommittedTransaction,\n EditableArtifactCausalFrontier,\n EditableArtifactId,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactSnapshot,\n EditableArtifactStoredReplica,\n} from \"./types\";\n\n/** Durable browser state required to resume one artifact without inventing state. */\nexport type EditableArtifactStoragePort = {\n loadReplica: (\n scope: EditableArtifactStorageScope,\n ) => Promise<EditableArtifactStoredReplica | null>;\n /** Rare full snapshot/resync replacement. Replaces the retained journal atomically. */\n saveReplica: (\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ) => Promise<void>;\n /** Hot path: exact-CAS one verified committed transaction onto the retained journal. */\n appendCommitted: (\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ) => Promise<void>;\n /** Clears the reconstructible server state but deliberately preserves local edits. */\n clearReplica: (scope: EditableArtifactStorageScope) => Promise<void>;\n listPending: (\n scope: EditableArtifactStorageScope,\n ) => Promise<EditableArtifactPendingTransaction[]>;\n putPending: (\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ) => Promise<void>;\n deletePending: (\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ) => Promise<void>;\n};\n\n/** Stable authorization/cache partition supplied by the authenticated host. */\nexport type EditableArtifactStorageScope = {\n namespace: string;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n};\n\nexport type EditableArtifactAppendCommittedInput = {\n artifactId: EditableArtifactId;\n expectedCursor: number;\n expectedStateHash: string;\n transaction: EditableArtifactCommittedTransaction;\n updatedAt: number;\n};\n\nexport type EditableArtifactExpectedStoredHead = Readonly<{\n cursor: number;\n stateHash: string;\n}> | null;\n\n/** A stable id was reused for different content. Retrying cannot resolve this. */\nexport class EditableArtifactStorageConflictError extends Error {\n readonly code = \"editable_artifact_storage_conflict\" as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"EditableArtifactStorageConflictError\";\n }\n}\n\n/**\n * Deterministic in-memory implementation for tests, SSR, and non-persistent\n * hosts. All values cross the port by copy, matching IndexedDB structured-clone\n * behavior and preventing callers from mutating retained authority by alias.\n */\nexport class MemoryEditableArtifactStorage implements EditableArtifactStoragePort {\n readonly #replicas = new Map<string, Map<EditableArtifactId, MemoryStoredReplica>>();\n readonly #pending = new Map<\n string,\n Map<EditableArtifactId, Map<string, EditableArtifactPendingTransaction>>\n >();\n\n async loadReplica(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactStoredReplica | null> {\n assertScope(scope);\n const replica = this.#replicas.get(scope.namespace)?.get(scope.artifactId);\n return replica === undefined ? null : cloneMemoryStoredReplica(replica);\n }\n\n async saveReplica(\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, replica.artifactId);\n assertScopeModality(scope, replica.modality);\n assertStoredReplica(replica);\n const namespace = getOrCreate(this.#replicas, scope.namespace);\n const existing = namespace.get(scope.artifactId);\n assertReplacementCanApply(existing?.head, expectedHead, replica.artifactId);\n namespace.set(scope.artifactId, toMemoryStoredReplica(replica));\n }\n\n async appendCommitted(\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, input.artifactId);\n assertScopeModality(scope, input.transaction.modality);\n assertAppendInput(input);\n const replica = this.#replicas.get(scope.namespace)?.get(scope.artifactId);\n if (replica === undefined) throw missingReplicaConflict(input.artifactId);\n if (\n replica.head.cursor >= input.transaction.endSequence &&\n replica.tail.some((transaction) => committedTransactionsEqual(transaction, input.transaction))\n ) {\n return;\n }\n assertAppendCanApply(\n {\n cursor: replica.head.cursor,\n stateHash: replica.head.stateHash,\n modality: replica.head.modality,\n ...(replica.head.snapshot.modality === \"spreadsheet\"\n ? { operationProtocolVersion: replica.head.snapshot.operationProtocolVersion }\n : {}),\n },\n input,\n );\n const transactionBytes = committedStorageBytes(input.transaction);\n if (replica.tail.length >= HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"committed transaction store exceeds its count bound\");\n }\n const nextTailBytes = checkedAggregateBytes(\n replica.tailBytes,\n transactionBytes,\n HARD_MAX_COMMITTED_BYTES,\n \"committed transaction store\",\n );\n replica.tail.push(cloneCommittedTransaction(input.transaction));\n replica.tailBytes = nextTailBytes;\n replica.head.cursor = input.transaction.endSequence;\n replica.head.stateHash = input.transaction.stateHash;\n replica.head.updatedAt = input.updatedAt;\n }\n\n async clearReplica(scope: EditableArtifactStorageScope): Promise<void> {\n assertScope(scope);\n const namespace = this.#replicas.get(scope.namespace);\n namespace?.delete(scope.artifactId);\n if (namespace?.size === 0) this.#replicas.delete(scope.namespace);\n }\n\n async listPending(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactPendingTransaction[]> {\n assertScope(scope);\n return [...(this.#pending.get(scope.namespace)?.get(scope.artifactId)?.values() ?? [])]\n .sort(comparePendingTransactions)\n .map(clonePendingTransaction);\n }\n\n async putPending(\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ): Promise<void> {\n assertScopeMatchesArtifact(scope, transaction.artifactId);\n assertScopeModality(scope, transaction.modality);\n assertPendingTransaction(transaction);\n const namespace = getOrCreate(this.#pending, scope.namespace);\n const artifactPending = getOrCreate(namespace, scope.artifactId);\n const existing = artifactPending.get(transaction.clientTransactionId);\n assertPendingCanReplace(existing, transaction);\n if (existing === undefined) {\n if (artifactPending.size >= HARD_MAX_PENDING_TRANSACTIONS) {\n throw new RangeError(\"pending transaction store exceeds its count bound\");\n }\n let aggregateBytes = pendingStorageBytes(transaction);\n if (aggregateBytes > HARD_MAX_PENDING_BYTES) {\n throw new RangeError(\"pending transaction store exceeds its byte bound\");\n }\n for (const retained of artifactPending.values()) {\n aggregateBytes = checkedAggregateBytes(\n aggregateBytes,\n pendingStorageBytes(retained),\n HARD_MAX_PENDING_BYTES,\n \"pending transaction store\",\n );\n }\n artifactPending.set(transaction.clientTransactionId, clonePendingTransaction(transaction));\n }\n }\n\n async deletePending(\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ): Promise<void> {\n assertScope(scope);\n const namespace = this.#pending.get(scope.namespace);\n const artifactPending = namespace?.get(scope.artifactId);\n artifactPending?.delete(clientTransactionId);\n if (artifactPending?.size === 0) namespace?.delete(scope.artifactId);\n if (namespace?.size === 0) this.#pending.delete(scope.namespace);\n }\n}\n\ntype StoredReplicaHead = Omit<EditableArtifactStoredReplica, \"tail\">;\n\ntype MemoryStoredReplica = {\n head: StoredReplicaHead;\n tail: EditableArtifactCommittedTransaction[];\n tailBytes: number;\n};\n\ntype IndexedDbStoredReplicaHead = Omit<StoredReplicaHead, \"snapshot\"> & {\n namespace: string;\n modality: EditableArtifactModality;\n /** Spreadsheet-only; absent for serialized modalities. */\n operationProtocolVersion?: number;\n tailCount: number;\n tailBytes: number;\n};\ntype IndexedDbStoredSnapshot = EditableArtifactSnapshot & { namespace: string };\ntype IndexedDbCommittedTransaction = EditableArtifactCommittedTransaction & {\n namespace: string;\n};\ntype IndexedDbPendingTransaction = EditableArtifactPendingTransaction & {\n namespace: string;\n /** IndexedDB key-path alias; always exactly clientTransactionId. */\n transactionId: string;\n};\nconst DATABASE_VERSION = 4;\nconst REPLICA_HEAD_STORE = \"replicas\";\nconst SNAPSHOT_STORE = \"snapshots\";\nconst COMMITTED_STORE = \"committedTransactions\";\nconst COMMITTED_BY_SCOPE_INDEX = \"byScope\";\nconst PENDING_STORE = \"pendingTransactions\";\nconst PENDING_BY_SCOPE_INDEX = \"byScope\";\nconst HARD_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst HARD_MAX_COMMITTED_TRANSACTIONS = 65_536;\nconst HARD_MAX_COMMITTED_BYTES = 256 * 1024 * 1024;\nconst HARD_MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nconst HARD_MAX_PENDING_TRANSACTIONS = 1_024;\nconst HARD_MAX_PENDING_BYTES = 128 * 1024 * 1024;\nconst HARD_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst HARD_MAX_INTENT_BYTES = EDITABLE_ARTIFACT_INTENT_MAX_BYTES;\n\nexport type IndexedDbEditableArtifactStorageOptions = {\n databaseName?: string;\n indexedDB?: IDBFactory;\n};\n\n/**\n * IndexedDB-backed browser storage. Writes that depend on an existing value do\n * their comparison and mutation in the same IDB transaction, so tabs cannot\n * silently replace a newer cursor or reuse an idempotency key for other bytes.\n */\nexport class IndexedDbEditableArtifactStorage implements EditableArtifactStoragePort {\n readonly #databaseName: string;\n readonly #factory: IDBFactory;\n #databasePromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexedDbEditableArtifactStorageOptions = {}) {\n const factory = options.indexedDB ?? globalThis.indexedDB;\n if (factory === undefined) {\n throw new Error(\"IndexedDB is unavailable; provide an indexedDB implementation\");\n }\n this.#factory = factory;\n this.#databaseName = options.databaseName ?? \"opengeni-editable-artifacts\";\n }\n\n async loadReplica(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactStoredReplica | null> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readonly\",\n );\n const completed = transactionResult(transaction);\n const headRequest = requestResult<IndexedDbStoredReplicaHead | undefined>(\n transaction.objectStore(REPLICA_HEAD_STORE).get(scopeKey(ownedScope)),\n );\n const snapshotRequest = requestResult<IndexedDbStoredSnapshot | undefined>(\n transaction.objectStore(SNAPSHOT_STORE).get(scopeKey(ownedScope)),\n );\n const tailRequest = readBoundedIndexValues<IndexedDbCommittedTransaction>(\n transaction,\n transaction.objectStore(COMMITTED_STORE).index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(ownedScope),\n HARD_MAX_COMMITTED_TRANSACTIONS,\n HARD_MAX_COMMITTED_BYTES,\n (value) => {\n if (!(value.committedTransactionBytes instanceof Uint8Array)) {\n throw new TypeError(\"retained committedTransactionBytes must be a Uint8Array\");\n }\n return committedStorageBytes(value);\n },\n );\n let head: IndexedDbStoredReplicaHead | undefined;\n let snapshot: IndexedDbStoredSnapshot | undefined;\n let tail: IndexedDbCommittedTransaction[];\n try {\n [head, snapshot, tail] = await Promise.all([headRequest, snapshotRequest, tailRequest]);\n await completed;\n } catch (error) {\n await completed.catch(() => undefined);\n throw error;\n }\n if (head === undefined) {\n if (snapshot !== undefined || tail.length !== 0) {\n throw new TypeError(`artifact ${ownedScope.artifactId} has retained state without a head`);\n }\n return null;\n }\n if (snapshot === undefined) {\n throw new TypeError(`artifact ${ownedScope.artifactId} has no retained snapshot`);\n }\n if (head.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained replica namespace does not match its storage key\");\n }\n if (snapshot.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained snapshot namespace does not match its storage key\");\n }\n let retainedTailBytes = 0;\n for (const committed of tail) {\n if (committed.namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained journal namespace does not match its storage key\");\n }\n retainedTailBytes = checkedAggregateBytes(\n retainedTailBytes,\n committedStorageBytes(committed),\n HARD_MAX_COMMITTED_BYTES,\n \"retained committed transaction store\",\n );\n }\n assertStoredHeadAccounting(head, tail.length, retainedTailBytes);\n const {\n namespace: _headNamespace,\n operationProtocolVersion: retainedOperationProtocolVersion,\n tailCount: _tailCount,\n tailBytes: _tailBytes,\n ...storedHead\n } = head;\n const { namespace: _snapshotNamespace, ...rawStoredSnapshot } = snapshot;\n const storedSnapshot = normalizeStoredSnapshot(rawStoredSnapshot, ownedScope.modality);\n const normalizedTail = tail\n .map(({ namespace: _transactionNamespace, ...value }) =>\n normalizeStoredCommitted(value, ownedScope.modality),\n )\n .sort(compareCommittedTransactions);\n if (head.modality !== ownedScope.modality) {\n throw new TypeError(\"retained head modality does not match its storage scope\");\n }\n if (\n storedSnapshot.modality === \"spreadsheet\" &&\n retainedOperationProtocolVersion !== storedSnapshot.operationProtocolVersion\n )\n throw new TypeError(\"retained head protocol does not match its snapshot\");\n const replica: EditableArtifactStoredReplica = {\n ...storedHead,\n modality: ownedScope.modality,\n snapshot: storedSnapshot,\n tail: normalizedTail,\n };\n assertStoredReplica(replica);\n // IndexedDB already returned a structured clone owned by this call. The\n // namespace-stripped objects are not retained by the adapter, so another\n // full copy (including every snapshot/journal byte) adds no isolation.\n return replica;\n }\n\n async saveReplica(\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedReplica = cloneStoredReplica(replica);\n const ownedExpectedHead = cloneExpectedStoredHead(expectedHead);\n assertScopeMatchesArtifact(ownedScope, ownedReplica.artifactId);\n assertScopeModality(ownedScope, ownedReplica.modality);\n assertStoredReplica(ownedReplica);\n const database = await this.#database();\n await replaceIndexedDbReplica(database, ownedScope, ownedReplica, ownedExpectedHead);\n }\n\n async appendCommitted(\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedInput: EditableArtifactAppendCommittedInput = {\n ...input,\n transaction: cloneCommittedTransaction(input.transaction),\n };\n assertScopeMatchesArtifact(ownedScope, ownedInput.artifactId);\n assertScopeModality(ownedScope, ownedInput.transaction.modality);\n assertAppendInput(ownedInput);\n const database = await this.#database();\n await appendIndexedDbCommitted(database, ownedScope, ownedInput);\n }\n\n async clearReplica(scope: EditableArtifactStorageScope): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n await clearIndexedDbReplica(database, ownedScope);\n }\n\n async listPending(\n scope: EditableArtifactStorageScope,\n ): Promise<EditableArtifactPendingTransaction[]> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(PENDING_STORE, \"readonly\");\n const completed = transactionResult(transaction);\n let values: IndexedDbPendingTransaction[];\n try {\n values = await readBoundedIndexValues<IndexedDbPendingTransaction>(\n transaction,\n transaction.objectStore(PENDING_STORE).index(PENDING_BY_SCOPE_INDEX),\n scopeKey(ownedScope),\n HARD_MAX_PENDING_TRANSACTIONS,\n HARD_MAX_PENDING_BYTES,\n (value) => {\n if (\n !(value.commandBytes instanceof Uint8Array) ||\n !(value.intentBytes instanceof Uint8Array)\n ) {\n throw new TypeError(\"retained pending bytes must be Uint8Arrays\");\n }\n return pendingStorageBytes(value);\n },\n );\n await completed;\n } catch (error) {\n await completed.catch(() => undefined);\n throw error;\n }\n return values\n .map(({ namespace, transactionId, ...value }) => {\n if (namespace !== ownedScope.namespace) {\n throw new TypeError(\"retained pending namespace does not match its storage key\");\n }\n if (transactionId !== value.clientTransactionId) {\n throw new TypeError(\"retained pending key does not match clientTransactionId\");\n }\n const normalized = normalizeStoredPending(value, ownedScope.modality);\n assertPendingTransaction(normalized);\n return normalized;\n })\n .sort(comparePendingTransactions);\n }\n\n async putPending(\n scope: EditableArtifactStorageScope,\n transaction: EditableArtifactPendingTransaction,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const ownedTransaction = clonePendingTransaction(transaction);\n assertScopeMatchesArtifact(ownedScope, ownedTransaction.artifactId);\n assertScopeModality(ownedScope, ownedTransaction.modality);\n assertPendingTransaction(ownedTransaction);\n const stored: IndexedDbPendingTransaction = {\n ...ownedTransaction,\n namespace: ownedScope.namespace,\n transactionId: ownedTransaction.clientTransactionId,\n };\n const database = await this.#database();\n await putIndexedDbPending(database, ownedScope, stored);\n }\n\n async deletePending(\n scope: EditableArtifactStorageScope,\n clientTransactionId: string,\n ): Promise<void> {\n const ownedScope = cloneStorageScope(scope);\n const database = await this.#database();\n const transaction = database.transaction(PENDING_STORE, \"readwrite\");\n transaction\n .objectStore(PENDING_STORE)\n .delete([ownedScope.namespace, ownedScope.artifactId, clientTransactionId]);\n await transactionResult(transaction);\n }\n\n async close(): Promise<void> {\n const databasePromise = this.#databasePromise;\n this.#databasePromise = null;\n if (databasePromise !== null) (await databasePromise).close();\n }\n\n #database(): Promise<IDBDatabase> {\n if (this.#databasePromise === null) {\n const opening = openDatabase(this.#factory, this.#databaseName);\n this.#databasePromise = opening;\n void opening.then(\n (database) => {\n database.onclose = () => {\n if (this.#databasePromise === opening) this.#databasePromise = null;\n };\n database.onversionchange = () => {\n database.close();\n if (this.#databasePromise === opening) this.#databasePromise = null;\n };\n },\n () => {\n if (this.#databasePromise === opening) this.#databasePromise = null;\n },\n );\n }\n return this.#databasePromise;\n }\n}\n\nfunction cloneSnapshot(snapshot: EditableArtifactSnapshot): EditableArtifactSnapshot {\n return snapshot.modality === \"spreadsheet\"\n ? {\n ...snapshot,\n causalFrontier: cloneFrontier(snapshot.causalFrontier),\n bytes: snapshot.bytes.slice(),\n }\n : { ...snapshot, bytes: snapshot.bytes.slice() };\n}\n\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n }\n : {\n ...transaction,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction clonePendingTransaction(\n transaction: EditableArtifactPendingTransaction,\n): EditableArtifactPendingTransaction {\n return transaction.modality === \"spreadsheet\"\n ? {\n ...transaction,\n causalBase: cloneFrontier(transaction.causalBase),\n selectiveUndoTargets: [...transaction.selectiveUndoTargets],\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n }\n : {\n ...transaction,\n commandBytes: transaction.commandBytes.slice(),\n intentBytes: transaction.intentBytes.slice(),\n };\n}\n\nfunction cloneStoredReplica(replica: EditableArtifactStoredReplica): EditableArtifactStoredReplica {\n return {\n ...replica,\n snapshot: cloneSnapshot(replica.snapshot),\n tail: replica.tail.map(cloneCommittedTransaction),\n };\n}\n\nfunction cloneStorageScope(scope: EditableArtifactStorageScope): EditableArtifactStorageScope {\n const owned = {\n namespace: scope.namespace,\n artifactId: scope.artifactId,\n modality: scope.modality,\n };\n assertScope(owned);\n return owned;\n}\n\nfunction cloneExpectedStoredHead(\n head: EditableArtifactExpectedStoredHead,\n): EditableArtifactExpectedStoredHead {\n if (head === null) return null;\n const owned = { cursor: head.cursor, stateHash: head.stateHash };\n assertSequence(owned.cursor, \"expected retained cursor\");\n assertNonEmpty(owned.stateHash, \"expected retained stateHash\");\n return owned;\n}\n\nfunction cloneStoredReplicaHead(replica: StoredReplicaHead): StoredReplicaHead {\n return { ...replica, snapshot: cloneSnapshot(replica.snapshot) };\n}\n\nfunction toStoredReplicaHead(replica: EditableArtifactStoredReplica): StoredReplicaHead {\n const { tail: _tail, ...head } = replica;\n return cloneStoredReplicaHead(head);\n}\n\nfunction toMemoryStoredReplica(replica: EditableArtifactStoredReplica): MemoryStoredReplica {\n return {\n head: toStoredReplicaHead(replica),\n tail: replica.tail.map(cloneCommittedTransaction),\n tailBytes: committedTailBytes(replica.tail),\n };\n}\n\nfunction cloneMemoryStoredReplica(replica: MemoryStoredReplica): EditableArtifactStoredReplica {\n return {\n ...cloneStoredReplicaHead(replica.head),\n tail: replica.tail.map(cloneCommittedTransaction),\n };\n}\n\nfunction assertStoredReplica(replica: EditableArtifactStoredReplica): void {\n assertStableId(replica.artifactId, \"artifactId\");\n assertModality(replica.modality, \"modality\");\n if (replica.snapshot.modality !== replica.modality) {\n throw new TypeError(\"stored snapshot modality does not match its replica\");\n }\n if (replica.snapshot.artifactId !== replica.artifactId) {\n throw new TypeError(\"stored snapshot artifactId does not match its replica\");\n }\n assertSequence(replica.snapshot.sequence, \"snapshot.sequence\");\n assertSequence(replica.cursor, \"cursor\");\n assertTimestamp(replica.updatedAt, \"updatedAt\");\n assertBytes(replica.snapshot.bytes, \"snapshot.bytes\");\n if (replica.snapshot.bytes.byteLength > HARD_MAX_SNAPSHOT_BYTES) {\n throw new RangeError(\"stored snapshot exceeds its hard byte bound\");\n }\n assertSha256(replica.snapshot.stateHash, \"snapshot.stateHash\");\n assertSha256(replica.snapshot.digest, \"snapshot.digest\");\n if (replica.snapshot.modality === \"spreadsheet\") {\n assertFrontier(replica.snapshot.causalFrontier, \"snapshot.causalFrontier\");\n assertPositiveInteger(\n replica.snapshot.operationProtocolVersion,\n \"snapshot.operationProtocolVersion\",\n );\n assertPositiveInteger(replica.snapshot.snapshotVersion, \"snapshot.snapshotVersion\");\n } else {\n assertSequence(replica.snapshot.nativeRevision, \"snapshot.nativeRevision\");\n }\n assertNonEmpty(replica.snapshot.kernelVersion, \"snapshot.kernelVersion\");\n assertPositiveInteger(replica.snapshot.modelSchemaVersion, \"snapshot.modelSchemaVersion\");\n assertSha256(replica.stateHash, \"stateHash\");\n\n let cursor = replica.snapshot.sequence;\n let stateHash = replica.snapshot.stateHash;\n let nativeRevision =\n replica.snapshot.modality === \"spreadsheet\" ? null : replica.snapshot.nativeRevision;\n if (replica.tail.length > HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"stored committed tail exceeds its count bound\");\n }\n let tailBytes = 0;\n for (const transaction of replica.tail) {\n assertCommittedTransaction(transaction, replica.artifactId);\n if (transaction.modality !== replica.modality) {\n throw new TypeError(\"stored committed tail modality does not match its replica\");\n }\n tailBytes = checkedAggregateBytes(\n tailBytes,\n committedStorageBytes(transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"stored committed tail\",\n );\n if (transaction.startSequence !== cursor + 1) {\n throw new TypeError(\"stored committed tail must be contiguous after its snapshot\");\n }\n if (\n transaction.modality === \"spreadsheet\" &&\n replica.snapshot.modality === \"spreadsheet\" &&\n transaction.operationProtocolVersion !== replica.snapshot.operationProtocolVersion\n )\n throw new TypeError(\"stored committed tail protocol does not match its snapshot\");\n if (transaction.modality !== \"spreadsheet\") {\n if (nativeRevision !== transaction.priorNativeRevision) {\n throw new TypeError(\"stored serialized tail prior native revision does not match\");\n }\n nativeRevision = transaction.nativeRevision;\n }\n if (transaction.priorStateHash !== stateHash) {\n throw new TypeError(\"stored committed tail priorStateHash does not match prior state\");\n }\n cursor = transaction.endSequence;\n stateHash = transaction.stateHash;\n }\n if (cursor !== replica.cursor) {\n throw new TypeError(\"stored cursor is not reconstructible from snapshot plus committed tail\");\n }\n if (stateHash !== replica.stateHash) {\n throw new TypeError(\"stored stateHash does not match snapshot plus committed tail\");\n }\n}\n\nfunction committedStorageBytes(\n transaction: Pick<EditableArtifactCommittedTransaction, \"committedTransactionBytes\">,\n): number {\n if (!(transaction.committedTransactionBytes instanceof Uint8Array)) {\n throw new TypeError(\"committedTransactionBytes must be a Uint8Array\");\n }\n return transaction.committedTransactionBytes.byteLength + 512;\n}\n\nfunction committedTailBytes(transactions: readonly EditableArtifactCommittedTransaction[]): number {\n let bytes = 0;\n for (const transaction of transactions) {\n bytes = checkedAggregateBytes(\n bytes,\n committedStorageBytes(transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"stored committed tail\",\n );\n }\n return bytes;\n}\n\nfunction pendingStorageBytes(\n transaction: Pick<EditableArtifactPendingTransaction, \"commandBytes\" | \"intentBytes\">,\n): number {\n if (\n !(transaction.commandBytes instanceof Uint8Array) ||\n !(transaction.intentBytes instanceof Uint8Array)\n ) {\n throw new TypeError(\"pending transaction bytes must be Uint8Arrays\");\n }\n const bytes = transaction.commandBytes.byteLength + transaction.intentBytes.byteLength;\n if (!Number.isSafeInteger(bytes)) {\n throw new RangeError(\"pending transaction byte size is not a safe integer\");\n }\n return bytes;\n}\n\nfunction checkedAggregateBytes(\n retainedBytes: number,\n addedBytes: number,\n maximumBytes: number,\n label: string,\n): number {\n if (!Number.isSafeInteger(retainedBytes) || retainedBytes < 0) {\n throw new TypeError(`${label} has invalid retained byte accounting`);\n }\n if (!Number.isSafeInteger(addedBytes) || addedBytes < 0) {\n throw new TypeError(`${label} has an invalid added byte size`);\n }\n const aggregateBytes = retainedBytes + addedBytes;\n if (!Number.isSafeInteger(aggregateBytes) || aggregateBytes > maximumBytes) {\n throw new RangeError(`${label} exceeds its byte bound`);\n }\n return aggregateBytes;\n}\n\nfunction assertStoredHeadAccounting(\n head: IndexedDbStoredReplicaHead,\n tailCount: number,\n tailBytes: number,\n): void {\n assertSequence(head.tailCount, \"retained head tailCount\");\n assertSequence(head.tailBytes, \"retained head tailBytes\");\n if (head.tailCount !== tailCount || head.tailBytes !== tailBytes) {\n throw new TypeError(\"retained head journal accounting does not match its transactions\");\n }\n}\n\nfunction assertAppendInput(input: EditableArtifactAppendCommittedInput): void {\n assertNonEmpty(input.artifactId, \"artifactId\");\n assertSequence(input.expectedCursor, \"expectedCursor\");\n assertNonEmpty(input.expectedStateHash, \"expectedStateHash\");\n assertTimestamp(input.updatedAt, \"updatedAt\");\n assertCommittedTransaction(input.transaction, input.artifactId);\n if (input.transaction.startSequence !== input.expectedCursor + 1) {\n throw new TypeError(\"committed append must begin immediately after expectedCursor\");\n }\n if (input.transaction.priorStateHash !== input.expectedStateHash) {\n throw new TypeError(\"committed append priorStateHash must equal expectedStateHash\");\n }\n}\n\nfunction assertCommittedTransaction(\n transaction: EditableArtifactCommittedTransaction,\n artifactId: EditableArtifactId,\n): void {\n if (transaction.artifactId !== artifactId) {\n throw new TypeError(\"committed transaction artifactId does not match its replica\");\n }\n assertStableId(transaction.transactionId, \"transactionId\");\n assertSha256(transaction.requestHash, \"requestHash\");\n assertSequence(transaction.startSequence, \"startSequence\");\n assertSequence(transaction.endSequence, \"endSequence\");\n if (transaction.endSequence < transaction.startSequence) {\n throw new TypeError(\"committed transaction has an inverted sequence interval\");\n }\n assertSha256(transaction.priorStateHash, \"priorStateHash\");\n assertSha256(transaction.stateHash, \"stateHash\");\n assertModality(transaction.modality, \"transaction.modality\");\n assertBytes(transaction.committedTransactionBytes, \"committedTransactionBytes\");\n if (transaction.committedTransactionBytes.byteLength > HARD_MAX_COMMITTED_TRANSACTION_BYTES) {\n throw new RangeError(\"committedTransactionBytes exceeds its hard byte bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n assertFrontier(transaction.causalFrontier, \"causalFrontier\");\n assertPositiveInteger(transaction.operationProtocolVersion, \"operationProtocolVersion\");\n const summary = decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.operationProtocolVersion !== transaction.operationProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n !frontiersEqual(summary.resultingCausalFrontier, transaction.causalFrontier)\n )\n throw new TypeError(\"committed fields do not exactly match their OGACO envelope\");\n return;\n }\n assertSequence(transaction.priorNativeRevision, \"priorNativeRevision\");\n assertSequence(transaction.nativeRevision, \"nativeRevision\");\n assertPositiveInteger(transaction.commitProtocolVersion, \"commitProtocolVersion\");\n const summary = decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n if (\n summary.transactionId !== transaction.transactionId ||\n summary.requestHash !== transaction.requestHash ||\n summary.parentHeadSequence + 1 !== transaction.startSequence ||\n summary.resultHeadSequence !== transaction.endSequence ||\n summary.priorNativeRevision !== transaction.priorNativeRevision ||\n summary.nativeReceipt.revision !== transaction.nativeRevision ||\n summary.commitProtocolVersion !== transaction.commitProtocolVersion ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash\n )\n throw new TypeError(\"committed fields do not exactly match their OGAST envelope\");\n}\n\nfunction assertPendingTransaction(transaction: EditableArtifactPendingTransaction): void {\n assertStableId(transaction.artifactId, \"artifactId\");\n assertClientTransactionId(transaction.clientTransactionId, \"clientTransactionId\");\n assertSha256(transaction.requestHash, \"requestHash\");\n assertPositiveU16(transaction.protocolVersion, \"protocolVersion\");\n assertPositiveU16(transaction.modelSchemaVersion, \"modelSchemaVersion\");\n assertPositiveU16(transaction.commandVersion, \"commandVersion\");\n assertReplicaId(transaction.replicaId, \"replicaId\");\n assertPositiveInteger(transaction.replicaCounter, \"replicaCounter\");\n if (transaction.previousLocalTransactionId !== null) {\n assertClientTransactionId(transaction.previousLocalTransactionId, \"previousLocalTransactionId\");\n if (transaction.previousLocalTransactionId === transaction.clientTransactionId) {\n throw new TypeError(\"pending transaction cannot depend on itself\");\n }\n }\n assertModality(transaction.modality, \"pending.modality\");\n assertTimestamp(transaction.createdAt, \"createdAt\");\n assertSequence(transaction.observedHeadSequence, \"observedHeadSequence\");\n assertBytes(transaction.commandBytes, \"commandBytes\");\n assertBytes(transaction.intentBytes, \"intentBytes\");\n if (transaction.commandBytes.byteLength > HARD_MAX_COMMAND_BYTES) {\n throw new RangeError(\"commandBytes exceeds its hard byte bound\");\n }\n if (transaction.intentBytes.byteLength > HARD_MAX_INTENT_BYTES) {\n throw new RangeError(\"intentBytes exceeds its hard byte bound\");\n }\n if (transaction.modality === \"spreadsheet\") {\n assertFrontier(transaction.causalBase, \"causalBase\");\n assertIdentifiers(transaction.selectiveUndoTargets, \"selectiveUndoTargets\");\n assertCanonicalSpreadsheetArtifactCommandBytes(transaction.commandBytes);\n } else {\n assertSequence(transaction.observedNativeRevision, \"observedNativeRevision\");\n editableArtifactCodecFor({\n durableModality: transaction.modality,\n modelSchemaVersion: transaction.modelSchemaVersion,\n commandProtocolVersion: transaction.commandVersion,\n }).command.assertCanonical(transaction.commandBytes);\n }\n const intent = decodeEditableArtifactMutationIntent(transaction.intentBytes);\n if (\n intent.artifactId !== transaction.artifactId ||\n intent.clientTransactionId !== transaction.clientTransactionId ||\n intent.replicaId !== transaction.replicaId ||\n intent.replicaCounter !== transaction.replicaCounter ||\n intent.previousLocalTransactionId !== transaction.previousLocalTransactionId ||\n intent.protocolVersion !== transaction.protocolVersion ||\n intent.modelSchemaVersion !== transaction.modelSchemaVersion ||\n intent.commandProtocolVersion !== transaction.commandVersion ||\n intent.observedHeadSequence !== transaction.observedHeadSequence ||\n !bytesEqual(intent.commandBytes, transaction.commandBytes)\n ) {\n throw new TypeError(\"pending fields do not exactly match their OGATX envelope\");\n }\n if (\n transaction.modality === \"spreadsheet\"\n ? !frontiersEqual(intent.causalBase, transaction.causalBase) ||\n !identifiersEqual(intent.selectiveUndoOperationIds, transaction.selectiveUndoTargets)\n : intent.causalBase.length !== 0 || intent.selectiveUndoOperationIds.length !== 0\n )\n throw new TypeError(\"pending causality does not match its durable modality\");\n if (\n hashEditableArtifactMutationIntentBytes(transaction.intentBytes) !== transaction.requestHash\n ) {\n throw new TypeError(\"pending requestHash does not match its OGATX envelope\");\n }\n}\n\nfunction assertAppendCanApply(\n head: Pick<StoredReplicaHead, \"cursor\" | \"stateHash\"> & {\n modality: EditableArtifactModality;\n operationProtocolVersion?: number;\n },\n input: EditableArtifactAppendCommittedInput,\n): void {\n if (head.cursor !== input.expectedCursor || head.stateHash !== input.expectedStateHash) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} retained head no longer matches append expectation`,\n );\n }\n if (input.transaction.modality !== head.modality) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} append modality does not match retained snapshot`,\n );\n }\n if (\n input.transaction.modality === \"spreadsheet\" &&\n input.transaction.operationProtocolVersion !== head.operationProtocolVersion\n ) {\n throw new EditableArtifactStorageConflictError(\n `artifact ${input.artifactId} append protocol does not match retained snapshot`,\n );\n }\n}\n\nfunction assertReplacementCanApply(\n head:\n | (Pick<StoredReplicaHead, \"cursor\" | \"stateHash\"> & {\n operationProtocolVersion?: number;\n })\n | undefined,\n expectedHead: EditableArtifactExpectedStoredHead,\n artifactId: EditableArtifactId,\n): void {\n if (expectedHead === null) {\n if (head === undefined) return;\n } else if (\n head !== undefined &&\n head.cursor === expectedHead.cursor &&\n head.stateHash === expectedHead.stateHash\n ) {\n return;\n }\n throw new EditableArtifactStorageConflictError(\n `artifact ${artifactId} retained head changed before snapshot replacement`,\n );\n}\n\nfunction missingReplicaConflict(\n artifactId: EditableArtifactId,\n): EditableArtifactStorageConflictError {\n return new EditableArtifactStorageConflictError(\n `artifact ${artifactId} has no retained replica to append to`,\n );\n}\n\nfunction compareCommittedTransactions(\n left: EditableArtifactCommittedTransaction,\n right: EditableArtifactCommittedTransaction,\n): number {\n if (left.startSequence !== right.startSequence) {\n return left.startSequence < right.startSequence ? -1 : 1;\n }\n if (left.transactionId === right.transactionId) return 0;\n return left.transactionId < right.transactionId ? -1 : 1;\n}\n\nfunction assertPendingCanReplace(\n existing: EditableArtifactPendingTransaction | undefined,\n next: EditableArtifactPendingTransaction,\n): void {\n if (existing !== undefined && !pendingTransactionsEqual(existing, next)) {\n throw new EditableArtifactStorageConflictError(\n `pending transaction ${next.clientTransactionId} was reused with different immutable content`,\n );\n }\n}\n\nfunction pendingTransactionsEqual(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): boolean {\n return (\n left.artifactId === right.artifactId &&\n left.modality === right.modality &&\n left.clientTransactionId === right.clientTransactionId &&\n left.requestHash === right.requestHash &&\n left.protocolVersion === right.protocolVersion &&\n left.modelSchemaVersion === right.modelSchemaVersion &&\n left.commandVersion === right.commandVersion &&\n left.replicaId === right.replicaId &&\n left.replicaCounter === right.replicaCounter &&\n left.previousLocalTransactionId === right.previousLocalTransactionId &&\n left.observedHeadSequence === right.observedHeadSequence &&\n left.createdAt === right.createdAt &&\n (left.modality === \"spreadsheet\" && right.modality === \"spreadsheet\"\n ? frontiersEqual(left.causalBase, right.causalBase) &&\n identifiersEqual(left.selectiveUndoTargets, right.selectiveUndoTargets)\n : left.modality !== \"spreadsheet\" &&\n right.modality !== \"spreadsheet\" &&\n left.observedNativeRevision === right.observedNativeRevision) &&\n bytesEqual(left.commandBytes, right.commandBytes) &&\n bytesEqual(left.intentBytes, right.intentBytes)\n );\n}\n\nfunction committedTransactionsEqual(\n left: EditableArtifactCommittedTransaction,\n right: EditableArtifactCommittedTransaction,\n): boolean {\n return (\n left.artifactId === right.artifactId &&\n left.modality === right.modality &&\n left.transactionId === right.transactionId &&\n left.requestHash === right.requestHash &&\n left.startSequence === right.startSequence &&\n left.endSequence === right.endSequence &&\n left.priorStateHash === right.priorStateHash &&\n left.stateHash === right.stateHash &&\n (left.modality === \"spreadsheet\" && right.modality === \"spreadsheet\"\n ? left.operationProtocolVersion === right.operationProtocolVersion &&\n frontiersEqual(left.causalFrontier, right.causalFrontier)\n : left.modality !== \"spreadsheet\" &&\n right.modality !== \"spreadsheet\" &&\n left.priorNativeRevision === right.priorNativeRevision &&\n left.nativeRevision === right.nativeRevision &&\n left.commitProtocolVersion === right.commitProtocolVersion) &&\n bytesEqual(left.committedTransactionBytes, right.committedTransactionBytes)\n );\n}\n\nfunction frontiersEqual(\n left: EditableArtifactCausalFrontier,\n right: EditableArtifactCausalFrontier,\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n for (let index = 0; index < left.byteLength; index += 1) {\n if (left[index] !== right[index]) return false;\n }\n return true;\n}\n\nfunction comparePendingTransactions(\n left: EditableArtifactPendingTransaction,\n right: EditableArtifactPendingTransaction,\n): number {\n if (left.replicaCounter !== right.replicaCounter) {\n return left.replicaCounter < right.replicaCounter ? -1 : 1;\n }\n if (left.createdAt !== right.createdAt) return left.createdAt < right.createdAt ? -1 : 1;\n if (left.clientTransactionId === right.clientTransactionId) return 0;\n return left.clientTransactionId < right.clientTransactionId ? -1 : 1;\n}\n\nfunction assertScope(scope: EditableArtifactStorageScope): void {\n assertNonEmpty(scope.namespace, \"storage namespace\");\n assertStableId(scope.artifactId, \"storage artifactId\");\n assertModality(scope.modality, \"storage modality\");\n}\n\nfunction assertModality(value: unknown, path: string): asserts value is EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(`${path} must be document, spreadsheet, or presentation`);\n }\n}\n\nfunction assertScopeMatchesArtifact(\n scope: EditableArtifactStorageScope,\n artifactId: EditableArtifactId,\n): void {\n assertScope(scope);\n if (scope.artifactId !== artifactId) {\n throw new TypeError(\"storage scope artifactId does not match the retained value\");\n }\n}\n\nfunction assertScopeModality(\n scope: EditableArtifactStorageScope,\n modality: EditableArtifactModality,\n): void {\n if (scope.modality !== modality) {\n throw new TypeError(\"storage scope modality does not match the retained value\");\n }\n}\n\nfunction normalizeStoredSnapshot(\n snapshot: Omit<IndexedDbStoredSnapshot, \"namespace\">,\n modality: EditableArtifactModality,\n): EditableArtifactSnapshot {\n if (snapshot.modality !== modality) {\n throw new TypeError(\"retained snapshot modality does not match its storage scope\");\n }\n return { ...snapshot, modality } as EditableArtifactSnapshot;\n}\n\nfunction normalizeStoredCommitted(\n transaction: Omit<IndexedDbCommittedTransaction, \"namespace\">,\n modality: EditableArtifactModality,\n): EditableArtifactCommittedTransaction {\n if (transaction.modality !== modality) {\n throw new TypeError(\"retained transaction modality does not match its storage scope\");\n }\n return { ...transaction, modality } as EditableArtifactCommittedTransaction;\n}\n\nfunction normalizeStoredPending(\n transaction: Omit<IndexedDbPendingTransaction, \"namespace\" | \"transactionId\">,\n modality: EditableArtifactModality,\n): EditableArtifactPendingTransaction {\n if (transaction.modality !== modality) {\n throw new TypeError(\"retained pending modality does not match its storage scope\");\n }\n return { ...transaction, modality } as EditableArtifactPendingTransaction;\n}\n\nfunction scopeKey(scope: EditableArtifactStorageScope): [string, EditableArtifactId] {\n return [scope.namespace, scope.artifactId];\n}\n\nfunction getOrCreate<OuterKey, InnerKey, Value>(\n outer: Map<OuterKey, Map<InnerKey, Value>>,\n key: OuterKey,\n): Map<InnerKey, Value> {\n const existing = outer.get(key);\n if (existing !== undefined) return existing;\n const created = new Map<InnerKey, Value>();\n outer.set(key, created);\n return created;\n}\n\nfunction assertFrontier(frontier: EditableArtifactCausalFrontier, path: string): void {\n if (!Array.isArray(frontier)) throw new TypeError(`${path} must be an array`);\n let previous: string | null = null;\n for (const [index, entry] of frontier.entries()) {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n Array.isArray(entry) ||\n Object.getPrototypeOf(entry) !== Object.prototype\n ) {\n throw new TypeError(`${path}[${index}] must be a plain object`);\n }\n assertReplicaId(entry.replicaId, `${path}[${index}].replicaId`);\n assertPositiveInteger(entry.counter, `${path}[${index}].counter`);\n if (previous !== null && previous >= entry.replicaId) {\n throw new TypeError(`${path} must be strictly sorted and duplicate-free`);\n }\n previous = entry.replicaId;\n }\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n return frontier.map((entry) => ({ ...entry }));\n}\n\nfunction assertIdentifiers(values: readonly string[], path: string): void {\n if (!Array.isArray(values)) throw new TypeError(`${path} must be an array`);\n let previous: string | null = null;\n for (const value of values) {\n assertStableId(value, path);\n if (previous !== null && previous >= value) {\n throw new TypeError(`${path} must be strictly sorted and duplicate-free`);\n }\n previous = value;\n }\n}\n\nfunction identifiersEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction assertBytes(value: Uint8Array, path: string): void {\n if (!(value instanceof Uint8Array)) throw new TypeError(`${path} must be a Uint8Array`);\n}\n\nfunction assertSequence(value: number, path: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${path} must be a non-negative safe integer`);\n }\n}\n\nfunction assertPositiveInteger(value: number, path: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${path} must be a positive safe integer`);\n }\n}\n\nfunction assertPositiveU16(value: number, path: string): void {\n assertPositiveInteger(value, path);\n if (value > 0xffff) throw new TypeError(`${path} must fit an unsigned 16-bit integer`);\n}\n\nfunction assertTimestamp(value: number, path: string): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new TypeError(`${path} must be a non-negative finite number`);\n }\n}\n\nfunction assertNonEmpty(\n value: unknown,\n path: string,\n maximumCodeUnits = 4_096,\n): asserts value is string {\n if (typeof value !== \"string\") throw new TypeError(`${path} must be a string`);\n if (value.length === 0) throw new TypeError(`${path} must not be empty`);\n if (value.length > maximumCodeUnits) {\n throw new RangeError(`${path} exceeds its string bound`);\n }\n}\n\nfunction assertStableId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^(?!0{32}$)[a-f0-9]{32}$/u.test(value)) {\n throw new TypeError(`${path} must be 32 lowercase nonzero hex characters`);\n }\n}\n\nfunction assertReplicaId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^(?!0{16}$)[a-f0-9]{16}$/u.test(value)) {\n throw new TypeError(`${path} must be 16 lowercase nonzero hex characters`);\n }\n}\n\nfunction assertClientTransactionId(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^[A-Za-z0-9._:-]{1,200}$/u.test(value)) {\n throw new TypeError(`${path} must be a canonical portable transaction id`);\n }\n}\n\nfunction assertSha256(value: unknown, path: string): asserts value is string {\n if (typeof value !== \"string\" || !/^sha256:[a-f0-9]{64}$/u.test(value)) {\n throw new TypeError(`${path} must be a canonical sha256 digest`);\n }\n}\n\nfunction openDatabase(factory: IDBFactory, databaseName: string): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = factory.open(databaseName, DATABASE_VERSION);\n let rejectedWhileBlocked = false;\n request.onerror = () => reject(request.error ?? new Error(\"failed to open artifact storage\"));\n request.onblocked = () => {\n rejectedWhileBlocked = true;\n reject(new Error(\"artifact storage upgrade is blocked\"));\n };\n request.onupgradeneeded = (event) => {\n const database = request.result;\n if (event.oldVersion < DATABASE_VERSION) {\n // All local artifact state is reconstructible. A format hard cut drops\n // confirmed state and pending commands instead of interpreting old bytes.\n for (const name of [REPLICA_HEAD_STORE, SNAPSHOT_STORE, PENDING_STORE, COMMITTED_STORE]) {\n if (database.objectStoreNames.contains(name)) database.deleteObjectStore(name);\n }\n }\n if (!database.objectStoreNames.contains(REPLICA_HEAD_STORE)) {\n database.createObjectStore(REPLICA_HEAD_STORE, {\n keyPath: [\"namespace\", \"artifactId\"],\n });\n }\n if (!database.objectStoreNames.contains(SNAPSHOT_STORE)) {\n database.createObjectStore(SNAPSHOT_STORE, {\n keyPath: [\"namespace\", \"artifactId\"],\n });\n }\n if (!database.objectStoreNames.contains(COMMITTED_STORE)) {\n const committed = database.createObjectStore(COMMITTED_STORE, {\n keyPath: [\"namespace\", \"artifactId\", \"startSequence\"],\n });\n committed.createIndex(COMMITTED_BY_SCOPE_INDEX, [\"namespace\", \"artifactId\"], {\n unique: false,\n });\n }\n if (!database.objectStoreNames.contains(PENDING_STORE)) {\n const pending = database.createObjectStore(PENDING_STORE, {\n keyPath: [\"namespace\", \"artifactId\", \"transactionId\"],\n });\n pending.createIndex(PENDING_BY_SCOPE_INDEX, [\"namespace\", \"artifactId\"], {\n unique: false,\n });\n }\n };\n request.onsuccess = () => {\n if (rejectedWhileBlocked) request.result.close();\n else resolve(request.result);\n };\n });\n}\n\nfunction replaceIndexedDbReplica(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n replica: EditableArtifactStoredReplica,\n expectedHead: EditableArtifactExpectedStoredHead,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readwrite\",\n );\n const headStore = transaction.objectStore(REPLICA_HEAD_STORE);\n const snapshotStore = transaction.objectStore(SNAPSHOT_STORE);\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n\n const headRead = headStore.get(scopeKey(scope));\n headRead.onerror = () => {\n semanticError = headRead.error ?? new Error(\"artifact replica head lookup failed\");\n };\n headRead.onsuccess = () => {\n try {\n const retained = headRead.result as IndexedDbStoredReplicaHead | undefined;\n if (\n retained !== undefined &&\n (retained.namespace !== scope.namespace || retained.artifactId !== scope.artifactId)\n ) {\n throw new TypeError(\"retained replica head does not match its storage key\");\n }\n assertReplacementCanApply(retained, expectedHead, replica.artifactId);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n return;\n }\n deleteIndexedDbScope(\n committedStore.index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(scope),\n () => {\n try {\n for (const committed of replica.tail) {\n const stored: IndexedDbCommittedTransaction = {\n ...committed,\n namespace: scope.namespace,\n };\n committedStore.add(stored);\n }\n const head: IndexedDbStoredReplicaHead = {\n namespace: scope.namespace,\n artifactId: replica.artifactId,\n cursor: replica.cursor,\n stateHash: replica.stateHash,\n updatedAt: replica.updatedAt,\n modality: replica.modality,\n ...(replica.snapshot.modality === \"spreadsheet\"\n ? {\n operationProtocolVersion: replica.snapshot.operationProtocolVersion,\n }\n : {}),\n tailCount: replica.tail.length,\n tailBytes: committedTailBytes(replica.tail),\n };\n const snapshot: IndexedDbStoredSnapshot = {\n ...replica.snapshot,\n namespace: scope.namespace,\n };\n snapshotStore.put(snapshot);\n headStore.put(head);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n },\n (error) => {\n semanticError = error;\n transaction.abort();\n },\n );\n };\n });\n}\n\nfunction appendIndexedDbCommitted(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n input: EditableArtifactAppendCommittedInput,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction([REPLICA_HEAD_STORE, COMMITTED_STORE], \"readwrite\");\n const headStore = transaction.objectStore(REPLICA_HEAD_STORE);\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n\n const headRead = headStore.get(scopeKey(scope));\n headRead.onerror = () => {\n semanticError = headRead.error ?? new Error(\"artifact replica head lookup failed\");\n };\n headRead.onsuccess = () => {\n try {\n const head = headRead.result as IndexedDbStoredReplicaHead | undefined;\n if (head === undefined) throw missingReplicaConflict(scope.artifactId);\n if (head.namespace !== scope.namespace || head.artifactId !== scope.artifactId) {\n throw new TypeError(\"retained replica does not match its storage key\");\n }\n assertSequence(head.tailCount, \"retained head tailCount\");\n assertSequence(head.tailBytes, \"retained head tailBytes\");\n if (\n head.tailCount > HARD_MAX_COMMITTED_TRANSACTIONS ||\n head.tailBytes > HARD_MAX_COMMITTED_BYTES\n ) {\n throw new RangeError(\"retained head journal accounting exceeds its hard bound\");\n }\n if (head.cursor !== input.expectedCursor || head.stateHash !== input.expectedStateHash) {\n const retainedRead = committedStore.get([\n scope.namespace,\n scope.artifactId,\n input.transaction.startSequence,\n ]);\n retainedRead.onerror = () => {\n semanticError =\n retainedRead.error ?? new Error(\"artifact committed transaction lookup failed\");\n };\n retainedRead.onsuccess = () => {\n try {\n const retained = retainedRead.result as IndexedDbCommittedTransaction | undefined;\n if (\n head.cursor >= input.transaction.endSequence &&\n retained !== undefined &&\n retained.namespace === scope.namespace &&\n committedTransactionsEqual(retained, input.transaction)\n ) {\n return;\n }\n assertAppendCanApply(head, input);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n };\n return;\n }\n assertAppendCanApply(head, input);\n if (head.tailCount >= HARD_MAX_COMMITTED_TRANSACTIONS) {\n throw new RangeError(\"committed transaction store exceeds its count bound\");\n }\n const nextTailBytes = checkedAggregateBytes(\n head.tailBytes,\n committedStorageBytes(input.transaction),\n HARD_MAX_COMMITTED_BYTES,\n \"committed transaction store\",\n );\n const committed: IndexedDbCommittedTransaction = {\n ...input.transaction,\n namespace: scope.namespace,\n };\n committedStore.add(committed);\n const nextHead: IndexedDbStoredReplicaHead = {\n ...head,\n cursor: input.transaction.endSequence,\n stateHash: input.transaction.stateHash,\n updatedAt: input.updatedAt,\n tailCount: head.tailCount + 1,\n tailBytes: nextTailBytes,\n };\n headStore.put(nextHead);\n } catch (error) {\n semanticError = error;\n transaction.abort();\n }\n };\n });\n}\n\nfunction clearIndexedDbReplica(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(\n [REPLICA_HEAD_STORE, SNAPSHOT_STORE, COMMITTED_STORE],\n \"readwrite\",\n );\n const committedStore = transaction.objectStore(COMMITTED_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => rejectTransaction(reject, transaction, semanticError);\n transaction.objectStore(REPLICA_HEAD_STORE).delete(scopeKey(scope));\n transaction.objectStore(SNAPSHOT_STORE).delete(scopeKey(scope));\n deleteIndexedDbScope(\n committedStore.index(COMMITTED_BY_SCOPE_INDEX),\n scopeKey(scope),\n () => undefined,\n (error) => {\n semanticError = error;\n transaction.abort();\n },\n );\n });\n}\n\nfunction deleteIndexedDbScope(\n index: IDBIndex,\n query: IDBValidKey,\n onComplete: () => void,\n onError: (error: unknown) => void,\n): void {\n const cursorRequest = index.openKeyCursor(query);\n cursorRequest.onerror = () =>\n onError(cursorRequest.error ?? new Error(\"artifact storage delete cursor failed\"));\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor === null) {\n onComplete();\n return;\n }\n try {\n // Queue deletion and cursor advancement from the cursor callback while\n // the read/write transaction is definitely active. Waiting for a\n // separate delete callback before `continue()` is not portable across\n // real browser IndexedDB implementations. A key-only cursor avoids\n // deserializing the value but must delete through the object store.\n const deletion = index.objectStore.delete(cursor.primaryKey);\n deletion.onerror = () =>\n onError(deletion.error ?? new Error(\"artifact storage journal delete failed\"));\n cursor.continue();\n } catch (error) {\n onError(error);\n }\n };\n}\n\nfunction rejectTransaction(\n reject: (reason?: unknown) => void,\n transaction: IDBTransaction,\n semanticError?: unknown,\n): void {\n reject(\n semanticError ??\n transaction.error ??\n new Error(\"artifact storage transaction failed or was aborted\"),\n );\n}\n\nfunction requestResult<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error(\"artifact storage request failed\"));\n });\n}\n\nfunction transactionResult(transaction: IDBTransaction): Promise<void> {\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onabort = () =>\n reject(transaction.error ?? new Error(\"artifact storage transaction was aborted\"));\n });\n}\n\nfunction readBoundedIndexValues<T>(\n transaction: IDBTransaction,\n index: IDBIndex,\n query: IDBValidKey,\n maximumCount: number,\n maximumBytes: number,\n measure: (value: T) => number,\n): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const values: T[] = [];\n let aggregateBytes = 0;\n let settled = false;\n const request = index.openCursor(query);\n const fail = (error: unknown): void => {\n if (settled) return;\n settled = true;\n try {\n transaction.abort();\n } catch {\n // The transaction may already be aborting because the cursor failed.\n }\n reject(error);\n };\n request.onerror = () => fail(request.error ?? new Error(\"artifact storage cursor failed\"));\n request.onsuccess = () => {\n if (settled) return;\n const cursor = request.result;\n if (cursor === null) {\n settled = true;\n resolve(values);\n return;\n }\n try {\n const value = cursor.value as T;\n if (values.length >= maximumCount) {\n throw new RangeError(\"artifact storage cursor exceeds its count bound\");\n }\n const measured = measure(value);\n if (!Number.isSafeInteger(measured) || measured < 0) {\n throw new TypeError(\"artifact storage cursor returned an invalid byte measurement\");\n }\n aggregateBytes += measured;\n if (!Number.isSafeInteger(aggregateBytes) || aggregateBytes > maximumBytes) {\n throw new RangeError(\"artifact storage cursor exceeds its byte bound\");\n }\n values.push(value);\n cursor.continue();\n } catch (error) {\n fail(error);\n }\n };\n });\n}\n\nfunction putIndexedDbPending(\n database: IDBDatabase,\n scope: EditableArtifactStorageScope,\n value: IndexedDbPendingTransaction,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(PENDING_STORE, \"readwrite\", {\n durability: \"strict\",\n });\n const store = transaction.objectStore(PENDING_STORE);\n let semanticError: unknown;\n transaction.oncomplete = () => resolve();\n transaction.onabort = () =>\n reject(\n semanticError ?? transaction.error ?? new Error(\"artifact pending transaction was aborted\"),\n );\n\n const abort = (error: unknown): void => {\n semanticError ??= error;\n try {\n transaction.abort();\n } catch {\n // A failed request may already be aborting the transaction.\n }\n };\n\n const read = store.get([scope.namespace, scope.artifactId, value.transactionId]);\n read.onerror = () => {\n semanticError = read.error ?? new Error(\"artifact pending lookup failed\");\n };\n read.onsuccess = () => {\n try {\n const existing = read.result as IndexedDbPendingTransaction | undefined;\n assertPendingCanReplace(existing, value);\n if (existing !== undefined) return;\n } catch (error) {\n abort(error);\n return;\n }\n\n let retainedCount = 0;\n let aggregateBytes: number;\n try {\n aggregateBytes = pendingStorageBytes(value);\n if (aggregateBytes > HARD_MAX_PENDING_BYTES) {\n throw new RangeError(\"pending transaction store exceeds its byte bound\");\n }\n } catch (error) {\n abort(error);\n return;\n }\n\n const cursorRequest = store.index(PENDING_BY_SCOPE_INDEX).openCursor(scopeKey(scope));\n cursorRequest.onerror = () => {\n semanticError = cursorRequest.error ?? new Error(\"artifact pending bound cursor failed\");\n };\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor === null) {\n store.add(value);\n return;\n }\n try {\n const retained = cursor.value as IndexedDbPendingTransaction;\n if (retained.namespace !== scope.namespace || retained.artifactId !== scope.artifactId) {\n throw new TypeError(\"retained pending transaction does not match its index key\");\n }\n assertPendingTransaction(retained);\n retainedCount += 1;\n if (retainedCount >= HARD_MAX_PENDING_TRANSACTIONS) {\n throw new RangeError(\"pending transaction store exceeds its count bound\");\n }\n aggregateBytes = checkedAggregateBytes(\n aggregateBytes,\n pendingStorageBytes(retained),\n HARD_MAX_PENDING_BYTES,\n \"pending transaction store\",\n );\n cursor.continue();\n } catch (error) {\n abort(error);\n }\n };\n };\n });\n}\n","import { EDITABLE_ARTIFACT_LIVE_WIRE_VERSION } from \"@opengeni/contracts/editable-artifact-live\";\nimport {\n EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n currentEditableArtifactCompatibility,\n} from \"@opengeni/contracts/editable-artifacts\";\n\nimport type { EditableArtifactCacheAuthority } from \"./controller\";\nimport {\n createEditableArtifactHttpLiveTransport,\n type CreateEditableArtifactHttpLiveTransportOptions,\n} from \"./http-live-transport\";\nimport { createEditableArtifactSession, type EditableArtifactSession } from \"./session\";\nimport type { EditableArtifactStoragePort } from \"./storage\";\nimport type { EditableArtifactModality } from \"./types\";\nimport type { EditableArtifactOpenFailureReporter } from \"./open-failure\";\nimport {\n createBrowserEditableArtifactWorkerKernel,\n type CreateBrowserEditableArtifactWorkerKernelOptions,\n} from \"./worker/browser-client\";\n\nexport type EditableArtifactBrowserRuntime = Omit<\n CreateBrowserEditableArtifactWorkerKernelOptions,\n \"modality\" | \"kernelVersion\" | \"protocolVersion\" | \"modelSchemaVersion\" | \"commandVersion\"\n> &\n Readonly<{\n /** Exact package/executable build identity; the API records but does not compatibility-gate it. */\n kernelVersion: string;\n modelSchemaVersion: number;\n /** Exact OGATX001 intent protocol version. */\n protocolVersion: number;\n commandVersion: number;\n }>;\n\nexport type CreateBrowserEditableArtifactSessionOptions = Readonly<{\n baseUrl: string | URL;\n workspaceId: string;\n artifact: Readonly<{ id: string; modality: EditableArtifactModality }>;\n /** Exact login/grant partition; rotate authorizationEpoch on authority changes. */\n storageAuthority: EditableArtifactCacheAuthority;\n runtime: EditableArtifactBrowserRuntime;\n transport?: Omit<\n CreateEditableArtifactHttpLiveTransportOptions,\n | \"baseUrl\"\n | \"workspaceId\"\n | \"modality\"\n | \"liveProtocolVersion\"\n | \"kernelVersion\"\n | \"modelSchemaVersion\"\n | \"snapshotVersion\"\n | \"commandProtocolVersion\"\n | \"committedTransactionProtocolVersion\"\n >;\n storage?: EditableArtifactStoragePort;\n /** Reuse the replica used to create the artifact when opening it immediately. */\n replicaId?: string;\n /** Receives bounded categories/codes only; never workbook or formula content. */\n onOpenFailure?: EditableArtifactOpenFailureReporter;\n}>;\n\n/**\n * One production browser composition point: verified WASM Worker, durable WAL,\n * authenticated HTTP/WebSocket transport, replay, and modality projections.\n */\nexport function createBrowserEditableArtifactSession(\n options: CreateBrowserEditableArtifactSessionOptions,\n): EditableArtifactSession {\n const baseUrl = canonicalBaseUrl(options.baseUrl);\n const workspaceId = boundedIdentity(options.workspaceId, \"workspaceId\");\n assertCacheAuthority(options.storageAuthority, baseUrl, workspaceId);\n const protocolVersion = positiveVersion(options.runtime.protocolVersion, \"protocolVersion\");\n if (protocolVersion !== EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION) {\n throw new TypeError(\"protocolVersion is incompatible with the current intent protocol\");\n }\n const modelSchemaVersion = positiveVersion(\n options.runtime.modelSchemaVersion,\n \"modelSchemaVersion\",\n );\n const kernelVersion = boundedIdentity(options.runtime.kernelVersion, \"kernelVersion\", 512);\n const commandVersion = positiveVersion(options.runtime.commandVersion, \"commandVersion\");\n const current = currentEditableArtifactCompatibility(options.artifact.modality);\n if (\n modelSchemaVersion !== current.modelSchemaVersion ||\n commandVersion !== current.commandProtocolVersion\n ) {\n throw new TypeError(\n `runtime versions are incompatible with current ${options.artifact.modality} compatibility`,\n );\n }\n const {\n kernelVersion: _kernelVersion,\n modelSchemaVersion: _modelSchemaVersion,\n protocolVersion: _protocolVersion,\n commandVersion: _commandVersion,\n ...workerOptions\n } = options.runtime;\n const worker = createBrowserEditableArtifactWorkerKernel({\n ...workerOptions,\n modality: options.artifact.modality,\n kernelVersion,\n protocolVersion,\n modelSchemaVersion,\n commandVersion,\n });\n const replicaId = options.replicaId;\n try {\n const transport = createEditableArtifactHttpLiveTransport({\n ...options.transport,\n baseUrl,\n workspaceId,\n modality: options.artifact.modality,\n liveProtocolVersion: EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,\n kernelVersion,\n modelSchemaVersion,\n snapshotVersion: current.snapshotVersion,\n commandProtocolVersion: current.commandProtocolVersion,\n committedTransactionProtocolVersion: current.committedTransactionProtocolVersion,\n });\n return createEditableArtifactSession({\n artifactId: options.artifact.id,\n modality: options.artifact.modality,\n storageAuthority: options.storageAuthority,\n transport,\n worker,\n ...(options.storage ? { storage: options.storage } : {}),\n kernelVersion,\n modelSchemaVersion,\n commandVersion,\n protocolVersion,\n ...(options.onOpenFailure ? { onOpenFailure: options.onOpenFailure } : {}),\n ...(replicaId ? { writerReplicaIdFactory: () => replicaId } : {}),\n ownsWorker: true,\n });\n } catch (error) {\n void worker.dispose().catch(() => undefined);\n throw error;\n }\n}\n\n/** Generates the portable 64-bit nonzero replica identity used by create/open. */\nexport function createEditableArtifactReplicaId(): string {\n for (;;) {\n const value = [...crypto.getRandomValues(new Uint8Array(8))]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n if (value !== \"0000000000000000\") return value;\n }\n}\n\nfunction canonicalBaseUrl(value: string | URL): URL {\n const url = new URL(value);\n if (url.username || url.password || url.search || url.hash) {\n throw new TypeError(\"baseUrl must not contain credentials, query, or fragment\");\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new TypeError(\"baseUrl must use HTTP or HTTPS\");\n }\n return url;\n}\n\nfunction assertCacheAuthority(\n authority: EditableArtifactCacheAuthority,\n baseUrl: URL,\n workspaceId: string,\n): void {\n if (new URL(authority.deploymentOrigin).origin !== baseUrl.origin) {\n throw new TypeError(\"storageAuthority deployment origin does not match baseUrl\");\n }\n if (authority.workspaceId !== workspaceId) {\n throw new TypeError(\"storageAuthority workspace does not match workspaceId\");\n }\n}\n\nfunction boundedIdentity(value: string, label: string, maximum = 256): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.trim() !== value ||\n new TextEncoder().encode(value).byteLength > maximum\n ) {\n throw new TypeError(`${label} is malformed`);\n }\n return value;\n}\n\nfunction positiveVersion(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value < 1 || value > 65_535) {\n throw new TypeError(`${label} must be a positive 16-bit integer`);\n }\n return value;\n}\n","import {\n decodeEditableArtifactLiveServerWireFrame,\n encodeEditableArtifactLiveAppliedWireFrame,\n encodeEditableArtifactLiveMutationWireFrame,\n encodeEditableArtifactLiveOpenWireFrame,\n type EditableArtifactLiveOpenWireFrame,\n type EditableArtifactLiveCommittedTransaction as ContractCommittedTransaction,\n type EditableArtifactLiveServerFrame,\n} from \"@opengeni/contracts/editable-artifact-live\";\nimport {\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n currentEditableArtifactCompatibility,\n hashEditableArtifactMutationIntentBytes,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { MAX_COMMITTED_TRANSACTION_BYTES } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { EditableArtifactSyncError, EditableArtifactTransportError } from \"./errors\";\nimport { OPENGENI_API_CONTRACT_HEADER, OPENGENI_API_CONTRACT_REVISION } from \"../types\";\nimport type {\n EditableArtifactBootstrap,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactLiveClose,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactReplayPage,\n EditableArtifactSnapshot,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n} from \"./types\";\n\nconst LIVE_PATH = \"/v1/editable-artifacts/live\";\nconst LIVE_SUBPROTOCOL = \"opengeni-artifact-v2\";\nconst DEFAULT_MAX_SERVER_FRAME_BYTES = 8 * 1024 * 1024 + 64 * 1024;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_HANDSHAKE_TIMEOUT_MS = 20_000;\nconst DEFAULT_SUBMIT_TIMEOUT_MS = 30_000;\nconst MAX_TICKET_RESPONSE_BYTES = 16 * 1024;\nconst SHA256 = /^sha256:[0-9a-f]{64}$/u;\nconst STABLE_ID = /^(?!0{32}$)[0-9a-f]{32}$/u;\nconst REPLICA_ID = /^(?!0{16}$)[0-9a-f]{16}$/u;\n\nexport type EditableArtifactWebSocketMessageEvent = Readonly<{ data: unknown }>;\nexport type EditableArtifactWebSocketCloseEvent = Readonly<{\n code?: number;\n reason?: string;\n}>;\n\nexport type EditableArtifactWebSocketLike = {\n binaryType: string;\n readonly protocol: string;\n readonly readyState: number;\n send(data: Uint8Array | ArrayBuffer): void;\n close(code?: number, reason?: string): void;\n addEventListener(type: \"open\", listener: () => void): void;\n addEventListener(\n type: \"message\",\n listener: (event: EditableArtifactWebSocketMessageEvent) => void,\n ): void;\n addEventListener(type: \"error\", listener: () => void): void;\n addEventListener(\n type: \"close\",\n listener: (event: EditableArtifactWebSocketCloseEvent) => void,\n ): void;\n removeEventListener(type: \"open\", listener: () => void): void;\n removeEventListener(\n type: \"message\",\n listener: (event: EditableArtifactWebSocketMessageEvent) => void,\n ): void;\n removeEventListener(type: \"error\", listener: () => void): void;\n removeEventListener(\n type: \"close\",\n listener: (event: EditableArtifactWebSocketCloseEvent) => void,\n ): void;\n};\n\nexport type CreateEditableArtifactHttpLiveTransportOptions = Readonly<{\n baseUrl: string | URL;\n workspaceId: string;\n modality: EditableArtifactModality;\n liveProtocolVersion: number;\n kernelVersion: string;\n modelSchemaVersion: number;\n snapshotVersion: number;\n commandProtocolVersion: number;\n committedTransactionProtocolVersion: number;\n apiKey?: string;\n headers?: Readonly<Record<string, string>> | (() => Readonly<Record<string, string>>);\n credentials?: RequestCredentials;\n fetch?: typeof fetch;\n webSocketUrl?: string | URL;\n webSocketFactory?: (url: string, protocol: string) => EditableArtifactWebSocketLike;\n allowInsecureDevelopmentTransport?: boolean;\n maximumServerFrameBytes?: number;\n maximumSnapshotBytes?: number;\n handshakeTimeoutMs?: number;\n submitTimeoutMs?: number;\n}>;\n\n/**\n * Production HTTP + authenticated binary WebSocket transport. The one-use\n * ticket is sent only inside the first OGALV frame, never in the socket URL.\n */\nexport function createEditableArtifactHttpLiveTransport(\n options: CreateEditableArtifactHttpLiveTransportOptions,\n): EditableArtifactSyncTransport {\n return new HttpLiveTransport(options);\n}\n\nclass HttpLiveTransport implements EditableArtifactSyncTransport {\n private readonly baseUrl: URL;\n private readonly socketUrl: URL;\n private readonly workspaceId: string;\n private readonly modality: EditableArtifactModality;\n private readonly liveProtocolVersion: number;\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly snapshotVersion: number;\n private readonly commandProtocolVersion: number;\n private readonly committedTransactionProtocolVersion: number;\n private readonly apiKey: string | undefined;\n private readonly headerSource: CreateEditableArtifactHttpLiveTransportOptions[\"headers\"];\n private readonly credentials: RequestCredentials;\n private readonly fetchImpl: typeof fetch;\n private readonly webSocketFactory: NonNullable<\n CreateEditableArtifactHttpLiveTransportOptions[\"webSocketFactory\"]\n >;\n private readonly maximumServerFrameBytes: number;\n private readonly maximumSnapshotBytes: number;\n private readonly handshakeTimeoutMs: number;\n private readonly submitTimeoutMs: number;\n\n constructor(options: CreateEditableArtifactHttpLiveTransportOptions) {\n this.baseUrl = transportBaseUrl(options.baseUrl);\n this.socketUrl = socketUrl(options.webSocketUrl, this.baseUrl);\n const insecure = options.allowInsecureDevelopmentTransport ?? false;\n requireTransportSecurity(this.baseUrl, this.socketUrl, insecure);\n this.workspaceId = boundedString(options.workspaceId, \"workspaceId\", 256);\n const current = currentEditableArtifactCompatibility(options.modality);\n this.modality = options.modality;\n this.liveProtocolVersion = exactVersion(\n options.liveProtocolVersion,\n current.liveProtocolVersion,\n \"liveProtocolVersion\",\n );\n this.kernelVersion = boundedString(options.kernelVersion, \"kernelVersion\", 512);\n this.modelSchemaVersion = exactVersion(\n options.modelSchemaVersion,\n current.modelSchemaVersion,\n \"modelSchemaVersion\",\n );\n this.snapshotVersion = exactVersion(\n options.snapshotVersion,\n current.snapshotVersion,\n \"snapshotVersion\",\n );\n this.commandProtocolVersion = exactVersion(\n options.commandProtocolVersion,\n current.commandProtocolVersion,\n \"commandProtocolVersion\",\n );\n this.committedTransactionProtocolVersion = exactVersion(\n options.committedTransactionProtocolVersion,\n current.committedTransactionProtocolVersion,\n \"committedTransactionProtocolVersion\",\n );\n this.apiKey = options.apiKey;\n if (this.apiKey !== undefined) boundedString(this.apiKey, \"apiKey\", 16 * 1024);\n this.headerSource = options.headers;\n this.credentials = options.credentials ?? \"same-origin\";\n this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.webSocketFactory = options.webSocketFactory ?? defaultWebSocketFactory;\n this.maximumServerFrameBytes = positiveBounded(\n options.maximumServerFrameBytes ?? DEFAULT_MAX_SERVER_FRAME_BYTES,\n 128 * 1024 * 1024,\n \"maximumServerFrameBytes\",\n );\n this.maximumSnapshotBytes = positiveBounded(\n options.maximumSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n \"maximumSnapshotBytes\",\n );\n this.handshakeTimeoutMs = positiveBounded(\n options.handshakeTimeoutMs ?? DEFAULT_HANDSHAKE_TIMEOUT_MS,\n 5 * 60_000,\n \"handshakeTimeoutMs\",\n );\n this.submitTimeoutMs = positiveBounded(\n options.submitTimeoutMs ?? DEFAULT_SUBMIT_TIMEOUT_MS,\n 5 * 60_000,\n \"submitTimeoutMs\",\n );\n }\n\n async mintTicket(input: {\n artifactId: string;\n replicaId: string;\n signal: AbortSignal;\n }): Promise<EditableArtifactSyncTicket> {\n requireStableId(input.artifactId, \"artifactId\");\n requireReplicaId(input.replicaId);\n input.signal.throwIfAborted();\n const url = childUrl(\n this.baseUrl,\n `/v1/workspaces/${encodeURIComponent(this.workspaceId)}/editable-artifacts/${encodeURIComponent(input.artifactId)}/live-ticket`,\n );\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"POST\",\n credentials: this.credentials,\n headers: {\n ...this.headers(),\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n replicaId: input.replicaId,\n modality: this.modality,\n liveProtocolVersion: this.liveProtocolVersion,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n snapshotVersion: this.snapshotVersion,\n commandProtocolVersion: this.commandProtocolVersion,\n committedTransactionProtocolVersion: this.committedTransactionProtocolVersion,\n }),\n signal: input.signal,\n });\n } catch (cause) {\n input.signal.throwIfAborted();\n throw new EditableArtifactTransportError(\"editable artifact ticket request failed\", {\n code: \"ticket_transport_error\",\n cause,\n });\n }\n if (!response.ok) {\n await response.body?.cancel(\"ticket request rejected\").catch(() => undefined);\n throw new EditableArtifactTransportError(\n `editable artifact ticket request failed with HTTP ${response.status}`,\n {\n code: response.status === 403 ? \"permission_changed\" : \"ticket_rejected\",\n retryable: response.status === 408 || response.status === 429 || response.status >= 500,\n },\n );\n }\n const value = await readBoundedJson(response, MAX_TICKET_RESPONSE_BYTES);\n return validateTicket(value, input.artifactId, input.replicaId, this.liveProtocolVersion);\n }\n\n async openLive(input: {\n ticket: EditableArtifactSyncTicket;\n after: number;\n stateHash: string | null;\n resume:\n | { modality: \"spreadsheet\"; causalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; nativeRevision: number | null };\n requireSnapshot: boolean;\n signal: AbortSignal;\n onMessage: (message: EditableArtifactLiveMessage) => void;\n }): Promise<EditableArtifactLiveConnection> {\n if (input.resume.modality !== input.ticket.modality) {\n throw new TypeError(\"live resume modality does not match its ticket\");\n }\n if (\n input.resume.modality !== \"spreadsheet\" &&\n (input.stateHash === null) !== (input.resume.nativeRevision === null)\n ) {\n throw new TypeError(\n \"serialized live resume state hash and native revision must be present together\",\n );\n }\n const socket = this.webSocketFactory(this.socketUrl.href, LIVE_SUBPROTOCOL);\n const commonResume = {\n localCursor: input.stateHash === null ? null : safeSequence(input.after, \"after\"),\n localStateHash: input.stateHash,\n requireSnapshot: input.requireSnapshot || input.stateHash === null,\n } as const;\n const resume: EditableArtifactLiveOpenWireFrame[\"resume\"] =\n input.resume.modality === \"spreadsheet\"\n ? {\n ...commonResume,\n modality: \"spreadsheet\",\n localCausalFrontier: cloneFrontier(input.resume.causalFrontier),\n }\n : {\n ...commonResume,\n modality: input.resume.modality,\n localNativeRevision: input.resume.nativeRevision,\n };\n const connection = new HttpLiveConnection({\n socket,\n ticket: input.ticket,\n resume,\n kernelVersion: this.kernelVersion,\n modelSchemaVersion: this.modelSchemaVersion,\n maximumServerFrameBytes: this.maximumServerFrameBytes,\n maximumSnapshotBytes: this.maximumSnapshotBytes,\n handshakeTimeoutMs: this.handshakeTimeoutMs,\n submitTimeoutMs: this.submitTimeoutMs,\n signal: input.signal,\n onMessage: input.onMessage,\n });\n await connection.ready();\n return connection;\n }\n\n private headers(): Readonly<Record<string, string>> {\n const supplied =\n typeof this.headerSource === \"function\" ? this.headerSource() : this.headerSource;\n return {\n ...(supplied ?? {}),\n [OPENGENI_API_CONTRACT_HEADER]: OPENGENI_API_CONTRACT_REVISION,\n ...(this.apiKey ? { authorization: `Bearer ${this.apiKey}` } : {}),\n };\n }\n}\n\ntype ConnectionInput = Readonly<{\n socket: EditableArtifactWebSocketLike;\n ticket: EditableArtifactSyncTicket;\n resume: EditableArtifactLiveOpenWireFrame[\"resume\"];\n kernelVersion: string;\n modelSchemaVersion: number;\n maximumServerFrameBytes: number;\n maximumSnapshotBytes: number;\n handshakeTimeoutMs: number;\n submitTimeoutMs: number;\n signal: AbortSignal;\n onMessage: (message: EditableArtifactLiveMessage) => void;\n}>;\n\ntype OmitEach<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\ntype SnapshotAssembly = {\n metadata: OmitEach<\n Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n \"bytes\" | \"offset\" | \"final\"\n >;\n bytes: Uint8Array;\n nextOffset: number;\n};\n\ntype PendingSubmission = {\n pending: EditableArtifactPendingTransaction;\n deferred: Deferred<EditableArtifactSubmitReceipt>;\n accepted: Extract<EditableArtifactLiveServerFrame, { type: \"mutationAccepted\" }> | null;\n timeout: ReturnType<typeof setTimeout>;\n sent: boolean;\n};\n\nclass HttpLiveConnection implements EditableArtifactLiveConnection {\n private readonly socket: EditableArtifactWebSocketLike;\n private readonly ticket: EditableArtifactSyncTicket;\n private readonly resume: EditableArtifactLiveOpenWireFrame[\"resume\"];\n private readonly kernelVersion: string;\n private readonly modelSchemaVersion: number;\n private readonly maximumServerFrameBytes: number;\n private readonly maximumSnapshotBytes: number;\n private readonly submitTimeoutMs: number;\n private readonly signal: AbortSignal;\n private readonly onMessage: (message: EditableArtifactLiveMessage) => void;\n private readonly readyDeferred = new Deferred<void>();\n private readonly closedDeferred = new Deferred<EditableArtifactLiveClose>();\n private readonly firstPostOpen = new Deferred<\n \"snapshot\" | \"transaction\" | \"barrier\" | \"resync\"\n >();\n private readonly snapshotDeferred = new Deferred<EditableArtifactSnapshot>();\n private readonly progressWaiters = new Set<Deferred<void>>();\n private readonly replayByStart = new Map<number, EditableArtifactCommittedTransaction>();\n private readonly transactionsById = new Map<string, EditableArtifactCommittedTransaction>();\n private readonly submissions = new Map<string, PendingSubmission>();\n private openFrame: Extract<EditableArtifactLiveServerFrame, { type: \"open\" }> | null = null;\n private snapshotAssembly: SnapshotAssembly | null = null;\n private snapshot: EditableArtifactSnapshot | null = null;\n private terminal: Error | null = null;\n private localClose = false;\n private bootstrapRead = false;\n private bootstrapDelivered = false;\n private messageTail: Promise<void> = Promise.resolve();\n private targetHead = 0;\n private barrierSequence: number | null = null;\n private handshakeTimer: ReturnType<typeof setTimeout>;\n\n constructor(input: ConnectionInput) {\n this.socket = input.socket;\n this.ticket = input.ticket;\n this.resume = input.resume;\n this.kernelVersion = input.kernelVersion;\n this.modelSchemaVersion = input.modelSchemaVersion;\n this.maximumServerFrameBytes = input.maximumServerFrameBytes;\n this.maximumSnapshotBytes = input.maximumSnapshotBytes;\n this.submitTimeoutMs = input.submitTimeoutMs;\n this.signal = input.signal;\n this.onMessage = input.onMessage;\n this.socket.binaryType = \"arraybuffer\";\n this.socket.addEventListener(\"open\", this.handleOpen);\n this.socket.addEventListener(\"message\", this.handleMessage);\n this.socket.addEventListener(\"error\", this.handleError);\n this.socket.addEventListener(\"close\", this.handleClose);\n this.signal.addEventListener(\"abort\", this.handleAbort, { once: true });\n this.handshakeTimer = setTimeout(() => {\n this.fail(new EditableArtifactTransportError(\"editable artifact live handshake timed out\"));\n }, input.handshakeTimeoutMs);\n }\n\n get streamEpoch(): string {\n return this.requireOpen().streamEpoch;\n }\n\n get limits(): EditableArtifactLiveLimits {\n const frame = this.requireOpen();\n return Object.freeze({\n maxClientFrameBytes: frame.maxClientFrameBytes,\n maxCommandBytes: frame.maxCommandBytes,\n maxIntentBytes: frame.maxIntentBytes,\n maxCommittedTransactionBytes: frame.maxCommittedTransactionBytes,\n maxSnapshotBytes: frame.maxSnapshotBytes,\n maxInFlightTransactions: frame.maxInFlightTransactions,\n maxInFlightBytes: frame.maxInFlightBytes,\n });\n }\n\n readonly closed = this.closedDeferred.promise;\n\n async ready(): Promise<void> {\n await abortable(this.readyDeferred.promise, this.signal);\n }\n\n async readBootstrap(input: {\n localCursor: number | null;\n localStateHash: string | null;\n resume:\n | { modality: \"spreadsheet\"; localCausalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; localNativeRevision: number | null };\n requireSnapshot: boolean;\n signal: AbortSignal;\n }): Promise<EditableArtifactBootstrap> {\n if (this.bootstrapRead) throw new TypeError(\"live bootstrap may only be read once\");\n this.bootstrapRead = true;\n const open = this.requireOpen();\n if (input.resume.modality !== this.ticket.modality) {\n throw new TypeError(\"bootstrap resume modality does not match its ticket\");\n }\n if (\n input.resume.modality !== \"spreadsheet\" &&\n ((input.localCursor === null) !== (input.localStateHash === null) ||\n (input.localStateHash === null) !== (input.resume.localNativeRevision === null))\n ) {\n throw new TypeError(\n \"serialized bootstrap cursor, state hash, and native revision must be present together\",\n );\n }\n const first = await abortable(this.firstPostOpen.promise, input.signal);\n if (first === \"resync\") {\n clearTimeout(this.handshakeTimer);\n throw new EditableArtifactSyncError(\"resync_required\", \"server requires a fresh snapshot\", {\n retryable: true,\n requiresSnapshot: true,\n });\n }\n let snapshot: EditableArtifactSnapshot | null = null;\n if (first === \"snapshot\")\n snapshot = await abortable(this.snapshotDeferred.promise, input.signal);\n if (input.requireSnapshot && snapshot === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"server omitted the required snapshot\",\n {\n requiresSnapshot: true,\n },\n );\n }\n const boundarySequence = snapshot?.sequence ?? input.localCursor;\n const boundaryStateHash = snapshot?.stateHash ?? input.localStateHash;\n if (boundarySequence === null || boundaryStateHash === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"live stream established no state boundary\",\n {\n requiresSnapshot: true,\n },\n );\n }\n if (boundarySequence > open.headSequence) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"local state is ahead of the live head\",\n {\n requiresSnapshot: true,\n },\n );\n }\n const commonBootstrap = {\n artifactId: this.ticket.artifactId,\n liveProtocolVersion: this.ticket.protocolVersion,\n headSequence: boundarySequence,\n headStateHash: boundaryStateHash,\n kernelVersion: snapshot?.kernelVersion ?? this.kernelVersion,\n modelSchemaVersion: snapshot?.modelSchemaVersion ?? this.modelSchemaVersion,\n writable: open.writable,\n minimumReplaySequence: open.minimumReplaySequence,\n snapshot,\n resyncRequired: false,\n } as const;\n const bootstrap: EditableArtifactBootstrap =\n this.ticket.modality === \"spreadsheet\"\n ? {\n ...commonBootstrap,\n modality: \"spreadsheet\",\n headCausalFrontier: cloneFrontier(\n snapshot?.modality === \"spreadsheet\"\n ? snapshot.causalFrontier\n : input.resume.modality === \"spreadsheet\"\n ? input.resume.localCausalFrontier\n : [],\n ),\n }\n : {\n ...commonBootstrap,\n modality: this.ticket.modality,\n headNativeRevision: serializedBoundaryRevision(\n snapshot,\n input.resume,\n this.ticket.modality,\n ),\n };\n this.bootstrapDelivered = true;\n clearTimeout(this.handshakeTimer);\n return bootstrap;\n }\n\n async replay(input: {\n after: number;\n through: number;\n limit: number;\n signal: AbortSignal;\n }): Promise<EditableArtifactReplayPage> {\n const after = safeSequence(input.after, \"replay after\");\n const through = safeSequence(input.through, \"replay through\");\n const limit = positiveBounded(input.limit, 10_000, \"replay limit\");\n if (after >= through) {\n return {\n artifactId: this.ticket.artifactId,\n transactions: [],\n headSequence: this.targetHead,\n };\n }\n while (true) {\n this.throwIfTerminal();\n const transactions: EditableArtifactCommittedTransaction[] = [];\n let expected = after + 1;\n while (transactions.length < limit) {\n const transaction = this.replayByStart.get(expected);\n if (!transaction || transaction.endSequence > through) break;\n transactions.push(transaction);\n expected = transaction.endSequence + 1;\n }\n if (transactions.length > 0) {\n return {\n artifactId: this.ticket.artifactId,\n transactions: transactions.map(cloneCommitted),\n headSequence: this.targetHead,\n };\n }\n if (this.barrierSequence !== null && this.barrierSequence >= through) {\n throw new EditableArtifactSyncError(\n \"invalid_sequence\",\n `live stream omitted committed sequence ${after + 1}`,\n { retryable: true, requiresSnapshot: true },\n );\n }\n await this.waitForProgress(input.signal);\n }\n }\n\n async submit(input: {\n transaction: EditableArtifactPendingTransaction;\n signal: AbortSignal;\n }): Promise<EditableArtifactSubmitReceipt> {\n this.throwIfTerminal();\n const open = this.requireOpen();\n const pending = input.transaction;\n if (pending.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"pending transaction belongs to another artifact\");\n }\n if (\n pending.commandBytes.byteLength >\n Math.min(open.maxCommandBytes, EDITABLE_ARTIFACT_COMMAND_MAX_BYTES)\n ) {\n throw new EditableArtifactTransportError(\"pending command exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n if (\n pending.intentBytes.byteLength >\n Math.min(open.maxIntentBytes, EDITABLE_ARTIFACT_INTENT_MAX_BYTES)\n ) {\n throw new EditableArtifactTransportError(\"pending intent exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n if (hashEditableArtifactMutationIntentBytes(pending.intentBytes) !== pending.requestHash) {\n throw new TypeError(\"pending requestHash does not bind its exact OGATX bytes\");\n }\n if (this.submissions.has(pending.requestHash)) {\n throw new TypeError(\"pending request is already submitted on this stream\");\n }\n const frame = encodeEditableArtifactLiveMutationWireFrame({\n type: \"mutation\",\n protocolVersion: this.ticket.protocolVersion,\n artifactId: pending.artifactId,\n streamEpoch: open.streamEpoch,\n requestHash: pending.requestHash,\n intentBytes: pending.intentBytes,\n });\n if (frame.byteLength > open.maxClientFrameBytes) {\n throw new EditableArtifactTransportError(\"pending frame exceeds negotiated live limit\", {\n code: \"limit_exceeded\",\n retryable: false,\n });\n }\n const deferred = new Deferred<EditableArtifactSubmitReceipt>();\n const submission: PendingSubmission = {\n pending,\n deferred,\n accepted: null,\n sent: false,\n timeout: setTimeout(() => {\n if (!this.submissions.delete(pending.requestHash)) return;\n deferred.reject(\n new EditableArtifactTransportError(\"pending mutation response timed out\", {\n code: \"submit_timeout\",\n outcomeUnknown: true,\n }),\n );\n this.close(\"submit_timeout\");\n }, this.submitTimeoutMs),\n };\n this.submissions.set(pending.requestHash, submission);\n try {\n input.signal.throwIfAborted();\n this.socket.send(frame);\n submission.sent = true;\n } catch (cause) {\n clearTimeout(submission.timeout);\n this.submissions.delete(pending.requestHash);\n input.signal.throwIfAborted();\n throw new EditableArtifactTransportError(\"pending mutation send failed\", {\n code: \"transport_error\",\n outcomeUnknown: true,\n cause,\n });\n }\n return await abortable(deferred.promise, input.signal);\n }\n\n async acknowledge(input: {\n sequence: number;\n stateHash: string;\n signal: AbortSignal;\n }): Promise<void> {\n this.throwIfTerminal();\n input.signal.throwIfAborted();\n const frame = encodeEditableArtifactLiveAppliedWireFrame({\n type: \"applied\",\n protocolVersion: this.ticket.protocolVersion,\n artifactId: this.ticket.artifactId,\n streamEpoch: this.streamEpoch,\n sequence: safeSequence(input.sequence, \"acknowledged sequence\"),\n stateHash: requireSha256(input.stateHash, \"acknowledged stateHash\"),\n });\n if (frame.byteLength > this.limits.maxClientFrameBytes) {\n throw new TypeError(\"acknowledgement exceeds negotiated live limit\");\n }\n try {\n this.socket.send(frame);\n } catch (cause) {\n throw new EditableArtifactTransportError(\"live acknowledgement send failed\", { cause });\n }\n for (const [start, transaction] of this.replayByStart) {\n if (transaction.endSequence <= input.sequence) this.replayByStart.delete(start);\n }\n }\n\n close(reason = \"closed\"): void {\n if (this.terminal) return;\n this.localClose = true;\n try {\n this.socket.close(1000, boundedCloseReason(reason));\n } finally {\n this.finish({ reason: \"closed\" });\n }\n }\n\n private readonly handleOpen = (): void => {\n if (this.signal.aborted) {\n this.close(\"aborted\");\n return;\n }\n try {\n if (this.socket.protocol !== LIVE_SUBPROTOCOL) {\n throw new EditableArtifactTransportError(\n \"editable artifact WebSocket did not negotiate the required subprotocol\",\n { code: \"protocol_mismatch\" },\n );\n }\n this.socket.send(\n encodeEditableArtifactLiveOpenWireFrame({\n type: \"open\",\n protocolVersion: this.ticket.protocolVersion,\n artifactId: this.ticket.artifactId,\n token: this.ticket.token,\n resume: this.resume,\n }),\n );\n } catch (cause) {\n this.fail(\n cause instanceof EditableArtifactTransportError\n ? cause\n : new EditableArtifactTransportError(\"live open frame send failed\", { cause }),\n );\n }\n };\n\n private readonly handleMessage = (event: EditableArtifactWebSocketMessageEvent): void => {\n this.messageTail = this.messageTail\n .then(async () => {\n const bytes = await binaryMessage(event.data, this.maximumServerFrameBytes);\n this.handleServerFrame(decodeEditableArtifactLiveServerWireFrame(bytes));\n })\n .catch((cause: unknown) => {\n this.fail(\n cause instanceof Error\n ? cause\n : new EditableArtifactTransportError(\"invalid live server frame\", { cause }),\n );\n });\n };\n\n private readonly handleError = (): void => {\n this.fail(new EditableArtifactTransportError(\"editable artifact WebSocket failed\"));\n };\n\n private readonly handleClose = (event: EditableArtifactWebSocketCloseEvent): void => {\n if (this.terminal) return;\n const reason = event.reason ?? \"transport_error\";\n if (RESYNC_CLOSE_REASONS.has(reason)) {\n this.onMessage({\n type: \"resync_required\",\n artifactId: this.ticket.artifactId,\n reason,\n });\n }\n this.finish({ reason: this.localClose ? \"closed\" : closeReason(reason) });\n };\n\n private readonly handleAbort = (): void => this.close(\"aborted\");\n\n private handleServerFrame(frame: EditableArtifactLiveServerFrame): void {\n if (this.terminal) return;\n if (this.openFrame === null) {\n if (frame.type !== \"open\") throw new TypeError(\"first live server frame must be open\");\n this.validateIdentity(frame);\n this.validateNegotiatedLimits(frame);\n this.openFrame = frame;\n this.targetHead = frame.headSequence;\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.headSequence,\n });\n this.readyDeferred.resolve();\n return;\n }\n if (frame.type === \"open\") throw new TypeError(\"live server sent a second open frame\");\n this.validateIdentity(frame);\n switch (frame.type) {\n case \"snapshot\":\n this.consumeSnapshot(frame);\n return;\n case \"transaction\": {\n if (frame.transaction.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"live transaction belongs to another artifact\");\n }\n if (frame.transaction.modality !== this.ticket.modality) {\n throw new TypeError(\"live transaction modality mismatch\");\n }\n if (\n frame.transaction.committedTransactionBytes.byteLength >\n this.limits.maxCommittedTransactionBytes\n ) {\n throw new RangeError(\"live transaction exceeds negotiated committed byte limit\");\n }\n const transaction = cloneCommitted(frame.transaction);\n const existing = this.replayByStart.get(transaction.startSequence);\n if (existing && existing.transactionId !== transaction.transactionId) {\n throw new TypeError(\"live stream reused a committed sequence\");\n }\n this.replayByStart.set(transaction.startSequence, transaction);\n if (this.submissions.has(transaction.requestHash)) {\n this.transactionsById.set(transaction.transactionId, transaction);\n }\n this.targetHead = Math.max(this.targetHead, transaction.endSequence);\n this.firstPostOpen.resolve(\"transaction\");\n if (this.bootstrapDelivered) {\n this.onMessage({\n type: \"transaction.committed\",\n transaction: cloneCommitted(transaction),\n });\n }\n this.trySettleAccepted(transaction.transactionId);\n this.notifyProgress();\n return;\n }\n case \"barrier\":\n this.barrierSequence = frame.sequence;\n this.targetHead = Math.max(this.targetHead, frame.sequence);\n this.firstPostOpen.resolve(\"barrier\");\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.sequence,\n });\n this.notifyProgress();\n return;\n case \"watermark\":\n this.targetHead = Math.max(this.targetHead, frame.headSequence);\n this.onMessage({\n type: \"head\",\n artifactId: this.ticket.artifactId,\n headSequence: frame.headSequence,\n });\n this.notifyProgress();\n return;\n case \"resyncRequired\":\n this.firstPostOpen.resolve(\"resync\");\n this.onMessage({\n type: \"resync_required\",\n artifactId: this.ticket.artifactId,\n reason: frame.reason,\n });\n this.notifyProgress();\n return;\n case \"authorizationChanged\":\n this.onMessage({\n type: \"authorization\",\n artifactId: this.ticket.artifactId,\n writable: frame.writable,\n });\n return;\n case \"mutationAccepted\":\n this.acceptMutation(frame);\n return;\n case \"mutationRejected\":\n this.rejectMutation(frame);\n return;\n case \"applied\":\n return;\n }\n }\n\n private consumeSnapshot(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n ): void {\n this.firstPostOpen.resolve(\"snapshot\");\n if (frame.totalBytes > Math.min(this.limits.maxSnapshotBytes, this.maximumSnapshotBytes)) {\n throw new RangeError(\"live snapshot exceeds negotiated browser limit\");\n }\n if (frame.protocolVersion !== this.ticket.protocolVersion) {\n throw new TypeError(\"live snapshot protocol mismatch\");\n }\n if (frame.modality !== this.ticket.modality) {\n throw new TypeError(\"live snapshot modality mismatch\");\n }\n if (this.snapshotAssembly === null) {\n if (frame.offset !== 0) throw new TypeError(\"live snapshot does not start at byte zero\");\n const { bytes: _bytes, offset: _offset, final: _final, ...metadata } = frame;\n this.snapshotAssembly = {\n metadata,\n bytes: new Uint8Array(frame.totalBytes),\n nextOffset: 0,\n };\n }\n const assembly = this.snapshotAssembly;\n if (\n frame.offset !== assembly.nextOffset ||\n frame.totalBytes !== assembly.metadata.totalBytes ||\n frame.sequence !== assembly.metadata.sequence ||\n frame.stateHash !== assembly.metadata.stateHash ||\n frame.digest !== assembly.metadata.digest ||\n frame.kernelVersion !== assembly.metadata.kernelVersion ||\n frame.modelSchemaVersion !== assembly.metadata.modelSchemaVersion ||\n !snapshotChunkAuthorityEqual(frame, assembly.metadata)\n ) {\n throw new TypeError(\"live snapshot chunks do not share one identity\");\n }\n assembly.bytes.set(frame.bytes, frame.offset);\n assembly.nextOffset += frame.bytes.byteLength;\n if (!frame.final) return;\n if (assembly.nextOffset !== assembly.bytes.byteLength) {\n throw new TypeError(\"live snapshot is incomplete\");\n }\n const commonSnapshot = {\n artifactId: this.ticket.artifactId,\n sequence: frame.sequence,\n stateHash: frame.stateHash,\n digest: frame.digest,\n kernelVersion: frame.kernelVersion,\n modelSchemaVersion: frame.modelSchemaVersion,\n bytes: assembly.bytes,\n } as const;\n const snapshot: EditableArtifactSnapshot =\n \"causalFrontier\" in frame\n ? Object.freeze({\n ...commonSnapshot,\n modality: \"spreadsheet\" as const,\n causalFrontier: cloneFrontier(frame.causalFrontier),\n operationProtocolVersion: frame.operationProtocolVersion,\n snapshotVersion: frame.snapshotVersion,\n })\n : Object.freeze({\n ...commonSnapshot,\n modality: requireSerializedModality(frame.modality),\n nativeRevision: frame.nativeRevision,\n });\n this.snapshot = snapshot;\n this.snapshotDeferred.resolve(snapshot);\n this.notifyProgress();\n }\n\n private acceptMutation(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"mutationAccepted\" }>,\n ): void {\n const submission = this.submissions.get(frame.requestHash);\n if (!submission) return;\n if (frame.clientTransactionId !== submission.pending.clientTransactionId) {\n throw new TypeError(\"mutation acceptance changed the client transaction identity\");\n }\n submission.accepted = frame;\n this.trySettleAccepted(frame.transactionId);\n }\n\n private trySettleAccepted(transactionId: string): void {\n const transaction = this.transactionsById.get(transactionId);\n if (!transaction) return;\n const submission = this.submissions.get(transaction.requestHash);\n if (!submission?.accepted || submission.accepted.transactionId !== transactionId) return;\n const accepted = submission.accepted;\n if (\n accepted.startSequence !== transaction.startSequence ||\n accepted.endSequence !== transaction.endSequence ||\n accepted.stateHash !== transaction.stateHash ||\n accepted.requestHash !== transaction.requestHash\n ) {\n throw new TypeError(\"mutation acceptance does not match its committed transaction\");\n }\n clearTimeout(submission.timeout);\n this.submissions.delete(transaction.requestHash);\n this.transactionsById.delete(transaction.transactionId);\n submission.deferred.resolve({\n artifactId: this.ticket.artifactId,\n clientTransactionId: accepted.clientTransactionId,\n transactionId: transaction.transactionId,\n requestHash: transaction.requestHash,\n committed: cloneCommitted(transaction),\n });\n }\n\n private rejectMutation(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"mutationRejected\" }>,\n ): void {\n const submission = this.submissions.get(frame.requestHash);\n if (!submission) return;\n clearTimeout(submission.timeout);\n this.submissions.delete(frame.requestHash);\n submission.deferred.reject(\n new EditableArtifactTransportError(`editable artifact mutation rejected: ${frame.code}`, {\n code: frame.code,\n retryable: frame.retryable,\n outcomeUnknown: false,\n }),\n );\n }\n\n private validateIdentity(frame: EditableArtifactLiveServerFrame): void {\n if (frame.artifactId !== this.ticket.artifactId) {\n throw new TypeError(\"live server frame belongs to another artifact\");\n }\n if (frame.protocolVersion !== this.ticket.protocolVersion) {\n throw new TypeError(\"live server frame protocol mismatch\");\n }\n if (frame.type === \"open\" && frame.modality !== this.ticket.modality) {\n throw new TypeError(\"live open modality does not match its ticket\");\n }\n if (this.openFrame && frame.streamEpoch !== this.openFrame.streamEpoch) {\n throw new TypeError(\"live server frame belongs to another stream epoch\");\n }\n }\n\n private validateNegotiatedLimits(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"open\" }>,\n ): void {\n if (\n frame.maxCommandBytes > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES ||\n frame.maxIntentBytes > EDITABLE_ARTIFACT_INTENT_MAX_BYTES ||\n frame.maxCommittedTransactionBytes > MAX_COMMITTED_TRANSACTION_BYTES\n ) {\n throw new TypeError(\"live server advertised incompatible protocol limits\");\n }\n }\n\n private requireOpen(): Extract<EditableArtifactLiveServerFrame, { type: \"open\" }> {\n if (!this.openFrame) throw new TypeError(\"live stream has not completed its handshake\");\n return this.openFrame;\n }\n\n private throwIfTerminal(): void {\n if (this.terminal) throw this.terminal;\n this.signal.throwIfAborted();\n }\n\n private waitForProgress(signal: AbortSignal): Promise<void> {\n this.throwIfTerminal();\n const deferred = new Deferred<void>();\n this.progressWaiters.add(deferred);\n return abortable(deferred.promise, signal).finally(() => this.progressWaiters.delete(deferred));\n }\n\n private notifyProgress(): void {\n for (const waiter of this.progressWaiters) waiter.resolve();\n this.progressWaiters.clear();\n }\n\n private fail(error: Error): void {\n if (this.terminal) return;\n this.finish({ reason: \"transport_error\", error });\n try {\n this.socket.close(4400, \"invalid_frame\");\n } catch {\n // Terminal state above is authoritative even if the host socket throws.\n }\n }\n\n private finish(input: { reason: EditableArtifactLiveClose[\"reason\"]; error?: Error }): void {\n if (this.terminal) return;\n clearTimeout(this.handshakeTimer);\n this.terminal =\n input.error ?? new EditableArtifactTransportError(\"editable artifact live stream closed\");\n this.socket.removeEventListener(\"open\", this.handleOpen);\n this.socket.removeEventListener(\"message\", this.handleMessage);\n this.socket.removeEventListener(\"error\", this.handleError);\n this.socket.removeEventListener(\"close\", this.handleClose);\n this.signal.removeEventListener(\"abort\", this.handleAbort);\n this.readyDeferred.reject(this.terminal);\n this.firstPostOpen.reject(this.terminal);\n this.snapshotDeferred.reject(this.terminal);\n this.notifyProgress();\n for (const submission of this.submissions.values()) {\n clearTimeout(submission.timeout);\n submission.deferred.reject(\n new EditableArtifactTransportError(\"live stream closed before mutation outcome\", {\n code: \"transport_error\",\n outcomeUnknown: submission.sent,\n cause: input.error,\n }),\n );\n }\n this.submissions.clear();\n this.closedDeferred.resolve({\n reason: input.reason,\n ...(input.error ? { error: input.error } : {}),\n });\n }\n}\n\nclass Deferred<T> {\n readonly promise: Promise<T>;\n private resolvePromise!: (value: T | PromiseLike<T>) => void;\n private rejectPromise!: (reason?: unknown) => void;\n private settled = false;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolvePromise = resolve;\n this.rejectPromise = reject;\n });\n // Several lifecycle barriers are intentionally rejectable before a caller\n // starts awaiting them; mark the rejection observed without changing it.\n void this.promise.catch(() => undefined);\n }\n\n resolve(\n value: T extends void ? undefined : T = undefined as T extends void ? undefined : T,\n ): void {\n if (this.settled) return;\n this.settled = true;\n this.resolvePromise(value as T);\n }\n\n reject(reason: unknown): void {\n if (this.settled) return;\n this.settled = true;\n this.rejectPromise(reason);\n }\n}\n\nfunction cloneCommitted(\n transaction: EditableArtifactCommittedTransaction | ContractCommittedTransaction,\n): EditableArtifactCommittedTransaction {\n if (transaction.modality === undefined || transaction.modality === \"spreadsheet\") {\n return {\n ...transaction,\n modality: \"spreadsheet\",\n causalFrontier: cloneFrontier(transaction.causalFrontier),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n }\n if (!(\"priorNativeRevision\" in transaction)) {\n throw new TypeError(\"serialized transaction lacks native revision metadata\");\n }\n return {\n artifactId: transaction.artifactId,\n transactionId: transaction.transactionId,\n requestHash: transaction.requestHash,\n startSequence: transaction.startSequence,\n endSequence: transaction.endSequence,\n priorStateHash: transaction.priorStateHash,\n stateHash: transaction.stateHash,\n modality: requireSerializedModality(transaction.modality),\n priorNativeRevision: transaction.priorNativeRevision,\n nativeRevision: transaction.nativeRevision,\n commitProtocolVersion: transaction.commitProtocolVersion,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n };\n}\n\nfunction serializedBoundaryRevision(\n snapshot: EditableArtifactSnapshot | null,\n resume:\n | { modality: \"spreadsheet\"; localCausalFrontier: EditableArtifactCausalFrontier }\n | { modality: \"document\" | \"presentation\"; localNativeRevision: number | null },\n modality: \"document\" | \"presentation\",\n): number {\n if (snapshot !== null) {\n if (snapshot.modality !== modality) throw new TypeError(\"snapshot modality mismatch\");\n return snapshot.nativeRevision;\n }\n if (resume.modality !== modality || resume.localNativeRevision === null) {\n throw new EditableArtifactSyncError(\n \"invalid_bootstrap\",\n \"serialized live stream established no native revision boundary\",\n { requiresSnapshot: true },\n );\n }\n return resume.localNativeRevision;\n}\n\nfunction snapshotChunkAuthorityEqual(\n frame: Extract<EditableArtifactLiveServerFrame, { type: \"snapshot\" }>,\n metadata: SnapshotAssembly[\"metadata\"],\n): boolean {\n if (frame.modality !== metadata.modality) return false;\n if (\"causalFrontier\" in frame) {\n if (!(\"causalFrontier\" in metadata)) return false;\n return frontiersEqual(frame.causalFrontier, metadata.causalFrontier);\n }\n if (!(\"nativeRevision\" in metadata)) return false;\n return frame.nativeRevision === metadata.nativeRevision;\n}\n\nfunction requireSerializedModality(\n value: EditableArtifactModality | undefined,\n): \"document\" | \"presentation\" {\n if (value !== \"document\" && value !== \"presentation\") {\n throw new TypeError(\"serialized artifact modality is invalid\");\n }\n return value;\n}\n\nfunction cloneFrontier(frontier: EditableArtifactCausalFrontier): EditableArtifactCausalFrontier {\n if (!Array.isArray(frontier) || frontier.length > 1_024) {\n throw new TypeError(\"causal frontier is invalid\");\n }\n let previous = \"\";\n return frontier.map((entry) => {\n requireReplicaId(entry.replicaId);\n if (!Number.isSafeInteger(entry.counter) || entry.counter <= 0 || entry.replicaId <= previous) {\n throw new TypeError(\"causal frontier must be positive, sorted, and duplicate-free\");\n }\n previous = entry.replicaId;\n return { replicaId: entry.replicaId, counter: entry.counter };\n });\n}\n\nfunction frontiersEqual(\n left: EditableArtifactCausalFrontier,\n right: EditableArtifactCausalFrontier,\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nasync function binaryMessage(value: unknown, maximumBytes: number): Promise<Uint8Array> {\n if (value instanceof ArrayBuffer) {\n if (value.byteLength > maximumBytes)\n throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(value);\n }\n if (ArrayBuffer.isView(value)) {\n if (value.byteLength > maximumBytes)\n throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength).slice();\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n if (value.size > maximumBytes) throw new RangeError(\"live server frame exceeds byte limit\");\n return new Uint8Array(await value.arrayBuffer());\n }\n throw new TypeError(\"editable artifact live transport accepts binary frames only\");\n}\n\nasync function readBoundedJson(response: Response, maximumBytes: number): Promise<unknown> {\n const declared = response.headers.get(\"content-length\");\n if (declared !== null) {\n const length = Number(declared);\n if (!Number.isSafeInteger(length) || length < 0 || length > maximumBytes) {\n await response.body?.cancel(\"ticket response exceeds byte limit\").catch(() => undefined);\n throw new TypeError(\"ticket response content-length is invalid\");\n }\n }\n const reader = response.body?.getReader();\n if (!reader) throw new TypeError(\"ticket response has no body\");\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n while (true) {\n const result = await reader.read();\n if (result.done) break;\n total += result.value.byteLength;\n if (total > maximumBytes) throw new RangeError(\"ticket response exceeds byte limit\");\n chunks.push(result.value);\n }\n } catch (error) {\n await reader.cancel(\"ticket response rejected\").catch(() => undefined);\n throw error;\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n let text: string;\n try {\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n return JSON.parse(text) as unknown;\n } catch (cause) {\n throw new TypeError(\"ticket response is not valid UTF-8 JSON\", { cause });\n }\n}\n\nfunction validateTicket(\n value: unknown,\n artifactId: string,\n replicaId: string,\n protocolVersion: number,\n): EditableArtifactSyncTicket {\n if (!isPlainRecord(value)) throw new TypeError(\"ticket response must be an object\");\n const keys = Object.keys(value).sort();\n const expected = [\"artifactId\", \"expiresAt\", \"modality\", \"protocolVersion\", \"replicaId\", \"token\"];\n if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {\n throw new TypeError(\"ticket response has unknown or missing fields\");\n }\n if (\n value.artifactId !== artifactId ||\n value.replicaId !== replicaId ||\n value.protocolVersion !== protocolVersion\n ) {\n throw new TypeError(\"ticket response identity does not match its request\");\n }\n const modality = requireModality(value.modality, \"ticket modality\");\n if (\n typeof value.token !== \"string\" ||\n value.token.length > 4_096 ||\n !/^[A-Za-z0-9._~-]+$/u.test(value.token)\n ) {\n throw new TypeError(\"ticket token is invalid\");\n }\n if (typeof value.expiresAt !== \"string\" || !Number.isFinite(Date.parse(value.expiresAt))) {\n throw new TypeError(\"ticket expiry is invalid\");\n }\n return {\n artifactId,\n modality,\n replicaId,\n token: value.token,\n expiresAt: value.expiresAt,\n protocolVersion,\n };\n}\n\nfunction requireModality(value: unknown, label: string): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw new TypeError(`${label} is invalid`);\n }\n return value;\n}\n\nfunction transportBaseUrl(value: string | URL): URL {\n const base = resolveUrl(value, \"baseUrl\");\n if (base.username || base.password || base.search || base.hash) {\n throw new TypeError(\"baseUrl must not contain credentials, query, or fragment\");\n }\n if (base.protocol !== \"http:\" && base.protocol !== \"https:\") {\n throw new TypeError(\"baseUrl must use HTTP or HTTPS\");\n }\n return base;\n}\n\nfunction socketUrl(value: string | URL | undefined, baseUrl: URL): URL {\n const url =\n value === undefined ? childUrl(baseUrl, LIVE_PATH) : resolveUrl(value, \"webSocketUrl\");\n if (url.username || url.password || url.search || url.hash) {\n throw new TypeError(\"webSocketUrl must not contain credentials, query, or fragment\");\n }\n url.protocol =\n url.protocol === \"https:\" ? \"wss:\" : url.protocol === \"http:\" ? \"ws:\" : url.protocol;\n if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\") {\n throw new TypeError(\"webSocketUrl must use WS or WSS\");\n }\n return url;\n}\n\nfunction childUrl(base: URL, path: string): URL {\n const result = new URL(base.href);\n result.pathname = `${result.pathname.replace(/\\/+$/u, \"\")}${path}`;\n result.search = \"\";\n result.hash = \"\";\n return result;\n}\n\nfunction resolveUrl(value: string | URL, label: string): URL {\n if (value instanceof URL) return new URL(value.href);\n try {\n return new URL(value, typeof location === \"undefined\" ? undefined : location.href);\n } catch (cause) {\n throw new TypeError(`${label} must be an absolute URL outside a browser`, { cause });\n }\n}\n\nfunction requireTransportSecurity(base: URL, socket: URL, allowInsecure: boolean): void {\n if (allowInsecure) return;\n if (base.protocol !== \"https:\" || socket.protocol !== \"wss:\") {\n throw new TypeError(\"editable artifact production transport requires HTTPS and WSS\");\n }\n}\n\nfunction defaultWebSocketFactory(url: string, protocol: string): EditableArtifactWebSocketLike {\n if (typeof WebSocket === \"undefined\") {\n throw new TypeError(\"WebSocket is unavailable; provide webSocketFactory\");\n }\n return new WebSocket(url, protocol) as unknown as EditableArtifactWebSocketLike;\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n signal.throwIfAborted();\n return new Promise<T>((resolve, reject) => {\n const abort = (): void => reject(signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"));\n signal.addEventListener(\"abort\", abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", abort);\n reject(error);\n },\n );\n });\n}\n\nfunction requireStableId(value: unknown, label: string): asserts value is string {\n if (typeof value !== \"string\" || !STABLE_ID.test(value)) {\n throw new TypeError(`${label} must be 32 lowercase nonzero hex characters`);\n }\n}\n\nfunction requireReplicaId(value: unknown): asserts value is string {\n if (typeof value !== \"string\" || !REPLICA_ID.test(value)) {\n throw new TypeError(\"replicaId must be 16 lowercase nonzero hex characters\");\n }\n}\n\nfunction requireSha256(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !SHA256.test(value)) throw new TypeError(`${label} is invalid`);\n return value;\n}\n\nfunction boundedString(value: unknown, label: string, maximum: number): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.length > maximum ||\n value.trim() !== value\n ) {\n throw new TypeError(`${label} is invalid`);\n }\n return value;\n}\n\nfunction safeSequence(value: unknown, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0)\n throw new TypeError(`${label} is invalid`);\n return value as number;\n}\n\nfunction positiveU16(value: unknown, label: string): number {\n const number = positiveBounded(value, 0xffff, label);\n return number;\n}\n\nfunction exactVersion(value: unknown, expected: number, label: string): number {\n const actual = positiveU16(value, label);\n if (actual !== expected) {\n throw new TypeError(`${label} ${actual} is incompatible with current version ${expected}`);\n }\n return actual;\n}\n\nfunction positiveBounded(value: unknown, maximum: number, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) <= 0 || (value as number) > maximum) {\n throw new TypeError(`${label} is invalid`);\n }\n return value as number;\n}\n\nfunction boundedCloseReason(value: string): string {\n return value.length <= 100 && /^[\\x20-\\x7e]*$/u.test(value) ? value : \"closed\";\n}\n\nfunction closeReason(value: string): EditableArtifactLiveClose[\"reason\"] {\n if (value === \"permission_changed\") return \"permission_changed\";\n if (value === \"ticket_expired\" || value === \"ticket_replayed\") return \"ticket_expired\";\n return value === \"closed\" ? \"closed\" : \"transport_error\";\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nconst RESYNC_CLOSE_REASONS = new Set([\n \"retention_gap\",\n \"durable_gap\",\n \"invalid_ack\",\n \"slow_client\",\n \"oversized_frame\",\n]);\n","import {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n editableArtifactStableId,\n encodeSpreadsheetArtifactCommandBatch,\n spreadsheetSheetId,\n type SpreadsheetArtifactCommandBatch,\n type SpreadsheetSheetPrecondition,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n encodeDocumentArtifactCommandBatch,\n type DocumentArtifactCommandBatch,\n type DocumentArtifactParagraphStyle,\n type DocumentArtifactStoryTarget,\n type DocumentArtifactTextRun,\n} from \"@opengeni/contracts/document-artifact-commands\";\nimport {\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n encodePresentationArtifactCommandBatch,\n type PresentationArtifactCommandBatch,\n type PresentationArtifactFill,\n} from \"@opengeni/contracts/presentation-artifact-commands\";\nimport {\n createEditableArtifactSyncController,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactQueueCommandsInput,\n type EditableArtifactSyncController,\n} from \"./controller\";\nimport { IndexedDbEditableArtifactStorage } from \"./storage\";\nimport type {\n EditableArtifactPendingTransaction,\n EditableArtifactModality,\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n EditableArtifactSyncListener,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n EditableSpreadsheetMetadataProjection,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetViewportProjection,\n EditableSpreadsheetViewportQuery,\n} from \"./types\";\n\nconst DEFAULT_VIEWPORT_MAX_CELLS = 262_144;\nconst DEFAULT_VIEWPORT_MAX_BYTES = 8 * 1024 * 1024;\nconst MAX_VIEWPORT_AREA = 1_048_576;\nconst UINT32_MAX = 0xffff_ffff;\n\nexport type CreateEditableArtifactSessionOptions = Omit<\n CreateEditableArtifactSyncControllerOptions,\n \"kernel\" | \"storage\"\n> &\n Readonly<{\n /** Dedicated Worker client; canonical artifact state never enters the UI thread. */\n worker: EditableArtifactWorkerKernel;\n /** Defaults to the browser IndexedDB WAL/verified-replica store. */\n storage?: CreateEditableArtifactSyncControllerOptions[\"storage\"];\n /** Close/dispose the Worker when this session closes. Defaults to true. */\n ownsWorker?: boolean;\n }>;\n\nexport type EditableSpreadsheetViewportListener = (\n projection: EditableSpreadsheetViewportProjection,\n) => void;\n\nexport type EditableSpreadsheetViewportSubscriptionOptions = Readonly<{\n onError?: (error: Error) => void;\n}>;\n\nexport type EditableSpreadsheetMetadataListener = (\n projection: EditableSpreadsheetMetadataProjection,\n) => void;\n\nexport type ApplySpreadsheetCommandsOptions = Readonly<{\n selectiveUndoTargets?: readonly string[];\n clientTransactionId?: string;\n}>;\n\nexport type ApplySerializedArtifactCommandsOptions = Readonly<{\n clientTransactionId?: string;\n}>;\n\nexport type CreateSpreadsheetSheetInput = Readonly<{\n name: string;\n after?: SpreadsheetSheetPrecondition | null;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n sheetId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreateSpreadsheetSheetResult = Readonly<{\n sheetId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\nexport type CreateDocumentParagraphInput = Readonly<{\n target?: DocumentArtifactStoryTarget;\n runs?: readonly DocumentArtifactTextRun[];\n style?: DocumentArtifactParagraphStyle;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n paragraphId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreateDocumentParagraphResult = Readonly<{\n paragraphId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\nexport type CreatePresentationSlideInput = Readonly<{\n index: number;\n title?: string;\n layoutId?: string | null;\n background?: PresentationArtifactFill;\n /** Optional stable id for a host retry; normally allocated by the SDK. */\n slideId?: string;\n clientTransactionId?: string;\n}>;\n\nexport type CreatePresentationSlideResult = Readonly<{\n slideId: string;\n pending: EditableArtifactPendingTransaction;\n}>;\n\n/**\n * Public browser editing session. It owns sync, WAL recovery, live replay, and\n * one Worker-resident speculative kernel. The main thread sees only bounded\n * immutable projections and authored command receipts.\n */\nexport interface EditableArtifactSession {\n readonly artifactId: string;\n readonly modality: EditableArtifactModality;\n start(): void;\n whenReady(): Promise<void>;\n close(): Promise<void>;\n getView(): EditableArtifactSyncView;\n subscribe(listener: EditableArtifactSyncListener): () => void;\n queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction>;\n /** Pure OGASC encoding followed by the ordinary Worker/WAL authoring path. */\n applySpreadsheetCommands(\n batch: SpreadsheetArtifactCommandBatch,\n options?: ApplySpreadsheetCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n applyDocumentCommands(\n batch: DocumentArtifactCommandBatch,\n options?: ApplySerializedArtifactCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n applyPresentationCommands(\n batch: PresentationArtifactCommandBatch,\n options?: ApplySerializedArtifactCommandsOptions,\n ): Promise<EditableArtifactPendingTransaction>;\n /** Allocates a collision-resistant offline sheet id and submits one OGASC create. */\n createSpreadsheetSheet(input: CreateSpreadsheetSheetInput): Promise<CreateSpreadsheetSheetResult>;\n /** Allocates a collision-resistant id in the document namespace and appends one paragraph. */\n createDocumentParagraph(\n input?: CreateDocumentParagraphInput,\n ): Promise<CreateDocumentParagraphResult>;\n /** Allocates a collision-resistant stable id and inserts one slide. */\n createPresentationSlide(\n input: CreatePresentationSlideInput,\n ): Promise<CreatePresentationSlideResult>;\n querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): Promise<EditableSpreadsheetViewportProjection>;\n subscribeSpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n listener: EditableSpreadsheetViewportListener,\n options?: EditableSpreadsheetViewportSubscriptionOptions,\n ): () => void;\n querySpreadsheetMetadata(\n query?: EditableSpreadsheetMetadataQuery,\n ): Promise<EditableSpreadsheetMetadataProjection>;\n subscribeSpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery,\n listener: EditableSpreadsheetMetadataListener,\n options?: EditableSpreadsheetViewportSubscriptionOptions,\n ): () => void;\n queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection>;\n queryPresentation(query: EditablePresentationQuery): Promise<EditablePresentationProjection>;\n queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection>;\n queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection>;\n}\n\n/** Creates and starts one independently durable browser editing session. */\nexport function createEditableArtifactSession(\n options: CreateEditableArtifactSessionOptions,\n): EditableArtifactSession {\n const storage = options.storage ?? new IndexedDbEditableArtifactStorage();\n const controller = createEditableArtifactSyncController({\n ...options,\n storage,\n kernel: options.worker,\n });\n const session = new EditableArtifactSessionImpl(\n controller,\n options.worker,\n options.ownsWorker ?? true,\n );\n session.start();\n return session;\n}\n\ntype ProjectionChannel = {\n readonly query: EditableSpreadsheetViewportQuery;\n readonly listeners: Map<\n EditableSpreadsheetViewportListener,\n EditableSpreadsheetViewportSubscriptionOptions\n >;\n generation: number;\n running: boolean;\n requested: boolean;\n last: EditableSpreadsheetViewportProjection | null;\n};\n\ntype MetadataChannel = {\n readonly query: Required<EditableSpreadsheetMetadataQuery>;\n readonly listeners: Map<\n EditableSpreadsheetMetadataListener,\n EditableSpreadsheetViewportSubscriptionOptions\n >;\n generation: number;\n running: boolean;\n requested: boolean;\n last: EditableSpreadsheetMetadataProjection | null;\n};\n\nclass EditableArtifactSessionImpl implements EditableArtifactSession {\n readonly artifactId: string;\n readonly modality: EditableArtifactModality;\n\n private readonly channels = new Map<string, ProjectionChannel>();\n private readonly metadataChannels = new Map<string, MetadataChannel>();\n private releaseController: (() => void) | null = null;\n private closed = false;\n private lastProjectionInvalidator = \"\";\n\n constructor(\n private readonly controller: EditableArtifactSyncController,\n private readonly worker: EditableArtifactWorkerKernel,\n private readonly ownsWorker: boolean,\n ) {\n this.artifactId = controller.artifactId;\n this.modality = controller.modality;\n }\n\n start(): void {\n this.requireOpen();\n if (!this.releaseController) {\n this.releaseController = this.controller.subscribe((view) => {\n const invalidator = projectionInvalidator(view);\n if (invalidator !== this.lastProjectionInvalidator) {\n this.lastProjectionInvalidator = invalidator;\n for (const channel of this.channels.values()) this.requestChannel(channel);\n for (const channel of this.metadataChannels.values())\n this.requestMetadataChannel(channel);\n }\n });\n }\n this.controller.start();\n }\n\n async whenReady(): Promise<void> {\n this.requireOpen();\n this.start();\n await this.controller.whenLive();\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.releaseController?.();\n this.releaseController = null;\n this.channels.clear();\n this.metadataChannels.clear();\n await this.controller.close();\n if (this.ownsWorker) {\n const candidate = this.worker as EditableArtifactWorkerKernel & {\n dispose?: () => Promise<void>;\n };\n await candidate.dispose?.();\n }\n }\n\n getView(): EditableArtifactSyncView {\n return this.controller.getView();\n }\n\n subscribe(listener: EditableArtifactSyncListener): () => void {\n this.requireOpen();\n return this.controller.subscribe(listener);\n }\n\n async queueCommands(\n input: EditableArtifactQueueCommandsInput,\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n return await this.controller.queueCommands(input);\n }\n\n async applySpreadsheetCommands(\n batch: SpreadsheetArtifactCommandBatch,\n options: ApplySpreadsheetCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const commandBytes = encodeSpreadsheetArtifactCommandBatch(batch);\n return await this.queueCommands({\n commandBytes,\n ...(options.selectiveUndoTargets === undefined\n ? {}\n : { selectiveUndoTargets: options.selectiveUndoTargets }),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async applyDocumentCommands(\n batch: DocumentArtifactCommandBatch,\n options: ApplySerializedArtifactCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"document\");\n return await this.queueCommands({\n commandBytes: encodeDocumentArtifactCommandBatch(batch),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async applyPresentationCommands(\n batch: PresentationArtifactCommandBatch,\n options: ApplySerializedArtifactCommandsOptions = {},\n ): Promise<EditableArtifactPendingTransaction> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n return await this.queueCommands({\n commandBytes: encodePresentationArtifactCommandBatch(batch),\n ...(options.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: options.clientTransactionId }),\n });\n }\n\n async createSpreadsheetSheet(\n input: CreateSpreadsheetSheetInput,\n ): Promise<CreateSpreadsheetSheetResult> {\n this.requireOpen();\n const sheetId = spreadsheetSheetId(input.sheetId ?? randomStableId());\n const pending = await this.applySpreadsheetCommands(\n {\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"sheet.create\",\n sheetId,\n name: input.name,\n after: input.after ?? null,\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ sheetId, pending });\n }\n\n async createDocumentParagraph(\n input: CreateDocumentParagraphInput = {},\n ): Promise<CreateDocumentParagraphResult> {\n this.requireOpen();\n this.requireModality(\"document\");\n const summary = await this.queryDocument({ kind: \"summary\" });\n const facts = summary.items[0];\n if (\n summary.items.length !== 1 ||\n facts?.kind !== \"summary\" ||\n summary.nextCursor !== null ||\n summary.truncated\n ) {\n throw new Error(\"Document summary projection is malformed\");\n }\n const paragraphId = input.paragraphId ?? randomDocumentId(\"p\", facts.idNamespace);\n const pending = await this.applyDocumentCommands(\n {\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"paragraph.add\",\n target: input.target ?? { kind: \"body\" },\n id: paragraphId,\n runs: input.runs ?? [],\n style: input.style ?? {},\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ paragraphId, pending });\n }\n\n async createPresentationSlide(\n input: CreatePresentationSlideInput,\n ): Promise<CreatePresentationSlideResult> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n const slideId = editableArtifactStableId(input.slideId ?? randomStableId());\n const pending = await this.applyPresentationCommands(\n {\n version: PRESENTATION_ARTIFACT_COMMAND_VERSION,\n commands: [\n {\n kind: \"slide.create\",\n id: slideId,\n index: input.index,\n title: input.title ?? \"\",\n layoutId: input.layoutId ?? null,\n background: input.background ?? { kind: \"solid\", color: 0xffffffff },\n },\n ],\n },\n input.clientTransactionId === undefined\n ? {}\n : { clientTransactionId: input.clientTransactionId },\n );\n return Object.freeze({ slideId, pending });\n }\n\n async querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): Promise<EditableSpreadsheetViewportProjection> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeViewportQuery(query);\n await this.whenReady();\n this.requireOpen();\n return await this.worker.querySpreadsheetViewport(normalized);\n }\n\n subscribeSpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n listener: EditableSpreadsheetViewportListener,\n options: EditableSpreadsheetViewportSubscriptionOptions = {},\n ): () => void {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeViewportQuery(query);\n const key = viewportQueryKey(normalized);\n let channel = this.channels.get(key);\n if (!channel) {\n channel = {\n query: normalized,\n listeners: new Map(),\n generation: 0,\n running: false,\n requested: false,\n last: null,\n };\n this.channels.set(key, channel);\n }\n channel.listeners.set(listener, options);\n if (channel.last) listener(channel.last);\n else this.requestChannel(channel);\n return () => {\n const current = this.channels.get(key);\n if (!current) return;\n current.listeners.delete(listener);\n if (current.listeners.size === 0) {\n current.generation += 1;\n this.channels.delete(key);\n }\n };\n }\n\n async querySpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery = {},\n ): Promise<EditableSpreadsheetMetadataProjection> {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeMetadataQuery(query);\n await this.whenReady();\n this.requireOpen();\n return await this.worker.querySpreadsheetMetadata(normalized);\n }\n\n subscribeSpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery,\n listener: EditableSpreadsheetMetadataListener,\n options: EditableSpreadsheetViewportSubscriptionOptions = {},\n ): () => void {\n this.requireOpen();\n this.requireModality(\"spreadsheet\");\n const normalized = normalizeMetadataQuery(query);\n const key = `${normalized.maxSheets}:${normalized.maxBytes}`;\n let channel = this.metadataChannels.get(key);\n if (!channel) {\n channel = {\n query: normalized,\n listeners: new Map(),\n generation: 0,\n running: false,\n requested: false,\n last: null,\n };\n this.metadataChannels.set(key, channel);\n }\n channel.listeners.set(listener, options);\n if (channel.last) listener(channel.last);\n else this.requestMetadataChannel(channel);\n return () => {\n const current = this.metadataChannels.get(key);\n if (!current) return;\n current.listeners.delete(listener);\n if (current.listeners.size === 0) {\n current.generation += 1;\n this.metadataChannels.delete(key);\n }\n };\n }\n\n async queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection> {\n this.requireOpen();\n this.requireModality(\"document\");\n await this.whenReady();\n this.requireOpen();\n return await this.worker.queryDocument(query);\n }\n\n async queryPresentation(\n query: EditablePresentationQuery,\n ): Promise<EditablePresentationProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n return await this.worker.queryPresentation(query);\n }\n\n async queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n const response = await this.worker.queryPresentation(query);\n if (\n response.kind !== \"slide-catalog\" ||\n response.startSlide !== query.startSlide ||\n response.slides.length > query.maxSlides ||\n response.projectedTextBytes > query.maxTextBytes\n ) {\n throw new TypeError(\"presentation slide catalog response is malformed\");\n }\n return response;\n }\n\n async queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection> {\n this.requireOpen();\n this.requireModality(\"presentation\");\n await this.whenReady();\n this.requireOpen();\n const response = await this.worker.queryPresentation(query);\n if (\n response.kind !== \"editor-slide\" ||\n response.slide.id !== query.slideId ||\n response.nodes.length > query.maxNodes ||\n response.projectedTextBytes > query.maxTextBytes\n ) {\n throw new TypeError(\"presentation editor slide response is malformed\");\n }\n return response;\n }\n\n private requestChannel(channel: ProjectionChannel): void {\n if (this.closed || channel.listeners.size === 0) return;\n channel.requested = true;\n if (channel.running) return;\n channel.running = true;\n void this.runChannel(channel);\n }\n\n private async runChannel(channel: ProjectionChannel): Promise<void> {\n try {\n while (!this.closed && channel.listeners.size > 0 && channel.requested) {\n channel.requested = false;\n const generation = ++channel.generation;\n try {\n const projection = await this.querySpreadsheetViewport(channel.query);\n if (this.closed || generation !== channel.generation || channel.listeners.size === 0) {\n continue;\n }\n channel.last = projection;\n for (const listener of channel.listeners.keys()) listener(projection);\n } catch (error) {\n if (this.closed || generation !== channel.generation) continue;\n const failure = asError(error);\n for (const options of channel.listeners.values()) options.onError?.(failure);\n }\n }\n } finally {\n channel.running = false;\n if (channel.requested && !this.closed && channel.listeners.size > 0) {\n this.requestChannel(channel);\n }\n }\n }\n\n private requestMetadataChannel(channel: MetadataChannel): void {\n if (this.closed || channel.listeners.size === 0) return;\n channel.requested = true;\n if (channel.running) return;\n channel.running = true;\n void this.runMetadataChannel(channel);\n }\n\n private async runMetadataChannel(channel: MetadataChannel): Promise<void> {\n try {\n while (!this.closed && channel.listeners.size > 0 && channel.requested) {\n channel.requested = false;\n const generation = ++channel.generation;\n try {\n const projection = await this.querySpreadsheetMetadata(channel.query);\n if (this.closed || generation !== channel.generation || channel.listeners.size === 0) {\n continue;\n }\n channel.last = projection;\n for (const listener of channel.listeners.keys()) listener(projection);\n } catch (error) {\n if (this.closed || generation !== channel.generation) continue;\n const failure = asError(error);\n for (const options of channel.listeners.values()) options.onError?.(failure);\n }\n }\n } finally {\n channel.running = false;\n if (channel.requested && !this.closed && channel.listeners.size > 0) {\n this.requestMetadataChannel(channel);\n }\n }\n }\n\n private requireOpen(): void {\n if (this.closed) throw new Error(\"editable artifact session is closed\");\n }\n\n private requireModality(expected: EditableArtifactModality): void {\n if (this.modality !== expected) {\n throw new TypeError(`${expected} operation requires a ${expected} artifact session`);\n }\n }\n}\n\nfunction normalizeViewportQuery(\n input: EditableSpreadsheetViewportQuery,\n): EditableSpreadsheetViewportQuery {\n const sheetId = stableId(input.sheetId, \"sheetId\");\n const startRow = uint32(input.startRow, \"startRow\");\n const startColumn = uint32(input.startColumn, \"startColumn\");\n const rowCount = positiveUint32(input.rowCount, \"rowCount\");\n const columnCount = positiveUint32(input.columnCount, \"columnCount\");\n if (startRow + rowCount - 1 > UINT32_MAX || startColumn + columnCount - 1 > UINT32_MAX) {\n throw new RangeError(\"spreadsheet viewport exceeds the uint32 coordinate space\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > MAX_VIEWPORT_AREA) {\n throw new RangeError(`spreadsheet viewport area exceeds ${MAX_VIEWPORT_AREA} cells`);\n }\n const maxCells = positiveUint32(input.maxCells ?? DEFAULT_VIEWPORT_MAX_CELLS, \"maxCells\");\n const maxBytes = positiveUint32(input.maxBytes ?? DEFAULT_VIEWPORT_MAX_BYTES, \"maxBytes\");\n if (maxCells > DEFAULT_VIEWPORT_MAX_CELLS) {\n throw new RangeError(`maxCells exceeds ${DEFAULT_VIEWPORT_MAX_CELLS}`);\n }\n if (maxBytes > DEFAULT_VIEWPORT_MAX_BYTES) {\n throw new RangeError(`maxBytes exceeds ${DEFAULT_VIEWPORT_MAX_BYTES}`);\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction viewportQueryKey(query: EditableSpreadsheetViewportQuery): string {\n return `${query.sheetId}:${query.startRow}:${query.startColumn}:${query.rowCount}:${query.columnCount}:${query.maxCells}:${query.maxBytes}`;\n}\n\nfunction normalizeMetadataQuery(\n input: EditableSpreadsheetMetadataQuery,\n): Required<EditableSpreadsheetMetadataQuery> {\n const maxSheets = positiveUint32(input.maxSheets ?? 4_096, \"maxSheets\");\n const maxBytes = positiveUint32(input.maxBytes ?? DEFAULT_VIEWPORT_MAX_BYTES, \"maxBytes\");\n if (maxSheets > 262_144) throw new RangeError(\"maxSheets exceeds 262144\");\n if (maxBytes > DEFAULT_VIEWPORT_MAX_BYTES) {\n throw new RangeError(`maxBytes exceeds ${DEFAULT_VIEWPORT_MAX_BYTES}`);\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction projectionInvalidator(view: EditableArtifactSyncView): string {\n return `${view.state}:${view.cursor}:${view.headSequence}:${view.pendingTransactions}:${view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\")}`;\n}\n\nfunction stableId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !/^[0-9a-f]{32}$/u.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);\n }\n return value;\n}\n\nfunction uint32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction positiveUint32(value: unknown, label: string): number {\n const output = uint32(value, label);\n if (output === 0) throw new TypeError(`${label} must be positive`);\n return output;\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(\"editable artifact projection failed\");\n}\n\nfunction randomStableId(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n // Sheet object ids require nonzero allocator namespace and counter halves.\n if (bytes.subarray(0, 8).every((value) => value === 0)) bytes[0] = 1;\n if (bytes.subarray(8).every((value) => value === 0)) bytes[8] = 1;\n let value = 0n;\n for (let index = 0; index < bytes.length; index += 1) {\n value |= BigInt(bytes[index]!) << BigInt(index * 8);\n }\n return value.toString(16).padStart(32, \"0\");\n}\n\nfunction randomDocumentId(prefix: \"p\", namespace: bigint): string {\n if (namespace < 0n || namespace > 0xffff_ffff_ffff_ffffn) {\n throw new Error(\"Document id namespace is malformed\");\n }\n const maximumCounter = BigInt(Number.MAX_SAFE_INTEGER) - 1n;\n for (;;) {\n const bytes = crypto.getRandomValues(new Uint8Array(7));\n bytes[0] = bytes[0]! & 0x1f;\n let counter = 0n;\n for (const byte of bytes) counter = (counter << 8n) | BigInt(byte);\n if (counter > 0n && counter <= maximumCounter) {\n return `${prefix}/${namespace.toString(16).padStart(16, \"0\")}${counter\n .toString(16)\n .padStart(16, \"0\")}`;\n }\n }\n}\n","import {\n decodeSpreadsheetMetadataKernelProjection,\n decodeSpreadsheetViewportKernelProjection,\n EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n encodeSpreadsheetMetadataKernelQuery,\n encodeSpreadsheetViewportKernelQuery,\n spreadsheetSheetId,\n SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS,\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n type SpreadsheetArtifactViewportQuery,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport {\n decodeDocumentArtifactQueryResponse,\n encodeDocumentArtifactQuery,\n} from \"@opengeni/contracts/document-artifact-query\";\nimport {\n decodePresentationArtifactQueryResponse,\n encodePresentationArtifactQuery,\n} from \"@opengeni/contracts/presentation-artifact-query\";\nimport type {\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditableArtifactModality,\n EditableArtifactPendingTransaction,\n EditableArtifactWorkerKernel,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetViewportQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n} from \"../types\";\nimport {\n ArtifactWorkerRpcKind,\n DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,\n decodeArtifactWorkerRpcMessage,\n encodeArtifactWorkerRpcMessage,\n ownedTransferBuffer,\n transferListForArtifactWorkerRpcMessage,\n type ArtifactWorkerRpcLimits,\n type ArtifactWorkerRpcMessage,\n} from \"./rpc-protocol\";\nimport {\n decodeErrorPayload,\n decodePendingListMetadata,\n decodeProjectionResponse,\n decodeStateResponse,\n encodeAuthorPendingMetadata,\n encodeCommittedMetadata,\n encodeInitialize,\n encodePendingListMetadata,\n encodeReconcileMetadata,\n encodeSnapshotMetadata,\n type ArtifactWorkerInitializeInput,\n} from \"./wire-codec\";\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 20_000;\nconst DEFAULT_INITIALIZATION_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_SNAPSHOT_BYTES = EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES;\nconst DEFAULT_MAX_COMMAND_BYTES = EDITABLE_ARTIFACT_COMMAND_MAX_BYTES;\nconst DEFAULT_MAX_INTENT_BYTES = EDITABLE_ARTIFACT_INTENT_MAX_BYTES;\nconst DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_QUERY_BYTES = 256;\nconst DEFAULT_MAX_QUERY_RESPONSE_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_PENDING_TRANSACTIONS = 1_024;\nconst DEFAULT_MAX_PENDING_AGGREGATE_BYTES = 64 * 1024 * 1024;\nconst MAX_CLIENT_QUEUED_REQUESTS = 64;\nconst MAX_VIEWPORT_AREA = 1_048_576;\nconst UINT32_MAX = 0xffff_ffff;\n\nexport type ArtifactWorkerClientMessageEvent = { data: unknown };\nexport type ArtifactWorkerClientErrorEvent = { error?: unknown; message?: string };\n\nexport type ArtifactWorkerClientEndpoint = {\n postMessage: (message: ArtifactWorkerRpcMessage, transfer: Transferable[]) => void;\n addEventListener: {\n (type: \"message\", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;\n (\n type: \"error\" | \"messageerror\",\n listener: (event: ArtifactWorkerClientErrorEvent) => void,\n ): void;\n };\n removeEventListener: {\n (type: \"message\", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;\n (\n type: \"error\" | \"messageerror\",\n listener: (event: ArtifactWorkerClientErrorEvent) => void,\n ): void;\n };\n terminate: () => void;\n};\n\nexport type CreateBrowserEditableArtifactWorkerKernelOptions = {\n modality: EditableArtifactModality;\n /** Exact package/runtime identity; checked before the Worker accepts state. */\n kernelVersion: string;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandVersion: number;\n /**\n * Prebuilt module-Worker entry. No blob/eval worker is ever synthesized.\n * Bundler example: import `workerUrl` from\n * `@opengeni/sdk/editable-artifacts/worker?worker&url`, then pass it here.\n */\n workerUrl: string | URL;\n /** wasm-bindgen ESM glue built from the pinned artifact kernel. */\n wasmGlueUrl: string | URL;\n /** Exact `.wasm` asset paired with the glue. */\n wasmBinaryUrl: string | URL;\n /**\n * Origin hosting the embedding application. Browser runtimes default to\n * `location.origin`; non-browser/custom Worker hosts must supply it.\n */\n applicationOrigin?: string | URL;\n /** Additional explicitly trusted asset origins; same-origin is the default. */\n allowedAssetOrigins?: readonly string[];\n /** Only for local development. Production assets must use HTTPS. */\n allowInsecureDevelopmentAssets?: boolean;\n requestTimeoutMs?: number;\n initializationTimeoutMs?: number;\n maximumSnapshotBytes?: number;\n maximumCommandBytes?: number;\n maximumIntentBytes?: number;\n maximumCommittedTransactionBytes?: number;\n maximumQueryBytes?: number;\n maximumQueryResponseBytes?: number;\n maximumPendingTransactions?: number;\n maximumPendingAggregateBytes?: number;\n rpcLimits?: Readonly<ArtifactWorkerRpcLimits>;\n workerFactory?: (\n url: URL,\n options: { type: \"module\"; name: string },\n ) => ArtifactWorkerClientEndpoint;\n};\n\nexport type BrowserEditableArtifactWorkerKernel = EditableArtifactWorkerKernel & {\n queryPresentationSlideCatalog: (\n query: EditablePresentationSlideCatalogQuery,\n ) => Promise<EditablePresentationSlideCatalogProjection>;\n queryPresentationEditorSlide: (\n query: EditablePresentationEditorSlideQuery,\n ) => Promise<EditablePresentationEditorSlideProjection>;\n /** Requests bounded graceful cleanup, then terminates the Worker. Idempotent. */\n dispose: () => Promise<void>;\n /** Retires a failed generation; the next method call lazily starts a fresh Worker. */\n restart: () => void;\n};\n\nexport class ArtifactWorkerClientError extends Error {\n readonly code: string;\n readonly retryable: boolean;\n\n constructor(\n code: string,\n message: string,\n options: { retryable?: boolean; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = \"ArtifactWorkerClientError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n }\n}\n\ntype RpcResult = {\n metadata: Uint8Array;\n segments: Uint8Array[];\n};\n\ntype PendingRequest = {\n resolve: (result: RpcResult) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype WorkerGeneration = {\n endpoint: ArtifactWorkerClientEndpoint;\n generation: number;\n nextRequestId: number;\n pending: Map<number, PendingRequest>;\n ready: Promise<void>;\n initialized: boolean;\n onMessage: (event: ArtifactWorkerClientMessageEvent) => void;\n onError: (event: ArtifactWorkerClientErrorEvent) => void;\n};\n\nexport function createBrowserEditableArtifactWorkerKernel(\n options: CreateBrowserEditableArtifactWorkerKernelOptions,\n): BrowserEditableArtifactWorkerKernel {\n return new BrowserArtifactWorkerKernelClient(options);\n}\n\nclass BrowserArtifactWorkerKernelClient implements BrowserEditableArtifactWorkerKernel {\n private readonly workerUrl: URL;\n private readonly initialization: ArtifactWorkerInitializeInput;\n private readonly requestTimeoutMs: number;\n private readonly initializationTimeoutMs: number;\n private readonly maximumPendingAggregateBytes: number;\n private readonly maximumQueuedTransferBytes: number;\n private readonly rpcLimits: Readonly<ArtifactWorkerRpcLimits>;\n private readonly workerFactory: NonNullable<\n CreateBrowserEditableArtifactWorkerKernelOptions[\"workerFactory\"]\n >;\n private generationCounter = 0;\n private admittedRequests = 0;\n private admittedTransferBytes = 0;\n private active: WorkerGeneration | null = null;\n private disposed = false;\n\n constructor(options: CreateBrowserEditableArtifactWorkerKernelOptions) {\n this.workerUrl = canonicalUrl(options.workerUrl, \"workerUrl\");\n const wasmGlueUrl = canonicalUrl(options.wasmGlueUrl, \"wasmGlueUrl\");\n const wasmBinaryUrl = canonicalUrl(options.wasmBinaryUrl, \"wasmBinaryUrl\");\n validateAssetPolicy(\n [this.workerUrl, wasmGlueUrl, wasmBinaryUrl],\n resolveApplicationOrigin(options.applicationOrigin),\n options.allowedAssetOrigins ?? [],\n options.allowInsecureDevelopmentAssets ?? false,\n );\n const modality = requireModality(options.modality);\n const modalityQueryBytes =\n modality === \"document\" ? 256 : modality === \"presentation\" ? 96 : 68;\n this.initialization = {\n modality,\n kernelVersion: boundedVersion(options.kernelVersion, \"kernelVersion\"),\n protocolVersion: positiveVersion(options.protocolVersion, \"protocolVersion\"),\n modelSchemaVersion: positiveVersion(options.modelSchemaVersion, \"modelSchemaVersion\"),\n commandVersion: positiveVersion(options.commandVersion, \"commandVersion\"),\n wasmGlueUrl: wasmGlueUrl.href,\n wasmBinaryUrl: wasmBinaryUrl.href,\n maximumSnapshotBytes: boundedMaximum(\n options.maximumSnapshotBytes ?? DEFAULT_MAX_SNAPSHOT_BYTES,\n DEFAULT_MAX_SNAPSHOT_BYTES,\n \"maximumSnapshotBytes\",\n ),\n maximumCommandBytes: boundedMaximum(\n options.maximumCommandBytes ?? DEFAULT_MAX_COMMAND_BYTES,\n DEFAULT_MAX_COMMAND_BYTES,\n \"maximumCommandBytes\",\n ),\n maximumIntentBytes: boundedMaximum(\n options.maximumIntentBytes ?? DEFAULT_MAX_INTENT_BYTES,\n DEFAULT_MAX_INTENT_BYTES,\n \"maximumIntentBytes\",\n ),\n maximumCommittedTransactionBytes: boundedMaximum(\n options.maximumCommittedTransactionBytes ?? DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES,\n DEFAULT_MAX_COMMITTED_TRANSACTION_BYTES,\n \"maximumCommittedTransactionBytes\",\n ),\n maximumQueryBytes: boundedMaximum(\n options.maximumQueryBytes ?? modalityQueryBytes,\n DEFAULT_MAX_QUERY_BYTES,\n \"maximumQueryBytes\",\n ),\n maximumQueryResponseBytes: boundedMaximum(\n options.maximumQueryResponseBytes ?? DEFAULT_MAX_QUERY_RESPONSE_BYTES,\n DEFAULT_MAX_QUERY_RESPONSE_BYTES,\n \"maximumQueryResponseBytes\",\n ),\n maximumPendingTransactions: boundedMaximum(\n options.maximumPendingTransactions ?? DEFAULT_MAX_PENDING_TRANSACTIONS,\n DEFAULT_MAX_PENDING_TRANSACTIONS,\n \"maximumPendingTransactions\",\n ),\n };\n this.maximumPendingAggregateBytes = boundedMaximum(\n options.maximumPendingAggregateBytes ?? DEFAULT_MAX_PENDING_AGGREGATE_BYTES,\n DEFAULT_MAX_PENDING_AGGREGATE_BYTES,\n \"maximumPendingAggregateBytes\",\n );\n this.maximumQueuedTransferBytes = Math.max(\n this.initialization.maximumSnapshotBytes,\n this.initialization.maximumCommittedTransactionBytes + this.maximumPendingAggregateBytes,\n this.initialization.maximumCommandBytes,\n );\n this.requestTimeoutMs = positiveSafeInteger(\n options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,\n \"requestTimeoutMs\",\n );\n this.initializationTimeoutMs = positiveSafeInteger(\n options.initializationTimeoutMs ?? DEFAULT_INITIALIZATION_TIMEOUT_MS,\n \"initializationTimeoutMs\",\n );\n this.rpcLimits = normalizeClientRpcLimits(\n options.rpcLimits ?? DEFAULT_ARTIFACT_WORKER_RPC_LIMITS,\n );\n this.workerFactory = options.workerFactory ?? defaultWorkerFactory;\n }\n\n async reset(): Promise<void> {\n return await this.withAdmission(0, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.Reset);\n requireEmptyResult(result, \"reset\");\n });\n }\n\n async loadSnapshot(\n snapshot: Parameters<EditableArtifactWorkerKernel[\"loadSnapshot\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"loadSnapshot\"]> {\n const transferBytes = this.segmentByteLength(\n snapshot.bytes,\n this.initialization.maximumSnapshotBytes,\n \"snapshot\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n snapshot.bytes,\n this.initialization.maximumSnapshotBytes,\n \"snapshot\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.LoadSnapshot,\n encodeSnapshotMetadata(snapshot),\n [segment],\n );\n if (result.segments.length !== 0)\n throw clientError(\"invalid_response\", \"snapshot response has segments\");\n const decoded = decodeStateResponse(result.metadata);\n if (!decoded.digest)\n throw clientError(\"invalid_response\", \"snapshot response omitted its digest\");\n return { stateHash: decoded.stateHash, digest: decoded.digest };\n });\n }\n\n async applyRecovered(\n transaction: Parameters<EditableArtifactWorkerKernel[\"applyRecovered\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"applyRecovered\"]> {\n const transferBytes = this.segmentByteLength(\n transaction.committedTransactionBytes,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed operation\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n transaction.committedTransactionBytes,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed operation\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.ApplyRecovered,\n encodeCommittedMetadata(transaction),\n [segment],\n );\n if (result.segments.length !== 0)\n throw clientError(\"invalid_response\", \"apply response has segments\");\n const decoded = decodeStateResponse(result.metadata);\n if (decoded.digest)\n throw clientError(\"invalid_response\", \"apply response unexpectedly contains a digest\");\n return { stateHash: decoded.stateHash };\n });\n }\n\n async reconcileCommitted(\n transaction: Parameters<EditableArtifactWorkerKernel[\"reconcileCommitted\"]>[0],\n remainingPending: Parameters<EditableArtifactWorkerKernel[\"reconcileCommitted\"]>[1],\n ): ReturnType<EditableArtifactWorkerKernel[\"reconcileCommitted\"]> {\n const transferBytes = this.measurePendingTransfer(\n remainingPending,\n transaction.committedTransactionBytes,\n );\n return await this.withAdmission(transferBytes, async () => {\n const segments = this.pendingSegments(\n remainingPending,\n transaction.committedTransactionBytes,\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.ReconcileCommitted,\n encodeReconcileMetadata(transaction, remainingPending),\n segments,\n );\n if (result.segments.length !== 0) {\n throw clientError(\"invalid_response\", \"reconcile response has segments\");\n }\n const decoded = decodeProjectionResponse(result.metadata);\n if (!decoded.stateHash)\n throw clientError(\"invalid_response\", \"reconcile response omitted stateHash\");\n return { stateHash: decoded.stateHash, blockedPending: decoded.blockedPending };\n });\n }\n\n async replacePending(\n transactions: Parameters<EditableArtifactWorkerKernel[\"replacePending\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"replacePending\"]> {\n const transferBytes = this.measurePendingTransfer(transactions);\n return await this.withAdmission(transferBytes, async () => {\n const segments = this.pendingSegments(transactions);\n const result = await this.request(\n ArtifactWorkerRpcKind.ReplacePending,\n encodePendingListMetadata(transactions),\n segments,\n );\n if (result.segments.length !== 0) {\n throw clientError(\"invalid_response\", \"pending response has segments\");\n }\n const decoded = decodeProjectionResponse(result.metadata);\n if (decoded.stateHash) {\n throw clientError(\"invalid_response\", \"pending response unexpectedly contains stateHash\");\n }\n return { blockedPending: decoded.blockedPending };\n });\n }\n\n async authorPending(\n input: Parameters<EditableArtifactWorkerKernel[\"authorPending\"]>[0],\n ): ReturnType<EditableArtifactWorkerKernel[\"authorPending\"]> {\n if (input.modality !== this.initialization.modality) {\n throw clientError(\"modality_mismatch\", \"pending modality does not match Worker\", false);\n }\n const transferBytes = this.segmentByteLength(\n input.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n return await this.withAdmission(transferBytes, async () => {\n const segment = this.ownedSegment(\n input.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const result = await this.request(\n ArtifactWorkerRpcKind.AuthorPending,\n encodeAuthorPendingMetadata(input),\n [segment],\n );\n const pending = decodePendingListMetadata(\n result.metadata,\n result.segments,\n this.initialization.maximumPendingTransactions,\n );\n if (pending.length !== 1)\n throw clientError(\"invalid_response\", \"author response count is invalid\");\n return pending[0]!;\n });\n }\n\n async querySpreadsheetViewport(\n query: EditableSpreadsheetViewportQuery,\n ): ReturnType<EditableArtifactWorkerKernel[\"querySpreadsheetViewport\"]> {\n if (this.initialization.modality !== \"spreadsheet\") {\n throw clientError(\n \"modality_mismatch\",\n \"spreadsheet query requires a spreadsheet Worker\",\n false,\n );\n }\n const normalized = normalizeViewportQuery(query);\n const queryBytes = encodeSpreadsheetViewportKernelQuery(normalized);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"spreadsheet viewport response is malformed\");\n }\n return decodeSpreadsheetViewportKernelProjection(result.segments[0]!, normalized);\n });\n }\n\n async querySpreadsheetMetadata(\n query: EditableSpreadsheetMetadataQuery = {},\n ): ReturnType<EditableArtifactWorkerKernel[\"querySpreadsheetMetadata\"]> {\n if (this.initialization.modality !== \"spreadsheet\") {\n throw clientError(\n \"modality_mismatch\",\n \"spreadsheet query requires a spreadsheet Worker\",\n false,\n );\n }\n const normalized = normalizeMetadataQuery(query);\n const queryBytes = encodeSpreadsheetMetadataKernelQuery(normalized);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"spreadsheet metadata response is malformed\");\n }\n return decodeSpreadsheetMetadataKernelProjection(result.segments[0]!, normalized);\n });\n }\n\n async queryDocument(query: EditableDocumentQuery): Promise<EditableDocumentProjection> {\n if (this.initialization.modality !== \"document\") {\n throw clientError(\"modality_mismatch\", \"document query requires a document Worker\", false);\n }\n const queryBytes = encodeDocumentArtifactQuery(query);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"document projection response is malformed\");\n }\n return decodeDocumentArtifactQueryResponse(result.segments[0]!);\n });\n }\n\n async queryPresentation(\n query: EditablePresentationQuery,\n ): Promise<EditablePresentationProjection> {\n if (this.initialization.modality !== \"presentation\") {\n throw clientError(\n \"modality_mismatch\",\n \"presentation query requires a presentation Worker\",\n false,\n );\n }\n const queryBytes = encodePresentationArtifactQuery(query);\n return await this.withAdmission(queryBytes.byteLength, async () => {\n const result = await this.request(ArtifactWorkerRpcKind.QuerySpreadsheet, undefined, [\n ownedTransferBuffer(queryBytes),\n ]);\n if (result.metadata.byteLength !== 0 || result.segments.length !== 1) {\n throw clientError(\"invalid_response\", \"presentation projection response is malformed\");\n }\n if (result.segments[0]!.byteLength > query.maxBytes) {\n throw clientError(\n \"invalid_response\",\n \"presentation projection exceeds its requested bound\",\n );\n }\n const response = decodePresentationArtifactQueryResponse(result.segments[0]!);\n assertPresentationProjectionMatchesQuery(query, response);\n return response;\n });\n }\n\n async queryPresentationSlideCatalog(\n query: EditablePresentationSlideCatalogQuery,\n ): Promise<EditablePresentationSlideCatalogProjection> {\n const response = await this.queryPresentation(query);\n if (response.kind !== \"slide-catalog\") {\n throw clientError(\"invalid_response\", \"presentation slide catalog response is malformed\");\n }\n return response;\n }\n\n async queryPresentationEditorSlide(\n query: EditablePresentationEditorSlideQuery,\n ): Promise<EditablePresentationEditorSlideProjection> {\n const response = await this.queryPresentation(query);\n if (response.kind !== \"editor-slide\") {\n throw clientError(\"invalid_response\", \"presentation editor slide response is malformed\");\n }\n return response;\n }\n\n restart(): void {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n this.retire(\n this.active,\n clientError(\"worker_restarted\", \"artifact Worker generation was retired\", true),\n );\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n const active = this.active;\n if (active?.initialized && this.active === active) {\n await this.requestOn(\n active,\n ArtifactWorkerRpcKind.Dispose,\n undefined,\n undefined,\n 1_000,\n ).catch(() => {});\n }\n this.retire(active, clientError(\"disposed\", \"artifact Worker client is disposed\"));\n }\n\n private async request(\n kind: ArtifactWorkerRpcKind,\n metadata?: Uint8Array,\n segments?: ArrayBuffer[],\n ): Promise<RpcResult> {\n const active = await this.ensureActive();\n return await this.requestOn(active, kind, metadata, segments, this.requestTimeoutMs);\n }\n\n private async ensureActive(): Promise<WorkerGeneration> {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n if (!this.active) this.spawn();\n const active = this.active!;\n await active.ready;\n if (this.active !== active) return await this.ensureActive();\n return active;\n }\n\n private spawn(): void {\n this.generationCounter += 1;\n if (this.generationCounter > 0xffffffff) {\n throw clientError(\"generation_exhausted\", \"artifact Worker generation space is exhausted\");\n }\n const endpoint = this.workerFactory(this.workerUrl, {\n type: \"module\",\n name: `opengeni-artifact-${this.generationCounter}`,\n });\n const active: WorkerGeneration = {\n endpoint,\n generation: this.generationCounter,\n nextRequestId: 1,\n pending: new Map(),\n ready: Promise.resolve(),\n initialized: false,\n onMessage: () => {},\n onError: () => {},\n };\n active.onMessage = (event) => this.receive(active, event);\n active.onError = (event) => {\n this.retire(\n active,\n clientError(\n \"worker_crashed\",\n event.message || \"artifact Worker crashed\",\n true,\n event.error,\n ),\n );\n };\n endpoint.addEventListener(\"message\", active.onMessage);\n endpoint.addEventListener(\"error\", active.onError);\n endpoint.addEventListener(\"messageerror\", active.onError);\n this.active = active;\n active.ready = this.requestOn(\n active,\n ArtifactWorkerRpcKind.Initialize,\n encodeInitialize(this.initialization),\n undefined,\n this.initializationTimeoutMs,\n )\n .then((result) => {\n requireEmptyResult(result, \"initialize\");\n active.initialized = true;\n })\n .catch((error: unknown) => {\n const failure =\n error instanceof Error\n ? error\n : clientError(\"initialization_failed\", \"artifact Worker initialization failed\", true);\n this.retire(active, failure);\n throw failure;\n });\n active.ready.catch(() => {});\n }\n\n private requestOn(\n active: WorkerGeneration,\n kind: ArtifactWorkerRpcKind,\n metadata: Uint8Array | undefined,\n segments: ArrayBuffer[] | undefined,\n timeoutMs: number,\n ): Promise<RpcResult> {\n if (this.active !== active) {\n return Promise.reject(\n clientError(\"stale_generation\", \"artifact Worker generation is retired\", true),\n );\n }\n const requestId = nextRequestId(active);\n const message = encodeArtifactWorkerRpcMessage({\n kind,\n generation: active.generation,\n requestId,\n ...(metadata ? { metadata } : {}),\n ...(segments ? { segments } : {}),\n limits: this.rpcLimits,\n });\n return new Promise<RpcResult>((resolve, reject) => {\n const timeout = setTimeout(() => {\n if (!active.pending.has(requestId)) return;\n this.sendCancel(active, requestId);\n this.retire(\n active,\n clientError(\"worker_timeout\", `artifact Worker request exceeded ${timeoutMs}ms`, true),\n );\n }, timeoutMs);\n active.pending.set(requestId, { resolve, reject, timeout });\n try {\n active.endpoint.postMessage(message, transferListForArtifactWorkerRpcMessage(message));\n } catch (error) {\n clearTimeout(timeout);\n active.pending.delete(requestId);\n const failure = clientError(\n \"post_failed\",\n \"failed to post artifact Worker request\",\n true,\n error,\n );\n reject(failure);\n this.retire(active, failure);\n }\n });\n }\n\n private receive(active: WorkerGeneration, event: ArtifactWorkerClientMessageEvent): void {\n if (this.active !== active) return;\n let frame;\n try {\n frame = decodeArtifactWorkerRpcMessage(event.data, this.rpcLimits);\n } catch (error) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker sent an invalid frame\", true, error),\n );\n return;\n }\n if (frame.generation !== active.generation) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker response generation is invalid\", true),\n );\n return;\n }\n if (\n frame.flags !== 0 ||\n (frame.kind !== ArtifactWorkerRpcKind.Response && frame.kind !== ArtifactWorkerRpcKind.Error)\n ) {\n this.retire(\n active,\n clientError(\"invalid_response\", \"artifact Worker sent an unexpected frame\", true),\n );\n return;\n }\n const pending = active.pending.get(frame.requestId);\n if (!pending) return;\n active.pending.delete(frame.requestId);\n clearTimeout(pending.timeout);\n if (frame.kind === ArtifactWorkerRpcKind.Error) {\n if (frame.segments.length !== 0) {\n pending.reject(clientError(\"invalid_response\", \"artifact Worker error has segments\", true));\n return;\n }\n try {\n const error = decodeErrorPayload(frame.metadata);\n pending.reject(\n new ArtifactWorkerClientError(error.code, error.message, { retryable: error.retryable }),\n );\n } catch (decodeError) {\n pending.reject(\n clientError(\"invalid_response\", \"artifact Worker error is malformed\", true, decodeError),\n );\n }\n return;\n }\n pending.resolve({ metadata: frame.metadata, segments: frame.segments });\n }\n\n private sendCancel(active: WorkerGeneration, requestId: number): void {\n if (this.active !== active) return;\n try {\n const message = encodeArtifactWorkerRpcMessage({\n kind: ArtifactWorkerRpcKind.Cancel,\n generation: active.generation,\n requestId,\n limits: this.rpcLimits,\n });\n active.endpoint.postMessage(message, transferListForArtifactWorkerRpcMessage(message));\n } catch {\n // The watchdog immediately terminates the generation; cancel is best-effort.\n }\n }\n\n private retire(active: WorkerGeneration | null, error: Error): void {\n if (!active || this.active !== active) return;\n this.active = null;\n active.endpoint.removeEventListener(\"message\", active.onMessage);\n active.endpoint.removeEventListener(\"error\", active.onError);\n active.endpoint.removeEventListener(\"messageerror\", active.onError);\n active.endpoint.terminate();\n for (const request of active.pending.values()) {\n clearTimeout(request.timeout);\n request.reject(error);\n }\n active.pending.clear();\n }\n\n private pendingSegments(\n transactions: readonly EditableArtifactPendingTransaction[],\n committedTransaction?: Uint8Array,\n ): ArrayBuffer[] {\n const segments: ArrayBuffer[] = [];\n if (committedTransaction) {\n const segment = this.ownedSegment(\n committedTransaction,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed transaction\",\n );\n segments.push(segment);\n }\n for (const transaction of transactions) {\n const command = this.ownedSegment(\n transaction.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const intent = this.ownedSegment(\n transaction.intentBytes,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n \"pending intent\",\n );\n segments.push(command, intent);\n }\n return segments;\n }\n\n private measurePendingTransfer(\n transactions: readonly EditableArtifactPendingTransaction[],\n committedTransaction?: Uint8Array,\n ): number {\n if (\n !Array.isArray(transactions) ||\n transactions.length > this.initialization.maximumPendingTransactions\n ) {\n throw clientError(\"limit_exceeded\", \"pending transaction count exceeds its limit\");\n }\n let pendingBytes = 0;\n for (const transaction of transactions) {\n const commandBytes = this.segmentByteLength(\n transaction.commandBytes,\n this.initialization.maximumCommandBytes,\n \"pending command\",\n );\n const intentBytes = this.segmentByteLength(\n transaction.intentBytes,\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n \"pending intent\",\n );\n pendingBytes += commandBytes + intentBytes;\n if (!Number.isSafeInteger(pendingBytes) || pendingBytes > this.maximumPendingAggregateBytes) {\n throw clientError(\"limit_exceeded\", \"pending transfer exceeds its aggregate byte limit\");\n }\n }\n const committedBytes =\n committedTransaction === undefined\n ? 0\n : this.segmentByteLength(\n committedTransaction,\n this.initialization.maximumCommittedTransactionBytes,\n \"committed transaction\",\n );\n return pendingBytes + committedBytes;\n }\n\n private async withAdmission<T>(transferBytes: number, operation: () => Promise<T>): Promise<T> {\n if (this.disposed) throw clientError(\"disposed\", \"artifact Worker client is disposed\");\n if (\n this.admittedRequests >= MAX_CLIENT_QUEUED_REQUESTS ||\n !Number.isSafeInteger(this.admittedTransferBytes + transferBytes) ||\n this.admittedTransferBytes + transferBytes > this.maximumQueuedTransferBytes\n ) {\n throw clientError(\n \"client_busy\",\n \"artifact Worker request queue exceeds its bounded capacity\",\n true,\n );\n }\n this.admittedRequests += 1;\n this.admittedTransferBytes += transferBytes;\n try {\n return await operation();\n } finally {\n this.admittedRequests -= 1;\n this.admittedTransferBytes -= transferBytes;\n }\n }\n\n private segmentByteLength(bytes: Uint8Array, maximumBytes: number, label: string): number {\n if (!(bytes instanceof Uint8Array) || bytes.byteLength === 0) {\n throw clientError(\"invalid_bytes\", `${label} must be non-empty bytes`);\n }\n if (bytes.byteLength > maximumBytes) {\n throw clientError(\"limit_exceeded\", `${label} exceeds its byte limit`);\n }\n return bytes.byteLength;\n }\n\n private ownedSegment(bytes: Uint8Array, maximumBytes: number, label: string): ArrayBuffer {\n this.segmentByteLength(bytes, maximumBytes, label);\n return ownedTransferBuffer(bytes);\n }\n}\n\nfunction nextRequestId(active: WorkerGeneration): number {\n for (let attempts = 0; attempts < 0xffffffff; attempts += 1) {\n const candidate = active.nextRequestId;\n active.nextRequestId = candidate === 0xffffffff ? 1 : candidate + 1;\n if (!active.pending.has(candidate)) return candidate;\n }\n throw clientError(\"request_exhausted\", \"artifact Worker request id space is exhausted\");\n}\n\nfunction requireEmptyResult(result: RpcResult, label: string): void {\n if (result.metadata.byteLength !== 0 || result.segments.length !== 0) {\n throw clientError(\"invalid_response\", `${label} response must be empty`);\n }\n}\n\nfunction canonicalUrl(input: string | URL, label: string): URL {\n let url: URL;\n try {\n url = input instanceof URL ? new URL(input.href) : new URL(input);\n } catch (error) {\n throw clientError(\"invalid_asset_url\", `${label} must be an absolute URL`, false, error);\n }\n if (url.username || url.password || url.hash) {\n throw clientError(\"invalid_asset_url\", `${label} must not contain credentials or a fragment`);\n }\n return url;\n}\n\nfunction validateAssetPolicy(\n urls: readonly URL[],\n applicationOrigin: string | null,\n configuredOrigins: readonly string[],\n allowInsecureDevelopmentAssets: boolean,\n): void {\n const allowedOrigins = new Set<string>();\n if (applicationOrigin !== null) allowedOrigins.add(applicationOrigin);\n for (const originInput of configuredOrigins) {\n const origin = canonicalUrl(originInput, \"allowedAssetOrigins entry\").origin;\n allowedOrigins.add(origin);\n }\n for (const url of urls) {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\" && url.protocol !== \"file:\") {\n throw clientError(\"invalid_asset_url\", `unsupported artifact asset scheme: ${url.protocol}`);\n }\n const loopback =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n const secure = url.protocol === \"https:\" || (url.protocol === \"http:\" && loopback);\n if (!secure && !allowInsecureDevelopmentAssets) {\n throw clientError(\n \"insecure_asset_url\",\n \"artifact Worker assets must use HTTPS (loopback HTTP allowed)\",\n );\n }\n if (!allowedOrigins.has(url.origin)) {\n throw clientError(\n \"untrusted_asset_origin\",\n `artifact Worker asset origin is not allowed: ${url.origin}`,\n );\n }\n }\n}\n\nfunction resolveApplicationOrigin(input: string | URL | undefined): string | null {\n if (input !== undefined) return canonicalUrl(input, \"applicationOrigin\").origin;\n const location = globalThis.location;\n if (location && typeof location.origin === \"string\" && location.origin !== \"null\") {\n return canonicalUrl(location.origin, \"application origin\").origin;\n }\n return null;\n}\n\nfunction boundedMaximum(value: number, hardMaximum: number, label: string): number {\n positiveSafeInteger(value, label);\n if (value > hardMaximum)\n throw clientError(\"invalid_limit\", `${label} exceeds its hard safety ceiling`);\n return value;\n}\n\nfunction normalizeClientRpcLimits(\n input: Readonly<ArtifactWorkerRpcLimits>,\n): Readonly<ArtifactWorkerRpcLimits> {\n const values = {\n maxMetadataBytes: positiveSafeInteger(input.maxMetadataBytes, \"rpcLimits.maxMetadataBytes\"),\n maxSegmentBytes: positiveSafeInteger(input.maxSegmentBytes, \"rpcLimits.maxSegmentBytes\"),\n maxTotalSegmentBytes: positiveSafeInteger(\n input.maxTotalSegmentBytes,\n \"rpcLimits.maxTotalSegmentBytes\",\n ),\n maxSegments: positiveSafeInteger(input.maxSegments, \"rpcLimits.maxSegments\"),\n };\n for (const key of Object.keys(values) as Array<keyof ArtifactWorkerRpcLimits>) {\n if (values[key] > DEFAULT_ARTIFACT_WORKER_RPC_LIMITS[key]) {\n throw clientError(\n \"invalid_limit\",\n `rpcLimits.${key} exceeds the dedicated Worker hard limit`,\n );\n }\n }\n return Object.freeze(values);\n}\n\nfunction positiveSafeInteger(value: number, label: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw clientError(\"invalid_number\", `${label} must be a positive safe integer`);\n }\n return value;\n}\n\nfunction positiveVersion(value: number, label: string): number {\n const version = positiveSafeInteger(value, label);\n if (version > 65_535) throw clientError(\"invalid_number\", `${label} exceeds uint16`);\n return version;\n}\n\nfunction boundedVersion(value: string, label: string): string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.trim() !== value ||\n new TextEncoder().encode(value).byteLength > 512\n ) {\n throw clientError(\"invalid_runtime_identity\", `${label} is malformed`);\n }\n return value;\n}\n\nfunction normalizeViewportQuery(\n query: EditableSpreadsheetViewportQuery,\n): SpreadsheetArtifactViewportQuery {\n if (!query || typeof query !== \"object\") {\n throw clientError(\"invalid_query\", \"spreadsheet viewport query must be an object\");\n }\n const sheetId = spreadsheetSheetId(requireStableId(query.sheetId, \"query.sheetId\"));\n const startRow = uint32(query.startRow, \"query.startRow\");\n const startColumn = uint32(query.startColumn, \"query.startColumn\");\n const rowCount = positiveUint32(query.rowCount, \"query.rowCount\");\n const columnCount = positiveUint32(query.columnCount, \"query.columnCount\");\n if (startRow + rowCount - 1 > UINT32_MAX || startColumn + columnCount - 1 > UINT32_MAX) {\n throw clientError(\"invalid_query\", \"spreadsheet viewport exceeds uint32 coordinates\");\n }\n const area = rowCount * columnCount;\n if (!Number.isSafeInteger(area) || area > MAX_VIEWPORT_AREA) {\n throw clientError(\"limit_exceeded\", `spreadsheet viewport exceeds ${MAX_VIEWPORT_AREA} cells`);\n }\n const maxCells = positiveUint32(\n query.maxCells ?? SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS,\n \"query.maxCells\",\n );\n const maxBytes = positiveUint32(\n query.maxBytes ?? SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n \"query.maxBytes\",\n );\n if (maxCells > SPREADSHEET_ARTIFACT_VIEWPORT_MAX_CELLS) {\n throw clientError(\"limit_exceeded\", \"spreadsheet viewport maxCells exceeds its hard bound\");\n }\n if (maxBytes > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw clientError(\"limit_exceeded\", \"spreadsheet viewport maxBytes exceeds its hard bound\");\n }\n return Object.freeze({\n sheetId,\n startRow,\n startColumn,\n rowCount,\n columnCount,\n maxCells,\n maxBytes,\n });\n}\n\nfunction normalizeMetadataQuery(\n query: EditableSpreadsheetMetadataQuery,\n): Required<EditableSpreadsheetMetadataQuery> {\n if (!query || typeof query !== \"object\") {\n throw clientError(\"invalid_query\", \"spreadsheet metadata query must be an object\");\n }\n const maxSheets = positiveUint32(query.maxSheets ?? 4_096, \"query.maxSheets\");\n const maxBytes = positiveUint32(\n query.maxBytes ?? SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n \"query.maxBytes\",\n );\n if (maxSheets > SPREADSHEET_ARTIFACT_METADATA_MAX_SHEETS) {\n throw clientError(\"limit_exceeded\", \"spreadsheet metadata maxSheets exceeds its hard bound\");\n }\n if (maxBytes > SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES) {\n throw clientError(\"limit_exceeded\", \"spreadsheet metadata maxBytes exceeds its hard bound\");\n }\n return Object.freeze({ maxSheets, maxBytes });\n}\n\nfunction assertPresentationProjectionMatchesQuery(\n query: EditablePresentationQuery,\n response: EditablePresentationProjection,\n): void {\n if (query.kind !== response.kind) {\n throw clientError(\"invalid_response\", \"presentation projection kind does not match its query\");\n }\n if (query.kind === \"resolved-slide\" && response.kind === \"resolved-slide\") {\n if (response.slideId !== query.slideId || response.nodes.length > query.maxNodes)\n throw clientError(\n \"invalid_response\",\n \"resolved presentation projection does not match its query\",\n );\n } else if (query.kind === \"slide-catalog\" && response.kind === \"slide-catalog\") {\n if (\n response.startSlide !== query.startSlide ||\n response.slides.length > query.maxSlides ||\n response.projectedTextBytes > query.maxTextBytes\n )\n throw clientError(\"invalid_response\", \"presentation slide catalog does not match its query\");\n } else if (query.kind === \"editor-slide\" && response.kind === \"editor-slide\") {\n if (\n response.slide.id !== query.slideId ||\n response.nodes.length > query.maxNodes ||\n response.projectedTextBytes > query.maxTextBytes\n )\n throw clientError(\"invalid_response\", \"presentation editor slide does not match its query\");\n } else if (\n (query.kind === \"viewport\" || query.kind === \"hit-test\") &&\n (response.kind === \"viewport\" || response.kind === \"hit-test\") &&\n response.nodes.length > query.maxNodes\n ) {\n throw clientError(\"invalid_response\", \"presentation projection exceeds its requested nodes\");\n }\n}\n\nfunction uint32(value: number, label: string): number {\n if (!Number.isInteger(value) || value < 0 || value > UINT32_MAX) {\n throw clientError(\"invalid_query\", `${label} must be a uint32`);\n }\n return value;\n}\n\nfunction positiveUint32(value: number, label: string): number {\n const output = uint32(value, label);\n if (output === 0) throw clientError(\"invalid_query\", `${label} must be positive`);\n return output;\n}\n\nfunction requireStableId(value: string, label: string): string {\n if (!/^[0-9a-f]{32}$/u.test(value) || /^0+$/u.test(value)) {\n throw clientError(\n \"invalid_query\",\n `${label} must be nonzero fixed-width lowercase hexadecimal text`,\n );\n }\n return value;\n}\n\nfunction requireModality(value: unknown): EditableArtifactModality {\n if (value !== \"document\" && value !== \"spreadsheet\" && value !== \"presentation\") {\n throw clientError(\"invalid_modality\", \"artifact modality is invalid\");\n }\n return value;\n}\n\nfunction defaultWorkerFactory(\n url: URL,\n options: { type: \"module\"; name: string },\n): ArtifactWorkerClientEndpoint {\n if (typeof globalThis.Worker !== \"function\") {\n throw clientError(\n \"worker_unavailable\",\n \"browser artifact Worker is unavailable in this SSR/runtime environment\",\n );\n }\n return new globalThis.Worker(url, options) as unknown as ArtifactWorkerClientEndpoint;\n}\n\nfunction clientError(\n code: string,\n message: string,\n retryable = false,\n cause?: unknown,\n): ArtifactWorkerClientError {\n return new ArtifactWorkerClientError(code, message, {\n retryable,\n ...(cause === undefined ? {} : { cause }),\n });\n}\n","import {\n createEditableArtifactSyncController,\n editableArtifactCacheNamespace,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactSyncController,\n} from \"./controller\";\nimport type { EditableArtifactId } from \"./types\";\n\nexport type EditableArtifactSyncLease = {\n controller: EditableArtifactSyncController;\n release: () => void;\n};\n\nexport type EditableArtifactSyncControllerFactory = (\n artifactId: EditableArtifactId,\n) => CreateEditableArtifactSyncControllerOptions;\n\n/** Owns one ref-counted controller per exact auth/cache authority + artifact. */\nexport class EditableArtifactSyncPool {\n private readonly entries = new Map<\n string,\n {\n controller: EditableArtifactSyncController;\n references: number;\n retirementRevision: number;\n }\n >();\n\n constructor(private readonly optionsFor: EditableArtifactSyncControllerFactory) {}\n\n acquire(artifactId: EditableArtifactId): EditableArtifactSyncLease {\n // Resolve current authority on every acquisition. A pool may outlive one\n // login; artifact id alone is never sufficient cache/socket identity.\n const options = this.optionsFor(artifactId);\n const key = JSON.stringify([\n editableArtifactCacheNamespace(options.storageAuthority),\n artifactId,\n ]);\n let entry = this.entries.get(key);\n if (!entry) {\n const controller = createEditableArtifactSyncController(options);\n entry = { controller, references: 0, retirementRevision: 0 };\n this.entries.set(key, entry);\n controller.start();\n }\n entry.retirementRevision += 1;\n entry.references += 1;\n let released = false;\n return {\n controller: entry.controller,\n release: () => {\n if (released) return;\n released = true;\n const current = this.entries.get(key);\n if (!current || current.controller !== entry?.controller) return;\n current.references -= 1;\n if (current.references === 0) {\n const retirementRevision = ++current.retirementRevision;\n // React StrictMode and route transitions may release/reacquire in the\n // same task. Keep the one live controller through that handoff.\n queueMicrotask(() => {\n const latest = this.entries.get(key);\n if (\n latest !== current ||\n latest.references !== 0 ||\n latest.retirementRevision !== retirementRevision\n ) {\n return;\n }\n this.entries.delete(key);\n void latest.controller.close();\n });\n }\n },\n };\n }\n\n get size(): number {\n return this.entries.size;\n }\n}\n","export {\n createEditableArtifactSyncController,\n editableArtifactCacheNamespace,\n type CreateEditableArtifactSyncControllerOptions,\n type EditableArtifactCacheAuthority,\n type EditableArtifactQueueCommandsInput,\n type EditableArtifactSyncController,\n} from \"./controller\";\nexport {\n createBrowserEditableArtifactSession,\n createEditableArtifactReplicaId,\n} from \"./browser-session\";\nexport type {\n CreateBrowserEditableArtifactSessionOptions,\n EditableArtifactBrowserRuntime,\n} from \"./browser-session\";\nexport { EditableArtifactSyncError, EditableArtifactTransportError } from \"./errors\";\nexport type { EditableArtifactSyncErrorCode } from \"./errors\";\nexport { classifyEditableArtifactOpenFailure } from \"./open-failure\";\nexport type {\n EditableArtifactOpenFailureCategory,\n EditableArtifactOpenFailureEvent,\n EditableArtifactOpenFailureReporter,\n} from \"./open-failure\";\nexport { createEditableArtifactHttpLiveTransport } from \"./http-live-transport\";\nexport type {\n CreateEditableArtifactHttpLiveTransportOptions,\n EditableArtifactWebSocketCloseEvent,\n EditableArtifactWebSocketLike,\n EditableArtifactWebSocketMessageEvent,\n} from \"./http-live-transport\";\nexport {\n EditableArtifactStorageConflictError,\n IndexedDbEditableArtifactStorage,\n MemoryEditableArtifactStorage,\n} from \"./storage\";\nexport type {\n EditableArtifactAppendCommittedInput,\n EditableArtifactExpectedStoredHead,\n EditableArtifactStoragePort,\n EditableArtifactStorageScope,\n IndexedDbEditableArtifactStorageOptions,\n} from \"./storage\";\nexport { EditableArtifactSyncPool } from \"./pool\";\nexport type { EditableArtifactSyncControllerFactory, EditableArtifactSyncLease } from \"./pool\";\nexport { createEditableArtifactSession } from \"./session\";\nexport type {\n CreateEditableArtifactSessionOptions,\n ApplySerializedArtifactCommandsOptions,\n ApplySpreadsheetCommandsOptions,\n CreateDocumentParagraphInput,\n CreateDocumentParagraphResult,\n CreatePresentationSlideInput,\n CreatePresentationSlideResult,\n CreateSpreadsheetSheetInput,\n CreateSpreadsheetSheetResult,\n EditableArtifactSession,\n EditableSpreadsheetMetadataListener,\n EditableSpreadsheetViewportListener,\n EditableSpreadsheetViewportSubscriptionOptions,\n} from \"./session\";\nexport type {\n EditableArtifactBootstrap,\n EditableArtifactBlockedPending,\n EditableArtifactCausalEntry,\n EditableArtifactCausalFrontier,\n EditableArtifactCommittedTransaction,\n EditableArtifactId,\n EditableArtifactModality,\n EditableArtifactLiveClose,\n EditableArtifactLiveConnection,\n EditableArtifactLiveLimits,\n EditableArtifactLiveMessage,\n EditableArtifactPendingTransaction,\n EditableArtifactSerializedCommittedTransaction,\n EditableArtifactSerializedModality,\n EditableArtifactSerializedPendingTransaction,\n EditableArtifactSerializedSnapshot,\n EditableArtifactReplayPage,\n EditableArtifactSnapshot,\n EditableArtifactSpreadsheetCommittedTransaction,\n EditableArtifactSpreadsheetPendingTransaction,\n EditableArtifactSpreadsheetSnapshot,\n EditableArtifactStoredReplica,\n EditableArtifactSubmitReceipt,\n EditableArtifactSyncListener,\n EditableArtifactSyncScheduler,\n EditableArtifactSyncState,\n EditableArtifactSyncTicket,\n EditableArtifactSyncTransport,\n EditableArtifactSyncView,\n EditableArtifactWorkerKernel,\n EditableDocumentProjection,\n EditableDocumentQuery,\n EditablePresentationProjection,\n EditablePresentationQuery,\n EditablePresentationEditorSlideProjection,\n EditablePresentationEditorSlideQuery,\n EditablePresentationSlideCatalogProjection,\n EditablePresentationSlideCatalogQuery,\n EditableSpreadsheetCellValue,\n EditableSpreadsheetFormulaError,\n EditableSpreadsheetMetadataProjection,\n EditableSpreadsheetMetadataQuery,\n EditableSpreadsheetProjectedCell,\n EditableSpreadsheetSheetMetadata,\n EditableSpreadsheetUsedBounds,\n EditableSpreadsheetViewportProjection,\n EditableSpreadsheetViewportQuery,\n} from \"./types\";\nexport {\n ArtifactWorkerClientError,\n createBrowserEditableArtifactWorkerKernel,\n} from \"./worker/browser-client\";\nexport type {\n ArtifactWorkerClientEndpoint,\n ArtifactWorkerClientErrorEvent,\n ArtifactWorkerClientMessageEvent,\n BrowserEditableArtifactWorkerKernel,\n CreateBrowserEditableArtifactWorkerKernelOptions,\n} from \"./worker/browser-client\";\n\n// Exact spreadsheet command construction used by SDK-backed UI adapters.\n// Re-exporting the narrow codec leaf keeps React consumers on the SDK public\n// boundary instead of coupling them directly to contracts internals.\nexport {\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n editableArtifactStableId,\n spreadsheetSheetId,\n type SpreadsheetArtifactCommandBatch,\n type SpreadsheetCellInput,\n type SpreadsheetSheetGeneration,\n} from \"@opengeni/contracts/spreadsheet-artifact-commands\";\n\nexport {\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n encodeDocumentArtifactCommandBatch,\n type DocumentArtifactCommand,\n type DocumentArtifactCommandBatch,\n type DocumentArtifactCommentReply,\n type DocumentArtifactId,\n type DocumentArtifactPageGeometry,\n type DocumentArtifactPageGeometryProjection,\n type DocumentArtifactParagraphStyle,\n type DocumentArtifactProjection,\n type DocumentArtifactProjectionItem,\n type DocumentArtifactQuery,\n type DocumentArtifactQueryLimits,\n type DocumentArtifactTableStyle,\n type DocumentArtifactTextRange,\n type DocumentArtifactTextRun,\n type DocumentArtifactTextStyle,\n type DocumentArtifactTextStylePatch,\n} from \"@opengeni/contracts/document-artifact-commands\";\n\nexport {\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n PRESENTATION_ARTIFACT_QUERY_MAX_NODES,\n PRESENTATION_ARTIFACT_QUERY_MAX_SLIDES,\n PRESENTATION_ARTIFACT_QUERY_MAX_TEXT_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encodePresentationArtifactCommandBatch,\n type PresentationArtifactEditorSceneNode,\n type PresentationArtifactEditorSlideResponse,\n type PresentationArtifactFill,\n type PresentationArtifactLine,\n type PresentationArtifactNodeKind,\n type PresentationArtifactOwner,\n type PresentationArtifactRect,\n type PresentationArtifactRichText,\n type PresentationArtifactCommand,\n type PresentationArtifactCommandBatch,\n type PresentationArtifactSlideCatalogItem,\n type PresentationArtifactSlideCatalogResponse,\n type PresentationArtifactSlideLayoutFacts,\n type PresentationArtifactTableCell,\n type PresentationArtifactTextParagraph,\n type PresentationArtifactTextRun,\n type PresentationArtifactTextStyle,\n type PresentationArtifactTransform,\n} from \"@opengeni/contracts/presentation-artifact-commands\";\n"],"mappings":"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","names":["decodeEditableArtifactMutationIntent","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","hashEditableArtifactMutationIntentBytes","decodeCommittedTransactionSummary","editableArtifactCodecFor","decodeEditableArtifactSerializedCommit","summary","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","bytesEqual","identifiersEqual","cloneFrontier","cloneSnapshot","connection","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","decodeEditableArtifactMutationIntent","editableArtifactCodecFor","frontiersEqual","hashEditableArtifactMutationIntentBytes","summary","decodeCommittedTransactionSummary","decodeEditableArtifactSerializedCommit","EDITABLE_ARTIFACT_LIVE_WIRE_VERSION","EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION","currentEditableArtifactCompatibility","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","hashEditableArtifactMutationIntentBytes","MAX_COMMITTED_TRANSACTION_BYTES","DEFAULT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","requireStableId","requireReplicaId","safeSequence","cloneFrontier","cloneCommitted","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","hashEditableArtifactMutationIntentBytes","requireSha256","MAX_COMMITTED_TRANSACTION_BYTES","frontiersEqual","requireModality","positiveU16","asError","value","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","spreadsheetSheetId","DEFAULT_MAX_SNAPSHOT_BYTES","EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES","DEFAULT_MAX_COMMAND_BYTES","EDITABLE_ARTIFACT_COMMAND_MAX_BYTES","EDITABLE_ARTIFACT_INTENT_MAX_BYTES","DEFAULT_MAX_PENDING_TRANSACTIONS","MAX_VIEWPORT_AREA","UINT32_MAX","requireModality","positiveSafeInteger","normalizeViewportQuery","normalizeMetadataQuery","location","spreadsheetSheetId","requireStableId","uint32","positiveUint32","positiveVersion","EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION","currentEditableArtifactCompatibility","EDITABLE_ARTIFACT_LIVE_WIRE_VERSION","SPREADSHEET_ARTIFACT_COMMAND_VERSION","editableArtifactStableId","spreadsheetSheetId","DOCUMENT_ARTIFACT_COMMAND_VERSION","encodeDocumentArtifactCommandBatch","PRESENTATION_ARTIFACT_COMMAND_VERSION","encodePresentationArtifactCommandBatch"]}
|