@opengeni/db 0.28.9 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/attached-browser-devices.d.ts +42 -0
  2. package/dist/attempt-tool-catalogs.d.ts +16 -0
  3. package/dist/browser-auth.d.ts +299 -0
  4. package/dist/browser-downloads.d.ts +51 -0
  5. package/dist/browser-identities.d.ts +137 -0
  6. package/dist/browser-sessions.d.ts +354 -0
  7. package/dist/browser-state-artifacts.d.ts +91 -0
  8. package/dist/canonical-human-identities.d.ts +48 -0
  9. package/dist/canonical-human-identities.js +28 -0
  10. package/dist/canonical-human-identities.js.map +1 -0
  11. package/dist/capability-components.d.ts +37 -0
  12. package/dist/capability-integrations.d.ts +194 -0
  13. package/dist/chunk-5KTIEDX7.js +13200 -0
  14. package/dist/chunk-5KTIEDX7.js.map +1 -0
  15. package/dist/chunk-CQZ4QSP5.js +995 -0
  16. package/dist/chunk-CQZ4QSP5.js.map +1 -0
  17. package/dist/chunk-F32YT7MP.js +117 -0
  18. package/dist/chunk-F32YT7MP.js.map +1 -0
  19. package/dist/chunk-JC5QPLUM.js +666 -0
  20. package/dist/chunk-JC5QPLUM.js.map +1 -0
  21. package/dist/chunk-P3RE4D2B.js +3535 -0
  22. package/dist/chunk-P3RE4D2B.js.map +1 -0
  23. package/dist/chunk-TAUTWOS5.js +259 -0
  24. package/dist/chunk-TAUTWOS5.js.map +1 -0
  25. package/dist/chunk-VKLB2ZGI.js +2389 -0
  26. package/dist/chunk-VKLB2ZGI.js.map +1 -0
  27. package/dist/codemode-operations.d.ts +117 -0
  28. package/dist/codex-token-resolver.d.ts +2 -2
  29. package/dist/company-profile-schema.d.ts +798 -0
  30. package/dist/company-profile.d.ts +268 -0
  31. package/dist/computer-sessions.d.ts +109 -0
  32. package/dist/connection-token-resolver.d.ts +9 -4
  33. package/dist/database.d.ts +57 -3
  34. package/dist/editable-artifact-durable-export.d.ts +153 -0
  35. package/dist/editable-artifact-durable-export.js +788 -0
  36. package/dist/editable-artifact-durable-export.js.map +1 -0
  37. package/dist/editable-artifact-materialization.d.ts +123 -0
  38. package/dist/editable-artifacts-schema.d.ts +4152 -0
  39. package/dist/editable-artifacts.d.ts +610 -0
  40. package/dist/editable-artifacts.js +26 -0
  41. package/dist/editable-artifacts.js.map +1 -0
  42. package/dist/generated-images.d.ts +139 -0
  43. package/dist/index.d.ts +1122 -126
  44. package/dist/index.js +42329 -18407
  45. package/dist/index.js.map +1 -1
  46. package/dist/insights.d.ts +73 -10
  47. package/dist/integration-bindings.d.ts +70 -0
  48. package/dist/integration-facets.d.ts +99 -0
  49. package/dist/interaction-revisions.d.ts +14 -0
  50. package/dist/interaction-schema.d.ts +6036 -0
  51. package/dist/knowledge-source-sync-schema.d.ts +1679 -0
  52. package/dist/knowledge-source-sync.d.ts +274 -0
  53. package/dist/memory-governance.d.ts +2 -2
  54. package/dist/memory-slack-delivery.d.ts +101 -0
  55. package/dist/new-session-drafts.d.ts +2 -2
  56. package/dist/pack-components.d.ts +76 -0
  57. package/dist/pack-installations.d.ts +86 -0
  58. package/dist/persistence-errors.d.ts +3 -3
  59. package/dist/plugin-packages.d.ts +126 -0
  60. package/dist/preference-registry.d.ts +1 -1
  61. package/dist/provision-roles.d.ts +9 -1
  62. package/dist/provision-roles.js +1 -1
  63. package/dist/runtime-posture.d.ts +19 -6
  64. package/dist/schema.d.ts +22654 -9359
  65. package/dist/schema.js +209 -3
  66. package/dist/scoped-knowledge.d.ts +97 -1
  67. package/dist/session-control.d.ts +33 -7
  68. package/dist/session-queue-commands.d.ts +19 -11
  69. package/dist/session-realtime-context.d.ts +2 -2
  70. package/dist/session-realtime-ledger.d.ts +4 -4
  71. package/dist/session-realtime-mirror.d.ts +2 -2
  72. package/dist/session-realtime-state.d.ts +1 -1
  73. package/dist/session-realtime-terminal.d.ts +1 -1
  74. package/dist/session-realtime.d.ts +7 -7
  75. package/dist/session-tenancy.d.ts +44 -0
  76. package/dist/session-tenancy.js +16 -0
  77. package/dist/session-tenancy.js.map +1 -0
  78. package/dist/session-tool-call-settlement.d.ts +1 -1
  79. package/dist/slack-task-policy-schema.d.ts +847 -0
  80. package/dist/slack-task-policy.d.ts +65 -0
  81. package/dist/slack-user-link-access.d.ts +54 -0
  82. package/dist/task-notes-schema.d.ts +924 -0
  83. package/dist/task-notes.d.ts +85 -0
  84. package/dist/transcription-recordings.d.ts +2 -2
  85. package/dist/turn-initiator.d.ts +2 -2
  86. package/dist/video-generation.d.ts +225 -0
  87. package/dist/video-generation.js +68 -0
  88. package/dist/video-generation.js.map +1 -0
  89. package/dist/workspace-artifacts.d.ts +1 -1
  90. package/dist/workspace-instruction-policies.d.ts +1 -1
  91. package/dist/workspace-learning-policy-schema.d.ts +932 -0
  92. package/dist/workspace-learning-policy.d.ts +161 -0
  93. package/dist/xai-subscription.d.ts +326 -0
  94. package/drizzle/0183_model_call_provider_cost_estimates.sql +39 -0
  95. package/drizzle/0184_sandbox_drain_teardown_fence.sql +682 -0
  96. package/drizzle/0185_temporal_schedule_cleanup_outbox.sql +168 -0
  97. package/drizzle/0186_sandbox_capture_provider_contract.sql +400 -0
  98. package/drizzle/0187_generated_image_artifacts.sql +173 -0
  99. package/drizzle/0188_image_generation_retention_failure.sql +25 -0
  100. package/drizzle/0189_retained_session_image_formats.sql +13 -0
  101. package/drizzle/0190_timeline_annotations.sql +31 -0
  102. package/drizzle/0191_editable_artifact_engine.sql +3853 -0
  103. package/drizzle/0192_editable_artifact_live_tickets.sql +338 -0
  104. package/drizzle/0193_editable_artifact_authorization.sql +190 -0
  105. package/drizzle/0194_editable_artifact_durable_exports.sql +160 -0
  106. package/drizzle/0195_editable_artifact_import_authorization.sql +203 -0
  107. package/drizzle/0196_rig_provider_images.sql +152 -0
  108. package/drizzle/0197_knowledge_source_sync_schedules.sql +523 -0
  109. package/drizzle/0198_memory_slack_publication_delivery.sql +393 -0
  110. package/drizzle/0199_workspace_learning_policy.sql +980 -0
  111. package/drizzle/0201_company_profile_authority.sql +849 -0
  112. package/drizzle/0202_document_index_checkpoints.sql +85 -0
  113. package/drizzle/0203_durable_video_generation.sql +353 -0
  114. package/drizzle/0204_video_generation_funding.sql +44 -0
  115. package/drizzle/0205_attempt_tool_catalogs.sql +230 -0
  116. package/drizzle/0206_browser_sessions.sql +646 -0
  117. package/drizzle/0207_browser_identities.sql +379 -0
  118. package/drizzle/0208_attached_browser_devices.sql +165 -0
  119. package/drizzle/0209_computer_sessions.sql +575 -0
  120. package/drizzle/0210_browser_auth_network_interventions.sql +441 -0
  121. package/drizzle/0211_editable_artifact_session_links.sql +58 -0
  122. package/drizzle/0212_browser_state_transfer_hardening.sql +560 -0
  123. package/drizzle/0212_slack_installation_bindings.sql +348 -0
  124. package/drizzle/0213_browser_interaction_authority.sql +67 -0
  125. package/drizzle/0213_slack_user_link_access_requests.sql +177 -0
  126. package/drizzle/0214_browser_download_saves.sql +34 -0
  127. package/drizzle/0214_session_activity_commit_gate.sql +262 -0
  128. package/drizzle/0215_browser_controller_host.sql +385 -0
  129. package/drizzle/0215_capabilities_platform.sql +980 -0
  130. package/drizzle/0216_browser_auth_health_evidence.sql +137 -0
  131. package/drizzle/0216_pack_component_ownership.sql +235 -0
  132. package/drizzle/0217_capability_definition_delete_authority.sql +32 -0
  133. package/drizzle/0217_external_browser_auth_operations.sql +22 -0
  134. package/drizzle/0218_organization_tenancy_foundation.sql +299 -0
  135. package/drizzle/0219_organization_tenancy_managed_human_provisioning.sql +317 -0
  136. package/drizzle/0219_site_auth_maintenance_sessions.sql +234 -0
  137. package/drizzle/0220_memory_slack_append_only_cascade.sql +38 -0
  138. package/drizzle/0220_session_channels.sql +54 -0
  139. package/drizzle/0221_sessions_channel_index.sql +5 -0
  140. package/drizzle/0222_session_visibility_authority_epochs.sql +158 -0
  141. package/drizzle/0222_sessions_channel_fk.sql +89 -0
  142. package/drizzle/0223_pending_tool_event_output.sql +55 -0
  143. package/drizzle/0223_sessions_channel_fk_validate.sql +118 -0
  144. package/drizzle/0224_slack_post_outcome_reconciliation.sql +123 -0
  145. package/drizzle/0225_session_visibility_fork_activation.sql +1363 -0
  146. package/drizzle/0226_personal_codex_authority_foundation.sql +365 -0
  147. package/drizzle/0227_slack_native_actions.sql +145 -0
  148. package/drizzle/0228_interaction_controller_data_plane.sql +14 -0
  149. package/drizzle/0228_slack_task_policy.sql +400 -0
  150. package/drizzle/0229_slack_inbox_file_fact.sql +10 -0
  151. package/drizzle/0230_user_scoped_variable_sets_rigs.sql +84 -0
  152. package/drizzle/0231_integration_definition_identity_cutover.sql +271 -0
  153. package/drizzle/0232_integration_facet_authority_cutover.sql +610 -0
  154. package/drizzle/0233_skill_and_integration_authority_cutover.sql +1162 -0
  155. package/drizzle/0234_xai_subscription_authority.sql +1139 -0
  156. package/drizzle/0235_canonical_human_login_bindings.sql +920 -0
  157. package/drizzle/0236_browser_identity_lifecycle.sql +39 -0
  158. package/drizzle/0236_session_visibility_slack_policy.sql +72 -0
  159. package/drizzle/0237_interaction_transition_reaper.sql +263 -0
  160. package/drizzle/0238_goal_persistence_policy.sql +471 -0
  161. package/drizzle/0238_supergrok_realtime_model.sql +29 -0
  162. package/drizzle/0239_supergrok_video_funding.sql +50 -0
  163. package/drizzle/0239_task_tree_notes.sql +990 -0
  164. package/package.json +26 -5
  165. package/src/attached-browser-devices.ts +371 -0
  166. package/src/attempt-tool-catalogs.ts +131 -0
  167. package/src/browser-auth.ts +4373 -0
  168. package/src/browser-downloads.ts +517 -0
  169. package/src/browser-identities.ts +1385 -0
  170. package/src/browser-sessions.ts +2294 -0
  171. package/src/browser-state-artifacts.ts +449 -0
  172. package/src/canonical-human-identities.ts +317 -0
  173. package/src/capability-components.ts +166 -0
  174. package/src/capability-integrations.ts +1571 -0
  175. package/src/codemode-operations.ts +674 -0
  176. package/src/company-profile-schema.ts +143 -0
  177. package/src/company-profile.ts +968 -0
  178. package/src/computer-sessions.ts +1130 -0
  179. package/src/connection-token-resolver.ts +270 -25
  180. package/src/database.ts +468 -24
  181. package/src/editable-artifact-durable-export.ts +1201 -0
  182. package/src/editable-artifact-materialization.ts +893 -0
  183. package/src/editable-artifacts-schema.ts +879 -0
  184. package/src/editable-artifacts.ts +5404 -0
  185. package/src/generated-images.ts +740 -0
  186. package/src/index.ts +9963 -1465
  187. package/src/insights.ts +251 -23
  188. package/src/integration-bindings.ts +455 -0
  189. package/src/integration-facets.ts +862 -0
  190. package/src/interaction-revisions.ts +70 -0
  191. package/src/interaction-schema.ts +1606 -0
  192. package/src/knowledge-source-sync-schema.ts +192 -0
  193. package/src/knowledge-source-sync.ts +1922 -0
  194. package/src/memory-slack-delivery.ts +801 -0
  195. package/src/pack-components.ts +954 -0
  196. package/src/pack-installations.ts +886 -0
  197. package/src/persistence-errors.ts +4 -7
  198. package/src/plugin-packages.ts +1186 -0
  199. package/src/provision-roles.ts +534 -1
  200. package/src/runtime-posture-cli.ts +9 -0
  201. package/src/runtime-posture.ts +721 -5
  202. package/src/schema.ts +6270 -3159
  203. package/src/scoped-knowledge-schema.ts +1 -1
  204. package/src/scoped-knowledge.ts +655 -3
  205. package/src/session-control.ts +130 -42
  206. package/src/session-queue-commands.ts +265 -15
  207. package/src/session-realtime-context.ts +2 -2
  208. package/src/session-realtime-ledger.ts +3 -3
  209. package/src/session-realtime.ts +7 -7
  210. package/src/session-tenancy.ts +188 -0
  211. package/src/session-tool-call-settlement.ts +18 -3
  212. package/src/slack-task-policy-schema.ts +130 -0
  213. package/src/slack-task-policy.ts +341 -0
  214. package/src/slack-user-link-access.ts +702 -0
  215. package/src/task-notes-schema.ts +135 -0
  216. package/src/task-notes.ts +178 -0
  217. package/src/video-generation.ts +1530 -0
  218. package/src/workspace-artifacts.ts +1 -1
  219. package/src/workspace-learning-policy-schema.ts +139 -0
  220. package/src/workspace-learning-policy.ts +595 -0
  221. package/src/xai-subscription.ts +1887 -0
  222. package/dist/chunk-P6CUHXQZ.js +0 -7248
  223. package/dist/chunk-P6CUHXQZ.js.map +0 -1
  224. package/dist/chunk-VHBFHMPC.js +0 -1219
  225. package/dist/chunk-VHBFHMPC.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable-artifact-durable-export.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { sql } from \"drizzle-orm\";\n\nimport { rawRows, type Database, withRlsContext } from \"./database\";\n\nexport type PersistedEditableArtifactExportScope = Readonly<{\n accountId: string;\n workspaceId: string;\n}>;\n\nexport type PersistedEditableArtifactExportActor =\n | Readonly<{ kind: \"human\"; subjectId: string; replicaId: string }>\n | Readonly<{\n kind: \"agent\";\n subjectId: string;\n replicaId: string;\n sessionId: string;\n turnId: string;\n attemptId: string;\n generation: number;\n }>\n | Readonly<{\n kind: \"service\";\n subjectId: string;\n replicaId: string;\n service: string;\n }>;\n\nexport type PersistedEditableArtifactExportModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type PersistedEditableArtifactExportFormat =\n | \"xlsx\"\n | \"pptx\"\n | \"docx\"\n | \"pdf\"\n | \"png\"\n | \"webp\";\n\nexport type PersistedEditableArtifactExportProfile = Readonly<{\n modality: PersistedEditableArtifactExportModality;\n format: PersistedEditableArtifactExportFormat;\n codecId: string;\n codecVersion: string;\n kernelVersion: string;\n fontRegistryHash: string;\n policyHash: string;\n normalizedOptions: string;\n}>;\n\nexport type PersistedEditableArtifactPinnedVersion = Readonly<{\n scope: PersistedEditableArtifactExportScope;\n artifactId: string;\n id: string;\n modality: PersistedEditableArtifactExportModality;\n snapshotId: string;\n headSequence: number;\n causalFrontier: readonly Readonly<{ replicaId: string; counter: number }>[] | null;\n nativeRevision: number | null;\n stateHash: string;\n name: string;\n pinned: true;\n createdBySubjectId: string;\n createdAt: string;\n}>;\n\nexport type PersistedEditableArtifactMaterializationResult = Readonly<{\n id: string;\n byteSize: number;\n contentHash: string;\n mimeType: string;\n verifiedAt: string;\n createdAt: string;\n}>;\n\nexport type PersistedEditableArtifactMaterializationJob = Readonly<{\n scope: PersistedEditableArtifactExportScope;\n artifactId: string;\n id: string;\n versionId: string;\n inputSnapshotId: string;\n targetHeadSequence: number;\n stateHash: string;\n format: PersistedEditableArtifactExportFormat;\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: PersistedEditableArtifactMaterializationResult | null;\n}>;\n\nexport type PersistedEditableArtifactExportSnapshot = Readonly<{\n modality: PersistedEditableArtifactExportModality;\n snapshotId: string;\n coveredHeadSequence: number;\n stateHash: string;\n coveredCausalFrontier: readonly Readonly<{ replicaId: string; counter: number }>[] | null;\n nativeRevision: number | null;\n}>;\n\ntype ExportContext = Readonly<{\n scope: PersistedEditableArtifactExportScope;\n artifactId: string;\n actor: PersistedEditableArtifactExportActor;\n}>;\n\nexport type PinPersistedEditableArtifactVersionRequest = ExportContext &\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: PersistedEditableArtifactExportSnapshot;\n }>;\n\nexport type EnqueuePersistedEditableArtifactMaterializationRequest = ExportContext &\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: PersistedEditableArtifactExportProfile;\n }>;\n\nexport type PersistedEditableArtifactAuthorizationResult<T> =\n | Readonly<{ kind: \"result\"; value: T }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport class EditableArtifactDurableExportPersistenceError extends Error {\n constructor(\n readonly code:\n | \"not_found\"\n | \"idempotency_conflict\"\n | \"snapshot_conflict\"\n | \"unsupported_format\"\n | \"database_contract_violation\",\n message: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"EditableArtifactDurableExportPersistenceError\";\n }\n}\n\ntype ArtifactRow = Record<string, unknown> & {\n modality: unknown;\n authorization_revision: unknown;\n head_sequence: unknown;\n state_hash: unknown;\n current_snapshot_id: unknown;\n};\n\ntype VersionRow = Record<string, unknown> & {\n account_id: unknown;\n workspace_id: unknown;\n artifact_id: unknown;\n id: unknown;\n modality: unknown;\n snapshot_id: unknown;\n head_sequence: unknown;\n causal_frontier: unknown;\n native_revision: unknown;\n state_hash: unknown;\n name: unknown;\n pinned: unknown;\n created_by_subject_id: unknown;\n created_at: unknown;\n};\n\ntype JobRow = Record<string, unknown> & {\n account_id: unknown;\n workspace_id: unknown;\n artifact_id: unknown;\n id: unknown;\n version_id: unknown;\n input_snapshot_id: unknown;\n target_head_sequence: unknown;\n state_hash: unknown;\n format: unknown;\n state: unknown;\n attempt_count: unknown;\n error_code: unknown;\n created_at: unknown;\n started_at: unknown;\n completed_at: unknown;\n result_id: unknown;\n result_byte_size: unknown;\n result_content_hash: unknown;\n result_mime_type: unknown;\n result_verified_at: unknown;\n result_created_at: unknown;\n object_reference?: unknown;\n};\n\ntype ReceiptRow = Record<string, unknown> & {\n request_hash: unknown;\n resource_id: unknown;\n};\n\ntype AuthorizationRow = Record<string, unknown> & {\n allowed: unknown;\n authorization_revision: unknown;\n};\n\n/** Tenant-scoped public version/export persistence; global claiming remains separate. */\nexport class PostgresEditableArtifactDurableExportStore {\n constructor(private readonly db: Database) {}\n\n async pinVersion(\n requestInput: PinPersistedEditableArtifactVersionRequest,\n ): Promise<\n PersistedEditableArtifactAuthorizationResult<\n Readonly<{ version: PersistedEditableArtifactPinnedVersion; replayed: boolean }>\n >\n > {\n const request = validatePinRequest(requestInput);\n return await withRlsContext(\n this.db,\n request.scope,\n async (tx) => {\n const authorization = await authorize(tx, request);\n if (\n !authorization.allowed ||\n authorization.revision !== request.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n await lockIdempotencyRequest(tx, request, \"version\");\n const replay = await findReceipt(tx, request, \"version\", request.idempotencyKey);\n if (replay) {\n if (replay.requestHash !== request.requestHash) throw idempotencyConflict();\n const version = await loadVersion(\n tx,\n request.scope,\n request.artifactId,\n replay.resourceId,\n );\n if (!version) throw contractViolation(\"Version receipt points to a missing version\");\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({ version, replayed: true }),\n });\n }\n\n const artifact = await lockArtifact(tx, request.scope, request.artifactId);\n if (!artifact) throw notFound();\n if (artifact.authorizationRevision !== request.expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n assertSnapshotPinsArtifact(request.snapshot, artifact);\n const inserted = await rawRows<VersionRow>(\n tx,\n sql`insert into editable_artifact_versions (\n account_id, workspace_id, artifact_id, id, snapshot_id, head_sequence,\n causal_frontier, native_revision, state_hash, name, pinned, created_by_subject_id\n ) values (\n ${request.scope.accountId}::uuid, ${request.scope.workspaceId}::uuid,\n ${request.artifactId}, ${request.versionId}, ${request.snapshot.snapshotId},\n ${request.snapshot.coveredHeadSequence},\n ${request.snapshot.coveredCausalFrontier === null ? null : JSON.stringify(request.snapshot.coveredCausalFrontier)}::jsonb,\n ${request.snapshot.nativeRevision}, ${request.snapshot.stateHash}, ${request.name},\n true, ${request.actor.subjectId}\n ) returning\n account_id, workspace_id, artifact_id, id,\n ${artifact.modality}::text as modality, snapshot_id, head_sequence,\n causal_frontier, native_revision, state_hash, name, pinned,\n created_by_subject_id, created_at`,\n );\n const versionRow = exactRow(inserted, \"Version insert\");\n await insertReceipt(tx, {\n ...request,\n operationKind: \"version\",\n resourceType: \"artifact_version\",\n resourceId: request.versionId,\n result: {\n schemaVersion: 1,\n artifactId: request.artifactId,\n versionId: request.versionId,\n },\n });\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({ version: versionFromRow(versionRow), replayed: false }),\n });\n },\n { isolationLevel: \"serializable\" },\n );\n }\n\n async enqueueMaterialization(\n requestInput: EnqueuePersistedEditableArtifactMaterializationRequest,\n ): Promise<\n PersistedEditableArtifactAuthorizationResult<\n Readonly<{ job: PersistedEditableArtifactMaterializationJob; replayed: boolean }>\n >\n > {\n const request = validateEnqueueRequest(requestInput);\n return await withRlsContext(\n this.db,\n request.scope,\n async (tx) => {\n const authorization = await authorize(tx, request);\n if (\n !authorization.allowed ||\n authorization.revision !== request.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n await lockIdempotencyRequest(tx, request, \"materialize\");\n const replay = await findReceipt(tx, request, \"materialize\", request.idempotencyKey);\n if (replay) {\n if (replay.requestHash !== request.requestHash) throw idempotencyConflict();\n const job = await loadJob(\n tx,\n request.scope,\n request.artifactId,\n replay.resourceId,\n false,\n );\n if (!job) throw contractViolation(\"Materialization receipt points to a missing job\");\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({ job: job.job, replayed: true }),\n });\n }\n\n const artifact = await lockArtifact(tx, request.scope, request.artifactId);\n if (!artifact) throw notFound();\n if (artifact.authorizationRevision !== request.expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n if (\n artifact.modality !== request.profile.modality ||\n !formatMatchesModality(artifact.modality, request.profile.format)\n ) {\n throw unsupportedFormat();\n }\n const version = await loadVersion(tx, request.scope, request.artifactId, request.versionId);\n if (!version || version.modality !== artifact.modality) throw notFound();\n const optionsHash = sha256(request.profile.normalizedOptions);\n const inserted = await rawRows<Record<string, unknown> & { id: unknown }>(\n tx,\n sql`insert into editable_artifact_materialization_jobs (\n account_id, workspace_id, artifact_id, id, version_id, input_snapshot_id,\n target_head_sequence, state_hash, format, normalized_options, codec_id,\n codec_version, kernel_version, font_registry_hash, policy_hash\n ) values (\n ${request.scope.accountId}::uuid, ${request.scope.workspaceId}::uuid,\n ${request.artifactId}, ${request.jobId}, ${version.id}, ${version.snapshotId},\n ${version.headSequence}, ${version.stateHash}, ${request.profile.format},\n ${request.profile.normalizedOptions}, ${request.profile.codecId},\n ${request.profile.codecVersion}, ${request.profile.kernelVersion},\n ${request.profile.fontRegistryHash}, ${request.profile.policyHash}\n ) on conflict (\n account_id, workspace_id, artifact_id, input_snapshot_id, state_hash, format,\n options_hash, codec_id, codec_version, kernel_version, font_registry_hash, policy_hash\n ) do nothing returning id`,\n );\n let selectedJobId: string;\n if (inserted.length === 1) {\n selectedJobId = text(inserted[0]!.id, \"inserted materialization job id\");\n } else if (inserted.length === 0) {\n const cached = await rawRows<Record<string, unknown> & { id: unknown }>(\n tx,\n sql`select id from editable_artifact_materialization_jobs\n where account_id = ${request.scope.accountId}::uuid\n and workspace_id = ${request.scope.workspaceId}::uuid\n and artifact_id = ${request.artifactId}\n and input_snapshot_id = ${version.snapshotId}\n and state_hash = ${version.stateHash}\n and format = ${request.profile.format}\n and options_hash = ${optionsHash}\n and codec_id = ${request.profile.codecId}\n and codec_version = ${request.profile.codecVersion}\n and kernel_version = ${request.profile.kernelVersion}\n and font_registry_hash = ${request.profile.fontRegistryHash}\n and policy_hash = ${request.profile.policyHash}`,\n );\n selectedJobId = text(exactRow(cached, \"Materialization cache read\").id, \"job id\");\n } else {\n throw contractViolation(\"Materialization insert returned multiple rows\");\n }\n await insertReceipt(tx, {\n ...request,\n operationKind: \"materialize\",\n resourceType: \"materialization_job\",\n resourceId: selectedJobId,\n result: {\n schemaVersion: 1,\n artifactId: request.artifactId,\n materializationJobId: selectedJobId,\n },\n });\n const loaded = await loadJob(tx, request.scope, request.artifactId, selectedJobId, false);\n if (!loaded) throw contractViolation(\"Inserted materialization job is missing\");\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({ job: loaded.job, replayed: false }),\n });\n },\n { isolationLevel: \"serializable\" },\n );\n }\n\n async readVersion(\n input: ExportContext & {\n expectedAuthorizationRevision: number;\n versionId: string;\n },\n ): Promise<\n PersistedEditableArtifactAuthorizationResult<PersistedEditableArtifactPinnedVersion | null>\n > {\n const request = validateReadRequest(input, \"versionId\");\n return await withRlsContext(this.db, request.scope, async (tx) => {\n const authorization = await authorize(tx, request);\n if (\n !authorization.allowed ||\n authorization.revision !== request.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n return Object.freeze({\n kind: \"result\" as const,\n value: await loadVersion(tx, request.scope, request.artifactId, request.versionId),\n });\n });\n }\n\n async readMaterialization(\n input: ExportContext & {\n expectedAuthorizationRevision: number;\n jobId: string;\n },\n ): Promise<\n PersistedEditableArtifactAuthorizationResult<PersistedEditableArtifactMaterializationJob | null>\n > {\n const request = validateReadRequest(input, \"jobId\");\n return await withRlsContext(this.db, request.scope, async (tx) => {\n const authorization = await authorize(tx, request);\n if (\n !authorization.allowed ||\n authorization.revision !== request.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const loaded = await loadJob(tx, request.scope, request.artifactId, request.jobId, false);\n return Object.freeze({ kind: \"result\" as const, value: loaded?.job ?? null });\n });\n }\n\n async readMaterializationDownload(\n input: ExportContext & {\n expectedAuthorizationRevision: number;\n jobId: string;\n },\n ): Promise<\n PersistedEditableArtifactAuthorizationResult<\n Readonly<{\n job: PersistedEditableArtifactMaterializationJob | null;\n objectReference: string | null;\n }>\n >\n > {\n const request = validateReadRequest(input, \"jobId\");\n return await withRlsContext(this.db, request.scope, async (tx) => {\n const authorization = await authorize(tx, request);\n if (\n !authorization.allowed ||\n authorization.revision !== request.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const loaded = await loadJob(tx, request.scope, request.artifactId, request.jobId, true);\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({\n job: loaded?.job ?? null,\n objectReference: loaded?.objectReference ?? null,\n }),\n });\n });\n }\n}\n\nasync function authorize(\n tx: Database,\n request: ExportContext,\n): Promise<Readonly<{ allowed: boolean; revision: number }>> {\n const actor = request.actor;\n const rows = await rawRows<AuthorizationRow>(\n tx,\n sql`select * from opengeni_private.authorize_editable_artifact_actor(\n ${request.scope.accountId}::uuid,\n ${request.scope.workspaceId}::uuid,\n ${request.artifactId},\n ${actor.kind},\n ${actor.subjectId},\n ${actor.kind === \"agent\" ? actor.sessionId : null},\n ${actor.kind === \"agent\" ? actor.turnId : null},\n ${actor.kind === \"agent\" ? actor.attemptId : null},\n ${actor.kind === \"agent\" ? actor.generation : null},\n ${actor.kind === \"service\" ? actor.service : null},\n 'export',\n current_schema()\n )`,\n );\n const row = exactRow(rows, \"Editable artifact export authorization\");\n return Object.freeze({\n allowed: row.allowed === true,\n revision: integer(row.authorization_revision, \"authorization revision\", 1),\n });\n}\n\nasync function lockArtifact(\n tx: Database,\n scope: PersistedEditableArtifactExportScope,\n artifactId: string,\n): Promise<Readonly<{\n modality: PersistedEditableArtifactExportModality;\n authorizationRevision: number;\n headSequence: number;\n stateHash: string;\n currentSnapshotId: string;\n}> | null> {\n const rows = await rawRows<ArtifactRow>(\n tx,\n sql`select modality, authorization_revision, head_sequence, state_hash, current_snapshot_id\n from editable_artifacts\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and id = ${artifactId}\n for share`,\n );\n if (rows.length === 0) return null;\n const row = exactRow(rows, \"Editable artifact lock\");\n return Object.freeze({\n modality: modality(row.modality),\n authorizationRevision: integer(row.authorization_revision, \"authorization revision\", 1),\n headSequence: integer(row.head_sequence, \"artifact head sequence\", 0),\n stateHash: hash(row.state_hash, \"artifact state hash\"),\n currentSnapshotId: stableId(row.current_snapshot_id, \"artifact current snapshot id\"),\n });\n}\n\nasync function findReceipt(\n tx: Database,\n request: ExportContext & Readonly<{ authorityKey: string }>,\n operationKind: \"version\" | \"materialize\",\n requestIdempotencyKey: string,\n): Promise<Readonly<{ requestHash: string; resourceId: string }> | null> {\n const rows = await rawRows<ReceiptRow>(\n tx,\n sql`select request_hash, resource_id\n from editable_artifact_idempotency_receipts\n where account_id = ${request.scope.accountId}::uuid\n and workspace_id = ${request.scope.workspaceId}::uuid\n and artifact_id = ${request.artifactId}\n and operation_kind = ${operationKind}\n and authority_key_digest = opengeni_private.editable_artifact_text_sha256(${request.authorityKey})\n and authority_key = ${request.authorityKey}\n and idempotency_key = ${requestIdempotencyKey}`,\n );\n if (rows.length === 0) return null;\n const row = exactRow(rows, \"Editable artifact export receipt read\");\n return Object.freeze({\n requestHash: hash(row.request_hash, \"receipt request hash\"),\n resourceId: stableId(row.resource_id, \"receipt resource id\"),\n });\n}\n\nasync function lockIdempotencyRequest(\n tx: Database,\n request: ExportContext & Readonly<{ authorityKey: string; idempotencyKey: string }>,\n operationKind: \"version\" | \"materialize\",\n): Promise<void> {\n await tx.execute(\n sql`select pg_advisory_xact_lock(hashtextextended(\n ${`editable-artifact:${operationKind}:${request.scope.accountId}:${request.scope.workspaceId}:${request.artifactId}:${request.authorityKey}:${request.idempotencyKey}`},\n 0\n ))`,\n );\n}\n\nasync function insertReceipt(\n tx: Database,\n input: ExportContext &\n Readonly<{\n receiptId: string;\n authorityKey: string;\n idempotencyKey: string;\n requestHash: string;\n operationKind: \"version\" | \"materialize\";\n resourceType: \"artifact_version\" | \"materialization_job\";\n resourceId: string;\n result: Readonly<Record<string, unknown>>;\n }>,\n): Promise<void> {\n await tx.execute(sql`insert into editable_artifact_idempotency_receipts (\n account_id, workspace_id, id, artifact_id, operation_kind, authority_key,\n idempotency_key, request_hash, resource_type, resource_id, server_transaction_id, result\n ) values (\n ${input.scope.accountId}::uuid, ${input.scope.workspaceId}::uuid,\n ${input.receiptId}, ${input.artifactId}, ${input.operationKind}, ${input.authorityKey},\n ${input.idempotencyKey}, ${input.requestHash}, ${input.resourceType}, ${input.resourceId},\n null, ${JSON.stringify(input.result)}::jsonb\n )`);\n}\n\nasync function loadVersion(\n tx: Database,\n scope: PersistedEditableArtifactExportScope,\n artifactId: string,\n versionId: string,\n): Promise<PersistedEditableArtifactPinnedVersion | null> {\n const rows = await rawRows<VersionRow>(\n tx,\n sql`select\n version.account_id, version.workspace_id, version.artifact_id, version.id,\n artifact.modality, version.snapshot_id, version.head_sequence,\n version.causal_frontier, version.native_revision, version.state_hash,\n version.name, version.pinned, version.created_by_subject_id, version.created_at\n from editable_artifact_versions version\n join editable_artifacts artifact\n on artifact.account_id = version.account_id\n and artifact.workspace_id = version.workspace_id\n and artifact.id = version.artifact_id\n where version.account_id = ${scope.accountId}::uuid\n and version.workspace_id = ${scope.workspaceId}::uuid\n and version.artifact_id = ${artifactId}\n and version.id = ${versionId}`,\n );\n if (rows.length === 0) return null;\n return versionFromRow(exactRow(rows, \"Editable artifact version read\"));\n}\n\nasync function loadJob(\n tx: Database,\n scope: PersistedEditableArtifactExportScope,\n artifactId: string,\n jobId: string,\n includeObjectReference: boolean,\n): Promise<Readonly<{\n job: PersistedEditableArtifactMaterializationJob;\n objectReference: string | null;\n}> | null> {\n const rows = await rawRows<JobRow>(\n tx,\n sql`select\n job.account_id, job.workspace_id, job.artifact_id, job.id, job.version_id,\n job.input_snapshot_id, job.target_head_sequence, job.state_hash, job.format,\n job.state, job.attempt_count, job.error_code, job.created_at, job.started_at,\n job.completed_at, result.id as result_id, result.byte_size as result_byte_size,\n result.content_hash as result_content_hash, result.mime_type as result_mime_type,\n result.verified_at as result_verified_at, result.created_at as result_created_at,\n ${includeObjectReference ? sql`blob.object_reference` : sql`null::text`} as object_reference\n from editable_artifact_materialization_jobs job\n left join editable_artifact_materialization_results result\n on result.account_id = job.account_id and result.workspace_id = job.workspace_id\n and result.artifact_id = job.artifact_id and result.job_id = job.id\n left join editable_artifact_blob_refs blob\n on blob.account_id = result.account_id and blob.workspace_id = result.workspace_id\n and blob.artifact_id = result.artifact_id and blob.id = result.blob_ref_id\n where job.account_id = ${scope.accountId}::uuid\n and job.workspace_id = ${scope.workspaceId}::uuid\n and job.artifact_id = ${artifactId}\n and job.id = ${jobId}`,\n );\n if (rows.length === 0) return null;\n const row = exactRow(rows, \"Editable artifact materialization read\");\n const job = jobFromRow(row);\n const objectReference = nullableText(row.object_reference, \"materialization object reference\");\n if ((job.result === null) !== (objectReference === null) && includeObjectReference) {\n throw contractViolation(\"Materialization result object reference is inconsistent\");\n }\n return Object.freeze({ job, objectReference });\n}\n\nfunction versionFromRow(row: VersionRow): PersistedEditableArtifactPinnedVersion {\n const rowModality = modality(row.modality);\n const causalFrontier = causalFrontierFromRow(row.causal_frontier);\n const nativeRevision = nullableInteger(row.native_revision, \"version native revision\", 0);\n if (\n (rowModality === \"spreadsheet\" && (causalFrontier === null || nativeRevision !== null)) ||\n (rowModality !== \"spreadsheet\" && (causalFrontier !== null || nativeRevision === null))\n ) {\n throw contractViolation(\"Version modality state is inconsistent\");\n }\n if (row.pinned !== true) throw contractViolation(\"Public artifact version is not pinned\");\n return Object.freeze({\n scope: Object.freeze({\n accountId: uuid(row.account_id, \"version account id\"),\n workspaceId: uuid(row.workspace_id, \"version workspace id\"),\n }),\n artifactId: stableId(row.artifact_id, \"version artifact id\"),\n id: stableId(row.id, \"version id\"),\n modality: rowModality,\n snapshotId: stableId(row.snapshot_id, \"version snapshot id\"),\n headSequence: integer(row.head_sequence, \"version head sequence\", 0),\n causalFrontier,\n nativeRevision,\n stateHash: hash(row.state_hash, \"version state hash\"),\n name: boundedText(row.name, \"version name\", 256),\n pinned: true,\n createdBySubjectId: boundedText(row.created_by_subject_id, \"version creator\", 1_024),\n createdAt: timestamp(row.created_at, \"version creation time\"),\n });\n}\n\nfunction jobFromRow(row: JobRow): PersistedEditableArtifactMaterializationJob {\n const state = jobState(row.state);\n const format = exportFormat(row.format);\n const resultId = nullableStableId(row.result_id, \"materialization result id\");\n let result: PersistedEditableArtifactMaterializationResult | null = null;\n if (resultId !== null) {\n result = Object.freeze({\n id: resultId,\n byteSize: integer(row.result_byte_size, \"materialization result byte size\", 1),\n contentHash: hash(row.result_content_hash, \"materialization result hash\"),\n mimeType: mimeType(row.result_mime_type, format),\n verifiedAt: timestamp(row.result_verified_at, \"materialization verification time\"),\n createdAt: timestamp(row.result_created_at, \"materialization result creation time\"),\n });\n } else if (\n row.result_byte_size !== null ||\n row.result_content_hash !== null ||\n row.result_mime_type !== null ||\n row.result_verified_at !== null ||\n row.result_created_at !== null\n ) {\n throw contractViolation(\"Materialization result columns are partial\");\n }\n if ((state === \"succeeded\") !== (result !== null)) {\n throw contractViolation(\"Materialization state and result are inconsistent\");\n }\n return Object.freeze({\n scope: Object.freeze({\n accountId: uuid(row.account_id, \"job account id\"),\n workspaceId: uuid(row.workspace_id, \"job workspace id\"),\n }),\n artifactId: stableId(row.artifact_id, \"job artifact id\"),\n id: stableId(row.id, \"job id\"),\n versionId: stableId(row.version_id, \"job version id\"),\n inputSnapshotId: stableId(row.input_snapshot_id, \"job snapshot id\"),\n targetHeadSequence: integer(row.target_head_sequence, \"job target head\", 0),\n stateHash: hash(row.state_hash, \"job state hash\"),\n format,\n state,\n attemptCount: integer(row.attempt_count, \"job attempt count\", 0),\n errorCode: nullableText(row.error_code, \"job error code\"),\n createdAt: timestamp(row.created_at, \"job creation time\"),\n startedAt: nullableTimestamp(row.started_at, \"job start time\"),\n completedAt: nullableTimestamp(row.completed_at, \"job completion time\"),\n result,\n });\n}\n\nfunction assertSnapshotPinsArtifact(\n snapshot: PersistedEditableArtifactExportSnapshot,\n artifact: Readonly<{\n modality: PersistedEditableArtifactExportModality;\n headSequence: number;\n stateHash: string;\n currentSnapshotId: string;\n }>,\n): void {\n if (\n snapshot.modality !== artifact.modality ||\n snapshot.snapshotId !== artifact.currentSnapshotId ||\n snapshot.coveredHeadSequence !== artifact.headSequence ||\n snapshot.stateHash !== artifact.stateHash ||\n (snapshot.modality === \"spreadsheet\" &&\n (snapshot.coveredCausalFrontier === null || snapshot.nativeRevision !== null)) ||\n (snapshot.modality !== \"spreadsheet\" &&\n (snapshot.coveredCausalFrontier !== null || snapshot.nativeRevision === null))\n ) {\n throw new EditableArtifactDurableExportPersistenceError(\n \"snapshot_conflict\",\n \"Pinned version source is no longer the exact current verified snapshot\",\n );\n }\n}\n\nfunction validatePinRequest(\n input: PinPersistedEditableArtifactVersionRequest,\n): PinPersistedEditableArtifactVersionRequest {\n const context = validateContext(input);\n const snapshot = validateSnapshot(input.snapshot);\n const request = Object.freeze({\n ...input,\n ...context,\n expectedAuthorizationRevision: integer(\n input.expectedAuthorizationRevision,\n \"expected authorization revision\",\n 1,\n ),\n authorityKey: boundedText(input.authorityKey, \"authority key\", 8_192),\n receiptId: stableId(input.receiptId, \"receipt id\"),\n versionId: stableId(input.versionId, \"version id\"),\n idempotencyKey: idempotencyKey(input.idempotencyKey),\n requestHash: hash(input.requestHash, \"request hash\"),\n name: boundedText(input.name, \"version name\", 256),\n snapshot,\n });\n validateAuthorityKey(request.actor, request.authorityKey);\n return request;\n}\n\nfunction validateEnqueueRequest(\n input: EnqueuePersistedEditableArtifactMaterializationRequest,\n): EnqueuePersistedEditableArtifactMaterializationRequest {\n const context = validateContext(input);\n const request = Object.freeze({\n ...input,\n ...context,\n expectedAuthorizationRevision: integer(\n input.expectedAuthorizationRevision,\n \"expected authorization revision\",\n 1,\n ),\n authorityKey: boundedText(input.authorityKey, \"authority key\", 8_192),\n receiptId: stableId(input.receiptId, \"receipt id\"),\n jobId: stableId(input.jobId, \"job id\"),\n idempotencyKey: idempotencyKey(input.idempotencyKey),\n requestHash: hash(input.requestHash, \"request hash\"),\n versionId: stableId(input.versionId, \"version id\"),\n profile: validateProfile(input.profile),\n });\n validateAuthorityKey(request.actor, request.authorityKey);\n return request;\n}\n\nfunction validateReadRequest<T extends \"versionId\" | \"jobId\">(\n input: ExportContext & { expectedAuthorizationRevision: number } & Record<T, string>,\n key: T,\n): ExportContext & { expectedAuthorizationRevision: number } & Record<T, string> {\n return Object.freeze({\n ...input,\n ...validateContext(input),\n expectedAuthorizationRevision: integer(\n input.expectedAuthorizationRevision,\n \"expected authorization revision\",\n 1,\n ),\n [key]: stableId(input[key], key === \"versionId\" ? \"version id\" : \"job id\"),\n }) as ExportContext & { expectedAuthorizationRevision: number } & Record<T, string>;\n}\n\nfunction validateContext(input: ExportContext): ExportContext {\n const scope = Object.freeze({\n accountId: uuid(input.scope.accountId, \"account id\"),\n workspaceId: uuid(input.scope.workspaceId, \"workspace id\"),\n });\n const artifactId = stableId(input.artifactId, \"artifact id\");\n const actor = validateActor(input.actor);\n return Object.freeze({ scope, artifactId, actor });\n}\n\nfunction validateActor(\n actor: PersistedEditableArtifactExportActor,\n): PersistedEditableArtifactExportActor {\n if (!plainRecord(actor)) throw new TypeError(\"Editable artifact export actor is invalid\");\n const replicaId = text(actor.replicaId, \"actor replica id\");\n if (!/^[0-9a-f]{16}$/u.test(replicaId) || /^0+$/u.test(replicaId)) {\n throw new TypeError(\"Editable artifact export actor replica id is invalid\");\n }\n const subjectId = boundedText(actor.subjectId, \"actor subject id\", 1_024);\n if (actor.kind === \"human\") {\n exactKeys(actor, [\"kind\", \"subjectId\", \"replicaId\"]);\n return Object.freeze({ kind: \"human\", subjectId, replicaId });\n }\n if (actor.kind === \"agent\") {\n exactKeys(actor, [\n \"kind\",\n \"subjectId\",\n \"replicaId\",\n \"sessionId\",\n \"turnId\",\n \"attemptId\",\n \"generation\",\n ]);\n return Object.freeze({\n kind: \"agent\",\n subjectId,\n replicaId,\n sessionId: boundedText(actor.sessionId, \"agent session id\", 1_024),\n turnId: boundedText(actor.turnId, \"agent turn id\", 1_024),\n attemptId: boundedText(actor.attemptId, \"agent attempt id\", 1_024),\n generation: integer(actor.generation, \"agent generation\", 0),\n });\n }\n if (actor.kind === \"service\") {\n exactKeys(actor, [\"kind\", \"subjectId\", \"replicaId\", \"service\"]);\n return Object.freeze({\n kind: \"service\",\n subjectId,\n replicaId,\n service: boundedText(actor.service, \"service name\", 1_024),\n });\n }\n throw new TypeError(\"Editable artifact export actor kind is invalid\");\n}\n\nfunction validateSnapshot(\n snapshot: PersistedEditableArtifactExportSnapshot,\n): PersistedEditableArtifactExportSnapshot {\n const snapshotModality = modality(snapshot.modality);\n const coveredCausalFrontier = causalFrontierFromRow(snapshot.coveredCausalFrontier);\n const nativeRevision = nullableInteger(snapshot.nativeRevision, \"snapshot native revision\", 0);\n if (\n (snapshotModality === \"spreadsheet\" &&\n (coveredCausalFrontier === null || nativeRevision !== null)) ||\n (snapshotModality !== \"spreadsheet\" &&\n (coveredCausalFrontier !== null || nativeRevision === null))\n ) {\n throw new TypeError(\"Editable artifact export snapshot modality state is invalid\");\n }\n return Object.freeze({\n modality: snapshotModality,\n snapshotId: stableId(snapshot.snapshotId, \"snapshot id\"),\n coveredHeadSequence: integer(snapshot.coveredHeadSequence, \"snapshot head\", 0),\n stateHash: hash(snapshot.stateHash, \"snapshot state hash\"),\n coveredCausalFrontier,\n nativeRevision,\n });\n}\n\nfunction validateProfile(\n profile: PersistedEditableArtifactExportProfile,\n): PersistedEditableArtifactExportProfile {\n if (!plainRecord(profile)) throw new TypeError(\"Materialization profile is invalid\");\n const profileModality = modality(profile.modality);\n const format = exportFormat(profile.format);\n if (!formatMatchesModality(profileModality, format)) throw unsupportedFormat();\n const normalizedOptions = boundedText(\n profile.normalizedOptions,\n \"normalized materialization options\",\n 256 * 1024,\n );\n let options: unknown;\n try {\n options = JSON.parse(normalizedOptions) as unknown;\n } catch {\n throw new TypeError(\"Normalized materialization options are invalid JSON\");\n }\n if (!plainRecord(options) || JSON.stringify(sortRecord(options)) !== normalizedOptions) {\n throw new TypeError(\"Normalized materialization options are not canonical\");\n }\n return Object.freeze({\n modality: profileModality,\n format,\n codecId: boundedText(profile.codecId, \"codec id\", 128),\n codecVersion: boundedText(profile.codecVersion, \"codec version\", 128),\n kernelVersion: boundedText(profile.kernelVersion, \"kernel version\", 512),\n fontRegistryHash: hash(profile.fontRegistryHash, \"font registry hash\"),\n policyHash: hash(profile.policyHash, \"policy hash\"),\n normalizedOptions,\n });\n}\n\nfunction formatMatchesModality(\n artifactModality: PersistedEditableArtifactExportModality,\n format: PersistedEditableArtifactExportFormat,\n): boolean {\n return (\n (artifactModality === \"spreadsheet\" && [\"xlsx\", \"pdf\", \"png\", \"webp\"].includes(format)) ||\n (artifactModality === \"presentation\" && [\"pptx\", \"pdf\", \"png\", \"webp\"].includes(format)) ||\n (artifactModality === \"document\" && [\"docx\", \"pdf\", \"png\", \"webp\"].includes(format))\n );\n}\n\nfunction persistedActorKey(actor: PersistedEditableArtifactExportActor): string {\n switch (actor.kind) {\n case \"human\":\n return JSON.stringify([actor.kind, actor.subjectId]);\n case \"agent\":\n return JSON.stringify([\n actor.kind,\n actor.subjectId,\n actor.sessionId,\n actor.turnId,\n actor.attemptId,\n actor.generation,\n ]);\n case \"service\":\n return JSON.stringify([actor.kind, actor.subjectId, actor.service]);\n }\n}\n\nfunction validateAuthorityKey(\n actor: PersistedEditableArtifactExportActor,\n authorityKey: string,\n): void {\n if (authorityKey !== persistedActorKey(actor)) {\n throw new TypeError(\"Editable artifact export authority key does not match its actor\");\n }\n}\n\nfunction exactRow<T>(rows: readonly T[], label: string): T {\n if (rows.length !== 1 || !rows[0])\n throw contractViolation(`${label} returned an invalid row count`);\n return rows[0];\n}\n\nfunction stableId(value: unknown, label: string): string {\n const parsed = text(value, label);\n if (!/^[0-9a-f]{32}$/u.test(parsed) || /^0+$/u.test(parsed)) {\n throw new TypeError(`${label} is invalid`);\n }\n return parsed;\n}\n\nfunction nullableStableId(value: unknown, label: string): string | null {\n return value === null ? null : stableId(value, label);\n}\n\nfunction uuid(value: unknown, label: string): string {\n const parsed = text(value, label);\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}$/iu.test(parsed)) {\n throw new TypeError(`${label} is invalid`);\n }\n return parsed;\n}\n\nfunction hash(value: unknown, label: string): string {\n const parsed = text(value, label);\n if (!/^sha256:[0-9a-f]{64}$/u.test(parsed)) throw new TypeError(`${label} is invalid`);\n return parsed;\n}\n\nfunction idempotencyKey(value: unknown): string {\n const parsed = text(value, \"idempotency key\");\n if (!/^[A-Za-z0-9._:-]{1,200}$/u.test(parsed)) throw new TypeError(\"Idempotency key is invalid\");\n return parsed;\n}\n\nfunction text(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be text`);\n return value;\n}\n\nfunction boundedText(value: unknown, label: string, maximumBytes: number): string {\n const parsed = text(value, label);\n const bytes = new TextEncoder().encode(parsed).byteLength;\n if (\n bytes < 1 ||\n bytes > maximumBytes ||\n parsed.trim() !== parsed ||\n /[\\u0000-\\u001f\\u007f]/u.test(parsed)\n ) {\n throw new TypeError(`${label} is invalid`);\n }\n return parsed;\n}\n\nfunction nullableText(value: unknown, label: string): string | null {\n return value === null ? null : boundedText(value, label, 2_048);\n}\n\nfunction integer(value: unknown, label: string, minimum: number): number {\n const parsed =\n typeof value === \"bigint\"\n ? Number(value)\n : typeof value === \"string\" && /^\\d+$/u.test(value)\n ? Number(value)\n : value;\n if (!Number.isSafeInteger(parsed) || (parsed as number) < minimum) {\n throw new TypeError(`${label} is invalid`);\n }\n return parsed as number;\n}\n\nfunction nullableInteger(value: unknown, label: string, minimum: number): number | null {\n return value === null ? null : integer(value, label, minimum);\n}\n\nfunction timestamp(value: unknown, label: string): string {\n const parsed = value instanceof Date ? value.toISOString() : text(value, label);\n const milliseconds = Date.parse(parsed);\n if (!Number.isFinite(milliseconds)) {\n throw new TypeError(`${label} is invalid`);\n }\n return new Date(milliseconds).toISOString();\n}\n\nfunction nullableTimestamp(value: unknown, label: string): string | null {\n return value === null ? null : timestamp(value, label);\n}\n\nfunction modality(value: unknown): PersistedEditableArtifactExportModality {\n if (value !== \"spreadsheet\" && value !== \"document\" && value !== \"presentation\") {\n throw new TypeError(\"Artifact modality is invalid\");\n }\n return value;\n}\n\nfunction exportFormat(value: unknown): PersistedEditableArtifactExportFormat {\n if (![\"xlsx\", \"pptx\", \"docx\", \"pdf\", \"png\", \"webp\"].includes(String(value))) {\n throw new TypeError(\"Materialization format is invalid\");\n }\n return value as PersistedEditableArtifactExportFormat;\n}\n\nfunction jobState(value: unknown): PersistedEditableArtifactMaterializationJob[\"state\"] {\n if (![\"pending\", \"running\", \"succeeded\", \"failed\"].includes(String(value))) {\n throw contractViolation(\"Materialization state is invalid\");\n }\n return value as PersistedEditableArtifactMaterializationJob[\"state\"];\n}\n\nfunction mimeType(value: unknown, format: PersistedEditableArtifactExportFormat): string {\n const expected = {\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n webp: \"image/webp\",\n }[format];\n if (value !== expected) throw contractViolation(\"Materialization MIME type is inconsistent\");\n return expected;\n}\n\nfunction causalFrontierFromRow(\n value: unknown,\n): readonly Readonly<{ replicaId: string; counter: number }>[] | null {\n if (value === null) return null;\n if (!Array.isArray(value) || value.length > 1_024) {\n throw new TypeError(\"Causal frontier is invalid\");\n }\n let previous = \"\";\n const result = value.map((entry) => {\n if (!plainRecord(entry)) throw new TypeError(\"Causal frontier entry is invalid\");\n const replicaId = text(entry.replicaId, \"causal replica id\");\n if (!/^[0-9a-f]{16}$/u.test(replicaId) || /^0+$/u.test(replicaId) || replicaId <= previous) {\n throw new TypeError(\"Causal frontier is not canonical\");\n }\n previous = replicaId;\n return Object.freeze({\n replicaId,\n counter: integer(entry.counter, \"causal counter\", 1),\n });\n });\n return Object.freeze(result);\n}\n\nfunction sha256(value: string): string {\n return `sha256:${createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\")}`;\n}\n\nfunction sortRecord(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(value).sort(([left], [right]) => (left < right ? -1 : 1)),\n );\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 exactKeys(value: Record<string, unknown>, keys: readonly string[]): void {\n const actual = Object.keys(value).sort();\n const expected = [...keys].sort();\n if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {\n throw new TypeError(\"Editable artifact export actor contains unknown properties\");\n }\n}\n\nfunction notFound(): EditableArtifactDurableExportPersistenceError {\n return new EditableArtifactDurableExportPersistenceError(\n \"not_found\",\n \"Editable artifact export source was not found\",\n );\n}\n\nfunction idempotencyConflict(): EditableArtifactDurableExportPersistenceError {\n return new EditableArtifactDurableExportPersistenceError(\n \"idempotency_conflict\",\n \"Editable artifact export idempotency key was reused with another request\",\n );\n}\n\nfunction unsupportedFormat(): EditableArtifactDurableExportPersistenceError {\n return new EditableArtifactDurableExportPersistenceError(\n \"unsupported_format\",\n \"Editable artifact export format is incompatible\",\n );\n}\n\nfunction contractViolation(message: string): EditableArtifactDurableExportPersistenceError {\n return new EditableArtifactDurableExportPersistenceError(\"database_contract_violation\", message);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,123 @@
