@sixb/core 0.1.14 → 0.1.15

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 (206) hide show
  1. package/dist/actions/index.js +21 -21
  2. package/dist/agents/index.js +33 -33
  3. package/dist/agents/index.js.map +1 -1
  4. package/dist/agents/streams/index.js +2 -2
  5. package/dist/agents/streams/internal.js +2 -2
  6. package/dist/auth/index.js +3 -3
  7. package/dist/authorization/index.js +2 -2
  8. package/dist/bootstrap/index.js +36 -36
  9. package/dist/{chunk-dv4ct8mp.js → chunk-1jvq82rp.js} +3 -3
  10. package/dist/{chunk-16jenmzw.js → chunk-2tz5vnvz.js} +28 -28
  11. package/dist/{chunk-16jenmzw.js.map → chunk-2tz5vnvz.js.map} +1 -1
  12. package/dist/{chunk-728fp090.js → chunk-3c90jvfj.js} +2 -2
  13. package/dist/{chunk-vn3yh259.js → chunk-4gmng3vf.js} +1 -1
  14. package/dist/{chunk-hxgj4kzd.js → chunk-4jph1t3v.js} +7 -7
  15. package/dist/{chunk-znw0zvy4.js → chunk-4wn7bxxa.js} +25 -7
  16. package/dist/chunk-4wn7bxxa.js.map +12 -0
  17. package/dist/{chunk-3qpcrcj8.js → chunk-6aawea28.js} +2 -4
  18. package/dist/chunk-6aawea28.js.map +10 -0
  19. package/dist/{chunk-rzkr70gr.js → chunk-6fsr7y93.js} +5 -1
  20. package/dist/{chunk-rzkr70gr.js.map → chunk-6fsr7y93.js.map} +3 -3
  21. package/dist/{chunk-y487ywrv.js → chunk-6q7c68yx.js} +4 -4
  22. package/dist/{chunk-ypj2wqtj.js → chunk-70jmg2zx.js} +2 -2
  23. package/dist/{chunk-wn7mznxc.js → chunk-7jc21943.js} +3 -3
  24. package/dist/{chunk-rzcjp5m2.js → chunk-8fjmqjyx.js} +1 -1
  25. package/dist/{chunk-m8zkvep1.js → chunk-8w27xf9e.js} +1 -1
  26. package/dist/{chunk-z9h698s8.js → chunk-a4g5yjm0.js} +1 -1
  27. package/dist/{chunk-4ypbe95r.js → chunk-adbve9zt.js} +1 -1
  28. package/dist/{chunk-hj0n3c2p.js → chunk-dqkd3kdj.js} +40 -22
  29. package/dist/{chunk-hj0n3c2p.js.map → chunk-dqkd3kdj.js.map} +3 -3
  30. package/dist/{chunk-wnxabtn4.js → chunk-ex8s8wsk.js} +6 -6
  31. package/dist/{chunk-4tnrzqqh.js → chunk-fj1dvp37.js} +1 -1
  32. package/dist/{chunk-3fpgxpsq.js → chunk-fjw417jf.js} +127 -69
  33. package/dist/{chunk-3fpgxpsq.js.map → chunk-fjw417jf.js.map} +4 -4
  34. package/dist/{chunk-ht4a7mjg.js → chunk-g4rbm4a6.js} +42 -8
  35. package/dist/{chunk-ht4a7mjg.js.map → chunk-g4rbm4a6.js.map} +3 -3
  36. package/dist/{chunk-qma80ych.js → chunk-hn2r7z41.js} +3 -2
  37. package/dist/chunk-hn2r7z41.js.map +11 -0
  38. package/dist/{chunk-bdhfn0ww.js → chunk-kkqwzy6h.js} +1 -1
  39. package/dist/{chunk-ww185kt6.js → chunk-mmac1mp6.js} +2 -2
  40. package/dist/{chunk-jfdggg1p.js → chunk-n5t4mq6z.js} +5 -5
  41. package/dist/{chunk-3a338wrp.js → chunk-p0nbkys4.js} +1 -1
  42. package/dist/{chunk-kxea54yg.js → chunk-py2dw8cw.js} +3 -3
  43. package/dist/{chunk-e2c5yxfe.js → chunk-q3grgzp1.js} +2 -2
  44. package/dist/{chunk-6rzb1g6h.js → chunk-qne45xqq.js} +1 -1
  45. package/dist/{chunk-cbn96bve.js → chunk-r5sc1d2b.js} +2 -2
  46. package/dist/{chunk-y6vnvayj.js → chunk-vjcd8d27.js} +1 -1
  47. package/dist/{chunk-ma1mhh7w.js → chunk-wd34wnsy.js} +6 -6
  48. package/dist/{chunk-pvgpckm1.js → chunk-wem5vqjw.js} +7 -7
  49. package/dist/{chunk-gct3m1da.js → chunk-xr7y35yj.js} +3 -3
  50. package/dist/{chunk-q2xghyft.js → chunk-y0zmae99.js} +5 -5
  51. package/dist/{chunk-xgptywp0.js → chunk-y2aq6ag9.js} +1 -1
  52. package/dist/{chunk-yvf2jqj8.js → chunk-yfppyaty.js} +1 -1
  53. package/dist/{chunk-00pfcqh4.js → chunk-z708gemf.js} +129 -70
  54. package/dist/{chunk-00pfcqh4.js.map → chunk-z708gemf.js.map} +5 -5
  55. package/dist/deploy/define.d.ts +4 -0
  56. package/dist/deploy/define.d.ts.map +1 -0
  57. package/dist/deploy/index.d.ts +3 -0
  58. package/dist/deploy/index.d.ts.map +1 -0
  59. package/dist/deploy/index.js +10 -0
  60. package/dist/deploy/index.js.map +10 -0
  61. package/dist/deploy/internal.d.ts +3 -0
  62. package/dist/deploy/internal.d.ts.map +1 -0
  63. package/dist/deploy/internal.js +244 -0
  64. package/dist/deploy/internal.js.map +11 -0
  65. package/dist/deploy/services.d.ts +8 -0
  66. package/dist/deploy/services.d.ts.map +1 -0
  67. package/dist/deploy/types.d.ts +309 -0
  68. package/dist/deploy/types.d.ts.map +1 -0
  69. package/dist/deploy/validation.d.ts +7 -0
  70. package/dist/deploy/validation.d.ts.map +1 -0
  71. package/dist/error-reporting/internal.js +3 -3
  72. package/dist/errors/catalog.d.ts +4 -0
  73. package/dist/errors/catalog.d.ts.map +1 -1
  74. package/dist/errors/internal.js +1 -1
  75. package/dist/events/index.js +3 -3
  76. package/dist/execution/agent.js +32 -32
  77. package/dist/execution/primitive.js +28 -28
  78. package/dist/execution/request.js +30 -30
  79. package/dist/execution/request.js.map +1 -1
  80. package/dist/index.js +48 -48
  81. package/dist/index.js.map +1 -1
  82. package/dist/maintenance/ontology-maintenance.d.ts +2 -0
  83. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  84. package/dist/maintenance/types.d.ts +8 -2
  85. package/dist/maintenance/types.d.ts.map +1 -1
  86. package/dist/materialization/dataset-watermark.d.ts +6 -1
  87. package/dist/materialization/dataset-watermark.d.ts.map +1 -1
  88. package/dist/materialization/index.js +1 -1
  89. package/dist/materialization/model.d.ts +6 -0
  90. package/dist/materialization/model.d.ts.map +1 -1
  91. package/dist/materializer/index.js +17 -17
  92. package/dist/materializer/index.js.map +1 -1
  93. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  94. package/dist/materializer/projections/replace.d.ts.map +1 -1
  95. package/dist/materializer/projections/source-materialization.d.ts +6 -2
  96. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  97. package/dist/models/execution/index.js +13 -13
  98. package/dist/objects/index.js +20 -20
  99. package/dist/objects/query/index.js +14 -14
  100. package/dist/pipelines/index.js +18 -18
  101. package/dist/projections/internal.js +15 -15
  102. package/dist/projections/types.d.ts +1 -1
  103. package/dist/projections/types.d.ts.map +1 -1
  104. package/dist/queues/in-memory.d.ts +1 -1
  105. package/dist/queues/in-memory.d.ts.map +1 -1
  106. package/dist/runtime/internal.js +18 -18
  107. package/dist/shares/internal.js +13 -13
  108. package/dist/shares/internal.js.map +1 -1
  109. package/dist/storage/action-runs/failure.js +2 -2
  110. package/dist/storage/ai-limits/enforcement.js +2 -2
  111. package/dist/storage/connector-connections/provider.js +1 -1
  112. package/dist/storage/file-upload-sessions/provider.js +4 -4
  113. package/dist/storage/index.d.ts +2 -2
  114. package/dist/storage/index.d.ts.map +1 -1
  115. package/dist/storage/index.js +28 -28
  116. package/dist/storage/index.js.map +1 -1
  117. package/dist/storage/internal.js +1 -1
  118. package/dist/storage/ontology/in-memory/sources.d.ts +6 -3
  119. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  120. package/dist/storage/ontology/index.d.ts +1 -1
  121. package/dist/storage/ontology/index.d.ts.map +1 -1
  122. package/dist/storage/ontology/provider.d.ts +16 -3
  123. package/dist/storage/ontology/provider.d.ts.map +1 -1
  124. package/dist/storage/ontology/provider.js +8 -4
  125. package/dist/storage/ontology/provider.js.map +1 -1
  126. package/dist/storage/ontology/sources.d.ts +36 -8
  127. package/dist/storage/ontology/sources.d.ts.map +1 -1
  128. package/dist/storage/projection-runs/in-memory.d.ts +3 -1
  129. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  130. package/dist/storage/projection-runs/index.d.ts +1 -1
  131. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  132. package/dist/storage/projection-runs/lifecycle.d.ts +12 -0
  133. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  134. package/dist/storage/projection-runs/provider.js +10 -4
  135. package/dist/storage/projection-runs/provider.js.map +1 -1
  136. package/dist/storage/projection-runs/types.d.ts +32 -1
  137. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  138. package/dist/storage/workflow-runs/provider.js +4 -4
  139. package/dist/syncs/index.js +19 -19
  140. package/dist/testing/index.js +296 -54
  141. package/dist/testing/index.js.map +4 -4
  142. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  143. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  144. package/dist/webhooks/internal.js +14 -14
  145. package/dist/webhooks/internal.js.map +1 -1
  146. package/dist/workers/index.js +1 -1
  147. package/dist/workflows/index.js +33 -33
  148. package/package.json +13 -1
  149. package/src/deploy/define.ts +6 -0
  150. package/src/deploy/index.ts +41 -0
  151. package/src/deploy/internal.ts +7 -0
  152. package/src/deploy/services.ts +51 -0
  153. package/src/deploy/types.ts +338 -0
  154. package/src/deploy/validation.ts +261 -0
  155. package/src/errors/catalog.ts +4 -0
  156. package/src/maintenance/ontology-maintenance.ts +32 -2
  157. package/src/maintenance/types.ts +8 -2
  158. package/src/materialization/dataset-watermark.ts +6 -4
  159. package/src/materialization/model.ts +7 -0
  160. package/src/materializer/README.md +26 -6
  161. package/src/materializer/projections/finish-run.ts +129 -26
  162. package/src/materializer/projections/replace.ts +67 -49
  163. package/src/materializer/projections/source-materialization.ts +11 -6
  164. package/src/projections/types.ts +1 -0
  165. package/src/storage/index.ts +6 -1
  166. package/src/storage/ontology/in-memory/sources.ts +119 -55
  167. package/src/storage/ontology/index.ts +4 -1
  168. package/src/storage/ontology/provider.ts +64 -7
  169. package/src/storage/ontology/sources.ts +42 -8
  170. package/src/storage/projection-runs/in-memory.ts +41 -2
  171. package/src/storage/projection-runs/index.ts +2 -0
  172. package/src/storage/projection-runs/lifecycle.ts +61 -4
  173. package/src/storage/projection-runs/types.ts +41 -1
  174. package/src/testing/ontology-storage-contract.ts +141 -15
  175. package/src/testing/projection-run-storage-contract.ts +174 -1
  176. package/dist/chunk-3qpcrcj8.js.map +0 -10
  177. package/dist/chunk-qma80ych.js.map +0 -11
  178. package/dist/chunk-znw0zvy4.js.map +0 -12
  179. /package/dist/{chunk-dv4ct8mp.js.map → chunk-1jvq82rp.js.map} +0 -0
  180. /package/dist/{chunk-728fp090.js.map → chunk-3c90jvfj.js.map} +0 -0
  181. /package/dist/{chunk-vn3yh259.js.map → chunk-4gmng3vf.js.map} +0 -0
  182. /package/dist/{chunk-hxgj4kzd.js.map → chunk-4jph1t3v.js.map} +0 -0
  183. /package/dist/{chunk-y487ywrv.js.map → chunk-6q7c68yx.js.map} +0 -0
  184. /package/dist/{chunk-ypj2wqtj.js.map → chunk-70jmg2zx.js.map} +0 -0
  185. /package/dist/{chunk-wn7mznxc.js.map → chunk-7jc21943.js.map} +0 -0
  186. /package/dist/{chunk-rzcjp5m2.js.map → chunk-8fjmqjyx.js.map} +0 -0
  187. /package/dist/{chunk-m8zkvep1.js.map → chunk-8w27xf9e.js.map} +0 -0
  188. /package/dist/{chunk-z9h698s8.js.map → chunk-a4g5yjm0.js.map} +0 -0
  189. /package/dist/{chunk-4ypbe95r.js.map → chunk-adbve9zt.js.map} +0 -0
  190. /package/dist/{chunk-wnxabtn4.js.map → chunk-ex8s8wsk.js.map} +0 -0
  191. /package/dist/{chunk-4tnrzqqh.js.map → chunk-fj1dvp37.js.map} +0 -0
  192. /package/dist/{chunk-bdhfn0ww.js.map → chunk-kkqwzy6h.js.map} +0 -0
  193. /package/dist/{chunk-ww185kt6.js.map → chunk-mmac1mp6.js.map} +0 -0
  194. /package/dist/{chunk-jfdggg1p.js.map → chunk-n5t4mq6z.js.map} +0 -0
  195. /package/dist/{chunk-3a338wrp.js.map → chunk-p0nbkys4.js.map} +0 -0
  196. /package/dist/{chunk-kxea54yg.js.map → chunk-py2dw8cw.js.map} +0 -0
  197. /package/dist/{chunk-e2c5yxfe.js.map → chunk-q3grgzp1.js.map} +0 -0
  198. /package/dist/{chunk-6rzb1g6h.js.map → chunk-qne45xqq.js.map} +0 -0
  199. /package/dist/{chunk-cbn96bve.js.map → chunk-r5sc1d2b.js.map} +0 -0
  200. /package/dist/{chunk-y6vnvayj.js.map → chunk-vjcd8d27.js.map} +0 -0
  201. /package/dist/{chunk-ma1mhh7w.js.map → chunk-wd34wnsy.js.map} +0 -0
  202. /package/dist/{chunk-pvgpckm1.js.map → chunk-wem5vqjw.js.map} +0 -0
  203. /package/dist/{chunk-gct3m1da.js.map → chunk-xr7y35yj.js.map} +0 -0
  204. /package/dist/{chunk-q2xghyft.js.map → chunk-y0zmae99.js.map} +0 -0
  205. /package/dist/{chunk-xgptywp0.js.map → chunk-y2aq6ag9.js.map} +0 -0
  206. /package/dist/{chunk-yvf2jqj8.js.map → chunk-yfppyaty.js.map} +0 -0
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/storage/projection-runs/errors.ts", "../src/storage/projection-runs/lifecycle.ts", "../src/storage/projection-runs/provider.ts"],
4
- "sourcesContent": [
5
- "import {\n MaterializationConflictError,\n type MaterializationConflictKind,\n} from \"../../materialization/errors\"\n\n/**\n * Base error for projection-run storage operations.\n */\nexport class ProjectionRunError extends MaterializationConflictError {\n readonly name = \"ProjectionRunError\"\n\n constructor(message: string, kind: MaterializationConflictKind = \"run-correlation\") {\n super(kind, message)\n }\n}\n",
6
- "import { parseSixbFailure } from \"../../errors/internal\"\nimport type { SixbFailure } from \"../../errors/types\"\nimport type {\n ProjectionMaterializationIdentity,\n ProjectionRunTerminalDecision,\n} from \"../../materialization/model\"\nimport type {\n ProjectionKind,\n ProjectionRunFailureCode,\n ProjectionTarget,\n} from \"../../projections/types\"\nimport { PROJECTION_RUN_FAILURE_CODES } from \"../../projections/types\"\nimport { ProjectionRunError } from \"./errors\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n FailProjectionRunEnqueueInput,\n FinishProjectionRunInput,\n ProjectionMissingTarget,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionTelemetryCheckpoint,\n QueueProjectionRunInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n} from \"./types\"\nimport { PROJECTION_RUN_PROGRESS_KEYS, zeroProjectionRunProgress } from \"./types\"\n\nexport type StoredProjectionRunRecord = ProjectionRunRecord & {\n readonly executionToken?: string\n}\n\nexport interface PersistedProjectionRunRecord {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly projectionId: string\n readonly projectionKind: ProjectionKind\n readonly protocol?: \"replacement\" | \"telemetry\"\n readonly datasetId: string\n readonly datasetVersionId: string\n readonly datasetVersionCreatedAt?: string\n readonly ontologyRevision?: string\n readonly projectionRevision?: string\n readonly ownershipHash?: string\n readonly objectTypeId?: string\n readonly sourceObjectTypeId?: string\n readonly targetObjectTypeId?: string\n readonly status: ProjectionRunStatus\n readonly queuedAt: Date\n readonly startedAt?: Date\n readonly finishedAt?: Date\n readonly attempt: number\n readonly executionToken?: string\n readonly fixedBatchSize?: number\n readonly nextBatchOrdinal?: number\n readonly nextRowOffset?: number\n readonly inputExhausted?: boolean\n readonly missingTargetObjectTypeId?: string\n readonly missingTargetObjectId?: string\n readonly missingTargetBatchOrdinal?: number\n readonly missingTargetFirstSeenAt?: Date\n readonly progress: ProjectionRunProgress\n readonly error?: unknown\n}\n\nexport interface ProjectionTelemetryAdvance {\n readonly progress: ProjectionRunProgress\n readonly checkpoint: ProjectionTelemetryCheckpoint\n}\n\nexport interface ProjectionRunFinishPlan {\n readonly status: Exclude<ProjectionRunStatus, \"queued\" | \"running\">\n readonly finishedAt: Date\n readonly progress: ProjectionRunProgress\n readonly inputExhausted?: true\n readonly error?: SixbFailure<ProjectionRunFailureCode>\n}\n\n// ── Scalar and identity validation ──────────────────────────\n\nexport function assertProjectionRunNonEmpty(value: string, fieldName: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ProjectionRunError(`[Sixb] Projection run ${fieldName} must not be empty.`)\n }\n}\n\nexport function assertProjectionRunCounter(value: number, fieldName: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[Sixb] Projection run ${fieldName} must be a non-negative safe integer.`\n )\n }\n}\n\nexport function assertProjectionRunListWindow(value: number | undefined, fieldName: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value < 0)) {\n throw new ProjectionRunError(`[Sixb] Projection run list ${fieldName} must be >= 0.`)\n }\n}\n\nexport function addProjectionRunCounter(left: number, right: number, fieldName: string): number {\n const result = left + right\n if (!Number.isSafeInteger(result)) {\n throw new ProjectionRunError(`[Sixb] Projection run ${fieldName} exceeds safe integer range.`)\n }\n return result\n}\n\nexport function assertProjectionRunIdentity(identity: ProjectionMaterializationIdentity): void {\n assertProjectionRunNonEmpty(identity.projectionId, \"projectionId\")\n if (!isProjectionKind(identity.projectionKind)) {\n throw new ProjectionRunError(\n \"[Sixb] Projection run projectionKind must be 'object', 'link', or 'telemetry'.\"\n )\n }\n if (identity.protocol !== \"replacement\" && identity.protocol !== \"telemetry\") {\n throw new ProjectionRunError(\n \"[Sixb] Projection run protocol must be 'replacement' or 'telemetry'.\"\n )\n }\n assertProjectionRunNonEmpty(identity.datasetVersion.datasetId, \"datasetId\")\n assertProjectionRunNonEmpty(identity.datasetVersion.versionId, \"datasetVersionId\")\n assertCanonicalTimestamp(identity.datasetVersion.createdAt, \"datasetVersionCreatedAt\")\n assertProjectionRunNonEmpty(identity.ontologyRevision, \"ontologyRevision\")\n assertProjectionRunNonEmpty(identity.projectionRevision, \"projectionRevision\")\n assertProjectionRunNonEmpty(identity.ownershipHash, \"ownershipHash\")\n if ((identity.protocol === \"telemetry\") !== (identity.projectionKind === \"telemetry\")) {\n throw new ProjectionRunError(\n `[Sixb] Projection run protocol '${identity.protocol}' is incompatible with kind '${identity.projectionKind}'.`\n )\n }\n}\n\nexport function assertProjectionRunIdentityMatches(\n record: Pick<ProjectionRunRecord, \"id\" | \"identity\">,\n identity: ProjectionMaterializationIdentity\n): void {\n if (projectionRunIdentitiesEqual(record.identity, identity)) return\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' materialization identity does not match.`\n )\n}\n\nexport function assertProjectionRunTargetMatches(\n record: Pick<ProjectionRunRecord, \"id\" | \"target\">,\n target: ProjectionTarget\n): void {\n if (projectionTargetsEqual(record.target, target)) return\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' target object types do not match.`\n )\n}\n\nexport function assertProjectionRunStartInput(input: StartOrReclaimProjectionRunInput): void {\n assertProjectionRunNonEmpty(input.id, \"id\")\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n assertProjectionRunIdentityAndTarget(input)\n if (input.startedAt) assertProjectionRunDate(input.startedAt, \"startedAt\")\n}\n\nexport function assertProjectionRunQueueInput(input: QueueProjectionRunInput): void {\n assertProjectionRunNonEmpty(input.id, \"id\")\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n assertProjectionRunNonEmpty(input.executionId, \"executionId\")\n assertProjectionRunIdentityAndTarget(input)\n if (input.queuedAt) assertProjectionRunDate(input.queuedAt, \"queuedAt\")\n}\n\nfunction assertProjectionRunIdentityAndTarget(\n input: QueueProjectionRunInput | StartOrReclaimProjectionRunInput\n): void {\n assertProjectionRunIdentity(input.identity)\n assertProjectionTarget(input.identity.projectionKind, input.target)\n if (input.identity.projectionKind === \"telemetry\") {\n const telemetry = input as ProjectionRunIdentityInput<\"telemetry\">\n assertPositiveCounter(telemetry.fixedBatchSize, \"fixedBatchSize\")\n } else if (input.fixedBatchSize !== undefined) {\n throw new ProjectionRunError(\n \"[Sixb] Replacement projection runs cannot declare a telemetry fixedBatchSize.\"\n )\n }\n}\n\nexport function planProjectionRunReclaim(\n record: StoredProjectionRunRecord,\n input: StartOrReclaimProjectionRunInput\n): { readonly attempt: number } {\n if (record.status !== \"queued\" && record.status !== \"running\") {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' cannot start from status '${record.status}'.`\n )\n }\n assertProjectionRunIdentityMatches(record, input.identity)\n assertProjectionRunTargetMatches(record, input.target)\n if (record.telemetryCheckpoint?.fixedBatchSize !== input.fixedBatchSize) {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${input.id}' fixed batch size does not match.`\n )\n }\n return { attempt: record.status === \"queued\" ? 1 : nextProjectionRunAttempt(record.attempt) }\n}\n\n// ── Lifecycle transitions ───────────────────────────────────\n\nexport function createProjectionRunRecord(\n input: QueueProjectionRunInput,\n now: Date = new Date()\n): ProjectionRunRecord {\n assertProjectionRunQueueInput(input)\n const base = {\n id: input.id,\n projectId: input.projectId,\n executionId: input.executionId,\n status: \"queued\" as const,\n attempt: 0,\n progress: zeroProjectionRunProgress(),\n queuedAt: new Date(input.queuedAt ?? now),\n }\n switch (input.identity.projectionKind) {\n case \"object\": {\n const object = input as ProjectionRunAdmission<\"object\">\n return { ...base, identity: object.identity, target: object.target }\n }\n case \"link\": {\n const link = input as ProjectionRunAdmission<\"link\">\n return { ...base, identity: link.identity, target: link.target }\n }\n case \"telemetry\": {\n const telemetry = input as ProjectionRunAdmission<\"telemetry\">\n return {\n ...base,\n identity: telemetry.identity,\n target: telemetry.target,\n telemetryCheckpoint: {\n fixedBatchSize: telemetry.fixedBatchSize,\n nextBatchOrdinal: 0,\n nextRowOffset: 0,\n inputExhausted: false,\n },\n }\n }\n }\n}\n\nexport function assertProjectionRunRunning(\n record: Pick<ProjectionRunRecord, \"id\" | \"projectId\" | \"status\">\n): void {\n if (record.status === \"running\") return\n if (record.status !== \"queued\") {\n throw new ProjectionRunError(`[Sixb] Projection run '${record.id}' is already terminal.`)\n }\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' for project '${record.projectId}' is not running.`\n )\n}\n\nexport function assertProjectionRunAttempt(\n record: StoredProjectionRunRecord,\n input: {\n readonly id: string\n readonly executionToken: string\n readonly identity: ProjectionMaterializationIdentity\n }\n): asserts record is StoredProjectionRunRecord & { readonly executionToken: string } {\n assertProjectionRunNonEmpty(input.executionToken, \"executionToken\")\n assertProjectionRunIdentity(input.identity)\n assertProjectionRunRunning(record)\n assertProjectionRunIdentityMatches(record, input.identity)\n if (record.executionToken !== input.executionToken) {\n throw staleProjectionRunExecution(input.id)\n }\n}\n\nexport function nextProjectionRunAttempt(current: number): number {\n assertProjectionRunCounter(current, \"attempt\")\n return addProjectionRunCounter(current, 1, \"attempt\")\n}\n\nexport function mergeProjectionRunProgress(\n current: ProjectionRunProgress,\n patch: Partial<ProjectionRunProgress>\n): ProjectionRunProgress {\n const progress = { ...current }\n for (const key of PROJECTION_RUN_PROGRESS_KEYS) {\n const value = patch[key]\n if (value === undefined) continue\n assertProjectionRunCounter(value, key)\n if (value < (current[key] ?? 0)) {\n throw new ProjectionRunError(`[Sixb] Projection run ${key} must not decrease.`)\n }\n progress[key] = value\n }\n assertProjectionRunProgress(progress)\n return progress\n}\n\nexport function assertGenericProgressDoesNotAdvanceTelemetry(\n record: Pick<ProjectionRunRecord, \"id\" | \"identity\" | \"progress\">,\n patch: Partial<ProjectionRunProgress>\n): void {\n if (record.identity.protocol !== \"telemetry\") return\n for (const key of PROJECTION_RUN_PROGRESS_KEYS) {\n if (patch[key] !== undefined && patch[key] !== record.progress[key]) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' progress can only advance with its checkpoint.`\n )\n }\n }\n}\n\nexport function advanceProjectionTelemetry(\n record: ProjectionRunRecord,\n input: AdvanceProjectionTelemetryCheckpointInput\n): ProjectionTelemetryAdvance {\n const telemetry = requireTelemetryProjectionRun(record)\n const checkpoint = telemetry.telemetryCheckpoint\n assertProjectionRunCounter(input.batchOrdinal, \"batchOrdinal\")\n assertPositiveCounter(input.batchRowCount, \"batchRowCount\")\n assertProjectionRunCounter(input.batchRowsSkipped, \"batchRowsSkipped\")\n if (input.batchRowsSkipped > input.batchRowCount) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' skipped rows exceed its batch row count.`\n )\n }\n if (input.batchOrdinal !== checkpoint.nextBatchOrdinal) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' expected batch ordinal ${checkpoint.nextBatchOrdinal}, got ${input.batchOrdinal}.`\n )\n }\n if (input.batchRowCount > checkpoint.fixedBatchSize) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' batch exceeds its fixed size.`\n )\n }\n if (!input.inputExhausted && input.batchRowCount !== checkpoint.fixedBatchSize) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' cannot advance past a partial non-final batch.`\n )\n }\n if (checkpoint.inputExhausted) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' has already exhausted its input.`\n )\n }\n\n const nextRowOffset = addProjectionRunCounter(\n checkpoint.nextRowOffset,\n input.batchRowCount,\n \"nextRowOffset\"\n )\n return {\n progress: {\n sourceRowsRead: nextRowOffset,\n sourceRowsSkipped: addProjectionRunCounter(\n telemetry.progress.sourceRowsSkipped,\n input.batchRowsSkipped,\n \"sourceRowsSkipped\"\n ),\n },\n checkpoint: {\n ...checkpoint,\n nextBatchOrdinal: addProjectionRunCounter(checkpoint.nextBatchOrdinal, 1, \"nextBatchOrdinal\"),\n nextRowOffset,\n inputExhausted: input.inputExhausted,\n },\n }\n}\n\nexport function planProjectionRunFinish(\n record: ProjectionRunRecord,\n input: FinishProjectionRunInput,\n now: Date = new Date()\n): ProjectionRunFinishPlan {\n assertFinishDecision(record, input)\n const patch = input.progress ?? {}\n assertGenericProgressDoesNotAdvanceTelemetry(record, patch)\n const progress = mergeProjectionRunProgress(record.progress, patch)\n const finishedAt = new Date(input.finishedAt ?? now)\n assertProjectionRunDate(finishedAt, \"finishedAt\")\n return {\n status: input.status,\n finishedAt,\n progress,\n ...(input.status === \"succeeded\" && input.protocol === \"telemetry\"\n ? { inputExhausted: true as const }\n : {}),\n ...(input.status === \"succeeded\" || input.error === undefined\n ? {}\n : { error: parseSixbFailure(input.error, PROJECTION_RUN_FAILURE_CODES) }),\n }\n}\n\nexport function finishProjectionRunRecord(\n record: StoredProjectionRunRecord,\n input: FinishProjectionRunInput,\n now: Date = new Date()\n): StoredProjectionRunRecord {\n const plan = planProjectionRunFinish(record, input, now)\n const terminal = {\n executionToken: undefined,\n status: plan.status,\n finishedAt: plan.finishedAt,\n progress: plan.progress,\n error: plan.error,\n }\n if (plan.inputExhausted) {\n const telemetry = requireTelemetryProjectionRun(record)\n return {\n ...telemetry,\n ...terminal,\n telemetryCheckpoint: { ...telemetry.telemetryCheckpoint, inputExhausted: true },\n }\n }\n return { ...record, ...terminal }\n}\n\nexport function failProjectionRunEnqueue(\n record: StoredProjectionRunRecord,\n input: FailProjectionRunEnqueueInput,\n now: Date = new Date()\n): StoredProjectionRunRecord {\n if (record.status !== \"queued\") {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' cannot fail enqueue from status '${record.status}'.`\n )\n }\n const error = parseSixbFailure(input.error, PROJECTION_RUN_FAILURE_CODES)\n if (error.code !== \"queue.enqueue_failed\") {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' enqueue failure must use code 'queue.enqueue_failed'.`\n )\n }\n const finishedAt = new Date(input.finishedAt ?? now)\n assertProjectionRunDate(finishedAt, \"finishedAt\")\n return {\n ...record,\n status: \"failed\",\n finishedAt,\n error,\n }\n}\n\nexport function canRequeueProjectionRunAfterEnqueueFailure(\n record: ProjectionRunRecord,\n input: QueueProjectionRunInput\n): boolean {\n return (\n record.status === \"failed\" &&\n record.error?.code === \"queue.enqueue_failed\" &&\n record.error.retryable &&\n record.executionId === input.executionId &&\n projectionRunIdentitiesEqual(record.identity, input.identity) &&\n projectionTargetsEqual(record.target, input.target) &&\n record.telemetryCheckpoint?.fixedBatchSize === input.fixedBatchSize\n )\n}\n\n// ── Persistence mapping ─────────────────────────────────────\n\nexport function restoreProjectionRun(row: PersistedProjectionRunRecord): StoredProjectionRunRecord {\n assertProjectionRunNonEmpty(row.id, \"id\")\n assertProjectionRunNonEmpty(row.projectId, \"projectId\")\n assertProjectionRunNonEmpty(row.executionId, \"executionId\")\n assertProjectionRunCounter(row.attempt, \"attempt\")\n assertProjectionRunProgress(row.progress)\n assertValidDate(row.queuedAt, \"queuedAt\")\n if (row.startedAt) assertValidDate(row.startedAt, \"startedAt\")\n if (row.finishedAt) assertValidDate(row.finishedAt, \"finishedAt\")\n assertPersistedLifecycle(row)\n\n const identity = restoreIdentity(row)\n const base = {\n id: row.id,\n projectId: row.projectId,\n executionId: row.executionId,\n identity,\n status: row.status,\n queuedAt: new Date(row.queuedAt),\n startedAt: row.startedAt ? new Date(row.startedAt) : undefined,\n finishedAt: row.finishedAt ? new Date(row.finishedAt) : undefined,\n attempt: row.attempt,\n progress: { ...row.progress },\n error:\n row.error === undefined\n ? undefined\n : parseSixbFailure(row.error, PROJECTION_RUN_FAILURE_CODES),\n executionToken: row.executionToken,\n }\n\n if (identity.projectionKind === \"link\") {\n if (!row.sourceObjectTypeId || !row.targetObjectTypeId || row.objectTypeId) {\n throw invalidProjectionRunTarget(row.id)\n }\n assertNoCheckpoint(row)\n return {\n ...base,\n identity,\n target: {\n sourceObjectTypeId: row.sourceObjectTypeId,\n targetObjectTypeId: row.targetObjectTypeId,\n },\n }\n }\n if (!row.objectTypeId || row.sourceObjectTypeId || row.targetObjectTypeId) {\n throw invalidProjectionRunTarget(row.id)\n }\n if (identity.projectionKind === \"telemetry\") {\n const telemetryCheckpoint = restoreCheckpoint(row)\n if (row.progress.sourceRowsRead !== telemetryCheckpoint.nextRowOffset) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${row.id}' progress does not match its checkpoint.`\n )\n }\n if (row.status === \"succeeded\" && !telemetryCheckpoint.inputExhausted) {\n throw incompleteProjectionRun(row.id)\n }\n const missingTarget = restoreMissingTarget(row, telemetryCheckpoint)\n return {\n ...base,\n identity,\n target: { objectTypeId: row.objectTypeId },\n telemetryCheckpoint,\n ...(missingTarget ? { missingTarget } : {}),\n }\n }\n assertNoCheckpoint(row)\n return { ...base, identity, target: { objectTypeId: row.objectTypeId } }\n}\n\nexport function publicProjectionRunRecord(record: StoredProjectionRunRecord): ProjectionRunRecord {\n const cloned = structuredClone(record)\n Reflect.deleteProperty(cloned, \"executionToken\")\n return cloned\n}\n\nexport function createProjectionRunClaim(record: StoredProjectionRunRecord): ProjectionRunClaim {\n assertProjectionRunRunning(record)\n const executionToken = requireProjectionRunExecutionToken(record)\n return {\n run: publicProjectionRunRecord(record),\n execution: { projectionRunId: record.id, executionToken },\n }\n}\n\nexport function requireProjectionRunExecutionToken(record: StoredProjectionRunRecord): string {\n if (record.executionToken) return record.executionToken\n throw incompleteProjectionRun(record.id)\n}\n\nexport function staleProjectionRunExecution(id: string): ProjectionRunError {\n return new ProjectionRunError(\n `[Sixb] Projection run '${id}' execution token is stale.`,\n \"execution-lost\"\n )\n}\n\nexport function projectionRunNotFound(projectId: string, id: string): ProjectionRunError {\n return new ProjectionRunError(\n `[Sixb] Projection run '${id}' not found for project '${projectId}'.`\n )\n}\n\nexport function immutableDatasetVersionConflict(\n identity: ProjectionMaterializationIdentity\n): ProjectionRunError {\n return new ProjectionRunError(\n `[Sixb] Dataset version '${identity.datasetVersion.versionId}' reused an immutable dataset version id with different metadata.`\n )\n}\n\n// ── Private helpers ─────────────────────────────────────────\n\nfunction assertPositiveCounter(value: number, fieldName: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new ProjectionRunError(\n `[Sixb] Projection run ${fieldName} must be a positive safe integer.`\n )\n }\n}\n\nfunction assertCanonicalTimestamp(value: string, fieldName: string): void {\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {\n throw new ProjectionRunError(\n `[Sixb] Projection run ${fieldName} must be a canonical UTC timestamp.`\n )\n }\n}\n\nfunction assertValidDate(value: Date, fieldName: string): void {\n if (!Number.isFinite(value.getTime())) {\n throw new ProjectionRunError(`[Sixb] Projection run persisted ${fieldName} is invalid.`)\n }\n}\n\nfunction assertPersistedLifecycle(row: PersistedProjectionRunRecord): void {\n const hasError = row.error !== undefined\n\n if (row.status === \"queued\") {\n if (\n row.attempt !== 0 ||\n row.startedAt !== undefined ||\n row.finishedAt !== undefined ||\n row.executionToken !== undefined ||\n hasError\n ) {\n throw incompleteProjectionRun(row.id)\n }\n return\n }\n\n if (row.status === \"running\") {\n if (\n row.attempt < 1 ||\n row.startedAt === undefined ||\n row.finishedAt !== undefined ||\n row.executionToken === undefined ||\n hasError\n ) {\n throw incompleteProjectionRun(row.id)\n }\n return\n }\n\n if (row.finishedAt === undefined || row.executionToken !== undefined) {\n throw incompleteProjectionRun(row.id)\n }\n if (row.error !== undefined) {\n const failure = parseSixbFailure(row.error, PROJECTION_RUN_FAILURE_CODES)\n if (failure.code === \"queue.enqueue_failed\") {\n if (\n !failure.retryable ||\n row.status !== \"failed\" ||\n row.attempt !== 0 ||\n row.startedAt !== undefined\n ) {\n throw incompleteProjectionRun(row.id)\n }\n return\n }\n }\n if (row.attempt < 1 || row.startedAt === undefined || (row.status === \"succeeded\" && hasError)) {\n throw incompleteProjectionRun(row.id)\n }\n}\n\nfunction assertProjectionRunDate(value: Date, fieldName: string): void {\n if (!Number.isFinite(value.getTime())) {\n throw new ProjectionRunError(`[Sixb] Projection run ${fieldName} is invalid.`)\n }\n}\n\nfunction isProjectionKind(value: unknown): value is ProjectionKind {\n return value === \"object\" || value === \"link\" || value === \"telemetry\"\n}\n\nfunction assertProjectionTarget(kind: ProjectionKind, target: ProjectionTarget): void {\n if (kind === \"link\") {\n if (!(\"sourceObjectTypeId\" in target)) {\n throw new ProjectionRunError(\n \"[Sixb] Link projection runs must declare source and target object types.\"\n )\n }\n assertProjectionRunNonEmpty(target.sourceObjectTypeId, \"sourceObjectTypeId\")\n assertProjectionRunNonEmpty(target.targetObjectTypeId, \"targetObjectTypeId\")\n return\n }\n if (!(\"objectTypeId\" in target)) {\n throw new ProjectionRunError(\n \"[Sixb] Object and telemetry projection runs must declare one object type.\"\n )\n }\n assertProjectionRunNonEmpty(target.objectTypeId, \"objectTypeId\")\n}\n\nfunction projectionRunIdentitiesEqual(\n left: ProjectionMaterializationIdentity,\n right: ProjectionMaterializationIdentity\n): boolean {\n return (\n left.projectionId === right.projectionId &&\n left.projectionKind === right.projectionKind &&\n left.protocol === right.protocol &&\n left.datasetVersion.datasetId === right.datasetVersion.datasetId &&\n left.datasetVersion.versionId === right.datasetVersion.versionId &&\n left.datasetVersion.createdAt === right.datasetVersion.createdAt &&\n left.ontologyRevision === right.ontologyRevision &&\n left.projectionRevision === right.projectionRevision &&\n left.ownershipHash === right.ownershipHash\n )\n}\n\nfunction projectionTargetsEqual(left: ProjectionTarget, right: ProjectionTarget): boolean {\n if (\"sourceObjectTypeId\" in left || \"sourceObjectTypeId\" in right) {\n return (\n \"sourceObjectTypeId\" in left &&\n \"sourceObjectTypeId\" in right &&\n left.sourceObjectTypeId === right.sourceObjectTypeId &&\n left.targetObjectTypeId === right.targetObjectTypeId\n )\n }\n return left.objectTypeId === right.objectTypeId\n}\n\nfunction assertProjectionRunProgress(progress: ProjectionRunProgress): void {\n for (const key of PROJECTION_RUN_PROGRESS_KEYS) {\n assertProjectionRunCounter(\n key === \"sourceChangesRead\" ? (progress[key] ?? 0) : progress[key],\n key\n )\n }\n if (progress.sourceRowsSkipped > progress.sourceRowsRead) {\n throw new ProjectionRunError(\n \"[Sixb] Projection run sourceRowsSkipped must not exceed sourceRowsRead.\"\n )\n }\n}\n\nfunction assertFinishDecision(\n record: ProjectionRunRecord,\n input: ProjectionRunTerminalDecision\n): void {\n if (input.status !== \"succeeded\" && input.status !== \"failed\" && input.status !== \"cancelled\") {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' finish status must be terminal.`\n )\n }\n if (input.protocol !== \"replacement\" && input.protocol !== \"telemetry\") {\n throw new ProjectionRunError(`[Sixb] Projection run '${record.id}' finish protocol is invalid.`)\n }\n if (input.protocol !== record.identity.protocol) {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' finish protocol does not match its identity.`\n )\n }\n const inputExhausted = \"inputExhausted\" in input ? input.inputExhausted : undefined\n if (input.status === \"succeeded\" && input.protocol === \"telemetry\") {\n if (inputExhausted === true) return\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' cannot succeed before input exhaustion.`\n )\n }\n if (inputExhausted !== undefined) {\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' contains telemetry-only completion metadata.`\n )\n }\n}\n\nfunction restoreIdentity(row: PersistedProjectionRunRecord): ProjectionMaterializationIdentity {\n if (\n !row.protocol ||\n !row.datasetVersionCreatedAt ||\n !row.ontologyRevision ||\n !row.projectionRevision ||\n !row.ownershipHash\n ) {\n throw incompleteProjectionRun(row.id)\n }\n const identity = {\n projectionId: row.projectionId,\n projectionKind: row.projectionKind,\n protocol: row.protocol,\n datasetVersion: {\n datasetId: row.datasetId,\n versionId: row.datasetVersionId,\n createdAt: row.datasetVersionCreatedAt,\n },\n ontologyRevision: row.ontologyRevision,\n projectionRevision: row.projectionRevision,\n ownershipHash: row.ownershipHash,\n } as ProjectionMaterializationIdentity\n assertProjectionRunIdentity(identity)\n return identity\n}\n\nfunction restoreCheckpoint(row: PersistedProjectionRunRecord): ProjectionTelemetryCheckpoint {\n if (\n row.fixedBatchSize === undefined ||\n row.nextBatchOrdinal === undefined ||\n row.nextRowOffset === undefined ||\n row.inputExhausted === undefined\n ) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${row.id}' has incomplete checkpoint state.`\n )\n }\n assertPositiveCounter(row.fixedBatchSize, \"fixedBatchSize\")\n assertProjectionRunCounter(row.nextBatchOrdinal, \"nextBatchOrdinal\")\n assertProjectionRunCounter(row.nextRowOffset, \"nextRowOffset\")\n return {\n fixedBatchSize: row.fixedBatchSize,\n nextBatchOrdinal: row.nextBatchOrdinal,\n nextRowOffset: row.nextRowOffset,\n inputExhausted: row.inputExhausted,\n }\n}\n\n/**\n * A wait is either fully persisted or absent. A partially written one would read as \"waiting since\n * the epoch\" or \"waiting for nothing\", and both would decide a run's fate.\n */\nfunction restoreMissingTarget(\n row: PersistedProjectionRunRecord,\n checkpoint: ProjectionTelemetryCheckpoint\n): ProjectionMissingTarget | undefined {\n const columns = [\n row.missingTargetObjectTypeId,\n row.missingTargetObjectId,\n row.missingTargetBatchOrdinal,\n row.missingTargetFirstSeenAt,\n ]\n if (columns.every((column) => column === undefined)) return undefined\n if (\n row.missingTargetObjectTypeId === undefined ||\n row.missingTargetObjectId === undefined ||\n row.missingTargetBatchOrdinal === undefined ||\n row.missingTargetFirstSeenAt === undefined\n ) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${row.id}' has a partially persisted missing target.`\n )\n }\n const missingTarget: ProjectionMissingTarget = {\n objectTypeId: row.missingTargetObjectTypeId,\n objectId: row.missingTargetObjectId,\n batchOrdinal: row.missingTargetBatchOrdinal,\n firstSeenAt: new Date(row.missingTargetFirstSeenAt),\n }\n assertValidDate(missingTarget.firstSeenAt, \"missingTarget.firstSeenAt\")\n assertProjectionRunCounter(missingTarget.batchOrdinal, \"missingTarget.batchOrdinal\")\n if (missingTarget.batchOrdinal !== checkpoint.nextBatchOrdinal) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${row.id}' is waiting on a batch it has already passed.`\n )\n }\n if (missingTarget.objectTypeId !== row.objectTypeId) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${row.id}' is waiting on an object type it does not write.`\n )\n }\n return missingTarget\n}\n\nfunction assertNoCheckpoint(row: PersistedProjectionRunRecord): void {\n if (\n row.fixedBatchSize === undefined &&\n row.nextBatchOrdinal === undefined &&\n row.nextRowOffset === undefined &&\n row.inputExhausted === undefined\n ) {\n return\n }\n throw new ProjectionRunError(\n `[Sixb] Replacement projection run '${row.id}' contains a telemetry checkpoint.`\n )\n}\n\nfunction incompleteProjectionRun(id: string): ProjectionRunError {\n return new ProjectionRunError(\n `[Sixb] Projection run '${id}' has incomplete materialization state.`\n )\n}\n\nfunction invalidProjectionRunTarget(id: string): ProjectionRunError {\n return new ProjectionRunError(`[Sixb] Projection run '${id}' has an invalid target.`)\n}\n\n/**\n * Validates a wait before it is stored, so every adapter refuses the same shapes and the SQL\n * `CHECK` behind them never has to be the thing that catches it.\n *\n * The ordinal has to be the batch the run is actually stuck on: anchored to a stale one, a wait\n * would survive the progress that resolved it and fail a run that is working. The object type\n * has to be the one this run writes, since that is the only type its telemetry can reference.\n */\nexport function assertProjectionMissingTarget(\n record: TelemetryProjectionRunRecord,\n missingTarget: ProjectionMissingTarget\n): ProjectionMissingTarget {\n assertProjectionRunNonEmpty(missingTarget.objectTypeId, \"missingTarget.objectTypeId\")\n assertProjectionRunNonEmpty(missingTarget.objectId, \"missingTarget.objectId\")\n assertProjectionRunCounter(missingTarget.batchOrdinal, \"missingTarget.batchOrdinal\")\n if (Number.isNaN(missingTarget.firstSeenAt.getTime())) {\n throw new ProjectionRunError(\"[Sixb] Projection run missingTarget.firstSeenAt is invalid.\")\n }\n if (missingTarget.objectTypeId !== record.target.objectTypeId) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' cannot wait on '${missingTarget.objectTypeId}'; it writes '${record.target.objectTypeId}'.`\n )\n }\n if (missingTarget.batchOrdinal !== record.telemetryCheckpoint.nextBatchOrdinal) {\n throw new ProjectionRunError(\n `[Sixb] Telemetry projection run '${record.id}' cannot wait on batch ${missingTarget.batchOrdinal}; it is at ${record.telemetryCheckpoint.nextBatchOrdinal}.`\n )\n }\n return missingTarget\n}\n\nexport function requireTelemetryProjectionRun<TRecord extends ProjectionRunRecord>(\n record: TRecord\n): TRecord & TelemetryProjectionRunRecord {\n if (isTelemetryProjectionRun(record)) return record as TRecord & TelemetryProjectionRunRecord\n throw new ProjectionRunError(\n `[Sixb] Projection run '${record.id}' does not have a telemetry checkpoint.`\n )\n}\n\ntype ProjectionRunIdentityInput<TKind extends ProjectionKind> = Extract<\n QueueProjectionRunInput | StartOrReclaimProjectionRunInput,\n { readonly identity: { readonly projectionKind: TKind } }\n>\n\ntype ProjectionRunAdmission<TKind extends ProjectionKind> = Extract<\n QueueProjectionRunInput,\n { readonly identity: { readonly projectionKind: TKind } }\n>\n\nfunction isTelemetryProjectionRun(\n record: ProjectionRunRecord\n): record is TelemetryProjectionRunRecord {\n return record.identity.projectionKind === \"telemetry\"\n}\n",
7
- "import type { ExecutionStorage } from \"../executions\"\nimport { findPrimitiveRunExecution } from \"../executions/run-link\"\nimport { ProjectionRunError } from \"./errors\"\n\nexport * from \"./lifecycle\"\n\n/** Validate the semantic link between a durable Projection run and its immutable execution. */\nexport async function assertProjectionRunDurableExecution(input: {\n readonly executions: ExecutionStorage\n readonly projectId: string\n readonly executionId: string\n readonly runId: string\n readonly projectionId: string\n readonly datasetId: string\n readonly datasetVersionId: string\n}): Promise<void> {\n const execution = await findPrimitiveRunExecution({\n executions: input.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n primitive: { kind: \"projection\", id: input.projectionId, runId: input.runId },\n sourceTypes: [\"datasetVersion\"],\n })\n if (\n !execution ||\n execution.source.type !== \"datasetVersion\" ||\n execution.source.datasetId !== input.datasetId ||\n execution.source.versionId !== input.datasetVersionId\n ) {\n throw new ProjectionRunError(\n `[Sixb] Execution '${input.executionId}' does not authorize Projection run '${input.runId}'.`\n )\n }\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "12DA83947054E7D364756E2164756E21",
11
- "names": []
12
- }