@opengeni/core 3.0.1-canary.0 → 3.0.1-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-H7X52RI2.js → chunk-TFHSE7XR.js} +13 -2
- package/dist/chunk-TFHSE7XR.js.map +1 -0
- package/dist/domain/editable-artifacts/agent-application.d.ts +8 -0
- package/dist/editable-artifacts.js +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
- package/src/domain/editable-artifacts/agent-application.ts +31 -2
- package/src/domain/scheduled-tasks.ts +12 -4
- package/src/domain/sessions.ts +3 -0
- package/dist/chunk-H7X52RI2.js.map +0 -1
|
@@ -541,8 +541,18 @@ var EditableArtifactAgentApplication = class {
|
|
|
541
541
|
const queryBytes = encodeQuery(input.request);
|
|
542
542
|
const responseBytes = await this.dependencies.inspector.query({ state, queryBytes });
|
|
543
543
|
const projection = decodeQueryResponse(input.request.modality, responseBytes);
|
|
544
|
+
const inspectionReceiptId = state.modality === "document" ? await this.dependencies.recordInspection?.({
|
|
545
|
+
...context,
|
|
546
|
+
artifact: projectArtifact(state.artifact),
|
|
547
|
+
queryHash: createHash2("sha256").update(queryBytes).digest("hex"),
|
|
548
|
+
queryKind: input.request.query.kind
|
|
549
|
+
}) : void 0;
|
|
544
550
|
await this.touch(context, artifactId);
|
|
545
|
-
return Object.freeze({
|
|
551
|
+
return Object.freeze({
|
|
552
|
+
artifact: projectArtifact(state.artifact),
|
|
553
|
+
projection,
|
|
554
|
+
...inspectionReceiptId ? { inspectionReceiptId } : {}
|
|
555
|
+
});
|
|
546
556
|
}
|
|
547
557
|
async apply(input) {
|
|
548
558
|
const context = agentContext(input);
|
|
@@ -772,6 +782,7 @@ function commandProtocolVersion(modality) {
|
|
|
772
782
|
function projectArtifact(artifact) {
|
|
773
783
|
return Object.freeze({
|
|
774
784
|
id: artifact.id,
|
|
785
|
+
artifactReference: `[Open report](/workspaces/${artifact.scope.workspaceId}/artifacts/editable/${artifact.id})`,
|
|
775
786
|
modality: artifact.modality,
|
|
776
787
|
title: artifact.title,
|
|
777
788
|
lifecycle: artifact.lifecycle,
|
|
@@ -2386,4 +2397,4 @@ export {
|
|
|
2386
2397
|
EditableArtifactGenesisPipeline,
|
|
2387
2398
|
editableArtifactMaterializationKey
|
|
2388
2399
|
};
|
|
2389
|
-
//# sourceMappingURL=chunk-
|
|
2400
|
+
//# sourceMappingURL=chunk-TFHSE7XR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/domain/editable-artifacts/durable-export.ts","../src/domain/editable-artifacts/agent-application.ts","../src/domain/editable-artifacts/durable-export-postgres.ts","../src/domain/editable-artifacts/in-memory.ts","../src/domain/editable-artifacts/postgres-adapters.ts","../src/domain/editable-artifacts/snapshot-compaction.ts","../src/domain/editable-artifacts/snapshot-verifier-genesis.ts","../src/domain/editable-artifacts/snapshot-verifier-materialization.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type { BoundedObjectRead, BoundedObjectReadPort } from \"@opengeni/storage\";\n\nimport type { EditableArtifactAuthorizationPort } from \"./ports\";\nimport {\n assertIsoTimestamp,\n editableArtifactActorKey,\n editableArtifactContentHash,\n editableArtifactId,\n editableArtifactScope,\n editableArtifactSnapshotId,\n editableArtifactStateHash,\n validateEditableArtifactActor,\n type EditableArtifactActor,\n type EditableArtifactCausalFrontier,\n type EditableArtifactContentHash,\n type EditableArtifactId,\n type EditableArtifactModality,\n type EditableArtifactScope,\n type EditableArtifactSnapshotMetadata,\n type EditableArtifactStateHash,\n} from \"./types\";\n\nexport const EDITABLE_ARTIFACT_EXPORT_MAX_DOWNLOAD_BYTES = 512 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_EXPORT_MAX_OPTIONS_BYTES = 256 * 1024;\n\nexport type EditableArtifactMaterializationFormat =\n | \"xlsx\"\n | \"pptx\"\n | \"docx\"\n | \"pdf\"\n | \"png\"\n | \"webp\";\n\nexport type EditableArtifactMaterializationMimeType =\n | \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n | \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n | \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n | \"application/pdf\"\n | \"image/png\"\n | \"image/webp\";\n\nexport type EditableArtifactPinnedVersion = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n id: string;\n modality: EditableArtifactModality;\n snapshotId: string;\n headSequence: number;\n causalFrontier: EditableArtifactCausalFrontier | null;\n nativeRevision: number | null;\n stateHash: EditableArtifactStateHash;\n name: string;\n pinned: true;\n createdBySubjectId: string;\n createdAt: string;\n}>;\n\nexport type EditableArtifactMaterializationResult = Readonly<{\n id: string;\n byteSize: number;\n contentHash: EditableArtifactContentHash;\n mimeType: EditableArtifactMaterializationMimeType;\n verifiedAt: string;\n createdAt: string;\n}>;\n\nexport type EditableArtifactMaterializationJob = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n id: string;\n versionId: string;\n inputSnapshotId: string;\n targetHeadSequence: number;\n stateHash: EditableArtifactStateHash;\n format: EditableArtifactMaterializationFormat;\n state: \"pending\" | \"running\" | \"succeeded\" | \"failed\";\n attemptCount: number;\n errorCode: string | null;\n createdAt: string;\n startedAt: string | null;\n completedAt: string | null;\n result: EditableArtifactMaterializationResult | null;\n}>;\n\nexport type EditableArtifactMaterializationProfile = Readonly<{\n modality: EditableArtifactModality;\n format: EditableArtifactMaterializationFormat;\n codecId: string;\n codecVersion: string;\n kernelVersion: string;\n fontRegistryHash: string;\n policyHash: string;\n /** Canonical JSON object understood by the pinned native materializer. */\n normalizedOptions: string;\n}>;\n\n/** Server-owned profile lookup. Clients never supply executable identity facts. */\nexport interface EditableArtifactMaterializationProfilePort {\n resolve(\n input: Readonly<{\n modality: EditableArtifactModality;\n format: EditableArtifactMaterializationFormat;\n options: Readonly<Record<string, unknown>>;\n }>,\n ): Promise<EditableArtifactMaterializationProfile | null>;\n}\n\nexport interface EditableArtifactDurableExportIdFactoryPort {\n next(kind: \"version\" | \"materialization_job\" | \"receipt\"): string;\n}\n\nexport interface EditableArtifactExactSnapshotPort {\n ensure(\n input: Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n actor: EditableArtifactActor;\n signal?: AbortSignal;\n }>,\n ): Promise<EditableArtifactSnapshotMetadata>;\n}\n\ntype DurableExportContext = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n actor: EditableArtifactActor;\n}>;\n\nexport type PinEditableArtifactVersionStoreRequest = DurableExportContext &\n Readonly<{\n expectedAuthorizationRevision: number;\n authorityKey: string;\n receiptId: string;\n versionId: string;\n idempotencyKey: string;\n requestHash: string;\n name: string;\n snapshot: EditableArtifactSnapshotMetadata;\n }>;\n\nexport type PinEditableArtifactVersionStoreResult =\n | Readonly<{ kind: \"result\"; version: EditableArtifactPinnedVersion; replayed: boolean }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type EnqueueEditableArtifactMaterializationStoreRequest = DurableExportContext &\n Readonly<{\n expectedAuthorizationRevision: number;\n authorityKey: string;\n receiptId: string;\n jobId: string;\n idempotencyKey: string;\n requestHash: string;\n versionId: string;\n profile: EditableArtifactMaterializationProfile;\n }>;\n\nexport type EnqueueEditableArtifactMaterializationStoreResult =\n | Readonly<{\n kind: \"result\";\n job: EditableArtifactMaterializationJob;\n replayed: boolean;\n }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type ReadEditableArtifactMaterializationStoreResult =\n | Readonly<{ kind: \"result\"; job: EditableArtifactMaterializationJob | null }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type ReadEditableArtifactVersionStoreResult =\n | Readonly<{ kind: \"result\"; version: EditableArtifactPinnedVersion | null }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type ReadEditableArtifactMaterializationDownloadStoreResult =\n | Readonly<{\n kind: \"result\";\n job: EditableArtifactMaterializationJob | null;\n objectReference: string | null;\n }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport interface EditableArtifactDurableExportStorePort {\n pinVersion(\n input: PinEditableArtifactVersionStoreRequest,\n ): Promise<PinEditableArtifactVersionStoreResult>;\n enqueueMaterialization(\n input: EnqueueEditableArtifactMaterializationStoreRequest,\n ): Promise<EnqueueEditableArtifactMaterializationStoreResult>;\n readVersion(\n input: DurableExportContext &\n Readonly<{ expectedAuthorizationRevision: number; versionId: string }>,\n ): Promise<ReadEditableArtifactVersionStoreResult>;\n readMaterialization(\n input: DurableExportContext &\n Readonly<{ expectedAuthorizationRevision: number; jobId: string }>,\n ): Promise<ReadEditableArtifactMaterializationStoreResult>;\n readMaterializationDownload(\n input: DurableExportContext &\n Readonly<{ expectedAuthorizationRevision: number; jobId: string }>,\n ): Promise<ReadEditableArtifactMaterializationDownloadStoreResult>;\n}\n\nexport type EditableArtifactMaterializationDownload = Readonly<{\n artifactId: EditableArtifactId;\n jobId: string;\n format: EditableArtifactMaterializationFormat;\n byteSize: number;\n contentHash: EditableArtifactContentHash;\n mimeType: EditableArtifactMaterializationMimeType;\n chunks(input?: { signal?: AbortSignal }): AsyncIterable<Uint8Array>;\n assertUnchanged(signal?: AbortSignal): Promise<void>;\n close(): Promise<void>;\n}>;\n\nexport type EditableArtifactDurableExportErrorCode =\n | \"invalid_request\"\n | \"not_found\"\n | \"forbidden\"\n | \"conflict\"\n | \"unsupported_format\"\n | \"not_ready\"\n | \"unavailable\";\n\nexport class EditableArtifactDurableExportError extends Error {\n constructor(readonly code: EditableArtifactDurableExportErrorCode) {\n super(code);\n this.name = \"EditableArtifactDurableExportError\";\n }\n}\n\nexport type EditableArtifactDurableExportServiceDependencies = Readonly<{\n authorization: EditableArtifactAuthorizationPort;\n exactSnapshots: EditableArtifactExactSnapshotPort;\n store: EditableArtifactDurableExportStorePort;\n ids: EditableArtifactDurableExportIdFactoryPort;\n profiles: EditableArtifactMaterializationProfilePort;\n materializationObjects: BoundedObjectReadPort;\n}>;\n\nconst MAX_AUTHORIZATION_RETRIES = 4;\nconst PORTABLE_ID = /^[0-9a-f]{32}$/u;\nconst IDEMPOTENCY_KEY = /^[A-Za-z0-9._:-]{1,200}$/u;\nconst SHA256 = /^sha256:[0-9a-f]{64}$/u;\nconst PROFILE_TEXT = /^[\\x21-\\x7e]+$/u;\n\nexport class EditableArtifactDurableExportService {\n constructor(private readonly dependencies: EditableArtifactDurableExportServiceDependencies) {}\n\n async pinVersion(\n input: DurableExportContext & {\n idempotencyKey: string;\n name: string;\n signal?: AbortSignal;\n },\n ): Promise<{ version: EditableArtifactPinnedVersion; replayed: boolean }> {\n const context = normalizeContext(input);\n const idempotencyKey = portableIdempotencyKey(input.idempotencyKey);\n const name = versionName(input.name);\n const snapshot = await this.dependencies.exactSnapshots.ensure({\n ...context,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n if (\n snapshot.scope.accountId !== context.scope.accountId ||\n snapshot.scope.workspaceId !== context.scope.workspaceId ||\n snapshot.artifactId !== context.artifactId\n ) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n const requestHash = hashPublicRequest(\"pin-version\", [idempotencyKey, name]);\n const authorityKey = editableArtifactActorKey(context.actor);\n const receiptId = stableId(this.dependencies.ids.next(\"receipt\"), \"receipt id\");\n const versionId = stableId(this.dependencies.ids.next(\"version\"), \"version id\");\n\n for (let attempt = 0; attempt < MAX_AUTHORIZATION_RETRIES; attempt += 1) {\n const revision = await this.requireExportPermission(context);\n const result = await this.dependencies.store.pinVersion({\n ...context,\n expectedAuthorizationRevision: revision,\n authorityKey,\n receiptId,\n versionId,\n idempotencyKey,\n requestHash,\n name,\n snapshot,\n });\n if (result.kind === \"result\") {\n return Object.freeze({ version: result.version, replayed: result.replayed });\n }\n }\n throw new EditableArtifactDurableExportError(\"conflict\");\n }\n\n async enqueueMaterialization(\n input: DurableExportContext & {\n idempotencyKey: string;\n versionId: string;\n format: EditableArtifactMaterializationFormat;\n options?: Readonly<Record<string, unknown>>;\n },\n ): Promise<{ job: EditableArtifactMaterializationJob; replayed: boolean }> {\n const context = normalizeContext(input);\n const idempotencyKey = portableIdempotencyKey(input.idempotencyKey);\n const versionId = stableId(input.versionId, \"version id\");\n const format = materializationFormat(input.format);\n const options = exactOptions(input.options ?? Object.freeze({}));\n const version = await this.getVersion(context, versionId);\n const profile = await this.dependencies.profiles.resolve({\n modality: version.modality,\n format,\n options,\n });\n if (!profile) throw new EditableArtifactDurableExportError(\"unsupported_format\");\n validateProfile(profile, version.modality, format);\n const requestHash = hashPublicRequest(\"materialize\", [\n idempotencyKey,\n versionId,\n format,\n canonicalJson(options),\n ]);\n const authorityKey = editableArtifactActorKey(context.actor);\n const receiptId = stableId(this.dependencies.ids.next(\"receipt\"), \"receipt id\");\n const jobId = stableId(this.dependencies.ids.next(\"materialization_job\"), \"job id\");\n\n for (let attempt = 0; attempt < MAX_AUTHORIZATION_RETRIES; attempt += 1) {\n const revision = await this.requireExportPermission(context);\n const result = await this.dependencies.store.enqueueMaterialization({\n ...context,\n expectedAuthorizationRevision: revision,\n authorityKey,\n receiptId,\n jobId,\n idempotencyKey,\n requestHash,\n versionId,\n profile,\n });\n if (result.kind === \"result\") {\n return Object.freeze({ job: result.job, replayed: result.replayed });\n }\n }\n throw new EditableArtifactDurableExportError(\"conflict\");\n }\n\n async getMaterialization(\n input: DurableExportContext & Readonly<{ jobId: string }>,\n ): Promise<EditableArtifactMaterializationJob> {\n const context = normalizeContext(input);\n const jobId = stableId(input.jobId, \"job id\");\n for (let attempt = 0; attempt < MAX_AUTHORIZATION_RETRIES; attempt += 1) {\n const revision = await this.requireExportPermission(context);\n const result = await this.dependencies.store.readMaterialization({\n ...context,\n expectedAuthorizationRevision: revision,\n jobId,\n });\n if (result.kind === \"authorization_stale\") continue;\n if (!result.job) throw new EditableArtifactDurableExportError(\"not_found\");\n return result.job;\n }\n throw new EditableArtifactDurableExportError(\"conflict\");\n }\n\n async openMaterializationDownload(\n input: DurableExportContext & Readonly<{ jobId: string; signal?: AbortSignal }>,\n ): Promise<EditableArtifactMaterializationDownload> {\n const context = normalizeContext(input);\n const jobId = stableId(input.jobId, \"job id\");\n for (let attempt = 0; attempt < MAX_AUTHORIZATION_RETRIES; attempt += 1) {\n const revision = await this.requireExportPermission(context);\n const result = await this.dependencies.store.readMaterializationDownload({\n ...context,\n expectedAuthorizationRevision: revision,\n jobId,\n });\n if (result.kind === \"authorization_stale\") continue;\n if (!result.job) throw new EditableArtifactDurableExportError(\"not_found\");\n const materialization = result.job.result;\n if (result.job.state !== \"succeeded\" || !materialization || !result.objectReference) {\n throw new EditableArtifactDurableExportError(\"not_ready\");\n }\n let object: BoundedObjectRead;\n try {\n object = await this.dependencies.materializationObjects.open({\n opaqueReference: result.objectReference,\n maxBytes: EDITABLE_ARTIFACT_EXPORT_MAX_DOWNLOAD_BYTES,\n expectedByteSize: materialization.byteSize,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n } catch {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n if (object.contentType !== undefined && object.contentType !== materialization.mimeType) {\n await object.close();\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n return Object.freeze({\n artifactId: context.artifactId,\n jobId,\n format: result.job.format,\n byteSize: materialization.byteSize,\n contentHash: materialization.contentHash,\n mimeType: materialization.mimeType,\n chunks: (chunkInput: { signal?: AbortSignal } = {}) =>\n object.chunks(chunkInput.signal ? { signal: chunkInput.signal } : {}),\n assertUnchanged: async (signal?: AbortSignal) => await object.assertUnchanged(signal),\n close: async () => await object.close(),\n });\n }\n throw new EditableArtifactDurableExportError(\"conflict\");\n }\n\n private async getVersion(\n context: DurableExportContext,\n versionId: string,\n ): Promise<EditableArtifactPinnedVersion> {\n for (let attempt = 0; attempt < MAX_AUTHORIZATION_RETRIES; attempt += 1) {\n const revision = await this.requireExportPermission(context);\n const result = await this.dependencies.store.readVersion({\n ...context,\n expectedAuthorizationRevision: revision,\n versionId,\n });\n if (result.kind === \"authorization_stale\") continue;\n if (!result.version) throw new EditableArtifactDurableExportError(\"not_found\");\n return result.version;\n }\n throw new EditableArtifactDurableExportError(\"conflict\");\n }\n\n private async requireExportPermission(context: DurableExportContext): Promise<number> {\n const decision = await this.dependencies.authorization.authorize({\n ...context,\n permission: \"export\",\n });\n if (!decision.allowed) throw new EditableArtifactDurableExportError(\"forbidden\");\n if (!Number.isSafeInteger(decision.revision) || decision.revision < 1) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n return decision.revision;\n }\n}\n\nexport function editableArtifactMaterializationMimeType(\n format: EditableArtifactMaterializationFormat,\n): EditableArtifactMaterializationMimeType {\n switch (format) {\n case \"xlsx\":\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n case \"pptx\":\n return \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n case \"docx\":\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n case \"pdf\":\n return \"application/pdf\";\n case \"png\":\n return \"image/png\";\n case \"webp\":\n return \"image/webp\";\n }\n}\n\nexport function editableArtifactFormatMatchesModality(\n modality: EditableArtifactModality,\n format: EditableArtifactMaterializationFormat,\n): boolean {\n return (\n (modality === \"spreadsheet\" && [\"xlsx\", \"pdf\", \"png\", \"webp\"].includes(format)) ||\n (modality === \"presentation\" && [\"pptx\", \"pdf\", \"png\", \"webp\"].includes(format)) ||\n (modality === \"document\" && [\"docx\", \"pdf\", \"png\", \"webp\"].includes(format))\n );\n}\n\nfunction normalizeContext(input: DurableExportContext): DurableExportContext {\n const scope = editableArtifactScope(input.scope);\n const artifactId = editableArtifactId(input.artifactId);\n validateEditableArtifactActor(input.actor);\n return Object.freeze({\n scope,\n artifactId,\n actor: Object.freeze({ ...input.actor }) as EditableArtifactActor,\n });\n}\n\nfunction stableId(value: string, _label: string): string {\n if (!PORTABLE_ID.test(value) || /^0+$/u.test(value)) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n return value;\n}\n\nfunction portableIdempotencyKey(value: string): string {\n if (!IDEMPOTENCY_KEY.test(value)) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n return value;\n}\n\nfunction versionName(value: string): string {\n if (\n typeof value !== \"string\" ||\n value.trim() !== value ||\n /[\\u0000-\\u001f\\u007f]/u.test(value) ||\n new TextEncoder().encode(value).byteLength < 1 ||\n new TextEncoder().encode(value).byteLength > 256 ||\n !wellFormedText(value)\n ) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n return value;\n}\n\nfunction materializationFormat(value: string): EditableArtifactMaterializationFormat {\n if (![\"xlsx\", \"pptx\", \"docx\", \"pdf\", \"png\", \"webp\"].includes(value)) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n return value as EditableArtifactMaterializationFormat;\n}\n\nfunction exactOptions(value: Readonly<Record<string, unknown>>): Readonly<Record<string, unknown>> {\n if (!plainRecord(value)) throw new EditableArtifactDurableExportError(\"invalid_request\");\n const canonical = canonicalJson(value);\n if (new TextEncoder().encode(canonical).byteLength > EDITABLE_ARTIFACT_EXPORT_MAX_OPTIONS_BYTES) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n return Object.freeze({ ...value });\n}\n\nfunction canonicalJson(value: Readonly<Record<string, unknown>>): string {\n const keys = Object.keys(value).sort(compareCodeUnits);\n const normalized: Record<string, unknown> = {};\n for (const key of keys) {\n if (!wellFormedText(key) || !jsonValue(value[key])) {\n throw new EditableArtifactDurableExportError(\"invalid_request\");\n }\n normalized[key] = value[key];\n }\n const encoded = JSON.stringify(normalized);\n if (encoded === undefined) throw new EditableArtifactDurableExportError(\"invalid_request\");\n return encoded;\n}\n\nfunction validateProfile(\n profile: EditableArtifactMaterializationProfile,\n modality: EditableArtifactModality,\n format: EditableArtifactMaterializationFormat,\n): void {\n if (\n !plainRecord(profile) ||\n profile.modality !== modality ||\n profile.format !== format ||\n !editableArtifactFormatMatchesModality(modality, format) ||\n !boundedProfileText(profile.codecId, 128) ||\n !boundedProfileText(profile.codecVersion, 128) ||\n !boundedProfileText(profile.kernelVersion, 512) ||\n !SHA256.test(profile.fontRegistryHash) ||\n !SHA256.test(profile.policyHash) ||\n profile.normalizedOptions.trim() !== profile.normalizedOptions ||\n new TextEncoder().encode(profile.normalizedOptions).byteLength >\n EDITABLE_ARTIFACT_EXPORT_MAX_OPTIONS_BYTES\n ) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n let decoded: unknown;\n try {\n decoded = JSON.parse(profile.normalizedOptions) as unknown;\n } catch {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n if (!plainRecord(decoded) || canonicalJson(decoded) !== profile.normalizedOptions) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n}\n\nfunction boundedProfileText(value: string, maximumBytes: number): boolean {\n return (\n typeof value === \"string\" &&\n PROFILE_TEXT.test(value) &&\n new TextEncoder().encode(value).byteLength <= maximumBytes\n );\n}\n\nfunction hashPublicRequest(kind: string, fields: readonly string[]): string {\n const digest = createHash(\"sha256\");\n digest.update(\"OpenGeni editable artifact durable export\\0v1\\0\", \"utf8\");\n digest.update(kind, \"utf8\");\n digest.update(\"\\0\", \"utf8\");\n for (const field of fields) {\n const bytes = Buffer.from(field, \"utf8\");\n const length = Buffer.allocUnsafe(4);\n length.writeUInt32BE(bytes.byteLength);\n digest.update(length);\n digest.update(bytes);\n }\n return `sha256:${digest.digest(\"hex\")}`;\n}\n\nfunction plainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction jsonValue(value: unknown, depth = 0): boolean {\n if (depth > 32) return false;\n if (value === null || typeof value === \"boolean\" || typeof value === \"string\") {\n return typeof value !== \"string\" || wellFormedText(value);\n }\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value))\n return value.length <= 10_000 && value.every((item) => jsonValue(item, depth + 1));\n if (!plainRecord(value) || Object.keys(value).length > 10_000) return false;\n return Object.entries(value).every(\n ([key, item]) => wellFormedText(key) && jsonValue(item, depth + 1),\n );\n}\n\nfunction wellFormedText(value: string): boolean {\n if (value.includes(\"\\0\")) return false;\n for (let index = 0; index < value.length; index += 1) {\n const unit = value.charCodeAt(index);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!Number.isFinite(next) || next < 0xdc00 || next > 0xdfff) return false;\n index += 1;\n } else if (unit >= 0xdc00 && unit <= 0xdfff) {\n return false;\n }\n }\n return true;\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nexport function validateEditableArtifactPinnedVersion(\n version: EditableArtifactPinnedVersion,\n): EditableArtifactPinnedVersion {\n const scope = editableArtifactScope(version.scope);\n const artifactId = editableArtifactId(version.artifactId);\n const id = stableId(version.id, \"version id\");\n const snapshotId = editableArtifactSnapshotId(version.snapshotId);\n if (!Number.isSafeInteger(version.headSequence) || version.headSequence < 0) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n const stateHash = editableArtifactStateHash(version.stateHash);\n versionName(version.name);\n assertIsoTimestamp(version.createdAt, \"version creation time\");\n if (version.pinned !== true || !wellFormedText(version.createdBySubjectId)) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n if (\n (version.modality === \"spreadsheet\" &&\n (!Array.isArray(version.causalFrontier) || version.nativeRevision !== null)) ||\n (version.modality !== \"spreadsheet\" &&\n (version.causalFrontier !== null ||\n !Number.isSafeInteger(version.nativeRevision) ||\n version.nativeRevision! < 0))\n ) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n return Object.freeze({\n ...version,\n scope,\n artifactId,\n id,\n snapshotId,\n stateHash,\n causalFrontier:\n version.causalFrontier === null\n ? null\n : Object.freeze(version.causalFrontier.map((entry) => Object.freeze({ ...entry }))),\n });\n}\n\nexport function validateEditableArtifactMaterializationJob(\n job: EditableArtifactMaterializationJob,\n): EditableArtifactMaterializationJob {\n const scope = editableArtifactScope(job.scope);\n const artifactId = editableArtifactId(job.artifactId);\n const id = stableId(job.id, \"job id\");\n const versionId = stableId(job.versionId, \"version id\");\n const inputSnapshotId = stableId(job.inputSnapshotId, \"snapshot id\");\n const stateHash = editableArtifactStateHash(job.stateHash);\n const format = materializationFormat(job.format);\n if (\n !Number.isSafeInteger(job.targetHeadSequence) ||\n job.targetHeadSequence < 0 ||\n !Number.isSafeInteger(job.attemptCount) ||\n job.attemptCount < 0 ||\n ![\"pending\", \"running\", \"succeeded\", \"failed\"].includes(job.state)\n ) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n assertIsoTimestamp(job.createdAt, \"job creation time\");\n if (job.startedAt !== null) assertIsoTimestamp(job.startedAt, \"job start time\");\n if (job.completedAt !== null) assertIsoTimestamp(job.completedAt, \"job completion time\");\n let result: EditableArtifactMaterializationResult | null = null;\n if (job.result) {\n result = Object.freeze({\n ...job.result,\n id: stableId(job.result.id, \"result id\"),\n contentHash: editableArtifactContentHash(job.result.contentHash),\n mimeType: editableArtifactMaterializationMimeType(format),\n });\n if (\n job.result.mimeType !== result.mimeType ||\n !Number.isSafeInteger(job.result.byteSize) ||\n job.result.byteSize < 1 ||\n job.result.byteSize > EDITABLE_ARTIFACT_EXPORT_MAX_DOWNLOAD_BYTES\n ) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n assertIsoTimestamp(job.result.verifiedAt, \"result verification time\");\n assertIsoTimestamp(job.result.createdAt, \"result creation time\");\n }\n if ((job.state === \"succeeded\") !== (result !== null)) {\n throw new EditableArtifactDurableExportError(\"unavailable\");\n }\n return Object.freeze({\n ...job,\n scope,\n artifactId,\n id,\n versionId,\n inputSnapshotId,\n stateHash,\n format,\n result,\n });\n}\n","import { createHash } from \"node:crypto\";\n\nimport {\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n EDITABLE_ARTIFACT_INTENT_VERSION,\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n currentEditableArtifactCompatibility,\n decodeEditableArtifactMutationIntent,\n decodeDocumentArtifactQueryResponse,\n decodePresentationArtifactQueryResponse,\n decodeSpreadsheetArtifactKernelProjection,\n encodeDocumentArtifactCommandBatch,\n encodeDocumentArtifactQuery,\n encodePresentationArtifactCommandBatch,\n encodePresentationArtifactQuery,\n encodeSpreadsheetArtifactCommandBatch,\n encodeSpreadsheetArtifactKernelQuery,\n hashEditableArtifactMutationIntent,\n type DocumentArtifactCommand,\n type DocumentArtifactQuery,\n type PresentationArtifactCommand,\n type PresentationArtifactQuery,\n type SpreadsheetArtifactCommand,\n type SpreadsheetArtifactKernelQuery,\n} from \"@opengeni/contracts/editable-artifacts\";\n\nimport type {\n EditableArtifactDurableExportService,\n EditableArtifactMaterializationFormat,\n EditableArtifactMaterializationJob,\n} from \"./durable-export\";\nimport {\n EditableArtifactDomainError,\n EditableArtifactIdempotencyConflictError,\n EditableArtifactNotFoundError,\n EditableArtifactStaleBaseError,\n} from \"./errors\";\nimport type { EditableArtifactService } from \"./service\";\nimport {\n editableArtifactClientTransactionId,\n editableArtifactId,\n editableArtifactRequestHash,\n editableArtifactScope,\n editableArtifactStateHash,\n validateEditableArtifactActor,\n type EditableArtifact,\n type EditableArtifactActor,\n type EditableArtifactClientTransactionId,\n type EditableArtifactId,\n type EditableArtifactModality,\n type EditableArtifactOriginalImport,\n type EditableArtifactScope,\n type EditableArtifactReceipt,\n type ImportEditableArtifactRequest,\n type EditableArtifactStateHash,\n} from \"./types\";\nimport type { EditableArtifactKernelState } from \"./ports\";\n\nexport type EditableArtifactAgentCommandBatch =\n | Readonly<{ modality: \"spreadsheet\"; commands: readonly SpreadsheetArtifactCommand[] }>\n | Readonly<{ modality: \"document\"; commands: readonly DocumentArtifactCommand[] }>\n | Readonly<{ modality: \"presentation\"; commands: readonly PresentationArtifactCommand[] }>;\n\nexport type EditableArtifactAgentQuery =\n | Readonly<{ modality: \"spreadsheet\"; query: SpreadsheetArtifactKernelQuery }>\n | Readonly<{ modality: \"document\"; query: DocumentArtifactQuery }>\n | Readonly<{ modality: \"presentation\"; query: PresentationArtifactQuery }>;\n\nexport type EditableArtifactAgentContext = Readonly<{\n scope: EditableArtifactScope;\n actor: EditableArtifactActor;\n sessionId: string;\n}>;\n\nexport type EditableArtifactAgentMetadata = Readonly<{\n id: string;\n artifactReference: string;\n modality: EditableArtifactModality;\n title: string;\n lifecycle: EditableArtifact[\"lifecycle\"];\n headSequence: number;\n stateHash: string;\n createdAt: string;\n updatedAt: string;\n}>;\n\nexport type EditableArtifactAgentMutationReceipt = Readonly<{\n artifact: EditableArtifactAgentMetadata;\n transaction: Readonly<{\n id: string;\n clientTransactionId: string;\n sequenceStart: number;\n sequenceEnd: number;\n stateHash: string;\n committedAt: string;\n replayed: boolean;\n }>;\n}>;\n\nexport type EditableArtifactAgentExportReceipt = Readonly<{\n fileId: string;\n filename: string;\n contentType: string;\n sizeBytes: number;\n sha256: string;\n artifactId: string;\n versionId: string;\n materializationJobId: string;\n sourceHeadSequence: number;\n sourceStateHash: string;\n}>;\n\nexport type PreparedEditableArtifactImport = Readonly<{\n originalImport: EditableArtifactOriginalImport;\n snapshot: ImportEditableArtifactRequest[\"snapshot\"];\n}>;\n\nexport type EditableArtifactOfficeImportErrorCode =\n | \"invalid_source\"\n | \"source_changed\"\n | \"unsupported_content\";\n\nexport class EditableArtifactOfficeImportError extends Error {\n constructor(readonly code: EditableArtifactOfficeImportErrorCode) {\n super(code);\n this.name = \"EditableArtifactOfficeImportError\";\n }\n}\n\nexport interface EditableArtifactAgentAssociationPort {\n listArtifactIds(input: {\n scope: EditableArtifactScope;\n sessionId: string;\n limit: number;\n }): Promise<readonly EditableArtifactId[]>;\n touch(input: {\n scope: EditableArtifactScope;\n sessionId: string;\n artifactId: EditableArtifactId;\n }): Promise<void>;\n}\n\nexport interface EditableArtifactAgentInspectionKernelPort {\n query(input: { state: EditableArtifactKernelState; queryBytes: Uint8Array }): Promise<Uint8Array>;\n}\n\nexport interface EditableArtifactOfficeImportPort {\n prepare(input: {\n scope: EditableArtifactScope;\n actor: EditableArtifactActor;\n fileId: string;\n modality: EditableArtifactModality;\n signal?: AbortSignal;\n }): Promise<PreparedEditableArtifactImport>;\n}\n\nexport interface EditableArtifactAgentWorkspaceFilePort {\n ensureMaterializationFile(input: {\n scope: EditableArtifactScope;\n actor: EditableArtifactActor;\n artifact: EditableArtifact;\n versionId: string;\n jobId: string;\n filename: string;\n sourceHeadSequence: number;\n sourceStateHash: string;\n signal?: AbortSignal;\n }): Promise<EditableArtifactAgentExportReceipt>;\n}\n\nexport type EditableArtifactAgentApplicationDependencies = Readonly<{\n domain: EditableArtifactService;\n exports: EditableArtifactDurableExportService;\n associations: EditableArtifactAgentAssociationPort;\n inspector: EditableArtifactAgentInspectionKernelPort;\n /** Production persists proof only after a successful native query. */\n recordInspection?: (\n input: EditableArtifactAgentContext & {\n artifact: EditableArtifactAgentMetadata;\n queryHash: string;\n queryKind: string;\n },\n ) => Promise<string>;\n officeImports: EditableArtifactOfficeImportPort;\n workspaceFiles: EditableArtifactAgentWorkspaceFilePort;\n}>;\n\n/**\n * Attempt-neutral use cases shared by direct model tools and Codemode. This is\n * not another artifact engine: every mutation terminates at EditableArtifactService.\n */\nexport class EditableArtifactAgentApplication {\n constructor(private readonly dependencies: EditableArtifactAgentApplicationDependencies) {}\n\n async list(\n input: EditableArtifactAgentContext & Readonly<{ limit?: number }>,\n ): Promise<readonly EditableArtifactAgentMetadata[]> {\n const context = agentContext(input);\n const limit = boundedLimit(input.limit ?? 64);\n const ids = await this.dependencies.associations.listArtifactIds({\n scope: context.scope,\n sessionId: context.sessionId,\n limit,\n });\n const artifacts: EditableArtifactAgentMetadata[] = [];\n for (const artifactId of ids) {\n try {\n const artifact = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n artifacts.push(projectArtifact(artifact));\n } catch (error) {\n if (\n error instanceof EditableArtifactNotFoundError ||\n (error instanceof EditableArtifactDomainError && error.code === \"forbidden\")\n ) {\n continue;\n }\n throw error;\n }\n }\n return Object.freeze(artifacts);\n }\n\n async create(\n input: EditableArtifactAgentContext &\n Readonly<{\n idempotencyKey: EditableArtifactClientTransactionId;\n modality: EditableArtifactModality;\n title: string;\n signal?: AbortSignal;\n }>,\n ): Promise<EditableArtifactAgentMetadata> {\n const context = agentContext(input);\n const result = await this.dependencies.domain.createArtifact({\n scope: context.scope,\n actor: context.actor,\n request: {\n idempotencyKey: editableArtifactClientTransactionId(input.idempotencyKey),\n modality: input.modality,\n title: input.title,\n },\n ...(input.signal ? { signal: input.signal } : {}),\n });\n await this.touch(context, result.artifact.id);\n return projectArtifact(result.artifact);\n }\n\n async import(\n input: EditableArtifactAgentContext &\n Readonly<{\n idempotencyKey: EditableArtifactClientTransactionId;\n fileId: string;\n modality: EditableArtifactModality;\n title: string;\n signal?: AbortSignal;\n }>,\n ): Promise<EditableArtifactAgentMetadata> {\n const context = agentContext(input);\n const prepared = await this.dependencies.officeImports.prepare({\n scope: context.scope,\n actor: context.actor,\n fileId: input.fileId,\n modality: input.modality,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const result = await this.dependencies.domain.importArtifact({\n scope: context.scope,\n actor: context.actor,\n request: {\n idempotencyKey: editableArtifactClientTransactionId(input.idempotencyKey),\n modality: input.modality,\n title: input.title,\n originalImport: prepared.originalImport,\n snapshot: prepared.snapshot,\n },\n ...(input.signal ? { signal: input.signal } : {}),\n });\n await this.touch(context, result.artifact.id);\n return projectArtifact(result.artifact);\n }\n\n async get(\n input: EditableArtifactAgentContext & Readonly<{ artifactId: EditableArtifactId }>,\n ): Promise<EditableArtifactAgentMetadata> {\n const context = agentContext(input);\n const artifact = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId: editableArtifactId(input.artifactId),\n });\n await this.touch(context, artifact.id);\n return projectArtifact(artifact);\n }\n\n async inspect(\n input: EditableArtifactAgentContext &\n Readonly<{ artifactId: EditableArtifactId; request: EditableArtifactAgentQuery }>,\n ): Promise<\n Readonly<{\n artifact: EditableArtifactAgentMetadata;\n projection: unknown;\n inspectionReceiptId?: string;\n }>\n > {\n const context = agentContext(input);\n const artifactId = editableArtifactId(input.artifactId);\n const state = await this.dependencies.domain.readCurrentKernelState({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n if (state.modality !== input.request.modality)\n throw new TypeError(\"Artifact modality mismatch\");\n const queryBytes = encodeQuery(input.request);\n const responseBytes = await this.dependencies.inspector.query({ state, queryBytes });\n const projection = decodeQueryResponse(input.request.modality, responseBytes);\n const inspectionReceiptId =\n state.modality === \"document\"\n ? await this.dependencies.recordInspection?.({\n ...context,\n artifact: projectArtifact(state.artifact),\n queryHash: createHash(\"sha256\").update(queryBytes).digest(\"hex\"),\n queryKind: input.request.query.kind,\n })\n : undefined;\n await this.touch(context, artifactId);\n return Object.freeze({\n artifact: projectArtifact(state.artifact),\n projection,\n ...(inspectionReceiptId ? { inspectionReceiptId } : {}),\n });\n }\n\n async apply(\n input: EditableArtifactAgentContext &\n Readonly<{\n artifactId: EditableArtifactId;\n clientTransactionId: EditableArtifactClientTransactionId;\n expectedHeadSequence: number;\n expectedStateHash: string;\n batch: EditableArtifactAgentCommandBatch;\n }>,\n ): Promise<EditableArtifactAgentMutationReceipt> {\n const context = agentContext(input);\n const artifactId = editableArtifactId(input.artifactId);\n const commandBytes = encodeCommands(input.batch);\n const clientTransactionId = editableArtifactClientTransactionId(input.clientTransactionId);\n const expectedHeadSequence = boundedHeadSequence(input.expectedHeadSequence);\n const expectedStateHash = editableArtifactStateHash(input.expectedStateHash);\n const artifact = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n if (artifact.modality !== input.batch.modality)\n throw new TypeError(\"Artifact modality mismatch\");\n if (\n artifact.headSequence !== expectedHeadSequence ||\n artifact.stateHash !== expectedStateHash\n ) {\n const existing = await this.dependencies.domain.findTransactionReceipt({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n clientTransactionId,\n });\n if (existing) {\n if (\n !receiptMatchesAgentMutation(\n existing,\n expectedHeadSequence,\n expectedStateHash,\n commandBytes,\n )\n ) {\n throw new EditableArtifactIdempotencyConflictError();\n }\n await this.touch(context, artifactId);\n return Object.freeze({\n artifact: projectArtifact(artifact),\n transaction: projectReceipt(existing, true),\n });\n }\n throw new EditableArtifactStaleBaseError();\n }\n const authored = hashEditableArtifactMutationIntent({\n envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,\n protocolVersion: EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n modelSchemaVersion: currentEditableArtifactCompatibility(input.batch.modality)\n .modelSchemaVersion,\n commandProtocolVersion: commandProtocolVersion(input.batch.modality),\n artifactId,\n clientTransactionId,\n replicaId: context.actor.replicaId,\n replicaCounter: 1,\n previousLocalTransactionId: null,\n observedHeadSequence: expectedHeadSequence,\n causalBase: artifact.modality === \"spreadsheet\" ? artifact.causalFrontier : [],\n selectiveUndoOperationIds: [],\n commandBytes,\n });\n let applied: Awaited<ReturnType<EditableArtifactService[\"applyTransaction\"]>>;\n try {\n applied = await this.dependencies.domain.applyTransaction({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n request: {\n intentBytes: authored.bytes,\n requestHash: editableArtifactRequestHash(authored.requestHash),\n expectedHead: Object.freeze({\n sequence: expectedHeadSequence,\n stateHash: expectedStateHash,\n }),\n },\n });\n } catch (error) {\n if (!(error instanceof EditableArtifactIdempotencyConflictError)) throw error;\n const receipt = await this.dependencies.domain.findTransactionReceipt({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n clientTransactionId,\n });\n if (\n !receipt ||\n !receiptMatchesAgentMutation(receipt, expectedHeadSequence, expectedStateHash, commandBytes)\n ) {\n throw error;\n }\n applied = Object.freeze({ receipt, replayed: true });\n }\n const current = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n await this.touch(context, artifactId);\n return Object.freeze({\n artifact: projectArtifact(current),\n transaction: projectReceipt(applied.receipt, applied.replayed),\n });\n }\n\n async startExport(\n input: EditableArtifactAgentContext &\n Readonly<{\n artifactId: EditableArtifactId;\n idempotencyKey: string;\n format: EditableArtifactMaterializationFormat;\n options?: Readonly<Record<string, unknown>>;\n signal?: AbortSignal;\n }>,\n ): Promise<\n Readonly<{\n artifact: EditableArtifactAgentMetadata;\n versionId: string;\n jobId: string;\n sourceHeadSequence: number;\n sourceStateHash: string;\n state: EditableArtifactMaterializationJob[\"state\"];\n }>\n > {\n const context = agentContext(input);\n const artifactId = editableArtifactId(input.artifactId);\n const artifact = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n const version = await this.dependencies.exports.pinVersion({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n idempotencyKey: exportChildIdempotencyKey(input.idempotencyKey, \"version\"),\n name: `Export ${artifact.title}`,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const materialization = await this.dependencies.exports.enqueueMaterialization({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n idempotencyKey: exportChildIdempotencyKey(input.idempotencyKey, \"materialization\"),\n versionId: version.version.id,\n format: input.format,\n ...(input.options ? { options: input.options } : {}),\n });\n const current = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n await this.touch(context, artifactId);\n return Object.freeze({\n artifact: projectArtifact(current),\n versionId: version.version.id,\n jobId: materialization.job.id,\n sourceHeadSequence: materialization.job.targetHeadSequence,\n sourceStateHash: materialization.job.stateHash,\n state: materialization.job.state,\n });\n }\n\n async exportStatus(\n input: EditableArtifactAgentContext &\n Readonly<{\n artifactId: EditableArtifactId;\n versionId: string;\n jobId: string;\n signal?: AbortSignal;\n }>,\n ): Promise<\n Readonly<{\n artifact: EditableArtifactAgentMetadata;\n versionId: string;\n jobId: string;\n sourceHeadSequence: number;\n sourceStateHash: string;\n state: EditableArtifactMaterializationJob[\"state\"];\n errorCode: string | null;\n file: EditableArtifactAgentExportReceipt | null;\n }>\n > {\n const context = agentContext(input);\n const artifactId = editableArtifactId(input.artifactId);\n const artifact = await this.dependencies.domain.getArtifact({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n });\n const job = await this.dependencies.exports.getMaterialization({\n scope: context.scope,\n actor: context.actor,\n artifactId,\n jobId: input.jobId,\n });\n if (job.versionId !== input.versionId) throw new TypeError(\"Export version mismatch\");\n const file =\n job.state === \"succeeded\" && job.result\n ? await this.dependencies.workspaceFiles.ensureMaterializationFile({\n scope: context.scope,\n actor: context.actor,\n artifact,\n versionId: job.versionId,\n jobId: job.id,\n filename: defaultExportFilename(artifact.title, job.format),\n sourceHeadSequence: job.targetHeadSequence,\n sourceStateHash: job.stateHash,\n ...(input.signal ? { signal: input.signal } : {}),\n })\n : null;\n await this.touch(context, artifactId);\n return Object.freeze({\n artifact: projectArtifact(artifact),\n versionId: job.versionId,\n jobId: job.id,\n sourceHeadSequence: job.targetHeadSequence,\n sourceStateHash: job.stateHash,\n state: job.state,\n errorCode: job.errorCode,\n file,\n });\n }\n\n private async touch(context: EditableArtifactAgentContext, artifactId: EditableArtifactId) {\n await this.dependencies.associations.touch({\n scope: context.scope,\n sessionId: context.sessionId,\n artifactId,\n });\n }\n}\n\nfunction agentContext(input: EditableArtifactAgentContext): EditableArtifactAgentContext {\n const scope = editableArtifactScope(input.scope);\n validateEditableArtifactActor(input.actor);\n if (input.actor.kind !== \"agent\" || input.actor.sessionId !== input.sessionId) {\n throw new TypeError(\"Artifact agent context is not bound to its attempt session\");\n }\n return Object.freeze({\n scope,\n actor: Object.freeze({ ...input.actor }) as EditableArtifactActor,\n sessionId: boundedSessionId(input.sessionId),\n });\n}\n\nfunction encodeCommands(batch: EditableArtifactAgentCommandBatch): Uint8Array {\n if (batch.modality === \"spreadsheet\") {\n return encodeSpreadsheetArtifactCommandBatch({\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commands: batch.commands,\n });\n }\n if (batch.modality === \"document\") {\n return encodeDocumentArtifactCommandBatch({\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n commands: batch.commands,\n });\n }\n return encodePresentationArtifactCommandBatch({\n version: PRESENTATION_ARTIFACT_COMMAND_VERSION,\n commands: batch.commands,\n });\n}\n\nfunction encodeQuery(request: EditableArtifactAgentQuery): Uint8Array {\n if (request.modality === \"spreadsheet\") {\n return encodeSpreadsheetArtifactKernelQuery(request.query);\n }\n if (request.modality === \"document\") return encodeDocumentArtifactQuery(request.query);\n return encodePresentationArtifactQuery(request.query);\n}\n\nfunction decodeQueryResponse(modality: EditableArtifactModality, bytes: Uint8Array): unknown {\n if (modality === \"spreadsheet\") return decodeSpreadsheetArtifactKernelProjection(bytes);\n if (modality === \"document\") return decodeDocumentArtifactQueryResponse(bytes);\n return decodePresentationArtifactQueryResponse(bytes);\n}\n\nfunction commandProtocolVersion(modality: EditableArtifactModality): number {\n if (modality === \"spreadsheet\") return SPREADSHEET_ARTIFACT_COMMAND_VERSION;\n if (modality === \"document\") return DOCUMENT_ARTIFACT_COMMAND_VERSION;\n return PRESENTATION_ARTIFACT_COMMAND_VERSION;\n}\n\nfunction projectArtifact(artifact: EditableArtifact): EditableArtifactAgentMetadata {\n return Object.freeze({\n id: artifact.id,\n artifactReference: `[Open report](/workspaces/${artifact.scope.workspaceId}/artifacts/editable/${artifact.id})`,\n modality: artifact.modality,\n title: artifact.title,\n lifecycle: artifact.lifecycle,\n headSequence: artifact.headSequence,\n stateHash: artifact.stateHash,\n createdAt: artifact.createdAt,\n updatedAt: artifact.updatedAt,\n });\n}\n\nfunction projectReceipt(\n receipt: EditableArtifactReceipt,\n replayed: boolean,\n): EditableArtifactAgentMutationReceipt[\"transaction\"] {\n return Object.freeze({\n id: receipt.serverTransactionId,\n clientTransactionId: receipt.clientTransactionId,\n sequenceStart: receipt.sequenceStart,\n sequenceEnd: receipt.sequenceEnd,\n stateHash: receipt.stateHash,\n committedAt: receipt.committedAt,\n replayed,\n });\n}\n\nfunction receiptMatchesAgentMutation(\n receipt: EditableArtifactReceipt,\n expectedHeadSequence: number,\n expectedStateHash: EditableArtifactStateHash,\n commandBytes: Uint8Array,\n): boolean {\n const intent = decodeEditableArtifactMutationIntent(receipt.intentBytes);\n return (\n intent.observedHeadSequence === expectedHeadSequence &&\n receipt.priorStateHash === expectedStateHash &&\n sameBytes(commandBytes, intent.commandBytes)\n );\n}\n\nfunction sameBytes(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 boundedSessionId(value: string): string {\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(value)) {\n throw new TypeError(\"Artifact session id is invalid\");\n }\n return value;\n}\n\nfunction boundedLimit(value: number): number {\n if (!Number.isSafeInteger(value) || value < 1 || value > 64) {\n throw new TypeError(\"Artifact list limit must be between 1 and 64\");\n }\n return value;\n}\n\nfunction boundedHeadSequence(value: number): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(\"Artifact expected head sequence must be a nonnegative safe integer\");\n }\n return value;\n}\n\nfunction defaultExportFilename(title: string, format: string): string {\n const stem = title\n .normalize(\"NFKC\")\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f\\u007f]+/gu, \"-\")\n .replace(/\\s+/gu, \" \")\n .trim()\n .slice(0, 180);\n return `${stem || \"artifact\"}.${format}`;\n}\n\nfunction exportChildIdempotencyKey(\n value: string,\n operation: \"version\" | \"materialization\",\n): string {\n const digest = createHash(\"sha256\")\n .update(\"opengeni:editable-artifact-export:v1\\0\", \"utf8\")\n .update(operation, \"utf8\")\n .update(\"\\0\", \"utf8\")\n .update(value, \"utf8\")\n .digest(\"hex\");\n return `artifact-export:${operation}:${digest}`;\n}\n","import {\n EditableArtifactDurableExportPersistenceError,\n type PostgresEditableArtifactDurableExportStore,\n type PersistedEditableArtifactMaterializationJob,\n type PersistedEditableArtifactPinnedVersion,\n} from \"@opengeni/db/editable-artifact-durable-export\";\n\nimport {\n EditableArtifactDurableExportError,\n validateEditableArtifactMaterializationJob,\n validateEditableArtifactPinnedVersion,\n type EditableArtifactDurableExportStorePort,\n type EditableArtifactMaterializationJob,\n type EditableArtifactPinnedVersion,\n type EnqueueEditableArtifactMaterializationStoreRequest,\n type PinEditableArtifactVersionStoreRequest,\n} from \"./durable-export\";\n\n/** One-way adapter keeps @opengeni/db free of the core package cycle. */\nexport function editableArtifactDurableExportStorePortFromPostgres(\n store: PostgresEditableArtifactDurableExportStore,\n): EditableArtifactDurableExportStorePort {\n return Object.freeze({\n async pinVersion(input: PinEditableArtifactVersionStoreRequest) {\n try {\n const result = await store.pinVersion(persistedPinRequest(input));\n if (result.kind === \"authorization_stale\") return result;\n return Object.freeze({\n kind: \"result\" as const,\n version: versionFromPersisted(result.value.version),\n replayed: result.value.replayed,\n });\n } catch (error) {\n throw mapPersistenceError(error);\n }\n },\n async enqueueMaterialization(input: EnqueueEditableArtifactMaterializationStoreRequest) {\n try {\n const result = await store.enqueueMaterialization(persistedEnqueueRequest(input));\n if (result.kind === \"authorization_stale\") return result;\n return Object.freeze({\n kind: \"result\" as const,\n job: jobFromPersisted(result.value.job),\n replayed: result.value.replayed,\n });\n } catch (error) {\n throw mapPersistenceError(error);\n }\n },\n async readVersion(input: Parameters<EditableArtifactDurableExportStorePort[\"readVersion\"]>[0]) {\n try {\n const result = await store.readVersion(input);\n if (result.kind === \"authorization_stale\") return result;\n return Object.freeze({\n kind: \"result\" as const,\n version: result.value ? versionFromPersisted(result.value) : null,\n });\n } catch (error) {\n throw mapPersistenceError(error);\n }\n },\n async readMaterialization(\n input: Parameters<EditableArtifactDurableExportStorePort[\"readMaterialization\"]>[0],\n ) {\n try {\n const result = await store.readMaterialization(input);\n if (result.kind === \"authorization_stale\") return result;\n return Object.freeze({\n kind: \"result\" as const,\n job: result.value ? jobFromPersisted(result.value) : null,\n });\n } catch (error) {\n throw mapPersistenceError(error);\n }\n },\n async readMaterializationDownload(\n input: Parameters<EditableArtifactDurableExportStorePort[\"readMaterializationDownload\"]>[0],\n ) {\n try {\n const result = await store.readMaterializationDownload(input);\n if (result.kind === \"authorization_stale\") return result;\n return Object.freeze({\n kind: \"result\" as const,\n job: result.value.job ? jobFromPersisted(result.value.job) : null,\n objectReference: result.value.objectReference,\n });\n } catch (error) {\n throw mapPersistenceError(error);\n }\n },\n });\n}\n\nfunction persistedPinRequest(input: PinEditableArtifactVersionStoreRequest) {\n const snapshot = input.snapshot;\n return {\n ...input,\n snapshot: {\n modality: snapshot.modality,\n snapshotId: snapshot.snapshotId,\n coveredHeadSequence: snapshot.coveredHeadSequence,\n stateHash: snapshot.stateHash,\n coveredCausalFrontier:\n snapshot.modality === \"spreadsheet\" ? snapshot.coveredCausalFrontier : null,\n nativeRevision: snapshot.modality === \"spreadsheet\" ? null : snapshot.nativeRevision,\n },\n } as const;\n}\n\nfunction persistedEnqueueRequest(input: EnqueueEditableArtifactMaterializationStoreRequest) {\n return { ...input } as const;\n}\n\nfunction versionFromPersisted(\n value: PersistedEditableArtifactPinnedVersion,\n): EditableArtifactPinnedVersion {\n return validateEditableArtifactPinnedVersion(value as EditableArtifactPinnedVersion);\n}\n\nfunction jobFromPersisted(\n value: PersistedEditableArtifactMaterializationJob,\n): EditableArtifactMaterializationJob {\n return validateEditableArtifactMaterializationJob(value as EditableArtifactMaterializationJob);\n}\n\nfunction mapPersistenceError(error: unknown): unknown {\n if (!(error instanceof EditableArtifactDurableExportPersistenceError)) return error;\n switch (error.code) {\n case \"not_found\":\n return new EditableArtifactDurableExportError(\"not_found\");\n case \"idempotency_conflict\":\n case \"snapshot_conflict\":\n return new EditableArtifactDurableExportError(\"conflict\");\n case \"unsupported_format\":\n return new EditableArtifactDurableExportError(\"unsupported_format\");\n case \"database_contract_violation\":\n return new EditableArtifactDurableExportError(\"unavailable\");\n }\n}\n","import {\n EditableArtifactIdempotencyConflictError,\n EditableArtifactNotFoundError,\n EditableArtifactOutboxLeaseConflictError,\n} from \"./errors\";\nimport { decodeCommittedTransactionSummary } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport { decodeEditableArtifactSerializedCommit } from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport type {\n ClaimEditableArtifactLiveOutboxRequest,\n CommitAppliedEditableArtifactTransaction,\n CommitEditableArtifactSnapshot,\n CreateEditableArtifactStoreRequest,\n CreateEditableArtifactStoreResult,\n EditableArtifactAuthorizationRevisionPort,\n EditableArtifactScopeAuthorizationRevisionPort,\n EditableArtifactClockPort,\n EditableArtifactKernelState,\n EditableArtifactStableIdFactoryPort,\n EditableArtifactStableIdKind,\n EditableArtifactStorePort,\n EditableArtifactTransactionBasis,\n EditableArtifactSnapshotUnitOfWorkPort,\n ReadEditableArtifactTransactionBasisRequest,\n ReadEditableArtifactAtAuthorizationRevisionResult,\n TryCommitAppliedEditableArtifactTransactionRequest,\n TryCommitAppliedEditableArtifactTransactionResult,\n} from \"./ports\";\nimport {\n assertBoundedArtifactTitle,\n assertIsoTimestamp,\n assertNonnegativeSafeInteger,\n assertPositiveSafeInteger,\n causalFrontiersEqual,\n editableArtifactCausalFrontier,\n editableArtifactClientTransactionId,\n editableArtifactId,\n editableArtifactOperationId,\n editableArtifactOutboxId,\n editableArtifactReceiptId,\n editableArtifactRequestHash,\n editableArtifactScope,\n editableArtifactStateHash,\n type EditableArtifact,\n type CreateEditableArtifactResult,\n type EditableArtifactCreationReceipt,\n type EditableArtifactCommittedTransactionRecord,\n type EditableArtifactId,\n type EditableArtifactLifecycleState,\n type EditableArtifactLiveOutboxRecord,\n type EditableArtifactModality,\n type EditableArtifactOperationId,\n type EditableArtifactOperationRecord,\n type EditableArtifactOutboxId,\n type EditableArtifactOutboxRetryFailureCode,\n type EditableArtifactOutboxDeadLetterFailureCode,\n type EditableArtifactReceipt,\n type EditableArtifactScope,\n type EditableArtifactSequenceCheckpoint,\n type EditableArtifactSnapshotId,\n type EditableArtifactSnapshotMetadata,\n type EditableArtifactStableId,\n type EditableArtifactStateHash,\n type EditableArtifactSpreadsheetCommittedTransactionRecord,\n type EditableArtifactSerializedCommittedTransactionRecord,\n type EditableArtifactSerializedSnapshotMetadata,\n type EditableArtifactSpreadsheetSnapshotMetadata,\n type EditableArtifactTransactionId,\n} from \"./types\";\n\ntype ArtifactAggregate = {\n artifact: EditableArtifact;\n receipts: Map<string, EditableArtifactReceipt>;\n transactions: Map<EditableArtifactTransactionId, EditableArtifactReceipt>;\n committedTransactions: Map<\n EditableArtifactTransactionId,\n EditableArtifactCommittedTransactionRecord\n >;\n operations: Map<EditableArtifactOperationId, EditableArtifactOperationRecord>;\n undoClaims: Map<EditableArtifactOperationId, EditableArtifactTransactionId>;\n snapshots: Map<EditableArtifactSnapshotId, EditableArtifactSnapshotMetadata>;\n checkpoints: Map<number, EditableArtifactSequenceCheckpoint>;\n outbox: Map<EditableArtifactOutboxId, EditableArtifactLiveOutboxRecord>;\n};\n\nexport type SeedInMemoryEditableArtifact = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n title: string;\n stateHash: EditableArtifactStateHash;\n lifecycle?: EditableArtifactLifecycleState;\n authorizationRevision?: number;\n /** Authoritative native revision for a pre-existing serialized artifact. */\n nativeRevision?: number;\n createdAt?: string;\n}>;\n\n/**\n * Executable correctness reference for tests. It deliberately serializes and\n * copies aggregate history; production runtimes must use the PostgreSQL CAS\n * adapter rather than treating this O(history) store as a performance model.\n */\nexport class InMemoryEditableArtifactStore\n implements\n EditableArtifactStorePort,\n EditableArtifactAuthorizationRevisionPort,\n EditableArtifactScopeAuthorizationRevisionPort\n{\n private aggregates = new Map<string, ArtifactAggregate>();\n private creationReceipts = new Map<string, EditableArtifactCreationReceipt>();\n private scopeCreateAuthorizationRevisions = new Map<string, number>();\n private exclusiveTail: Promise<void> = Promise.resolve();\n\n constructor(private readonly now: () => Date = () => new Date()) {}\n\n async findArtifactCreation(\n scopeInput: EditableArtifactScope,\n operationKind: \"create\" | \"import\",\n authorityKey: string,\n idempotencyKeyInput: string,\n ): Promise<CreateEditableArtifactResult | null> {\n const scope = editableArtifactScope(scopeInput);\n const idempotencyKey = editableArtifactClientTransactionId(idempotencyKeyInput);\n const key = creationReceiptKey(scope, operationKind, authorityKey, idempotencyKey);\n return this.exclusive(async () => {\n const receipt = this.creationReceipts.get(key);\n if (!receipt) return null;\n const aggregate = this.aggregates.get(aggregateKey(scope, receipt.artifactId));\n const snapshot = aggregate?.snapshots.get(receipt.genesisSnapshotId);\n if (!aggregate || !snapshot) {\n throw new Error(\"Artifact creation receipt is corrupt\");\n }\n return Object.freeze({\n artifact: cloneArtifact(aggregate.artifact),\n genesisSnapshot: cloneSnapshot(snapshot),\n creationReceipt: cloneCreationReceipt(receipt),\n replayed: true,\n });\n });\n }\n\n async createArtifact(\n input: CreateEditableArtifactStoreRequest,\n ): Promise<CreateEditableArtifactStoreResult> {\n const scope = editableArtifactScope(input.scope);\n const artifactId = editableArtifactId(input.artifactId);\n const receiptId = editableArtifactReceiptId(input.receiptId);\n const idempotencyKey = editableArtifactClientTransactionId(input.idempotencyKey);\n const requestHash = editableArtifactRequestHash(input.requestHash);\n if (input.operationKind !== \"create\" && input.operationKind !== \"import\") {\n throw new TypeError(\"Unknown editable artifact origin operation\");\n }\n if ((input.operationKind === \"import\") !== Boolean(input.originalImport)) {\n throw new TypeError(\"Editable artifact import source does not match its origin operation\");\n }\n assertBoundedArtifactTitle(input.title);\n assertPositiveSafeInteger(\n input.expectedScopeAuthorizationRevision,\n \"expected scope create authorization revision\",\n );\n assertPositiveSafeInteger(\n input.initialArtifactAuthorizationRevision,\n \"initial artifact authorization revision\",\n );\n const genesisSnapshot = cloneSnapshot(input.genesisSnapshot);\n const outbox = cloneOutbox(input.outbox);\n assertGenesisCreateRequest(scope, artifactId, input.operationKind, genesisSnapshot, outbox);\n if (!([\"spreadsheet\", \"presentation\", \"document\"] as const).includes(input.modality)) {\n throw new TypeError(\"Unknown editable artifact modality\");\n }\n if (genesisSnapshot.modality !== input.modality) {\n throw new TypeError(\"Genesis snapshot modality does not match artifact modality\");\n }\n const creationKey = creationReceiptKey(\n scope,\n input.operationKind,\n input.authorityKey,\n idempotencyKey,\n );\n return this.exclusive(async () => {\n const prior = this.creationReceipts.get(creationKey);\n if (prior) {\n if (prior.requestHash !== requestHash) {\n throw new EditableArtifactIdempotencyConflictError();\n }\n const replay = this.aggregates.get(aggregateKey(scope, prior.artifactId));\n if (!replay) throw new Error(\"Artifact creation receipt is corrupt\");\n const replaySnapshot = replay.snapshots.get(prior.genesisSnapshotId);\n if (!replaySnapshot) {\n throw new Error(\"Artifact creation receipt has no genesis snapshot\");\n }\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({\n artifact: cloneArtifact(replay.artifact),\n genesisSnapshot: cloneSnapshot(replaySnapshot),\n creationReceipt: cloneCreationReceipt(prior),\n replayed: true,\n }),\n });\n }\n const scopeKey = authorizationScopeKey(scope);\n const currentScopeRevision = this.scopeCreateAuthorizationRevisions.get(scopeKey) ?? 1;\n if (currentScopeRevision !== input.expectedScopeAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const key = aggregateKey(scope, artifactId);\n if (this.aggregates.has(key)) {\n throw new Error(\"Editable artifact identity already exists\");\n }\n const commonArtifact = {\n scope,\n id: artifactId,\n title: input.title,\n lifecycle: \"active\",\n authorizationRevision: input.initialArtifactAuthorizationRevision,\n headSequence: 0,\n stateHash: genesisSnapshot.stateHash,\n currentSnapshotId: genesisSnapshot.snapshotId,\n createdAt: genesisSnapshot.publishedAt,\n updatedAt: genesisSnapshot.publishedAt,\n } as const;\n const artifact: EditableArtifact =\n input.modality === \"spreadsheet\"\n ? {\n ...commonArtifact,\n modality: \"spreadsheet\",\n causalFrontier: editableArtifactCausalFrontier(\n genesisSnapshot.modality === \"spreadsheet\"\n ? genesisSnapshot.coveredCausalFrontier\n : [],\n ),\n }\n : { ...commonArtifact, modality: input.modality };\n const creationReceipt: EditableArtifactCreationReceipt = Object.freeze({\n receiptId,\n scope,\n artifactId,\n operationKind: input.operationKind,\n authorityKey: input.authorityKey,\n idempotencyKey,\n requestHash,\n genesisSnapshotId: genesisSnapshot.snapshotId,\n createdAt: genesisSnapshot.publishedAt,\n });\n this.aggregates.set(key, emptyAggregate(artifact, genesisSnapshot, outbox));\n this.creationReceipts.set(creationKey, creationReceipt);\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({\n artifact: cloneArtifact(artifact),\n genesisSnapshot: cloneSnapshot(genesisSnapshot),\n creationReceipt: cloneCreationReceipt(creationReceipt),\n replayed: false,\n }),\n });\n });\n }\n\n async readScopeCreateAuthorizationRevision(scope: EditableArtifactScope): Promise<number> {\n const key = authorizationScopeKey(editableArtifactScope(scope));\n return this.exclusive(async () => {\n const revision = this.scopeCreateAuthorizationRevisions.get(key) ?? 1;\n this.scopeCreateAuthorizationRevisions.set(key, revision);\n return revision;\n });\n }\n\n async advanceScopeCreateAuthorizationRevision(\n scope: EditableArtifactScope,\n expectedRevision: number,\n nextRevision: number,\n ): Promise<Readonly<{ applied: boolean; authorizationRevision: number }>> {\n assertPositiveSafeInteger(expectedRevision, \"expected scope create authorization revision\");\n assertPositiveSafeInteger(nextRevision, \"next scope create authorization revision\");\n if (nextRevision <= expectedRevision) {\n throw new TypeError(\n \"Next scope create authorization revision must exceed the expected revision\",\n );\n }\n const key = authorizationScopeKey(editableArtifactScope(scope));\n return this.exclusive(async () => {\n const current = this.scopeCreateAuthorizationRevisions.get(key) ?? 1;\n if (current !== expectedRevision) {\n return Object.freeze({\n applied: false,\n authorizationRevision: current,\n });\n }\n this.scopeCreateAuthorizationRevisions.set(key, nextRevision);\n return Object.freeze({\n applied: true,\n authorizationRevision: nextRevision,\n });\n });\n }\n\n async seedArtifact(input: SeedInMemoryEditableArtifact): Promise<EditableArtifact> {\n const scope = editableArtifactScope(input.scope);\n const artifactId = editableArtifactId(input.artifactId);\n assertBoundedArtifactTitle(input.title);\n const stateHash = editableArtifactStateHash(input.stateHash);\n const createdAt = input.createdAt ?? new Date(0).toISOString();\n assertIsoTimestamp(createdAt, \"artifact creation timestamp\");\n if (!([\"spreadsheet\", \"presentation\", \"document\"] as const).includes(input.modality)) {\n throw new TypeError(\"Unknown editable artifact modality\");\n }\n const lifecycle = input.lifecycle ?? \"active\";\n if (lifecycle !== \"active\" && lifecycle !== \"archived\") {\n throw new TypeError(\"Unknown editable artifact lifecycle state\");\n }\n const authorizationRevision = input.authorizationRevision ?? 1;\n assertPositiveSafeInteger(authorizationRevision, \"artifact authorization revision\");\n const title = input.title;\n const modality = input.modality;\n const nativeRevision = input.nativeRevision ?? 0;\n assertNonnegativeSafeInteger(nativeRevision, \"artifact native revision\");\n return this.exclusive(async () => {\n const key = aggregateKey(scope, artifactId);\n if (this.aggregates.has(key)) throw new Error(\"Editable artifact is already seeded\");\n const commonArtifact = {\n scope,\n id: artifactId,\n title,\n lifecycle,\n authorizationRevision,\n headSequence: 0,\n stateHash,\n currentSnapshotId: null,\n createdAt,\n updatedAt: createdAt,\n } as const;\n const artifact: EditableArtifact =\n modality === \"spreadsheet\"\n ? {\n ...commonArtifact,\n modality: \"spreadsheet\",\n causalFrontier: editableArtifactCausalFrontier([]),\n }\n : { ...commonArtifact, modality };\n this.aggregates.set(key, {\n artifact,\n receipts: new Map(),\n transactions: new Map(),\n committedTransactions: new Map(),\n operations: new Map(),\n undoClaims: new Map(),\n snapshots: new Map(),\n checkpoints: new Map([[0, checkpointAtGenesis(artifact, nativeRevision)]]),\n outbox: new Map(),\n });\n return cloneArtifact(artifact);\n });\n }\n\n async getArtifact(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n ): Promise<EditableArtifact | null> {\n const key = aggregateKey(editableArtifactScope(scope), editableArtifactId(artifactId));\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n return aggregate ? cloneArtifact(aggregate.artifact) : null;\n });\n }\n\n async readArtifactAtAuthorizationRevision(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n expectedAuthorizationRevision: number,\n ): Promise<ReadEditableArtifactAtAuthorizationRevisionResult> {\n assertPositiveSafeInteger(\n expectedAuthorizationRevision,\n \"expected artifact authorization revision\",\n );\n const key = aggregateKey(editableArtifactScope(scope), editableArtifactId(artifactId));\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) {\n return Object.freeze({ kind: \"result\" as const, artifact: null });\n }\n if (aggregate.artifact.authorizationRevision !== expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n return Object.freeze({\n kind: \"result\" as const,\n artifact: cloneArtifact(aggregate.artifact),\n });\n });\n }\n\n /** Test/admin seam modeling the local policy invalidation transaction. */\n async advanceAuthorizationRevision(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n expectedRevision: number,\n nextRevision: number,\n ): Promise<Readonly<{ applied: boolean; authorizationRevision: number }>> {\n assertPositiveSafeInteger(expectedRevision, \"expected artifact authorization revision\");\n assertPositiveSafeInteger(nextRevision, \"next artifact authorization revision\");\n if (nextRevision <= expectedRevision) {\n throw new TypeError(\"Next artifact authorization revision must exceed the expected revision\");\n }\n const key = aggregateKey(editableArtifactScope(scope), editableArtifactId(artifactId));\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n if (aggregate.artifact.authorizationRevision !== expectedRevision) {\n return Object.freeze({\n applied: false,\n authorizationRevision: aggregate.artifact.authorizationRevision,\n });\n }\n const updatedAt = authoritativeNow(this.now).toISOString();\n aggregate.artifact = {\n ...aggregate.artifact,\n authorizationRevision: nextRevision,\n updatedAt: laterIsoTimestamp(aggregate.artifact.updatedAt, updatedAt),\n };\n return Object.freeze({\n applied: true,\n authorizationRevision: nextRevision,\n });\n });\n }\n\n async readTransactionBasis(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n request: ReadEditableArtifactTransactionBasisRequest,\n ): Promise<EditableArtifactTransactionBasis> {\n const normalizedScope = editableArtifactScope(scope);\n const normalizedArtifactId = editableArtifactId(artifactId);\n const key = aggregateKey(normalizedScope, normalizedArtifactId);\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n const priorReceipt = aggregate.receipts.get(\n receiptKey(request.actorKey, request.clientTransactionId),\n );\n if (priorReceipt) {\n return Object.freeze({\n kind: \"existing\",\n receipt: cloneReceipt(priorReceipt),\n });\n }\n const predecessor = request.previousLocalTransactionId\n ? aggregate.receipts.get(receiptKey(request.actorKey, request.previousLocalTransactionId))\n : undefined;\n const undoTargets: Extract<\n EditableArtifactTransactionBasis,\n { kind: \"basis\" }\n >[\"undoTargets\"] = Object.freeze(\n request.selectiveUndoOperationIds.map((operationId) =>\n Object.freeze({\n operationId,\n operation: aggregate.operations.has(operationId)\n ? cloneOperation(aggregate.operations.get(operationId)!)\n : null,\n claimedBy: aggregate.undoClaims.get(operationId) ?? null,\n }),\n ),\n );\n const kernelState = kernelStateFromAggregate(aggregate);\n return Object.freeze({\n kind: \"basis\",\n artifact: kernelState.artifact,\n predecessor: predecessor ? cloneReceipt(predecessor) : null,\n undoTargets,\n kernelState,\n });\n });\n }\n\n async readCurrentKernelState(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n expectedAuthorizationRevision: number,\n ): Promise<\n | Readonly<{ kind: \"basis\"; state: EditableArtifactKernelState }>\n | Readonly<{ kind: \"authorization_stale\" }>\n > {\n const normalizedScope = editableArtifactScope(scope);\n const normalizedArtifactId = editableArtifactId(artifactId);\n const key = aggregateKey(normalizedScope, normalizedArtifactId);\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n if (aggregate.artifact.authorizationRevision !== expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n return Object.freeze({ kind: \"basis\" as const, state: kernelStateFromAggregate(aggregate) });\n });\n }\n\n async tryCommitAppliedTransaction(\n request: TryCommitAppliedEditableArtifactTransactionRequest,\n ): Promise<TryCommitAppliedEditableArtifactTransactionResult> {\n const scope = editableArtifactScope(request.scope);\n const artifactId = editableArtifactId(request.artifactId);\n const key = aggregateKey(scope, artifactId);\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n\n // The idempotency winner is authoritative even when its commit changed\n // the head before this candidate reached the CAS.\n const prior = aggregate.receipts.get(\n receiptKey(request.actorKey, request.clientTransactionId),\n );\n if (prior) {\n if (prior.requestHash !== request.requestHash) {\n throw new EditableArtifactIdempotencyConflictError();\n }\n return Object.freeze({\n kind: \"replayed\",\n receipt: cloneReceipt(prior),\n });\n }\n\n const artifact = aggregate.artifact;\n if (\n artifact.lifecycle !== request.expectedLifecycle ||\n artifact.authorizationRevision !== request.expectedAuthorizationRevision ||\n artifact.headSequence !== request.expectedHeadSequence\n ) {\n return Object.freeze({ kind: \"stale\" });\n }\n if (!sameExpectedPredecessor(aggregate, request.expectedPredecessor)) {\n return Object.freeze({ kind: \"stale\" });\n }\n if (\n request.expectedUnclaimedUndoTargets.some((operationId) =>\n aggregate.undoClaims.has(operationId),\n )\n ) {\n return Object.freeze({ kind: \"stale\" });\n }\n\n const working = cloneAggregate(aggregate);\n commitAppliedTransaction(working, request);\n // No callback can retain `working` on this path; every caller-owned\n // buffer was copied by commitAppliedTransaction.\n this.aggregates.set(key, working);\n return Object.freeze({\n kind: \"committed\",\n receipt: cloneReceipt(request.receipt),\n });\n });\n }\n\n async withSnapshotPublicationLock<T>(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n callback: (unitOfWork: EditableArtifactSnapshotUnitOfWorkPort) => Promise<T>,\n ): Promise<T> {\n const key = aggregateKey(editableArtifactScope(scope), editableArtifactId(artifactId));\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n const working = cloneAggregate(aggregate);\n const unitOfWork = new InMemoryEditableArtifactSnapshotUnitOfWork(working);\n try {\n const result = await callback(unitOfWork);\n // Never install the aggregate still referenced by the callback's UoW.\n this.aggregates.set(key, cloneAggregate(working));\n return result;\n } finally {\n unitOfWork.close();\n }\n });\n }\n\n async claimLiveOutbox(\n request: ClaimEditableArtifactLiveOutboxRequest,\n ): Promise<readonly EditableArtifactLiveOutboxRecord[]> {\n assertLeaseRequest(request);\n const owner = request.owner;\n const leaseDurationMs = request.leaseDurationMs;\n const limit = request.limit;\n return this.exclusive(async () => {\n const nowMs = authoritativeNow(this.now).getTime();\n const eligible = [...this.aggregates.values()]\n .flatMap((aggregate) =>\n [...aggregate.outbox.values()].map((record) => ({\n aggregate,\n record,\n })),\n )\n .filter(({ record }) => {\n if (record.state === \"pending\") {\n return new Date(record.nextAttemptAt).getTime() <= nowMs;\n }\n if (record.state !== \"publishing\" || !record.leaseExpiresAt) return false;\n return new Date(record.leaseExpiresAt).getTime() <= nowMs;\n })\n .sort(\n (left, right) =>\n compareText(left.record.createdAt, right.record.createdAt) ||\n compareText(left.record.outboxId, right.record.outboxId),\n )\n .slice(0, limit);\n const leaseExpiresAt = new Date(nowMs + leaseDurationMs).toISOString();\n return Object.freeze(\n eligible.map(({ aggregate, record }) => {\n if (record.attemptCount >= Number.MAX_SAFE_INTEGER) {\n throw new Error(\"Editable artifact outbox attempt counter exhausted\");\n }\n const claimed: EditableArtifactLiveOutboxRecord = {\n ...record,\n state: \"publishing\",\n attemptCount: record.attemptCount + 1,\n leaseOwner: owner,\n leaseExpiresAt,\n };\n aggregate.outbox.set(record.outboxId, claimed);\n return cloneOutbox(claimed);\n }),\n );\n });\n }\n\n async markLiveOutboxPublished(input: {\n outboxId: EditableArtifactOutboxId;\n owner: string;\n attemptCount: number;\n }): Promise<void> {\n const outboxId = editableArtifactOutboxId(input.outboxId);\n const owner = assertLeaseOwner(input.owner);\n assertPositiveSafeInteger(input.attemptCount, \"outbox attempt count\");\n await this.exclusive(async () => {\n const publishedAt = authoritativeNow(this.now);\n const publishedAtMs = publishedAt.getTime();\n const publishedAtIso = publishedAt.toISOString();\n const located = this.findOutbox(outboxId);\n if (!located) throw new EditableArtifactOutboxLeaseConflictError();\n const record = located.record;\n if (record.state === \"published\") {\n if (record.attemptCount === input.attemptCount) return;\n throw new EditableArtifactOutboxLeaseConflictError();\n }\n if (\n record.state !== \"publishing\" ||\n record.leaseOwner !== owner ||\n record.attemptCount !== input.attemptCount ||\n !record.leaseExpiresAt ||\n publishedAtMs >= new Date(record.leaseExpiresAt).getTime()\n ) {\n throw new EditableArtifactOutboxLeaseConflictError();\n }\n located.aggregate.outbox.set(outboxId, {\n ...record,\n state: \"published\",\n leaseOwner: null,\n leaseExpiresAt: null,\n publishedAt: publishedAtIso,\n });\n });\n }\n\n async releaseLiveOutbox(input: {\n outboxId: EditableArtifactOutboxId;\n owner: string;\n attemptCount: number;\n }): Promise<void> {\n const outboxId = editableArtifactOutboxId(input.outboxId);\n const owner = assertLeaseOwner(input.owner);\n assertPositiveSafeInteger(input.attemptCount, \"outbox attempt count\");\n await this.exclusive(async () => {\n const releasedAt = authoritativeNow(this.now).toISOString();\n const located = this.findOutbox(outboxId);\n if (!located) throw new EditableArtifactOutboxLeaseConflictError();\n if (\n (located.record.state === \"published\" ||\n (located.record.state === \"pending\" &&\n located.record.leaseOwner === null &&\n located.record.leaseExpiresAt === null)) &&\n located.record.attemptCount === input.attemptCount\n ) {\n return;\n }\n if (\n located.record.state !== \"publishing\" ||\n located.record.leaseOwner !== owner ||\n located.record.attemptCount !== input.attemptCount\n ) {\n throw new EditableArtifactOutboxLeaseConflictError();\n }\n located.aggregate.outbox.set(outboxId, {\n ...located.record,\n state: \"pending\",\n leaseOwner: null,\n leaseExpiresAt: null,\n nextAttemptAt: releasedAt,\n });\n });\n }\n\n async renewLiveOutbox(input: {\n outboxId: EditableArtifactOutboxId;\n owner: string;\n attemptCount: number;\n leaseDurationMs: number;\n }): Promise<void> {\n const outboxId = editableArtifactOutboxId(input.outboxId);\n const owner = assertLeaseOwner(input.owner);\n assertPositiveSafeInteger(input.attemptCount, \"outbox attempt count\");\n assertLeaseDuration(input.leaseDurationMs);\n await this.exclusive(async () => {\n const nowMs = authoritativeNow(this.now).getTime();\n const located = this.findOutbox(outboxId);\n if (!located) throw new EditableArtifactOutboxLeaseConflictError();\n assertActiveOutboxLease(located.record, owner, input.attemptCount, nowMs);\n located.aggregate.outbox.set(outboxId, {\n ...located.record,\n leaseExpiresAt: new Date(nowMs + input.leaseDurationMs).toISOString(),\n });\n });\n }\n\n async retryLiveOutbox(input: {\n outboxId: EditableArtifactOutboxId;\n owner: string;\n attemptCount: number;\n retryDelayMs: number;\n errorCode: EditableArtifactOutboxRetryFailureCode;\n }): Promise<void> {\n const outboxId = editableArtifactOutboxId(input.outboxId);\n const owner = assertLeaseOwner(input.owner);\n assertPositiveSafeInteger(input.attemptCount, \"outbox attempt count\");\n assertRetryDelay(input.retryDelayMs);\n assertRetryErrorCode(input.errorCode);\n await this.exclusive(async () => {\n const nowMs = authoritativeNow(this.now).getTime();\n const located = this.findOutbox(outboxId);\n if (!located) throw new EditableArtifactOutboxLeaseConflictError();\n const record = located.record;\n if (\n record.state === \"pending\" &&\n record.attemptCount === input.attemptCount &&\n record.leaseOwner === null &&\n record.leaseExpiresAt === null &&\n record.lastErrorCode === input.errorCode\n ) {\n return;\n }\n assertActiveOutboxLease(record, owner, input.attemptCount, nowMs);\n located.aggregate.outbox.set(outboxId, {\n ...record,\n state: \"pending\",\n leaseOwner: null,\n leaseExpiresAt: null,\n nextAttemptAt: new Date(nowMs + input.retryDelayMs).toISOString(),\n lastErrorCode: input.errorCode,\n });\n });\n }\n\n async deadLetterLiveOutbox(input: {\n outboxId: EditableArtifactOutboxId;\n owner: string;\n attemptCount: number;\n errorCode: EditableArtifactOutboxDeadLetterFailureCode;\n }): Promise<void> {\n const outboxId = editableArtifactOutboxId(input.outboxId);\n const owner = assertLeaseOwner(input.owner);\n assertPositiveSafeInteger(input.attemptCount, \"outbox attempt count\");\n assertDeadLetterErrorCode(input.errorCode);\n await this.exclusive(async () => {\n const now = authoritativeNow(this.now);\n const nowMs = now.getTime();\n const located = this.findOutbox(outboxId);\n if (!located) throw new EditableArtifactOutboxLeaseConflictError();\n const record = located.record;\n if (\n record.state === \"dead_lettered\" &&\n record.attemptCount === input.attemptCount &&\n record.leaseOwner === null &&\n record.leaseExpiresAt === null &&\n record.lastErrorCode === input.errorCode\n ) {\n return;\n }\n assertActiveOutboxLease(record, owner, input.attemptCount, nowMs);\n located.aggregate.outbox.set(outboxId, {\n ...record,\n state: \"dead_lettered\",\n leaseOwner: null,\n leaseExpiresAt: null,\n lastErrorCode: input.errorCode,\n deadLetteredAt: now.toISOString(),\n });\n });\n }\n\n async listReceipts(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n ): Promise<readonly EditableArtifactReceipt[]> {\n return this.inspectAggregate(scope, artifactId, (aggregate) =>\n Object.freeze(\n [...aggregate.transactions.values()]\n .sort((left, right) => left.sequenceStart - right.sequenceStart)\n .map(cloneReceipt),\n ),\n );\n }\n\n async listOperations(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n ): Promise<readonly EditableArtifactOperationRecord[]> {\n return this.inspectAggregate(scope, artifactId, (aggregate) =>\n Object.freeze(\n [...aggregate.operations.values()]\n .sort((left, right) => left.sequence - right.sequence)\n .map(cloneOperation),\n ),\n );\n }\n\n async listCommittedTransactions(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n ): Promise<readonly EditableArtifactCommittedTransactionRecord[]> {\n return this.inspectAggregate(scope, artifactId, (aggregate) =>\n Object.freeze(\n [...aggregate.committedTransactions.values()]\n .sort((left, right) => left.sequenceStart - right.sequenceStart)\n .map(cloneCommittedTransaction),\n ),\n );\n }\n\n async listSnapshots(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n ): Promise<readonly EditableArtifactSnapshotMetadata[]> {\n return this.inspectAggregate(scope, artifactId, (aggregate) =>\n Object.freeze(\n [...aggregate.snapshots.values()]\n .sort((left, right) => left.coveredHeadSequence - right.coveredHeadSequence)\n .map(cloneSnapshot),\n ),\n );\n }\n\n async listOutbox(): Promise<readonly EditableArtifactLiveOutboxRecord[]> {\n return this.exclusive(async () =>\n Object.freeze(\n [...this.aggregates.values()]\n .flatMap((aggregate) => [...aggregate.outbox.values()])\n .sort(\n (left, right) =>\n compareText(left.createdAt, right.createdAt) ||\n compareText(left.outboxId, right.outboxId),\n )\n .map(cloneOutbox),\n ),\n );\n }\n\n private async inspectAggregate<T>(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n inspect: (aggregate: ArtifactAggregate) => T,\n ): Promise<T> {\n const key = aggregateKey(editableArtifactScope(scope), editableArtifactId(artifactId));\n return this.exclusive(async () => {\n const aggregate = this.aggregates.get(key);\n if (!aggregate) throw new EditableArtifactNotFoundError();\n return inspect(aggregate);\n });\n }\n\n private findOutbox(\n outboxId: EditableArtifactOutboxId,\n ): { aggregate: ArtifactAggregate; record: EditableArtifactLiveOutboxRecord } | undefined {\n for (const aggregate of this.aggregates.values()) {\n const record = aggregate.outbox.get(outboxId);\n if (record) return { aggregate, record };\n }\n return undefined;\n }\n\n private async exclusive<T>(operation: () => Promise<T>): Promise<T> {\n const prior = this.exclusiveTail;\n let release!: () => void;\n this.exclusiveTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n await prior;\n try {\n return await operation();\n } finally {\n release();\n }\n }\n}\n\nfunction commitAppliedTransaction(\n aggregate: ArtifactAggregate,\n input: CommitAppliedEditableArtifactTransaction,\n): void {\n const artifact = aggregate.artifact;\n if (input.expectedHeadSequence !== artifact.headSequence) {\n throw new Error(\"In-memory artifact head changed before its CAS commit\");\n }\n if (\n input.receipt.modality !== artifact.modality ||\n input.committedTransaction.modality !== artifact.modality ||\n input.receipt.sequenceStart !== artifact.headSequence + 1\n ) {\n throw new Error(\"Committed transaction modality or interval is invalid\");\n }\n if (\n input.receipt.serverTransactionId !== input.serverTransactionId ||\n input.operations.some(\n (operation, index) =>\n operation.serverTransactionId !== input.serverTransactionId ||\n operation.sequence !== input.receipt.sequenceStart + index,\n )\n ) {\n throw new Error(\"Committed operations are not bound to the transaction interval\");\n }\n const committed = input.committedTransaction;\n if (\n committed.serverTransactionId !== input.serverTransactionId ||\n committed.scope.accountId !== artifact.scope.accountId ||\n committed.scope.workspaceId !== artifact.scope.workspaceId ||\n committed.artifactId !== artifact.id ||\n committed.requestHash !== input.receipt.requestHash ||\n committed.sequenceStart !== input.receipt.sequenceStart ||\n committed.sequenceEnd !== input.receipt.sequenceEnd ||\n committed.priorStateHash !== artifact.stateHash ||\n committed.stateHash !== input.receipt.stateHash ||\n !(committed.committedTransactionBytes instanceof Uint8Array) ||\n committed.committedTransactionBytes.byteLength < 1\n ) {\n throw new Error(\"Canonical committed transaction disagrees with its receipt\");\n }\n if (\n input.outbox.event.kind !== \"transaction_committed\" ||\n input.outbox.event.modality !== artifact.modality ||\n input.outbox.event.serverTransactionId !== input.serverTransactionId ||\n input.outbox.event.sequenceStart !== input.receipt.sequenceStart ||\n input.outbox.event.sequenceEnd !== input.receipt.sequenceEnd ||\n input.outbox.event.stateHash !== input.receipt.stateHash\n ) {\n throw new Error(\"Transaction outbox projection is inconsistent\");\n }\n if (artifact.modality === \"spreadsheet\") {\n if (\n input.receipt.modality !== \"spreadsheet\" ||\n committed.modality !== \"spreadsheet\" ||\n input.outbox.event.modality !== \"spreadsheet\" ||\n input.operations.length !== input.receipt.operationCount ||\n input.receipt.sequenceEnd !== artifact.headSequence + input.operations.length ||\n committed.operationIds.length !== input.operations.length ||\n committed.operationIds.some(\n (operationId, index) => operationId !== input.operations[index]?.operationId,\n ) ||\n !causalFrontiersEqual(\n committed.resultingCausalFrontier,\n input.receipt.resultingCausalFrontier,\n ) ||\n input.outbox.event.operationProtocolVersion !== input.receipt.operationProtocolVersion\n ) {\n throw new Error(\"Spreadsheet commit disagrees with its CRDT receipt\");\n }\n const summary = decodeCommittedTransactionSummary(committed.committedTransactionBytes);\n if (\n summary.transactionId !== input.serverTransactionId ||\n summary.priorStateHash !== committed.priorStateHash ||\n summary.stateHash !== committed.stateHash ||\n summary.operationIds.length !== committed.operationIds.length\n ) {\n throw new Error(\"Spreadsheet OGACO metadata disagrees with its record\");\n }\n } else {\n if (\n input.receipt.modality !== artifact.modality ||\n committed.modality !== artifact.modality ||\n input.outbox.event.modality !== artifact.modality ||\n input.operations.length !== 0 ||\n input.receipt.sequenceEnd !== input.receipt.sequenceStart ||\n committed.sequenceEnd !== committed.sequenceStart ||\n input.receipt.commitProtocolVersion !== committed.commitProtocolVersion ||\n input.receipt.priorNativeRevision !== committed.priorNativeRevision ||\n input.receipt.nativeRevision !== committed.nativeRevision ||\n input.receipt.commandCount !== committed.commandCount ||\n input.outbox.event.commitProtocolVersion !== input.receipt.commitProtocolVersion\n ) {\n throw new Error(\"Serialized commit disagrees with its authoritative receipt\");\n }\n const summary = decodeEditableArtifactSerializedCommit(\n committed.committedTransactionBytes,\n artifact.modality,\n );\n if (\n summary.transactionId !== input.serverTransactionId ||\n summary.parentHeadSequence !== artifact.headSequence ||\n summary.resultHeadSequence !== input.receipt.sequenceEnd ||\n summary.priorNativeRevision !== committed.priorNativeRevision ||\n summary.nativeReceipt.revision !== committed.nativeRevision ||\n summary.nativeReceipt.commandCount !== committed.commandCount ||\n summary.priorStateHash !== artifact.stateHash ||\n summary.stateHash !== input.receipt.stateHash ||\n summary.requestHash !== input.receipt.requestHash ||\n !sameBytes(summary.intentBytes, input.receipt.intentBytes) ||\n !sameBytes(summary.nativeReceiptBytes, committed.nativeReceiptBytes)\n ) {\n throw new Error(\"Serialized OGAST metadata disagrees with its record\");\n }\n }\n const idempotencyKey = receiptKey(input.receipt.actorKey, input.receipt.clientTransactionId);\n if (\n aggregate.receipts.has(idempotencyKey) ||\n aggregate.transactions.has(input.serverTransactionId) ||\n aggregate.committedTransactions.has(input.serverTransactionId) ||\n aggregate.outbox.has(input.outbox.outboxId)\n ) {\n throw new Error(\"Duplicate transaction, receipt, or outbox identity\");\n }\n for (const operation of input.operations) {\n if (aggregate.operations.has(operation.operationId)) {\n throw new Error(`Duplicate operation identity: ${operation.operationId}`);\n }\n }\n if (input.receipt.modality === \"spreadsheet\") {\n for (const target of input.receipt.selectiveUndoOperationIds) {\n if (aggregate.undoClaims.has(target)) {\n throw new Error(`Duplicate selective undo claim: ${target}`);\n }\n aggregate.undoClaims.set(target, input.serverTransactionId);\n }\n }\n aggregate.receipts.set(idempotencyKey, cloneReceipt(input.receipt));\n aggregate.transactions.set(input.serverTransactionId, cloneReceipt(input.receipt));\n aggregate.committedTransactions.set(\n input.serverTransactionId,\n cloneCommittedTransaction(input.committedTransaction),\n );\n for (const operation of input.operations) {\n aggregate.operations.set(operation.operationId, cloneOperation(operation));\n }\n aggregate.outbox.set(input.outbox.outboxId, cloneOutbox(input.outbox));\n if (artifact.modality === \"spreadsheet\") {\n if (input.receipt.modality !== \"spreadsheet\") {\n throw new Error(\"Spreadsheet artifact received a serialized receipt\");\n }\n aggregate.artifact = {\n ...artifact,\n headSequence: input.receipt.sequenceEnd,\n causalFrontier: cloneFrontier(input.receipt.resultingCausalFrontier),\n stateHash: input.receipt.stateHash,\n updatedAt: laterIsoTimestamp(artifact.updatedAt, input.receipt.committedAt),\n };\n aggregate.checkpoints.set(input.receipt.sequenceEnd, {\n modality: \"spreadsheet\",\n headSequence: input.receipt.sequenceEnd,\n causalFrontier: cloneFrontier(input.receipt.resultingCausalFrontier),\n stateHash: input.receipt.stateHash,\n });\n } else {\n if (input.receipt.modality === \"spreadsheet\") {\n throw new Error(\"Serialized artifact received a spreadsheet receipt\");\n }\n aggregate.artifact = {\n ...artifact,\n headSequence: input.receipt.sequenceEnd,\n stateHash: input.receipt.stateHash,\n updatedAt: laterIsoTimestamp(artifact.updatedAt, input.receipt.committedAt),\n };\n aggregate.checkpoints.set(input.receipt.sequenceEnd, {\n modality: artifact.modality,\n headSequence: input.receipt.sequenceEnd,\n nativeRevision: input.receipt.nativeRevision,\n stateHash: input.receipt.stateHash,\n });\n }\n}\n\nclass InMemoryEditableArtifactSnapshotUnitOfWork implements EditableArtifactSnapshotUnitOfWorkPort {\n private committed = false;\n private closed = false;\n\n constructor(private readonly aggregate: ArtifactAggregate) {}\n\n artifact(): EditableArtifact {\n this.assertOpen();\n return cloneArtifact(this.aggregate.artifact);\n }\n\n async checkpoint(headSequence: number): Promise<EditableArtifactSequenceCheckpoint | null> {\n this.assertOpen();\n const checkpoint = this.aggregate.checkpoints.get(headSequence);\n return checkpoint ? cloneCheckpoint(checkpoint) : null;\n }\n\n async findSnapshot(\n snapshotId: EditableArtifactSnapshotId,\n ): Promise<EditableArtifactSnapshotMetadata | null> {\n this.assertOpen();\n const snapshot = this.aggregate.snapshots.get(snapshotId);\n return snapshot ? cloneSnapshot(snapshot) : null;\n }\n\n async commitSnapshot(\n input: CommitEditableArtifactSnapshot,\n ): Promise<Readonly<{ kind: \"committed\" }>> {\n this.assertUncommitted();\n if (\n input.authorizationPermission !== undefined &&\n input.authorizationPermission !== \"manage\" &&\n input.authorizationPermission !== \"read\" &&\n input.authorizationPermission !== \"edit\"\n ) {\n throw new TypeError(\"Snapshot authorization permission is invalid\");\n }\n const artifact = this.aggregate.artifact;\n if (input.expectedCurrentSnapshotId !== artifact.currentSnapshotId) {\n throw new Error(\"In-memory current snapshot changed inside its transaction lock\");\n }\n if (input.expectedAuthorizationRevision !== artifact.authorizationRevision) {\n throw new Error(\"In-memory artifact authorization changed before snapshot commit\");\n }\n if (\n this.aggregate.snapshots.has(input.snapshot.snapshotId) ||\n this.aggregate.outbox.has(input.outbox.outboxId)\n ) {\n throw new Error(\"Duplicate snapshot or outbox identity\");\n }\n const checkpoint = this.aggregate.checkpoints.get(input.snapshot.coveredHeadSequence);\n if (\n !checkpoint ||\n checkpoint.modality !== artifact.modality ||\n input.snapshot.modality !== artifact.modality ||\n checkpoint.stateHash !== input.snapshot.stateHash ||\n (input.snapshot.modality === \"spreadsheet\" &&\n (checkpoint.modality !== \"spreadsheet\" ||\n !causalFrontiersEqual(\n checkpoint.causalFrontier,\n input.snapshot.coveredCausalFrontier,\n ))) ||\n (input.snapshot.modality !== \"spreadsheet\" &&\n (checkpoint.modality === \"spreadsheet\" ||\n checkpoint.nativeRevision !== input.snapshot.nativeRevision))\n ) {\n throw new Error(\"Snapshot does not match an authoritative checkpoint\");\n }\n this.aggregate.snapshots.set(input.snapshot.snapshotId, cloneSnapshot(input.snapshot));\n this.aggregate.outbox.set(input.outbox.outboxId, cloneOutbox(input.outbox));\n this.aggregate.artifact = {\n ...artifact,\n currentSnapshotId: input.snapshot.snapshotId,\n updatedAt: laterIsoTimestamp(artifact.updatedAt, input.snapshot.publishedAt),\n };\n this.committed = true;\n return Object.freeze({ kind: \"committed\" as const });\n }\n\n private assertUncommitted(): void {\n this.assertOpen();\n if (this.committed) throw new Error(\"Artifact unit of work may commit exactly once\");\n }\n\n close(): void {\n this.closed = true;\n }\n\n private assertOpen(): void {\n if (this.closed) {\n throw new Error(\"Artifact unit of work is no longer inside its lock\");\n }\n }\n}\n\n/** Deterministic persisted-namespace allocator for reference tests/adapters. */\nexport class InMemoryEditableArtifactStableIdFactory implements EditableArtifactStableIdFactoryPort {\n private nextCounter: bigint;\n private readonly namespace: bigint;\n\n constructor(namespace: bigint | string, initialCounter = 1n) {\n this.namespace =\n typeof namespace === \"bigint\" ? namespace : BigInt(`0x${namespace.replace(/^0x/, \"\")}`);\n if (this.namespace < 1n || this.namespace > 0xffff_ffff_ffff_ffffn) {\n throw new TypeError(\"Stable id namespace must be a nonzero unsigned 64-bit integer\");\n }\n if (initialCounter < 1n || initialCounter > 0xffff_ffff_ffff_ffffn) {\n throw new TypeError(\"Stable id counter must be a nonzero unsigned 64-bit integer\");\n }\n this.nextCounter = initialCounter;\n }\n\n next(_kind: EditableArtifactStableIdKind): EditableArtifactStableId {\n if (this.nextCounter > 0xffff_ffff_ffff_ffffn) {\n throw new Error(\"Stable id namespace exhausted\");\n }\n const value = `${this.namespace.toString(16).padStart(16, \"0\")}${this.nextCounter\n .toString(16)\n .padStart(16, \"0\")}`;\n this.nextCounter += 1n;\n return editableArtifactOperationId(value);\n }\n}\n\nexport class SystemEditableArtifactClock implements EditableArtifactClockPort {\n now(): Date {\n return new Date();\n }\n}\n\nfunction aggregateKey(scope: EditableArtifactScope, artifactId: EditableArtifactId): string {\n return JSON.stringify([scope.accountId, scope.workspaceId, artifactId]);\n}\n\nfunction authorizationScopeKey(scope: EditableArtifactScope): string {\n return JSON.stringify([scope.accountId, scope.workspaceId]);\n}\n\nfunction creationReceiptKey(\n scope: EditableArtifactScope,\n operationKind: \"create\" | \"import\",\n authorityKey: string,\n idempotencyKey: string,\n): string {\n return JSON.stringify([\n scope.accountId,\n scope.workspaceId,\n operationKind,\n authorityKey,\n idempotencyKey,\n ]);\n}\n\nfunction emptyAggregate(\n artifact: EditableArtifact,\n genesisSnapshot: EditableArtifactSnapshotMetadata,\n outbox: EditableArtifactLiveOutboxRecord,\n): ArtifactAggregate {\n return {\n artifact,\n receipts: new Map(),\n transactions: new Map(),\n committedTransactions: new Map(),\n operations: new Map(),\n undoClaims: new Map(),\n snapshots: new Map([[genesisSnapshot.snapshotId, cloneSnapshot(genesisSnapshot)]]),\n checkpoints: new Map([\n [\n 0,\n checkpointAtGenesis(\n artifact,\n genesisSnapshot.modality === \"spreadsheet\" ? 0 : genesisSnapshot.nativeRevision,\n ),\n ],\n ]),\n outbox: new Map([[outbox.outboxId, cloneOutbox(outbox)]]),\n };\n}\n\nfunction assertGenesisCreateRequest(\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n operationKind: \"create\" | \"import\",\n snapshot: EditableArtifactSnapshotMetadata,\n outbox: EditableArtifactLiveOutboxRecord,\n): void {\n assertIsoTimestamp(snapshot.verifiedAt, \"genesis snapshot verification time\");\n assertIsoTimestamp(snapshot.publishedAt, \"genesis snapshot publication time\");\n if (\n snapshot.scope.accountId !== scope.accountId ||\n snapshot.scope.workspaceId !== scope.workspaceId ||\n snapshot.artifactId !== artifactId ||\n snapshot.coveredHeadSequence !== 0 ||\n (operationKind === \"create\" &&\n snapshot.modality === \"spreadsheet\" &&\n snapshot.coveredCausalFrontier.length !== 0) ||\n Date.parse(snapshot.verifiedAt) > Date.parse(snapshot.publishedAt)\n ) {\n throw new TypeError(\n \"Genesis snapshot is not the verified sequence-zero state for this artifact\",\n );\n }\n if (\n outbox.state !== \"pending\" ||\n outbox.attemptCount !== 0 ||\n outbox.leaseOwner !== null ||\n outbox.leaseExpiresAt !== null ||\n outbox.nextAttemptAt !== snapshot.publishedAt ||\n outbox.lastErrorCode !== null ||\n outbox.publishedAt !== null ||\n outbox.deadLetteredAt !== null ||\n outbox.createdAt !== snapshot.publishedAt ||\n outbox.event.kind !== \"snapshot_published\" ||\n outbox.event.scope.accountId !== scope.accountId ||\n outbox.event.scope.workspaceId !== scope.workspaceId ||\n outbox.event.artifactId !== artifactId ||\n outbox.event.modality !== snapshot.modality ||\n outbox.event.snapshotId !== snapshot.snapshotId ||\n outbox.event.coveredHeadSequence !== 0 ||\n outbox.event.stateHash !== snapshot.stateHash ||\n (snapshot.modality === \"spreadsheet\" &&\n (outbox.event.modality !== \"spreadsheet\" ||\n outbox.event.operationProtocolVersion !== snapshot.operationProtocolVersion)) ||\n outbox.event.publishedAt !== snapshot.publishedAt\n ) {\n throw new TypeError(\"Genesis snapshot outbox projection is inconsistent\");\n }\n}\n\nfunction receiptKey(actorKey: string, clientTransactionId: string): string {\n return JSON.stringify([actorKey, clientTransactionId]);\n}\n\nfunction sameExpectedPredecessor(\n aggregate: ArtifactAggregate,\n expected: TryCommitAppliedEditableArtifactTransactionRequest[\"expectedPredecessor\"],\n): boolean {\n if (expected === null) return true;\n const actual = aggregate.receipts.get(\n receiptKey(expected.actorKey, expected.clientTransactionId),\n );\n return (\n actual !== undefined &&\n actual.receiptId === expected.receiptId &&\n actual.serverTransactionId === expected.serverTransactionId &&\n actual.replicaId === expected.replicaId &&\n actual.replicaCounter === expected.replicaCounter\n );\n}\n\nfunction assertLeaseRequest(request: ClaimEditableArtifactLiveOutboxRequest): void {\n assertLeaseOwner(request.owner);\n assertLeaseDuration(request.leaseDurationMs);\n assertPositiveSafeInteger(request.limit, \"outbox claim limit\");\n if (request.limit > 1_000) throw new TypeError(\"Outbox claim limit must not exceed 1000\");\n}\n\nfunction assertLeaseDuration(value: number): void {\n assertPositiveSafeInteger(value, \"outbox lease duration\");\n if (value > 24 * 60 * 60 * 1000) {\n throw new TypeError(\"Outbox lease duration must not exceed 24 hours\");\n }\n}\n\nfunction assertRetryDelay(value: number): void {\n assertPositiveSafeInteger(value, \"outbox retry delay\");\n if (value > 24 * 60 * 60 * 1000) {\n throw new TypeError(\"Outbox retry delay must not exceed 24 hours\");\n }\n}\n\nfunction assertActiveOutboxLease(\n record: EditableArtifactLiveOutboxRecord,\n owner: string,\n attemptCount: number,\n nowMs: number,\n): void {\n if (\n record.state !== \"publishing\" ||\n record.leaseOwner !== owner ||\n record.attemptCount !== attemptCount ||\n !record.leaseExpiresAt ||\n nowMs >= Date.parse(record.leaseExpiresAt)\n ) {\n throw new EditableArtifactOutboxLeaseConflictError();\n }\n}\n\nfunction assertRetryErrorCode(\n value: string,\n): asserts value is EditableArtifactOutboxRetryFailureCode {\n if (\n value !== \"broker_unavailable\" &&\n value !== \"broker_backpressure\" &&\n value !== \"publish_timeout\"\n ) {\n throw new TypeError(\"Outbox retry error code is invalid\");\n }\n}\n\nfunction assertDeadLetterErrorCode(\n value: string,\n): asserts value is EditableArtifactOutboxDeadLetterFailureCode {\n if (value !== \"invalid_hint\" && value !== \"oversized_hint\") {\n throw new TypeError(\"Outbox dead-letter error code is invalid\");\n }\n}\n\nfunction assertLeaseOwner(owner: string): string {\n if (owner.length < 1 || owner.length > 256) {\n throw new TypeError(\"Outbox lease owner must contain 1-256 characters\");\n }\n return owner;\n}\n\nfunction authoritativeNow(now: () => Date): Date {\n const value = now();\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(\"Editable artifact store clock returned an invalid date\");\n }\n return new Date(value);\n}\n\nfunction laterIsoTimestamp(left: string, right: string): string {\n return Date.parse(left) >= Date.parse(right) ? left : right;\n}\n\nfunction cloneAggregate(aggregate: ArtifactAggregate): ArtifactAggregate {\n return {\n artifact: cloneArtifact(aggregate.artifact),\n receipts: new Map([...aggregate.receipts].map(([key, value]) => [key, cloneReceipt(value)])),\n transactions: new Map(\n [...aggregate.transactions].map(([key, value]) => [key, cloneReceipt(value)]),\n ),\n committedTransactions: new Map(\n [...aggregate.committedTransactions].map(([key, value]) => [\n key,\n cloneCommittedTransaction(value),\n ]),\n ),\n operations: new Map(\n [...aggregate.operations].map(([key, value]) => [key, cloneOperation(value)]),\n ),\n undoClaims: new Map(aggregate.undoClaims),\n snapshots: new Map([...aggregate.snapshots].map(([key, value]) => [key, cloneSnapshot(value)])),\n checkpoints: new Map(\n [...aggregate.checkpoints].map(([key, value]) => [key, cloneCheckpoint(value)]),\n ),\n outbox: new Map([...aggregate.outbox].map(([key, value]) => [key, cloneOutbox(value)])),\n };\n}\n\nfunction kernelStateFromAggregate(aggregate: ArtifactAggregate): EditableArtifactKernelState {\n const snapshot = aggregate.artifact.currentSnapshotId\n ? (aggregate.snapshots.get(aggregate.artifact.currentSnapshotId) ?? null)\n : null;\n const artifact = cloneArtifact(aggregate.artifact);\n const covered = snapshot?.coveredHeadSequence ?? 0;\n const coveredCheckpoint = aggregate.checkpoints.get(covered);\n if (!coveredCheckpoint || coveredCheckpoint.modality !== artifact.modality) {\n throw new Error(\"Artifact replay base has no matching checkpoint\");\n }\n const tail = [...aggregate.committedTransactions.values()]\n .filter((transaction) => transaction.sequenceEnd > covered)\n .sort((left, right) => left.sequenceStart - right.sequenceStart)\n .map(cloneCommittedTransaction);\n const tailByteSize = tail.reduce(\n (total, transaction) => total + transaction.committedTransactionBytes.byteLength,\n 0,\n );\n const common = {\n tailTransactionCount: tail.length,\n tailByteSize,\n } as const;\n if (artifact.modality === \"spreadsheet\") {\n return Object.freeze({\n ...common,\n modality: artifact.modality,\n artifact,\n snapshot: snapshot?.modality === \"spreadsheet\" ? cloneSnapshot(snapshot) : null,\n committedTransactionTail: Object.freeze(\n tail.map((transaction) => {\n if (transaction.modality !== \"spreadsheet\") {\n throw new Error(\"Spreadsheet artifact contains a cross-modality transaction\");\n }\n return transaction;\n }),\n ),\n });\n }\n return Object.freeze({\n ...common,\n modality: artifact.modality,\n artifact,\n snapshot: snapshot && snapshot.modality !== \"spreadsheet\" ? cloneSnapshot(snapshot) : null,\n baseNativeRevision:\n coveredCheckpoint.modality === \"spreadsheet\"\n ? (() => {\n throw new Error(\"Serialized artifact has a spreadsheet replay checkpoint\");\n })()\n : coveredCheckpoint.nativeRevision,\n committedTransactionTail: Object.freeze(\n tail.map((transaction) => {\n if (transaction.modality !== artifact.modality) {\n throw new Error(\"Serialized artifact contains a cross-modality transaction\");\n }\n return transaction;\n }),\n ),\n });\n}\n\nfunction cloneArtifact(artifact: EditableArtifact): EditableArtifact {\n if (artifact.modality !== \"spreadsheet\") {\n return Object.freeze({\n ...artifact,\n scope: Object.freeze({ ...artifact.scope }),\n });\n }\n return Object.freeze({\n ...artifact,\n scope: Object.freeze({ ...artifact.scope }),\n causalFrontier: cloneFrontier(artifact.causalFrontier),\n });\n}\n\nfunction cloneCreationReceipt(\n receipt: EditableArtifactCreationReceipt,\n): EditableArtifactCreationReceipt {\n return Object.freeze({\n ...receipt,\n scope: Object.freeze({ ...receipt.scope }),\n });\n}\n\nfunction cloneReceipt(receipt: EditableArtifactReceipt): EditableArtifactReceipt {\n if (receipt.modality !== \"spreadsheet\") {\n return Object.freeze({\n ...receipt,\n scope: Object.freeze({ ...receipt.scope }),\n intentBytes: receipt.intentBytes.slice(),\n });\n }\n return Object.freeze({\n ...receipt,\n scope: Object.freeze({ ...receipt.scope }),\n intentBytes: receipt.intentBytes.slice(),\n causalBase: cloneFrontier(receipt.causalBase),\n resolvedCausalBase: cloneFrontier(receipt.resolvedCausalBase),\n resultingCausalFrontier: cloneFrontier(receipt.resultingCausalFrontier),\n selectiveUndoOperationIds: Object.freeze([...receipt.selectiveUndoOperationIds]),\n });\n}\n\nfunction cloneOperation(\n operation: EditableArtifactOperationRecord,\n): EditableArtifactOperationRecord {\n return Object.freeze({\n ...operation,\n scope: Object.freeze({ ...operation.scope }),\n dot: Object.freeze({ ...operation.dot }),\n });\n}\n\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactSpreadsheetCommittedTransactionRecord,\n): EditableArtifactSpreadsheetCommittedTransactionRecord;\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactSerializedCommittedTransactionRecord,\n): EditableArtifactSerializedCommittedTransactionRecord;\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactCommittedTransactionRecord,\n): EditableArtifactCommittedTransactionRecord;\nfunction cloneCommittedTransaction(\n transaction: EditableArtifactCommittedTransactionRecord,\n): EditableArtifactCommittedTransactionRecord {\n if (transaction.modality !== \"spreadsheet\") {\n return Object.freeze({\n ...transaction,\n scope: Object.freeze({ ...transaction.scope }),\n nativeReceiptBytes: transaction.nativeReceiptBytes.slice(),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n });\n }\n return Object.freeze({\n ...transaction,\n scope: Object.freeze({ ...transaction.scope }),\n dot: Object.freeze({ ...transaction.dot }),\n resolvedCausalBase: cloneFrontier(transaction.resolvedCausalBase),\n resultingCausalFrontier: cloneFrontier(transaction.resultingCausalFrontier),\n operationIds: Object.freeze([...transaction.operationIds]),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n });\n}\n\nfunction cloneSnapshot(\n snapshot: EditableArtifactSpreadsheetSnapshotMetadata,\n): EditableArtifactSpreadsheetSnapshotMetadata;\nfunction cloneSnapshot(\n snapshot: EditableArtifactSerializedSnapshotMetadata,\n): EditableArtifactSerializedSnapshotMetadata;\nfunction cloneSnapshot(\n snapshot: EditableArtifactSnapshotMetadata,\n): EditableArtifactSnapshotMetadata;\nfunction cloneSnapshot(\n snapshot: EditableArtifactSnapshotMetadata,\n): EditableArtifactSnapshotMetadata {\n if (snapshot.modality !== \"spreadsheet\") {\n return Object.freeze({\n ...snapshot,\n scope: Object.freeze({ ...snapshot.scope }),\n });\n }\n return Object.freeze({\n ...snapshot,\n scope: Object.freeze({ ...snapshot.scope }),\n coveredCausalFrontier: cloneFrontier(snapshot.coveredCausalFrontier),\n });\n}\n\nfunction cloneCheckpoint(\n checkpoint: EditableArtifactSequenceCheckpoint,\n): EditableArtifactSequenceCheckpoint {\n if (checkpoint.modality !== \"spreadsheet\") {\n return Object.freeze({ ...checkpoint });\n }\n return Object.freeze({\n ...checkpoint,\n causalFrontier: cloneFrontier(checkpoint.causalFrontier),\n });\n}\n\nfunction checkpointAtGenesis(\n artifact: EditableArtifact,\n nativeRevision = 0,\n): EditableArtifactSequenceCheckpoint {\n return artifact.modality === \"spreadsheet\"\n ? Object.freeze({\n modality: \"spreadsheet\" as const,\n headSequence: 0,\n causalFrontier: editableArtifactCausalFrontier([]),\n stateHash: artifact.stateHash,\n })\n : Object.freeze({\n modality: artifact.modality,\n headSequence: 0,\n nativeRevision,\n stateHash: artifact.stateHash,\n });\n}\n\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n let difference = 0;\n for (let index = 0; index < left.byteLength; index += 1) {\n difference |= left[index]! ^ right[index]!;\n }\n return difference === 0;\n}\n\nfunction cloneOutbox(record: EditableArtifactLiveOutboxRecord): EditableArtifactLiveOutboxRecord {\n return Object.freeze({\n ...record,\n event: Object.freeze({\n ...record.event,\n scope: Object.freeze({ ...record.event.scope }),\n }),\n });\n}\n\nfunction cloneFrontier<T extends readonly { replicaId: string; counter: number }[]>(\n frontier: T,\n): T {\n return Object.freeze(frontier.map((entry) => Object.freeze({ ...entry }))) as unknown as T;\n}\n\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n","import type {\n PostgresEditableArtifactLiveReadStore,\n PostgresEditableArtifactLiveTicketStore,\n PostgresEditableArtifactStore,\n} from \"@opengeni/db/editable-artifacts\";\nimport type {\n EditableArtifactAuthorizationRevisionPort,\n EditableArtifactScopeAuthorizationRevisionPort,\n EditableArtifactStorePort,\n} from \"./ports\";\nimport type {\n EditableArtifactLiveReadPort,\n EditableArtifactLiveTicketStorePort,\n} from \"../../editable-artifact-live/ports\";\n\n/**\n * One-way nominal adapters over DB DTOs. The PostgreSQL implementations fully\n * validate and detach every returned value; only core applies branded domain\n * names to those already-validated wire-identical shapes.\n */\nexport function editableArtifactStorePortFromPostgres(\n store: PostgresEditableArtifactStore,\n): EditableArtifactStorePort {\n return store as unknown as EditableArtifactStorePort;\n}\n\nexport function editableArtifactAuthorizationRevisionPortFromPostgres(\n store: PostgresEditableArtifactStore,\n): EditableArtifactAuthorizationRevisionPort {\n return store as unknown as EditableArtifactAuthorizationRevisionPort;\n}\n\nexport function editableArtifactScopeAuthorizationRevisionPortFromPostgres(\n store: PostgresEditableArtifactStore,\n): EditableArtifactScopeAuthorizationRevisionPort {\n return store as unknown as EditableArtifactScopeAuthorizationRevisionPort;\n}\n\nexport function editableArtifactLiveReadPortFromPostgres(\n store: PostgresEditableArtifactLiveReadStore,\n): EditableArtifactLiveReadPort {\n return store as unknown as EditableArtifactLiveReadPort;\n}\n\nexport function editableArtifactLiveTicketStorePortFromPostgres(\n store: PostgresEditableArtifactLiveTicketStore,\n): EditableArtifactLiveTicketStorePort {\n return store as unknown as EditableArtifactLiveTicketStorePort;\n}\n","import { type BoundedImmutableObjectWritePort, BoundedObjectWriteError } from \"@opengeni/storage\";\nimport { EDITABLE_ARTIFACT_CODEC_REGISTRY } from \"@opengeni/contracts/editable-artifacts\";\nimport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\n\nimport type { EditableArtifactCompactionPort, EditableArtifactKernelState } from \"./ports\";\nimport {\n MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES,\n EditableArtifactSnapshotVerificationError,\n} from \"./snapshot-verifier\";\nimport {\n assertBoundedKernelVersion,\n causalFrontiersEqual,\n editableArtifactCausalFrontier,\n editableArtifactContentHash,\n editableArtifactId,\n editableArtifactScope,\n editableArtifactSnapshotId,\n editableArtifactStateHash,\n type EditableArtifactCausalFrontier,\n type EditableArtifactContentHash,\n type EditableArtifactId,\n type EditableArtifactModality,\n type EditableArtifactScope,\n type EditableArtifactStateHash,\n type PublishEditableArtifactSnapshotRequest,\n} from \"./types\";\n\nconst SNAPSHOT_MIME_TYPE = \"application/vnd.opengeni.editable-artifact-snapshot\" as const;\n\ntype AuthoritativeEditableArtifactCompactionKernelResultCommon = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n canonicalChunks: AsyncIterable<Uint8Array>;\n canonicalByteSize: number;\n canonicalContentHash: EditableArtifactContentHash;\n stateHash: EditableArtifactStateHash;\n coveredHeadSequence: number;\n modelSchemaVersion: number;\n kernelVersion: string;\n}>;\n\nexport type AuthoritativeEditableArtifactCompactionKernelResult =\n | (AuthoritativeEditableArtifactCompactionKernelResultCommon &\n Readonly<{\n modality: \"spreadsheet\";\n coveredCausalFrontier: EditableArtifactCausalFrontier;\n operationProtocolVersion: number;\n crdtStateVersion: number;\n }>)\n | (AuthoritativeEditableArtifactCompactionKernelResultCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n nativeRevision: number;\n }>);\n\n/** Native authority that replays one detached durable basis without network access. */\nexport interface AuthoritativeEditableArtifactCompactionKernelPort {\n createCanonicalSnapshot(input: {\n state: EditableArtifactKernelState;\n signal?: AbortSignal;\n }): Promise<AuthoritativeEditableArtifactCompactionKernelResult>;\n}\n\nexport type EditableArtifactCompactionPipelineDependencies = Readonly<{\n kernel: AuthoritativeEditableArtifactCompactionKernelPort;\n objects: BoundedImmutableObjectWritePort;\n now: () => Date;\n maxSnapshotBytes?: number;\n}>;\n\n/** Reconstruct, canonicalize, and upload an exact-head state-neutral snapshot. */\nexport class EditableArtifactCompactionPipeline implements EditableArtifactCompactionPort {\n readonly #dependencies: Readonly<{\n kernel: AuthoritativeEditableArtifactCompactionKernelPort;\n objects: BoundedImmutableObjectWritePort;\n now: () => Date;\n maxSnapshotBytes: number;\n }>;\n\n constructor(dependencies: EditableArtifactCompactionPipelineDependencies) {\n const maxSnapshotBytes = dependencies.maxSnapshotBytes ?? MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES;\n if (\n !Number.isSafeInteger(maxSnapshotBytes) ||\n maxSnapshotBytes <= 0 ||\n maxSnapshotBytes > MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES\n ) {\n throw new TypeError(\"Compaction snapshot limit is invalid\");\n }\n this.#dependencies = Object.freeze({ ...dependencies, maxSnapshotBytes });\n }\n\n async prepare(\n input: Parameters<EditableArtifactCompactionPort[\"prepare\"]>[0],\n ): Promise<PublishEditableArtifactSnapshotRequest> {\n const scope = editableArtifactScope(input.scope);\n const artifactId = editableArtifactId(input.artifactId);\n const snapshotId = editableArtifactSnapshotId(input.snapshotId);\n validateBasis(input.state, scope, artifactId);\n throwIfCancelled(input.signal);\n try {\n const generated = await this.#dependencies.kernel.createCanonicalSnapshot({\n state: input.state,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n validateGenerated(generated, input.state, scope, artifactId);\n const stored = await this.#dependencies.objects.write({\n chunks: generated.canonicalChunks,\n contentType: SNAPSHOT_MIME_TYPE,\n maxBytes: this.#dependencies.maxSnapshotBytes,\n expectedByteSize: generated.canonicalByteSize,\n expectedContentHash: generated.canonicalContentHash,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const common = {\n snapshotId,\n blobReference: stored.opaqueReference,\n byteSize: stored.byteSize,\n contentHash: editableArtifactContentHash(stored.contentHash),\n mimeType: SNAPSHOT_MIME_TYPE,\n modality: generated.modality,\n coveredHeadSequence: generated.coveredHeadSequence,\n stateHash: generated.stateHash,\n modelSchemaVersion: generated.modelSchemaVersion,\n kernelVersion: generated.kernelVersion,\n verifiedAt: canonicalTimestamp(this.#dependencies.now()),\n } as const;\n return generated.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: generated.modality,\n coveredCausalFrontier: generated.coveredCausalFrontier,\n operationProtocolVersion: generated.operationProtocolVersion,\n crdtStateVersion: generated.crdtStateVersion,\n })\n : Object.freeze({\n ...common,\n modality: generated.modality,\n nativeRevision: generated.nativeRevision,\n });\n } catch (error) {\n if (\n error instanceof EditableArtifactSnapshotVerificationError ||\n error instanceof BoundedObjectWriteError\n ) {\n throw error;\n }\n if (input.signal?.aborted) {\n throw new EditableArtifactSnapshotVerificationError(\"cancelled\");\n }\n throw new EditableArtifactSnapshotVerificationError(\"kernel_rejected\");\n }\n }\n}\n\nfunction validateBasis(\n state: EditableArtifactKernelState,\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n): void {\n if (\n state.artifact.scope.accountId !== scope.accountId ||\n state.artifact.scope.workspaceId !== scope.workspaceId ||\n state.artifact.id !== artifactId ||\n state.artifact.modality !== state.modality\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"identity_mismatch\");\n }\n for (const value of [state.tailTransactionCount, state.tailByteSize]) {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new EditableArtifactSnapshotVerificationError(\"coverage_mismatch\");\n }\n }\n}\n\nfunction validateGenerated(\n value: AuthoritativeEditableArtifactCompactionKernelResult,\n state: EditableArtifactKernelState,\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n): void {\n const currentCodec = EDITABLE_ARTIFACT_CODEC_REGISTRY[value.modality];\n if (\n value.scope.accountId !== scope.accountId ||\n value.scope.workspaceId !== scope.workspaceId ||\n value.artifactId !== artifactId ||\n value.modality !== state.modality\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"identity_mismatch\");\n }\n if (\n value.coveredHeadSequence !== state.artifact.headSequence ||\n editableArtifactStateHash(value.stateHash) !== state.artifact.stateHash ||\n (value.modality === \"spreadsheet\" &&\n (state.modality !== \"spreadsheet\" ||\n !causalFrontiersEqual(\n editableArtifactCausalFrontier(value.coveredCausalFrontier),\n state.artifact.causalFrontier,\n ))) ||\n (value.modality !== \"spreadsheet\" &&\n (state.modality === \"spreadsheet\" || value.nativeRevision !== expectedNativeRevision(state)))\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"coverage_mismatch\");\n }\n if (\n !Number.isSafeInteger(value.canonicalByteSize) ||\n value.canonicalByteSize <= 0 ||\n value.canonicalByteSize > MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"limit_exceeded\");\n }\n editableArtifactContentHash(value.canonicalContentHash);\n if (\n value.modelSchemaVersion !== currentCodec.modelSchemaVersion ||\n (value.modality === \"spreadsheet\" &&\n (value.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION ||\n value.crdtStateVersion !== currentCodec.snapshotVersion))\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"version_mismatch\");\n }\n try {\n assertBoundedKernelVersion(value.kernelVersion);\n } catch {\n throw new EditableArtifactSnapshotVerificationError(\"version_mismatch\");\n }\n if (!value.canonicalChunks || typeof value.canonicalChunks[Symbol.asyncIterator] !== \"function\") {\n throw new EditableArtifactSnapshotVerificationError(\"kernel_rejected\");\n }\n}\n\nfunction expectedNativeRevision(\n state: Extract<EditableArtifactKernelState, { modality: \"document\" | \"presentation\" }>,\n): number {\n return (\n state.committedTransactionTail.at(-1)?.nativeRevision ??\n state.snapshot?.nativeRevision ??\n state.baseNativeRevision\n );\n}\n\nfunction canonicalTimestamp(value: Date): string {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(\"Compaction verification clock returned an invalid date\");\n }\n return value.toISOString();\n}\n\nfunction throwIfCancelled(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw new EditableArtifactSnapshotVerificationError(\"cancelled\");\n}\n","import { type BoundedImmutableObjectWritePort, BoundedObjectWriteError } from \"@opengeni/storage\";\nimport { EDITABLE_ARTIFACT_CODEC_REGISTRY } from \"@opengeni/contracts/editable-artifacts\";\nimport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport type { EditableArtifactGenesisPort } from \"./ports\";\nimport {\n MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES,\n EditableArtifactSnapshotVerificationError,\n} from \"./snapshot-verifier\";\nimport {\n editableArtifactCausalFrontier,\n assertBoundedKernelVersion,\n editableArtifactContentHash,\n editableArtifactId,\n editableArtifactScope,\n editableArtifactSnapshotId,\n editableArtifactStateHash,\n type EditableArtifactCausalFrontier,\n type EditableArtifactContentHash,\n type EditableArtifactId,\n type EditableArtifactModality,\n type EditableArtifactScope,\n type EditableArtifactStateHash,\n type PublishEditableArtifactSnapshotRequest,\n} from \"./types\";\n\nconst SNAPSHOT_MIME_TYPE = \"application/vnd.opengeni.editable-artifact-snapshot\" as const;\n\ntype AuthoritativeEditableArtifactGenesisKernelResultCommon = Readonly<{\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n canonicalChunks: AsyncIterable<Uint8Array>;\n canonicalByteSize: number;\n canonicalContentHash: EditableArtifactContentHash;\n stateHash: EditableArtifactStateHash;\n coveredHeadSequence: 0;\n modelSchemaVersion: number;\n kernelVersion: string;\n}>;\n\nexport type AuthoritativeEditableArtifactGenesisKernelResult =\n | (AuthoritativeEditableArtifactGenesisKernelResultCommon &\n Readonly<{\n modality: \"spreadsheet\";\n coveredCausalFrontier: EditableArtifactCausalFrontier;\n operationProtocolVersion: number;\n crdtStateVersion: number;\n }>)\n | (AuthoritativeEditableArtifactGenesisKernelResultCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n nativeRevision: 0;\n }>);\n\n/** Trusted no-network native-kernel subprocess; never an HTTP request adapter. */\nexport interface AuthoritativeEditableArtifactGenesisKernelPort {\n createCanonicalEmptySnapshot(input: {\n scope: EditableArtifactScope;\n artifactId: EditableArtifactId;\n modality: EditableArtifactModality;\n signal?: AbortSignal;\n }): Promise<AuthoritativeEditableArtifactGenesisKernelResult>;\n}\n\nexport type EditableArtifactGenesisPipelineDependencies = Readonly<{\n kernel: AuthoritativeEditableArtifactGenesisKernelPort;\n objects: BoundedImmutableObjectWritePort;\n now: () => Date;\n maxSnapshotBytes?: number;\n}>;\n\n/**\n * Creates the only legal sequence-zero candidate. The domain service passes\n * the result through its unchanged snapshot verifier, then commits artifact +\n * checkpoint-0 + snapshot + blob-ref + receipt + outbox atomically.\n */\nexport class EditableArtifactGenesisPipeline implements EditableArtifactGenesisPort {\n readonly #dependencies: Readonly<{\n kernel: AuthoritativeEditableArtifactGenesisKernelPort;\n objects: BoundedImmutableObjectWritePort;\n now: () => Date;\n maxSnapshotBytes: number;\n }>;\n\n constructor(dependencies: EditableArtifactGenesisPipelineDependencies) {\n const maxSnapshotBytes = dependencies.maxSnapshotBytes ?? MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES;\n if (\n !Number.isSafeInteger(maxSnapshotBytes) ||\n maxSnapshotBytes <= 0 ||\n maxSnapshotBytes > MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES\n ) {\n throw new TypeError(\"Genesis snapshot limit is invalid\");\n }\n this.#dependencies = Object.freeze({\n kernel: dependencies.kernel,\n objects: dependencies.objects,\n now: dependencies.now,\n maxSnapshotBytes,\n });\n }\n\n async prepare(\n input: Parameters<EditableArtifactGenesisPort[\"prepare\"]>[0],\n ): Promise<PublishEditableArtifactSnapshotRequest> {\n const scope = editableArtifactScope(input.scope);\n const artifactId = editableArtifactId(input.artifactId);\n const snapshotId = editableArtifactSnapshotId(input.snapshotId);\n if (!isModality(input.modality)) {\n throw new TypeError(\"Genesis modality is invalid\");\n }\n throwIfGenesisCancelled(input.signal);\n try {\n const generated = await this.#dependencies.kernel.createCanonicalEmptySnapshot({\n scope,\n artifactId,\n modality: input.modality,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n validateGeneratedGenesis(generated, scope, artifactId, input.modality);\n const stored = await this.#dependencies.objects.write({\n chunks: generated.canonicalChunks,\n contentType: SNAPSHOT_MIME_TYPE,\n maxBytes: this.#dependencies.maxSnapshotBytes,\n expectedByteSize: generated.canonicalByteSize,\n expectedContentHash: generated.canonicalContentHash,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n const verifiedAt = canonicalTimestamp(this.#dependencies.now());\n const common = {\n snapshotId,\n blobReference: stored.opaqueReference,\n byteSize: stored.byteSize,\n contentHash: editableArtifactContentHash(stored.contentHash),\n mimeType: SNAPSHOT_MIME_TYPE,\n modality: generated.modality,\n coveredHeadSequence: 0,\n stateHash: generated.stateHash,\n modelSchemaVersion: generated.modelSchemaVersion,\n kernelVersion: generated.kernelVersion,\n verifiedAt,\n } as const;\n return generated.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n coveredCausalFrontier: editableArtifactCausalFrontier([]),\n operationProtocolVersion: generated.operationProtocolVersion,\n crdtStateVersion: generated.crdtStateVersion,\n })\n : Object.freeze({\n ...common,\n modality: generated.modality,\n nativeRevision: generated.nativeRevision,\n });\n } catch (error) {\n if (\n error instanceof EditableArtifactSnapshotVerificationError ||\n error instanceof BoundedObjectWriteError\n ) {\n throw error;\n }\n if (input.signal?.aborted) {\n throw new EditableArtifactSnapshotVerificationError(\"cancelled\");\n }\n // Native generation diagnostics may contain internal paths. Preserve no\n // cause across this service boundary.\n throw new EditableArtifactSnapshotVerificationError(\"kernel_rejected\");\n }\n }\n}\n\nfunction validateGeneratedGenesis(\n value: AuthoritativeEditableArtifactGenesisKernelResult,\n scope: EditableArtifactScope,\n artifactId: EditableArtifactId,\n modality: EditableArtifactModality,\n): void {\n const currentCodec = EDITABLE_ARTIFACT_CODEC_REGISTRY[value.modality];\n if (\n value.scope.accountId !== scope.accountId ||\n value.scope.workspaceId !== scope.workspaceId ||\n value.artifactId !== artifactId ||\n value.modality !== modality\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"identity_mismatch\");\n }\n if (\n value.coveredHeadSequence !== 0 ||\n (value.modality === \"spreadsheet\"\n ? editableArtifactCausalFrontier(value.coveredCausalFrontier).length !== 0\n : value.nativeRevision !== 0)\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"coverage_mismatch\");\n }\n if (\n !Number.isSafeInteger(value.canonicalByteSize) ||\n value.canonicalByteSize <= 0 ||\n value.canonicalByteSize > MAX_EDITABLE_ARTIFACT_SNAPSHOT_BYTES\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"limit_exceeded\");\n }\n editableArtifactContentHash(value.canonicalContentHash);\n editableArtifactStateHash(value.stateHash);\n if (\n value.modelSchemaVersion !== currentCodec.modelSchemaVersion ||\n (value.modality === \"spreadsheet\" &&\n (value.operationProtocolVersion !== COMMITTED_TRANSACTION_PROTOCOL_VERSION ||\n value.crdtStateVersion !== currentCodec.snapshotVersion))\n ) {\n throw new EditableArtifactSnapshotVerificationError(\"version_mismatch\");\n }\n try {\n assertBoundedKernelVersion(value.kernelVersion);\n } catch {\n throw new EditableArtifactSnapshotVerificationError(\"version_mismatch\");\n }\n if (!value.canonicalChunks || typeof value.canonicalChunks[Symbol.asyncIterator] !== \"function\") {\n throw new EditableArtifactSnapshotVerificationError(\"kernel_rejected\");\n }\n}\n\nfunction canonicalTimestamp(value: Date): string {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(\"Genesis verification clock returned an invalid date\");\n }\n return value.toISOString();\n}\n\nfunction isModality(value: unknown): value is EditableArtifactModality {\n return value === \"spreadsheet\" || value === \"presentation\" || value === \"document\";\n}\n\nfunction throwIfGenesisCancelled(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n throw new EditableArtifactSnapshotVerificationError(\"cancelled\");\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES } from \"@opengeni/contracts/editable-artifacts\";\n\ndeclare const editableArtifactMaterializationKeyBrand: unique symbol;\n\nexport type EditableArtifactMaterializationKey = string & {\n readonly [editableArtifactMaterializationKeyBrand]: true;\n};\n\nexport type EditableArtifactMaterializationKeyInput = Readonly<{\n stateHash: string;\n format: string;\n /** SHA-256 of the canonical, normalized export options. */\n optionsHash: string;\n codecVersion: string;\n kernelVersion: string;\n fontRegistryHash: string;\n policyHash: string;\n}>;\n\nconst SHA256_PATTERN = /^sha256:[0-9a-f]{64}$/;\nconst FORMAT_PATTERN = /^[a-z0-9][a-z0-9.+_-]{0,63}$/;\nconst VERSION_PATTERN = /^[\\x21-\\x7e]+$/;\n\n/**\n * Complete materialization identity from docs/artifact-engine.md. Length\n * framing prevents concatenation ambiguity and the output is safe as a DB\n * idempotency key; it is deliberately not an object-storage key.\n */\nexport function editableArtifactMaterializationKey(\n input: EditableArtifactMaterializationKeyInput,\n): EditableArtifactMaterializationKey {\n for (const [label, value] of [\n [\"state hash\", input.stateHash],\n [\"options hash\", input.optionsHash],\n [\"font registry hash\", input.fontRegistryHash],\n [\"policy hash\", input.policyHash],\n ] as const) {\n if (!SHA256_PATTERN.test(value)) {\n throw new TypeError(`${label} must be a canonical SHA-256 digest`);\n }\n }\n if (!FORMAT_PATTERN.test(input.format)) {\n throw new TypeError(\"materialization format is invalid\");\n }\n if (!VERSION_PATTERN.test(input.codecVersion) || input.codecVersion.length > 128) {\n throw new TypeError(\"codec version is invalid\");\n }\n if (\n !VERSION_PATTERN.test(input.kernelVersion) ||\n input.kernelVersion.length > EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES\n ) {\n throw new TypeError(\"kernel version is invalid\");\n }\n const fields = [\n input.stateHash,\n input.format,\n input.optionsHash,\n input.codecVersion,\n input.kernelVersion,\n input.fontRegistryHash,\n input.policyHash,\n ];\n const digest = createHash(\"sha256\");\n digest.update(\"OpenGeni editable artifact materialization\\0v1\\0\", \"utf8\");\n for (const field of fields) {\n const bytes = Buffer.from(field, \"utf8\");\n const length = Buffer.allocUnsafe(4);\n length.writeUInt32BE(bytes.byteLength);\n digest.update(length);\n digest.update(bytes);\n }\n return `materialization:v1:sha256:${digest.digest(\"hex\")}` as EditableArtifactMaterializationKey;\n}\n"],"mappings":"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","names":["createHash","createHash","sameBytes","BoundedObjectWriteError","EDITABLE_ARTIFACT_CODEC_REGISTRY","COMMITTED_TRANSACTION_PROTOCOL_VERSION","SNAPSHOT_MIME_TYPE","canonicalTimestamp","BoundedObjectWriteError","EDITABLE_ARTIFACT_CODEC_REGISTRY","COMMITTED_TRANSACTION_PROTOCOL_VERSION","createHash"]}
|
|
@@ -30,6 +30,7 @@ export type EditableArtifactAgentContext = Readonly<{
|
|
|
30
30
|
}>;
|
|
31
31
|
export type EditableArtifactAgentMetadata = Readonly<{
|
|
32
32
|
id: string;
|
|
33
|
+
artifactReference: string;
|
|
33
34
|
modality: EditableArtifactModality;
|
|
34
35
|
title: string;
|
|
35
36
|
lifecycle: EditableArtifact["lifecycle"];
|
|
@@ -116,6 +117,12 @@ export type EditableArtifactAgentApplicationDependencies = Readonly<{
|
|
|
116
117
|
exports: EditableArtifactDurableExportService;
|
|
117
118
|
associations: EditableArtifactAgentAssociationPort;
|
|
118
119
|
inspector: EditableArtifactAgentInspectionKernelPort;
|
|
120
|
+
/** Production persists proof only after a successful native query. */
|
|
121
|
+
recordInspection?: (input: EditableArtifactAgentContext & {
|
|
122
|
+
artifact: EditableArtifactAgentMetadata;
|
|
123
|
+
queryHash: string;
|
|
124
|
+
queryKind: string;
|
|
125
|
+
}) => Promise<string>;
|
|
119
126
|
officeImports: EditableArtifactOfficeImportPort;
|
|
120
127
|
workspaceFiles: EditableArtifactAgentWorkspaceFilePort;
|
|
121
128
|
}>;
|
|
@@ -151,6 +158,7 @@ export declare class EditableArtifactAgentApplication {
|
|
|
151
158
|
}>): Promise<Readonly<{
|
|
152
159
|
artifact: EditableArtifactAgentMetadata;
|
|
153
160
|
projection: unknown;
|
|
161
|
+
inspectionReceiptId?: string;
|
|
154
162
|
}>>;
|
|
155
163
|
apply(input: EditableArtifactAgentContext & Readonly<{
|
|
156
164
|
artifactId: EditableArtifactId;
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
editableArtifactStorePortFromPostgres,
|
|
22
22
|
validateEditableArtifactMaterializationJob,
|
|
23
23
|
validateEditableArtifactPinnedVersion
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-TFHSE7XR.js";
|
|
25
25
|
import {
|
|
26
26
|
EDITABLE_ARTIFACT_COMPACTION_BYTE_THRESHOLD,
|
|
27
27
|
EDITABLE_ARTIFACT_COMPACTION_TRANSACTION_THRESHOLD,
|