1
+ import { type Database } from "./database.js";
2
+ /**
3
+ * Database boundary for the global artifact materializer.
4
+ *
5
+ * The worker connection is deliberately not tenant-scoped: it may claim jobs
6
+ * from every workspace. It receives no table privileges. Every mutation below
7
+ * goes through a narrowly granted SECURITY DEFINER function which owns the
8
+ * global SKIP LOCKED scan and the exact owner + attempt-count lease fence.
9
+ */
10
+ export declare const EDITABLE_ARTIFACT_MATERIALIZATION_MAX_CLAIM = 1000;
11
+ export declare const EDITABLE_ARTIFACT_MATERIALIZATION_MAX_LEASE_MS = 86400000;
12
+ export declare const EDITABLE_ARTIFACT_MATERIALIZATION_MAX_ATTEMPTS = 1000;
13
+ export declare const EDITABLE_ARTIFACT_MATERIALIZATION_MAX_SOURCE_BYTES: number;
14
+ export declare const EDITABLE_ARTIFACT_MATERIALIZATION_MAX_OPTIONS_BYTES: number;
15
+ export type EditableArtifactMaterializationFormat = "xlsx" | "pptx" | "docx" | "pdf" | "png" | "webp";
16
+ export type EditableArtifactMaterializationMimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/pdf" | "image/png" | "image/webp";
17
+ export type EditableArtifactMaterializationScope = Readonly<{
18
+ accountId: string;
19
+ workspaceId: string;
20
+ }>;
21
+ export type EditableArtifactMaterializationModality = "spreadsheet" | "presentation" | "document";
22
+ export type ClaimedEditableArtifactMaterialization = Readonly<{
23
+ scope: EditableArtifactMaterializationScope;
24
+ artifactId: string;
25
+ jobId: string;
26
+ versionId: string | null;
27
+ modality: EditableArtifactMaterializationModality;
28
+ inputSnapshotId: string;
29
+ targetHeadSequence: number;
30
+ stateHash: string;
31
+ sourceObjectReference: string;
32
+ sourceByteSize: number;
33
+ sourceContentHash: string;
34
+ sourceMimeType: string;
35
+ modelSchemaVersion: number;
36
+ operationProtocolVersion: number;
37
+ snapshotProtocolVersion: number;
38
+ format: EditableArtifactMaterializationFormat;
39
+ codecId: string;
40
+ normalizedOptions: string;
41
+ optionsHash: string;
42
+ codecVersion: string;
43
+ kernelVersion: string;
44
+ fontRegistryHash: string;
45
+ policyHash: string;
46
+ attemptCount: number;
47
+ leaseOwner: string;
48
+ leaseExpiresAt: string;
49
+ }>;
50
+ /** @deprecated Use the self-contained pinned source manifest name. */
51
+ export type ClaimedEditableArtifactMaterializationJob = ClaimedEditableArtifactMaterialization;
52
+ export type ClaimEditableArtifactMaterializationsRequest = Readonly<{
53
+ owner: string;
54
+ leaseDurationMs: number;
55
+ limit: number;
56
+ }>;
57
+ export type EditableArtifactMaterializationLease = Readonly<{
58
+ scope: EditableArtifactMaterializationScope;
59
+ artifactId: string;
60
+ jobId: string;
61
+ owner: string;
62
+ attemptCount: number;
63
+ }>;
64
+ export type RenewEditableArtifactMaterializationRequest = EditableArtifactMaterializationLease & Readonly<{
65
+ leaseDurationMs: number;
66
+ }>;
67
+ export type SucceedEditableArtifactMaterializationRequest = EditableArtifactMaterializationLease & Readonly<{
68
+ resultId: string;
69
+ blobRefId: string;
70
+ /** Immutable, content-addressed object-store reference written before settlement. */
71
+ objectReference: string;
72
+ byteSize: number;
73
+ contentHash: string;
74
+ mimeType: EditableArtifactMaterializationMimeType;
75
+ verifiedAt: string;
76
+ }>;
77
+ export type PersistedEditableArtifactMaterializationResult = Readonly<{
78
+ scope: EditableArtifactMaterializationScope;
79
+ artifactId: string;
80
+ jobId: string;
81
+ resultId: string;
82
+ blobRefId: string;
83
+ objectReference: string;
84
+ byteSize: number;
85
+ contentHash: string;
86
+ mimeType: EditableArtifactMaterializationMimeType;
87
+ verifiedAt: string;
88
+ createdAt: string;
89
+ replayed: boolean;
90
+ }>;
91
+ export type FailEditableArtifactMaterializationRequest = EditableArtifactMaterializationLease & Readonly<{
92
+ /** Bounded machine code only; never place provider diagnostics here. */
93
+ errorCode: string;
94
+ }>;
95
+ export type FailEditableArtifactMaterializationResult = Readonly<{
96
+ replayed: boolean;
97
+ }>;
98
+ export interface EditableArtifactMaterializationRepository {
99
+ claim(request: ClaimEditableArtifactMaterializationsRequest): Promise<readonly ClaimedEditableArtifactMaterialization[]>;
100
+ renew(request: RenewEditableArtifactMaterializationRequest): Promise<string>;
101
+ succeed(request: SucceedEditableArtifactMaterializationRequest): Promise<PersistedEditableArtifactMaterializationResult>;
102
+ fail(request: FailEditableArtifactMaterializationRequest): Promise<FailEditableArtifactMaterializationResult>;
103
+ }
104
+ export declare class EditableArtifactMaterializationPersistenceError extends Error {
105
+ readonly code: "lease_fenced" | "database_contract_violation";
106
+ constructor(code: "lease_fenced" | "database_contract_violation", message: string, options?: ErrorOptions);
107
+ }
108
+ export type PostgresEditableArtifactMaterializationRepositoryOptions = Readonly<{
109
+ /** Unquoted PostgreSQL schema. Unset resolves through current_schema() in SQL. */
110
+ dataSchema?: string;
111
+ }>;
112
+ type MaterializerDatabase = Pick<Database, "execute">;
113
+ export declare class PostgresEditableArtifactMaterializationRepository implements EditableArtifactMaterializationRepository {
114
+ private readonly db;
115
+ private readonly dataSchema;
116
+ constructor(db: MaterializerDatabase, options?: PostgresEditableArtifactMaterializationRepositoryOptions);
117
+ claim(request: ClaimEditableArtifactMaterializationsRequest): Promise<readonly ClaimedEditableArtifactMaterializationJob[]>;
118
+ renew(request: RenewEditableArtifactMaterializationRequest): Promise<string>;
119
+ succeed(request: SucceedEditableArtifactMaterializationRequest): Promise<PersistedEditableArtifactMaterializationResult>;
120
+ fail(request: FailEditableArtifactMaterializationRequest): Promise<FailEditableArtifactMaterializationResult>;
121
+ private schemaArgument;
122
+ }
123
+ export {};