@sixb/core 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.d.ts +2 -2
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +28 -26
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +14 -16
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-dispatch.d.ts +2 -0
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +18 -31
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/types/params.d.ts +2 -1
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/worker.js +1 -1
- package/dist/agents/index.js +41 -39
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/assert-never.d.ts +6 -0
- package/dist/assert-never.d.ts.map +1 -0
- package/dist/auth/client-address.d.ts +3 -0
- package/dist/auth/client-address.d.ts.map +1 -0
- package/dist/auth/csrf.d.ts +5 -1
- package/dist/auth/csrf.d.ts.map +1 -1
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +14 -8
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +58 -41
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/session-cache.d.ts +10 -3
- package/dist/auth/session-cache.d.ts.map +1 -1
- package/dist/auth/sessions.d.ts +12 -0
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/strategy.js +1 -1
- package/dist/auth/types.d.ts +8 -15
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +3 -3
- package/dist/bootstrap/index.d.ts +1 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +45 -43
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-q5gz3g2j.js → chunk-0321g649.js} +2 -16
- package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
- package/dist/{chunk-e1f1sqba.js → chunk-04h4t2b5.js} +3 -3
- package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
- package/dist/{chunk-3bnt2wna.js → chunk-2hbhn1ff.js} +1 -1
- package/dist/{chunk-eyjzgav0.js → chunk-3nx8vj5a.js} +6 -4
- package/dist/chunk-3nx8vj5a.js.map +12 -0
- package/dist/{chunk-5tetw4hn.js → chunk-4tnrzqqh.js} +1 -1
- package/dist/{chunk-g50nxqs5.js → chunk-63fp9x3q.js} +63 -20
- package/dist/chunk-63fp9x3q.js.map +20 -0
- package/dist/{chunk-qm535afa.js → chunk-693f3zn8.js} +66 -24
- package/dist/chunk-693f3zn8.js.map +15 -0
- package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
- package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
- package/dist/{chunk-6ma8dvzc.js → chunk-898y24dd.js} +49 -42
- package/dist/chunk-898y24dd.js.map +15 -0
- package/dist/{chunk-7qnvhtcd.js → chunk-91wthfwe.js} +17 -17
- package/dist/{chunk-7qnvhtcd.js.map → chunk-91wthfwe.js.map} +5 -5
- package/dist/chunk-96yw3pwd.js.map +2 -2
- package/dist/{chunk-2cxv584m.js → chunk-9pfw47qx.js} +309 -204
- package/dist/chunk-9pfw47qx.js.map +44 -0
- package/dist/{chunk-4k53sm9e.js → chunk-a0073121.js} +59 -59
- package/dist/{chunk-4k53sm9e.js.map → chunk-a0073121.js.map} +5 -5
- package/dist/{chunk-jjwhy3rs.js → chunk-a69fkrtr.js} +5 -5
- package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
- package/dist/{chunk-4ph94nhd.js → chunk-bep5rrdq.js} +2 -2
- package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
- package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
- package/dist/{chunk-nzsy3xrp.js → chunk-cvrbhvtr.js} +69 -44
- package/dist/{chunk-nzsy3xrp.js.map → chunk-cvrbhvtr.js.map} +7 -7
- package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
- package/dist/chunk-d8yes9yx.js.map +20 -0
- package/dist/{chunk-tg4g4zh0.js → chunk-darm7eeg.js} +9 -9
- package/dist/{chunk-tg4g4zh0.js.map → chunk-darm7eeg.js.map} +3 -3
- package/dist/{chunk-vpxss818.js → chunk-drz59ve0.js} +9 -8
- package/dist/chunk-drz59ve0.js.map +10 -0
- package/dist/{chunk-7c2g3sz9.js → chunk-dsfw1bdr.js} +5 -5
- package/dist/{chunk-7c2g3sz9.js.map → chunk-dsfw1bdr.js.map} +1 -1
- package/dist/{chunk-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
- package/dist/chunk-ffwvdgk1.js.map +10 -0
- package/dist/{chunk-r5zythxp.js → chunk-gbcrz0gr.js} +7 -7
- package/dist/{chunk-ybhz3j9g.js → chunk-gc226ten.js} +104 -148
- package/dist/{chunk-ybhz3j9g.js.map → chunk-gc226ten.js.map} +7 -8
- package/dist/{chunk-3ghw2t5q.js → chunk-gmt22nxx.js} +10 -16
- package/dist/chunk-gmt22nxx.js.map +10 -0
- package/dist/chunk-h89wz928.js +42 -0
- package/dist/chunk-h89wz928.js.map +10 -0
- package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
- package/dist/chunk-ht4a7mjg.js.map +15 -0
- package/dist/{chunk-t7dzd1tm.js → chunk-jhyc777j.js} +2 -2
- package/dist/{chunk-xn686q2e.js → chunk-jmwy25mf.js} +75 -57
- package/dist/{chunk-xn686q2e.js.map → chunk-jmwy25mf.js.map} +3 -3
- package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
- package/dist/chunk-k4kkp58d.js.map +11 -0
- package/dist/{chunk-2h63nrde.js → chunk-ky7zpbtt.js} +5 -7
- package/dist/{chunk-2h63nrde.js.map → chunk-ky7zpbtt.js.map} +3 -4
- package/dist/chunk-m4ehq95f.js +9 -0
- package/dist/chunk-m4ehq95f.js.map +10 -0
- package/dist/{chunk-0mza4xb2.js → chunk-m8zkvep1.js} +2 -2
- package/dist/{chunk-b768c93y.js → chunk-mf6hwpzh.js} +83 -28
- package/dist/{chunk-b768c93y.js.map → chunk-mf6hwpzh.js.map} +5 -5
- package/dist/{chunk-yxb4c62x.js → chunk-mr60an99.js} +3 -2
- package/dist/{chunk-yxb4c62x.js.map → chunk-mr60an99.js.map} +3 -3
- package/dist/chunk-n33e8dz8.js +191 -0
- package/dist/chunk-n33e8dz8.js.map +11 -0
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-m7cx05vp.js → chunk-rqtdtm43.js} +126 -59
- package/dist/{chunk-m7cx05vp.js.map → chunk-rqtdtm43.js.map} +13 -12
- package/dist/{chunk-bbaa1fet.js → chunk-rzcjp5m2.js} +7 -3
- package/dist/chunk-rzcjp5m2.js.map +25 -0
- package/dist/{chunk-hzw7yv5g.js → chunk-rzkr70gr.js} +5 -1
- package/dist/{chunk-hzw7yv5g.js.map → chunk-rzkr70gr.js.map} +3 -3
- package/dist/{chunk-sfypc7mk.js → chunk-s24qbp32.js} +4 -4
- package/dist/{chunk-axndsymr.js → chunk-tw03bsmb.js} +2 -2
- package/dist/{chunk-axndsymr.js.map → chunk-tw03bsmb.js.map} +3 -3
- package/dist/{chunk-y0v18c2j.js → chunk-vef6qa14.js} +2 -2
- package/dist/{chunk-gzt6v1ja.js → chunk-vn3yh259.js} +1 -1
- package/dist/{chunk-bg2bs62d.js → chunk-w9bp61e7.js} +5 -5
- package/dist/{chunk-3h7ctayx.js → chunk-xgptywp0.js} +4 -3
- package/dist/chunk-xgptywp0.js.map +11 -0
- package/dist/{chunk-gswwr35f.js → chunk-y487ywrv.js} +4 -4
- package/dist/{chunk-bet1rb9h.js → chunk-y6vnvayj.js} +1 -1
- package/dist/{chunk-x9tmx3fc.js → chunk-ypj2wqtj.js} +3 -6
- package/dist/{chunk-x9tmx3fc.js.map → chunk-ypj2wqtj.js.map} +4 -4
- package/dist/{chunk-g2gezsg5.js → chunk-z9h698s8.js} +1 -1
- package/dist/{chunk-wjffn5m4.js → chunk-zdkcdshk.js} +3 -36
- package/dist/{chunk-wjffn5m4.js.map → chunk-zdkcdshk.js.map} +3 -4
- package/dist/{chunk-bfjv1adk.js → chunk-znw0zvy4.js} +1 -1
- package/dist/edits/types.d.ts +19 -19
- package/dist/edits/types.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +3 -3
- package/dist/errors/catalog.d.ts +4 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/envelope.d.ts +0 -12
- package/dist/events/envelope.d.ts.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -3
- package/dist/events/service.d.ts +1 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/toStoredEvent.d.ts +1 -2
- package/dist/events/toStoredEvent.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +2 -1
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +1 -2
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -37
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.d.ts +1 -2
- package/dist/execution/primitive.d.ts.map +1 -1
- package/dist/execution/primitive.js +38 -36
- package/dist/execution/primitive.js.map +3 -3
- package/dist/execution/request.d.ts +1 -2
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +39 -37
- package/dist/execution/request.js.map +3 -3
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -50
- package/dist/index.js.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +11 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/materialization/errors.d.ts +3 -1
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/events.d.ts +27 -2
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/operations.d.ts +2 -1
- package/dist/materializer/edits/operations.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -2
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/user-refs.d.ts +30 -0
- package/dist/materializer/edits/user-refs.d.ts.map +1 -0
- package/dist/materializer/effective/build-events.d.ts +2 -2
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +11 -3
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/index.js +23 -21
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +2 -0
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -2
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/execution/index.js +23 -21
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/objects/execution.d.ts +21 -27
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +28 -26
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +27 -25
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +8 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/scalar-values.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +1 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -3
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -10
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/sdk/where.d.ts +2 -3
- package/dist/objects/sdk/where.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +11 -10
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +4 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +6 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +34 -22
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +1 -0
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +9 -7
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/primitives.d.ts +38 -0
- package/dist/ontology/primitives.d.ts.map +1 -0
- package/dist/ontology/query-capabilities.d.ts +38 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +23 -2
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/registered.d.ts +16 -0
- package/dist/ontology/registered.d.ts.map +1 -0
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +35 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +18 -4
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/user-ref.d.ts +35 -0
- package/dist/ontology/user-ref.d.ts.map +1 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/normalize.d.ts.map +1 -1
- package/dist/ontology/validation/properties.d.ts +6 -1
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +26 -24
- package/dist/pipelines/index.js.map +1 -1
- package/dist/predicates/types.d.ts +53 -3
- package/dist/predicates/types.d.ts.map +1 -1
- package/dist/projections/builders.d.ts +19 -1
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/internal.js +23 -21
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +1 -1
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +1 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +5 -5
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +27 -25
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/sixb.d.ts +5 -5
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +171 -188
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/sandboxes/sandbox.d.ts +4 -1
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/types.d.ts +4 -3
- package/dist/shared/params/types.d.ts.map +1 -1
- package/dist/shared/params/user-refs.d.ts +19 -0
- package/dist/shared/params/user-refs.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -22
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/types.d.ts +1 -1
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
- package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +62 -13
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/executions/provider.js +1 -1
- package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
- package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
- package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +24 -0
- package/dist/storage/file-upload-sessions/provider.js.map +9 -0
- package/dist/storage/file-upload-sessions/types.d.ts +19 -1
- package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
- package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +29 -25
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +11 -9
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +6 -2
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -1
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +8 -2
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/index.d.ts +1 -1
- package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/types.d.ts +5 -8
- package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +8 -8
- package/dist/syncs/index.js +27 -25
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-execution.d.ts +4 -0
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution.d.ts +1 -2
- package/dist/testing/execution.d.ts.map +1 -1
- package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
- package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1951 -1242
- package/dist/testing/index.js.map +15 -13
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +8 -0
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/sandboxes-contract.d.ts.map +1 -1
- package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
- package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +24 -22
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/webhooks/types.d.ts +2 -2
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/workers/index.js +1 -1
- package/dist/workflows/index.js +42 -40
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/run-dispatch.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/actions/index.ts +0 -3
- package/src/actions/read-facade.ts +102 -62
- package/src/actions/request.ts +13 -0
- package/src/actions/run-dispatch.ts +3 -0
- package/src/actions/types/context.ts +17 -65
- package/src/actions/types/params.ts +2 -1
- package/src/agents/authority.ts +1 -1
- package/src/assert-never.ts +7 -0
- package/src/auth/client-address.ts +12 -0
- package/src/auth/csrf.ts +14 -5
- package/src/auth/index.ts +3 -2
- package/src/auth/runtime.ts +299 -277
- package/src/auth/session-cache.ts +18 -6
- package/src/auth/sessions.ts +30 -0
- package/src/auth/types.ts +7 -17
- package/src/bootstrap/index.ts +1 -0
- package/src/bootstrap/ontology-type-manifest.ts +112 -60
- package/src/edits/types.ts +47 -63
- package/src/errors/catalog.ts +4 -0
- package/src/events/envelope.ts +0 -13
- package/src/events/index.ts +1 -1
- package/src/events/service.ts +1 -11
- package/src/events/toStoredEvent.ts +1 -3
- package/src/events/types/index.ts +1 -1
- package/src/execution/agent.ts +1 -2
- package/src/execution/authorized-object-reader.ts +5 -7
- package/src/execution/primitive.ts +1 -2
- package/src/execution/request.ts +1 -2
- package/src/index.ts +8 -7
- package/src/maintenance/ontology-maintenance.ts +77 -1
- package/src/materialization/errors.ts +2 -0
- package/src/materialization/events.ts +27 -2
- package/src/materializer/README.md +2 -0
- package/src/materializer/edits/commit.ts +21 -12
- package/src/materializer/edits/operations.ts +32 -4
- package/src/materializer/edits/plan.ts +4 -5
- package/src/materializer/edits/user-refs.ts +115 -0
- package/src/materializer/effective/build-events.ts +4 -5
- package/src/materializer/execution/scope.ts +40 -7
- package/src/materializer/projections/replace.ts +2 -0
- package/src/materializer/projections/replacement-plan.ts +4 -0
- package/src/materializer/telemetry/append.ts +4 -12
- package/src/materializer/telemetry/plan.ts +4 -5
- package/src/objects/execution.ts +33 -62
- package/src/objects/query/executor.ts +12 -3
- package/src/objects/query/ir.ts +7 -0
- package/src/objects/query/planner.ts +1 -0
- package/src/objects/query/scalar-values.ts +19 -0
- package/src/objects/query/validate.ts +55 -44
- package/src/objects/sdk/object-handle.ts +8 -8
- package/src/objects/sdk/object-set.ts +8 -15
- package/src/objects/sdk/query-builder.ts +59 -71
- package/src/objects/sdk/telemetry-channel.ts +6 -7
- package/src/objects/sdk/where.ts +6 -13
- package/src/ontology/builders.ts +15 -11
- package/src/ontology/index.ts +4 -0
- package/src/ontology/inference/index.ts +56 -36
- package/src/ontology/internal.ts +1 -0
- package/src/ontology/json-schema.ts +12 -0
- package/src/ontology/primitives.ts +91 -0
- package/src/ontology/query-capabilities.ts +136 -0
- package/src/ontology/refs.ts +33 -6
- package/src/ontology/registered.ts +22 -0
- package/src/ontology/registry.ts +6 -3
- package/src/ontology/tokens.ts +41 -2
- package/src/ontology/types.ts +19 -3
- package/src/ontology/user-ref.ts +120 -0
- package/src/ontology/validation/definition.ts +2 -13
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/normalize.ts +39 -3
- package/src/ontology/validation/properties.ts +95 -19
- package/src/ontology/validation/query.ts +11 -42
- package/src/ontology/validation/schema.ts +16 -0
- package/src/predicates/types.ts +43 -33
- package/src/projections/builders.ts +24 -3
- package/src/projections/validation.ts +15 -1
- package/src/runtime/create.ts +2 -2
- package/src/runtime/host.ts +10 -12
- package/src/runtime/index.ts +3 -2
- package/src/runtime/sixb.ts +13 -23
- package/src/runtime/types.ts +277 -479
- package/src/sandboxes/sandbox.ts +4 -1
- package/src/shared/params/types.ts +4 -3
- package/src/shared/params/user-refs.ts +48 -0
- package/src/shares/compiler.ts +6 -16
- package/src/storage/action-runs/types.ts +1 -0
- package/src/storage/auth/in-memory/access-tokens.ts +5 -2
- package/src/storage/auth/in-memory/auth-storage.ts +5 -8
- package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
- package/src/storage/auth/in-memory/sessions.ts +69 -1
- package/src/storage/auth/in-memory/shared.ts +13 -7
- package/src/storage/auth/index.ts +2 -1
- package/src/storage/auth/types.ts +57 -13
- package/src/storage/executions/validation.ts +1 -1
- package/src/storage/file-upload-sessions/in-memory.ts +64 -113
- package/src/storage/file-upload-sessions/index.ts +1 -0
- package/src/storage/file-upload-sessions/provider.ts +258 -0
- package/src/storage/file-upload-sessions/types.ts +20 -1
- package/src/storage/file-upload-sessions/utils.ts +25 -9
- package/src/storage/index.ts +3 -2
- package/src/storage/objects/in-memory/query.ts +13 -3
- package/src/storage/ontology/commits.ts +6 -2
- package/src/storage/ontology/in-memory/materializations.ts +6 -34
- package/src/storage/ontology/provider-header-validation.ts +57 -0
- package/src/storage/ontology/provider-work.ts +15 -3
- package/src/storage/ontology/provider.ts +59 -1
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +0 -1
- package/src/storage/workflow-interventions/index.ts +0 -1
- package/src/storage/workflow-interventions/types.ts +5 -9
- package/src/testing/action-execution.ts +13 -3
- package/src/testing/auth-storage-contract.ts +149 -62
- package/src/testing/execution-storage-contract.ts +1 -2
- package/src/testing/execution.ts +4 -7
- package/src/testing/file-upload-session-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -0
- package/src/testing/materializer-storage-contract.ts +86 -4
- package/src/testing/object-query-contract.ts +121 -2
- package/src/testing/ontology-contract-fixture.ts +23 -3
- package/src/testing/ontology-storage-contract.ts +58 -0
- package/src/testing/sandboxes-contract.ts +27 -0
- package/src/testing/workflow-intervention-storage-contract.ts +203 -0
- package/src/webhooks/types.ts +2 -2
- package/src/workflows/run-dispatch.ts +12 -1
- package/src/workflows/snapshot.ts +16 -7
- package/src/workflows/types.ts +2 -2
- package/dist/chunk-2cxv584m.js.map +0 -43
- package/dist/chunk-3ghw2t5q.js.map +0 -10
- package/dist/chunk-3h7ctayx.js.map +0 -11
- package/dist/chunk-6ma8dvzc.js.map +0 -15
- package/dist/chunk-bbaa1fet.js.map +0 -25
- package/dist/chunk-eyjzgav0.js.map +0 -12
- package/dist/chunk-f06sf7rr.js.map +0 -11
- package/dist/chunk-g50nxqs5.js.map +0 -18
- package/dist/chunk-hkw8rykk.js.map +0 -15
- package/dist/chunk-p6r1ex7t.js.map +0 -10
- package/dist/chunk-qm535afa.js.map +0 -15
- package/dist/chunk-vpxss818.js.map +0 -10
- package/dist/chunk-vsg0g7h9.js.map +0 -17
- /package/dist/{chunk-e1f1sqba.js.map → chunk-04h4t2b5.js.map} +0 -0
- /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
- /package/dist/{chunk-3bnt2wna.js.map → chunk-2hbhn1ff.js.map} +0 -0
- /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
- /package/dist/{chunk-jjwhy3rs.js.map → chunk-a69fkrtr.js.map} +0 -0
- /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
- /package/dist/{chunk-4ph94nhd.js.map → chunk-bep5rrdq.js.map} +0 -0
- /package/dist/{chunk-kept9cdd.js.map → chunk-bxx3ms5t.js.map} +0 -0
- /package/dist/{chunk-xtfryrfb.js.map → chunk-cbn96bve.js.map} +0 -0
- /package/dist/{chunk-r5zythxp.js.map → chunk-gbcrz0gr.js.map} +0 -0
- /package/dist/{chunk-t7dzd1tm.js.map → chunk-jhyc777j.js.map} +0 -0
- /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
- /package/dist/{chunk-sfypc7mk.js.map → chunk-s24qbp32.js.map} +0 -0
- /package/dist/{chunk-y0v18c2j.js.map → chunk-vef6qa14.js.map} +0 -0
- /package/dist/{chunk-gzt6v1ja.js.map → chunk-vn3yh259.js.map} +0 -0
- /package/dist/{chunk-bg2bs62d.js.map → chunk-w9bp61e7.js.map} +0 -0
- /package/dist/{chunk-gswwr35f.js.map → chunk-y487ywrv.js.map} +0 -0
- /package/dist/{chunk-bet1rb9h.js.map → chunk-y6vnvayj.js.map} +0 -0
- /package/dist/{chunk-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
- /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/action-runs/in-memory.ts", "../src/agents/message.ts", "../src/storage/agents/in-memory.ts", "../src/storage/ai-cost/errors.ts", "../src/storage/ai-cost/in-memory.ts", "../src/storage/ai-limits/in-memory.ts", "../src/storage/connector-connections/in-memory.ts", "../src/storage/file-upload-sessions/
|
|
3
|
+
"sources": ["../src/storage/action-runs/in-memory.ts", "../src/agents/message.ts", "../src/storage/agents/in-memory.ts", "../src/storage/ai-cost/errors.ts", "../src/storage/ai-cost/in-memory.ts", "../src/storage/ai-limits/in-memory.ts", "../src/storage/connector-connections/in-memory.ts", "../src/storage/file-upload-sessions/in-memory.ts", "../src/storage/in-memory/index.ts", "../src/storage/executions/in-memory.ts", "../src/objects/vectors/query.ts", "../src/storage/objects/keys.ts", "../src/storage/objects/in-memory/keys.ts", "../src/objects/query/scalar-values.ts", "../src/objects/vectors/profile.ts", "../src/storage/objects/in-memory/query.ts", "../src/storage/objects/in-memory/read-scope.ts", "../src/storage/objects/in-memory/selected-reader.ts", "../src/storage/objects/in-memory/storage.ts", "../src/storage/ontology/in-memory/shared-state.ts", "../src/storage/ontology/in-memory/commits.ts", "../src/storage/timeseries/store.ts", "../src/storage/ontology/in-memory/materializations-state.ts", "../src/storage/ontology/in-memory/materializations-work.ts", "../src/storage/ontology/in-memory/materializations-finalization.ts", "../src/storage/ontology/in-memory/source-roots.ts", "../src/storage/ontology/in-memory/materializations.ts", "../src/storage/ontology/in-memory/outbox.ts", "../src/storage/ontology/in-memory/sources.ts", "../src/storage/ontology/in-memory/testing.ts", "../src/storage/ontology/in-memory/vector-indexing.ts", "../src/storage/ontology/in-memory/vectors.ts", "../src/storage/ontology/in-memory/index.ts", "../src/storage/run-listing.ts", "../src/storage/pipeline-runs/types.ts", "../src/storage/pipeline-runs/in-memory.ts", "../src/storage/projection-runs/in-memory.ts", "../src/storage/rules/in-memory.ts", "../src/storage/share-grants/in-memory.ts", "../src/storage/share-sessions/in-memory.ts", "../src/storage/sync-runs/types.ts", "../src/storage/sync-runs/in-memory.ts", "../src/storage/webhook-runs/types.ts", "../src/storage/webhook-runs/in-memory.ts", "../src/storage/workflow-interventions/errors.ts", "../src/storage/workflow-interventions/in-memory.ts", "../src/storage/workflow-runs/types.ts", "../src/storage/workflow-runs/in-memory.ts", "../src/storage/in-memory/testing.ts", "../src/storage/migrations/migrate-storage.ts", "../src/storage/migrations/check-schema.ts", "../src/storage/migrations/migration-set.ts", "../src/storage/ontology/vector-indexing.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ExecutionStorage } from \"../executions\"\nimport { ActionRunError } from \"./errors\"\nimport { parseActionRunFailure } from \"./failure\"\nimport {\n actionRunPhaseRecordsEqual,\n actionSubjectsEqual,\n canRequeueActionRunAfterEnqueueFailure,\n isTerminalActionRun,\n} from \"./idempotency\"\nimport { assertActionRunExecution } from \"./provider\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunFailure,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStorage,\n ActionRunWritebackRecord,\n EnterActionRunPhaseInput,\n FinishActionRunInput,\n ListActionRunsInput,\n ListActionRunsResult,\n LockActionMaterializationRunInput,\n QueueActionRunInput,\n RecordActionEffectsInput,\n RecordActionWritebackInput,\n StartActionRunInput,\n} from \"./types\"\n\ntype RunRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nconst runDirectly: RunRootOperation = async <T>(run: () => Promise<T> | T): Promise<T> => run()\n\nfunction actionRunKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction assertNonBlank(value: string, fieldName: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ActionRunError(`[Sixb] Action materialization ${fieldName} must be nonblank.`)\n }\n}\n\nfunction cloneActionRunRecord(record: ActionRunRecord): ActionRunRecord {\n return structuredClone(record)\n}\n\nfunction normalizeParams(params: ActionRunParams): ActionRunParams {\n return structuredClone(params)\n}\n\nfunction normalizeSubject(subject: QueueActionRunInput[\"subject\"]): QueueActionRunInput[\"subject\"] {\n return structuredClone(subject)\n}\n\nfunction normalizeError<TPhase extends ActionRunPhase>(\n error: ActionRunFailure<TPhase>,\n expectedPhase?: TPhase\n): ActionRunFailure<TPhase> {\n return expectedPhase === undefined\n ? (parseActionRunFailure(error) as ActionRunFailure<TPhase>)\n : parseActionRunFailure(error, expectedPhase)\n}\n\nfunction normalizeWriteback(\n input: RecordActionWritebackInput,\n completedAt: Date\n): ActionRunWritebackRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: structuredClone(input.result),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: normalizeError(input.error, \"writeback\"),\n }\n}\n\nfunction normalizeEffects(\n input: RecordActionEffectsInput,\n completedAt: Date\n): ActionRunEffectsRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: normalizeError(input.error, \"effects\"),\n }\n}\n\nfunction compareRuns(a: ActionRunRecord, b: ActionRunRecord, order: \"asc\" | \"desc\"): number {\n const leftAt = a.startedAt ?? a.queuedAt\n const rightAt = b.startedAt ?? b.queuedAt\n const delta = leftAt.getTime() - rightAt.getTime()\n if (delta !== 0) {\n return order === \"asc\" ? delta : -delta\n }\n\n if (a.id === b.id) {\n return 0\n }\n\n return order === \"asc\" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id)\n}\n\nexport class InMemoryActionRunStorage implements ActionRunStorage {\n private readonly rows = new Map<string, ActionRunRecord>()\n private readonly runRootOperation: RunRootOperation\n\n constructor(\n private readonly executions: ExecutionStorage,\n input: { readonly runRootOperation?: RunRootOperation } = {}\n ) {\n this.runRootOperation = input.runRootOperation ?? runDirectly\n }\n\n snapshot(): InMemoryActionRunStorageSnapshot {\n return structuredClone(this.rows)\n }\n\n restore(snapshot: InMemoryActionRunStorageSnapshot): void {\n this.rows.clear()\n for (const [key, record] of structuredClone(snapshot)) {\n this.rows.set(key, record)\n }\n }\n\n async lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => cloneActionRunRecord(this.requireMaterializationRun(input)))\n }\n\n async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(async () => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n if (existing && !canRequeueActionRunAfterEnqueueFailure(existing, input)) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n if (\n [...this.rows.values()].some(\n (run) =>\n run.projectId === input.projectId &&\n run.id !== input.id &&\n run.executionId === input.executionId\n )\n ) {\n throw new ActionRunError(\n `[Sixb] Execution '${input.executionId}' already belongs to another Action run.`\n )\n }\n await assertActionRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n actionId: input.actionId,\n })\n\n const record: ActionRunRecord = {\n id: input.id,\n projectId: input.projectId,\n executionId: input.executionId,\n actionId: input.actionId,\n subject: normalizeSubject(input.subject),\n status: \"queued\",\n phase: \"request\",\n queuedAt: new Date(input.queuedAt ?? new Date()),\n params: normalizeParams(input.params),\n idempotencyKey: input.idempotencyKey,\n }\n\n if (existing) {\n const next: ActionRunRecord = {\n ...existing,\n status: \"queued\",\n phase: \"request\",\n queuedAt: record.queuedAt,\n startedAt: undefined,\n finishedAt: undefined,\n error: undefined,\n writeback: undefined,\n effects: undefined,\n }\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n }\n\n this.rows.set(key, structuredClone(record))\n return cloneActionRunRecord(record)\n })\n }\n\n async start(input: StartActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"queued\") {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n status: \"running\",\n phase: input.phase ?? \"validation\",\n startedAt: new Date(input.startedAt ?? new Date()),\n error: undefined,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"enter phase\")\n const next: ActionRunRecord = {\n ...existing,\n phase: input.phase,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"record writeback\")\n const writeback = normalizeWriteback(input, new Date(input.completedAt ?? new Date()))\n\n if (existing.writeback) {\n if (actionRunPhaseRecordsEqual(existing.writeback, writeback)) {\n return cloneActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already has a different writeback record.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n phase: \"writeback\",\n writeback,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"record effects\")\n const effects = normalizeEffects(input, new Date(input.completedAt ?? new Date()))\n\n if (existing.effects) {\n if (actionRunPhaseRecordsEqual(existing.effects, effects)) {\n return cloneActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already has a different effects record.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n phase: \"effects\",\n effects,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (isTerminalActionRun(existing)) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`\n )\n }\n\n const phase =\n input.status === \"succeeded\" ? (input.phase ?? existing.phase) : input.error.details.phase\n\n const base: ActionRunRecord = {\n ...existing,\n status: input.status,\n phase,\n finishedAt: new Date(input.finishedAt ?? new Date()),\n }\n\n const next: ActionRunRecord =\n input.status === \"succeeded\"\n ? {\n ...base,\n error: undefined,\n }\n : {\n ...base,\n error: normalizeError(input.error),\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n private requireRunningRun(\n key: string,\n projectId: string,\n id: string,\n operation: string\n ): ActionRunRecord {\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(`[Sixb] Action run '${id}' not found for project '${projectId}'.`)\n }\n\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[Sixb] Action run '${id}' cannot ${operation} from status '${existing.status}'.`\n )\n }\n\n return existing\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n return this.runRootOperation(() => {\n const record = this.rows.get(actionRunKey(params.projectId, params.id))\n return record ? cloneActionRunRecord(record) : null\n })\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n return this.runRootOperation(() => {\n if (input.actionIds?.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const order = input.order ?? \"desc\"\n const offset = input.offset ?? 0\n const limit = input.limit ?? this.rows.size\n const actionIds = input.actionIds ? new Set(input.actionIds) : null\n const objectTypeIds = input.objectTypeIds ? new Set(input.objectTypeIds) : null\n const statuses = input.statuses ? new Set(input.statuses) : null\n\n const filtered = [...this.rows.values()]\n .filter((record) => record.projectId === input.projectId)\n .filter((record) => (input.actionId ? record.actionId === input.actionId : true))\n .filter((record) => (actionIds ? actionIds.has(record.actionId) : true))\n .filter((record) =>\n objectTypeIds\n ? record.subject.kind !== \"object\" || objectTypeIds.has(record.subject.objectTypeId)\n : true\n )\n .filter((record) =>\n input.subject ? actionSubjectsEqual(record.subject, input.subject) : true\n )\n .filter((record) =>\n input.objectTypeId\n ? record.subject.kind === \"object\" && record.subject.objectTypeId === input.objectTypeId\n : true\n )\n .filter((record) =>\n input.primaryId\n ? record.subject.kind === \"object\" && record.subject.primaryId === input.primaryId\n : true\n )\n .filter((record) => (statuses ? statuses.has(record.status) : true))\n .filter((record) =>\n input.startedAfter ? (record.startedAt ?? record.queuedAt) >= input.startedAfter : true\n )\n .filter((record) =>\n input.startedBefore ? (record.startedAt ?? record.queuedAt) <= input.startedBefore : true\n )\n .sort((a, b) => compareRuns(a, b, order))\n\n const total = filtered.length\n const runs = filtered.slice(offset, offset + limit).map(cloneActionRunRecord)\n return { runs, hasMore: offset + runs.length < total, total }\n })\n }\n\n private requireMaterializationRun(input: LockActionMaterializationRunInput): ActionRunRecord {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.runId, \"runId\")\n assertNonBlank(input.actionId, \"actionId\")\n\n const existing = this.rows.get(actionRunKey(input.projectId, input.runId))\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n if (existing.actionId !== input.actionId) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' does not belong to action '${input.actionId}'.`\n )\n }\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' cannot materialize from status '${existing.status}'.`\n )\n }\n return existing\n }\n}\n\nexport type InMemoryActionRunStorageSnapshot = Map<string, ActionRunRecord>\n",
|
|
6
6
|
"import type { FileRef } from \"../blob-storage\"\nimport type { JsonValue } from \"../json\"\nimport type { ProviderData } from \"../models\"\nimport type { AgentContextPart } from \"./context/entries\"\n\n/**\n * The agent's own, SDK-independent message. We store messages and threads — not an SDK transport —\n * so a message is just a `role` plus structured `parts` (and optional `metadata`). There is no\n * self-describing wrapper: the storage row owns the message's identity, and `contentVersion` (a\n * column) versions the parts shape so it can be migrated.\n *\n * The part union is intentionally focused on what agent runs actually produce (text, reasoning, step\n * boundaries, tool calls). The model loop validates and normalizes output before its steps are\n * projected into this union; storage validates the durable write contract independently.\n */\nexport const AGENT_MESSAGE_CONTENT_VERSION = 2 as const\n\nexport type AgentMessageRole = \"system\" | \"user\" | \"assistant\"\n\n/** A plain text part (assistant output, user input, or system text). */\nexport interface AgentTextPart {\n readonly type: \"text\"\n readonly text: string\n /** Provider passthrough (kept because some providers require it on the next turn). */\n readonly providerMetadata?: ProviderData\n}\n\n/**\n * A reasoning (\"thinking\") part. `providerMetadata` is load-bearing here: some providers require\n * the reasoning signature back on the following turn, so dropping it would break multi-step loops.\n */\nexport interface AgentReasoningPart {\n readonly type: \"reasoning\"\n readonly text: string\n readonly providerMetadata?: ProviderData\n}\n\n/** A step boundary between assistant loop iterations. */\nexport interface AgentStepStartPart {\n readonly type: \"step-start\"\n}\n\n/** A blob-backed file attached to a user message or produced by an agent/tool. */\nexport interface AgentFilePart {\n readonly type: \"file\"\n readonly fileRef: FileRef\n /** Provider passthrough for future model-specific file handling. */\n readonly providerMetadata?: ProviderData\n}\n\ninterface AgentToolCallBase {\n readonly type: \"tool-call\"\n readonly toolCallId: string\n readonly toolName: string\n /** `true` when the model identifies the call as a dynamic tool. */\n readonly dynamic?: boolean\n /** `true` when the provider executed the tool inline (steers model projection). */\n readonly providerExecuted?: boolean\n readonly input: JsonValue\n readonly providerMetadata?: ProviderData\n}\n\n/** Ordered, hidden provider state required to replay a model response losslessly. */\nexport interface AgentProviderStatePart {\n readonly type: \"provider-state\"\n readonly providerId: string\n readonly data: JsonValue\n}\n\n/**\n * A completed tool call. Only terminal states are modelled — transient states\n * (`input-streaming`, `input-available`, `approval-*`) are never persisted because messages are\n * written only once a run finishes.\n */\nexport type AgentToolCallPart = AgentToolCallBase &\n (\n | { readonly state: \"output-available\"; readonly output: JsonValue }\n | { readonly state: \"output-error\"; readonly errorText: string }\n )\n\nexport type AgentMessagePart =\n | AgentTextPart\n | AgentReasoningPart\n | AgentStepStartPart\n | AgentFilePart\n | AgentContextPart\n | AgentToolCallPart\n | AgentProviderStatePart\n\nexport type AgentMessagePartType = AgentMessagePart[\"type\"]\nexport type AgentToolCallState = AgentToolCallPart[\"state\"]\n\n/** The logical agent message the adapters speak and the store persists (as columns). */\nexport interface AgentMessage {\n readonly role: AgentMessageRole\n readonly parts: readonly AgentMessagePart[]\n /** Optional JSON metadata associated with the message. */\n readonly metadata?: JsonValue\n}\n",
|
|
@@ -9,16 +9,15 @@
|
|
|
9
9
|
"import type { AiModelCallUsageRecord, InMemoryAiUsageStorageSnapshot } from \"../ai-usage\"\nimport type { AiAccountingRecordSetItem } from \"./analytics\"\nimport { buildAiAccountingOverview, buildAiModelCallAccountingList } from \"./analytics\"\nimport { AiCostStorageError } from \"./errors\"\nimport { type AiAccountingGroupIdentity, buildAiModelCallGroups } from \"./groups\"\nimport type {\n AiAccountingAttribution,\n AiAccountingOverview,\n AiCostStorage,\n AiCostSummary,\n AiModelCallCostRecord,\n AiMoney,\n ListAiModelCallAccountingInput,\n ListAiModelCallAccountingResult,\n ListAiModelCallGroupsInput,\n ListAiModelCallGroupsResult,\n QueryAiAccountingOverviewInput,\n SummarizeAiCostExecutionsInput,\n} from \"./types\"\nimport { aiModelCallCostMatchesUsage, normalizeAiModelCallCostRecord } from \"./validation\"\n\nexport interface InMemoryAiCostStorageSnapshot {\n readonly recordsByUsage: Map<string, AiModelCallCostRecord>\n}\n\ninterface InMemoryAiCostUsageSource {\n snapshot(): InMemoryAiUsageStorageSnapshot\n}\n\nexport interface InMemoryAiAccountingAttributionSource {\n resolveGroup?(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<{ readonly executionId: string; readonly attribution?: AiAccountingAttribution }>\n resolve(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<AiAccountingAttribution | undefined>\n}\n\n/** In-memory immutable model-call costs and accounting reads. */\nexport class InMemoryAiCostStorage implements AiCostStorage {\n private readonly recordsByUsage = new Map<string, AiModelCallCostRecord>()\n\n constructor(\n private readonly usage: InMemoryAiCostUsageSource,\n private readonly attribution?: InMemoryAiAccountingAttributionSource\n ) {}\n\n async recordModelCallCost(input: AiModelCallCostRecord): Promise<void> {\n const record = normalizeAiModelCallCostRecord(input)\n const usage = this.usageRecord(record.projectId, record.usageRecordId)\n if (!usage) throw missingUsage(record)\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new AiCostStorageError(\n \"cost_mismatch\",\n `[Sixb] AI valuation for usage '${record.usageRecordId}' does not match its usage record.`\n )\n }\n const key = usageRecordKey(record.projectId, record.usageRecordId)\n if (!this.recordsByUsage.has(key)) this.recordsByUsage.set(key, structuredClone(record))\n }\n\n async summarizeExecutions(\n input: SummarizeAiCostExecutionsInput\n ): Promise<readonly AiCostSummary[]> {\n assertNonBlank(input.projectId, \"cost summary projectId\")\n for (const id of input.executionIds) assertNonBlank(id, \"cost summary executionId\")\n const requested = new Set(input.executionIds)\n const usageByExecution = new Map(input.executionIds.map((id) => [id, [] as string[]]))\n for (const usage of this.usage.snapshot().records.values()) {\n if (usage.projectId === input.projectId && requested.has(usage.executionId)) {\n usageByExecution.get(usage.executionId)!.push(usage.id)\n }\n }\n return input.executionIds.map((id) =>\n this.summarizeUsageIds(input.projectId, usageByExecution.get(id) ?? [])\n )\n }\n\n async queryProjectOverview(input: QueryAiAccountingOverviewInput): Promise<AiAccountingOverview> {\n return buildAiAccountingOverview(input, await this.accountingItems())\n }\n\n async listModelCalls(\n input: ListAiModelCallAccountingInput\n ): Promise<ListAiModelCallAccountingResult> {\n return buildAiModelCallAccountingList(input, await this.accountingItems())\n }\n\n snapshot(): InMemoryAiCostStorageSnapshot {\n return structuredClone({ recordsByUsage: this.recordsByUsage })\n }\n\n async listModelCallGroups(\n input: ListAiModelCallGroupsInput\n ): Promise<ListAiModelCallGroupsResult> {\n const items = await this.accountingItems()\n const roots = new Map<string, Promise<AiAccountingGroupIdentity>>()\n return buildAiModelCallGroups(\n input,\n await Promise.all(\n items.map(async (item) => {\n const key = usageRecordKey(item.usage.projectId, item.usage.executionId)\n let root = roots.get(key)\n if (!root) {\n root =\n this.attribution?.resolveGroup?.({\n projectId: item.usage.projectId,\n executionId: item.usage.executionId,\n }) ??\n Promise.resolve({\n executionId: item.usage.executionId,\n attribution: item.attribution,\n })\n roots.set(key, root)\n }\n return { ...item, root: await root }\n })\n )\n )\n }\n\n restore(snapshot: InMemoryAiCostStorageSnapshot): void {\n replaceMap(this.recordsByUsage, snapshot.recordsByUsage)\n }\n\n /** @internal Immutable accounting source used by in-memory AI limit enforcement. */\n getRecord(projectId: string, usageRecordId: string): AiModelCallCostRecord | null {\n const record = this.recordsByUsage.get(usageRecordKey(projectId, usageRecordId))\n return record ? structuredClone(record) : null\n }\n\n private usageRecord(projectId: string, id: string): AiModelCallUsageRecord | undefined {\n return [...this.usage.snapshot().records.values()].find(\n (record) => record.projectId === projectId && record.id === id\n )\n }\n\n private async accountingItems(): Promise<readonly AiAccountingRecordSetItem[]> {\n return Promise.all(\n [...this.usage.snapshot().records.values()].map(async (usage) => {\n const cost = this.recordsByUsage.get(usageRecordKey(usage.projectId, usage.id))\n const attribution = await this.attribution?.resolve({\n projectId: usage.projectId,\n executionId: usage.executionId,\n })\n return {\n usage,\n ...(attribution ? { attribution } : {}),\n ...(cost ? { cost } : {}),\n }\n })\n )\n }\n\n private summarizeUsageIds(projectId: string, ids: readonly string[]): AiCostSummary {\n const amounts = new Map<string, bigint>()\n let ratedCallCount = 0\n let unpriceableCallCount = 0\n let unvaluedCallCount = 0\n for (const id of ids) {\n const cost = this.recordsByUsage.get(usageRecordKey(projectId, id))\n if (!cost) unvaluedCallCount += 1\n else if (cost.status === \"unpriceable\") unpriceableCallCount += 1\n else {\n ratedCallCount += 1\n addMoney(amounts, cost.money)\n }\n }\n return {\n amounts: [...amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),\n ratedCallCount,\n unpriceableCallCount,\n unvaluedCallCount,\n }\n }\n}\n\nfunction missingUsage(record: { readonly projectId: string; readonly usageRecordId: string }) {\n return new AiCostStorageError(\n \"missing_usage\",\n `[Sixb] AI usage '${record.usageRecordId}' does not exist in project '${record.projectId}'.`\n )\n}\n\nfunction addMoney(amounts: Map<string, bigint>, money: AiMoney): void {\n amounts.set(money.currency, (amounts.get(money.currency) ?? 0n) + BigInt(money.amountNanos))\n}\n\nfunction usageRecordKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction assertNonBlank(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${field} must be nonblank.`)\n }\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n",
|
|
10
10
|
"import type { AiModelCallCostRecord } from \"../ai-cost\"\nimport type { AiModelCallUsageRecord } from \"../ai-usage\"\nimport type { ExecutionRecord } from \"../executions\"\nimport { AiLimitStorageError } from \"./errors\"\nimport { aiLimitCalendarMonth } from \"./period\"\nimport type { AiLimitAccountingEntry } from \"./provider\"\nimport {\n AiLimitOperationLock,\n aiLimitAccountingEntryAppliesToSubject,\n aiLimitAmountKey,\n aiLimitPolicyDimensionKey,\n aiLimitQuantityFromAmount,\n aiLimitReservationBuckets,\n aiLimitReservationRequestKey,\n aiLimitReservationRequestMatches,\n aiLimitSubjectKey,\n aiLimitSubjectsFromAccountingEntry,\n aiModelCallReservationKey,\n assertAiLimitAccountingMatchesReservation,\n assertNonBlank,\n cloneAiLimitPolicy,\n cloneValidDate,\n type NormalizedAiLimitAmount,\n normalizeAiLimitAmount,\n normalizeAiModelCallReservationIdentity,\n normalizeCreateAiLimitPolicy,\n normalizeReserveAiModelCall,\n normalizeUpdateAiLimitPolicy,\n resolveAiLimitActual,\n} from \"./provider\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitPolicyStatus,\n AiLimitQuantity,\n AiLimitStorage,\n AiLimitSubject,\n AiModelCallReservation,\n CreateAiLimitPolicyInput,\n DeleteAiLimitPolicyInput,\n GetAiLimitPolicyInput,\n ListAiLimitPoliciesInput,\n ListAiLimitPolicyStatusesInput,\n MarkAiModelCallReservationUnknownInput,\n ReconcileAiModelCallInput,\n RecordAiModelCallLimitActualsInput,\n ReserveAiModelCallInput,\n ReserveAiModelCallResult,\n UpdateAiLimitPolicyInput,\n} from \"./types\"\n\ninterface AiLimitPeriodState {\n readonly projectId: string\n readonly subject: AiLimitSubject\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly period: AiLimitPeriod\n actual: bigint\n reserved: bigint\n unknown: bigint\n accountingStatus: \"complete\" | \"unavailable\"\n updatedAt: Date\n}\n\nexport interface InMemoryAiLimitStorageOptions {\n readonly executionExists?: (input: {\n readonly projectId: string\n readonly executionId: string\n }) => boolean | Promise<boolean>\n readonly resolveExecution?: (input: {\n readonly projectId: string\n readonly executionId: string\n }) => ExecutionRecord | null | Promise<ExecutionRecord | null>\n readonly resolveUsageRecord?: (input: {\n readonly projectId: string\n readonly usageRecordId: string\n }) => AiModelCallUsageRecord | null | Promise<AiModelCallUsageRecord | null>\n readonly resolveCostRecord?: (input: {\n readonly projectId: string\n readonly usageRecordId: string\n }) => AiModelCallCostRecord | null | Promise<AiModelCallCostRecord | null>\n readonly listUsageRecords?: (input: {\n readonly projectId: string\n }) => readonly AiModelCallUsageRecord[] | Promise<readonly AiModelCallUsageRecord[]>\n}\n\nexport interface InMemoryAiLimitStorageSnapshot {\n readonly policies: Map<string, AiLimitPolicy>\n readonly policyIdsByDimension: Map<string, string>\n readonly periodStates: Map<string, AiLimitPeriodState>\n readonly reservations: Map<string, AiModelCallReservation>\n}\n\n/** In-memory AI limit provider used by development runtimes and contract tests. */\nexport class InMemoryAiLimitStorage implements AiLimitStorage {\n private readonly policies = new Map<string, AiLimitPolicy>()\n private readonly policyIdsByDimension = new Map<string, string>()\n private readonly periodStates = new Map<string, AiLimitPeriodState>()\n private readonly reservations = new Map<string, AiModelCallReservation>()\n private readonly operations = new AiLimitOperationLock()\n\n constructor(private readonly options: InMemoryAiLimitStorageOptions = {}) {}\n\n /** @internal The root transaction must settle queued work before restoring its snapshot. */\n settleOperations(): Promise<void> {\n return this.operations.settle()\n }\n\n async createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n return this.operations.run(async () => {\n const policy = normalizeCreateAiLimitPolicy(input)\n const key = policyKey(policy.projectId, policy.id)\n const dimensionKey = aiLimitPolicyDimensionKey(policy)\n if (this.policies.has(key) || this.policyIdsByDimension.has(dimensionKey)) {\n throw new AiLimitStorageError(\n \"duplicate_policy\",\n `[Sixb] An AI limit policy already exists for '${aiLimitSubjectKey(policy.subject)}' and '${aiLimitAmountKey(normalizeAiLimitAmount(policy.limit))}'.`\n )\n }\n this.policies.set(key, structuredClone(policy))\n this.policyIdsByDimension.set(dimensionKey, key)\n return cloneAiLimitPolicy(policy)\n })\n }\n\n async updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n return this.operations.run(async () => {\n const update = normalizeUpdateAiLimitPolicy(input)\n const key = policyKey(update.projectId, update.id)\n const existing = this.policies.get(key)\n if (!existing) throw missingPolicy(update.projectId, update.id)\n if (update.limit !== undefined) {\n const previous = normalizeAiLimitAmount(existing.limit)\n const next = normalizeAiLimitAmount(update.limit)\n if (aiLimitAmountKey(previous) !== aiLimitAmountKey(next)) {\n throw new TypeError(\"[Sixb] AI limit policy meter and cost currency are immutable.\")\n }\n }\n const policy: AiLimitPolicy = {\n ...existing,\n ...(update.limit === undefined ? {} : { limit: update.limit }),\n ...(update.enabled === undefined ? {} : { enabled: update.enabled }),\n updatedAt: update.updatedAt,\n }\n this.policies.set(key, structuredClone(policy))\n return cloneAiLimitPolicy(policy)\n })\n }\n\n async deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean> {\n return this.operations.run(async () => {\n validatePolicyIdentity(input)\n const key = policyKey(input.projectId, input.id)\n const existing = this.policies.get(key)\n if (!existing) return false\n this.policies.delete(key)\n this.policyIdsByDimension.delete(aiLimitPolicyDimensionKey(existing))\n return true\n })\n }\n\n async getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null> {\n validatePolicyIdentity(input)\n const policy = this.policies.get(policyKey(input.projectId, input.id))\n return policy ? cloneAiLimitPolicy(policy) : null\n }\n\n async listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]> {\n assertNonBlank(input.projectId, \"projectId\")\n return [...this.policies.values()]\n .filter(\n (policy) =>\n policy.projectId === input.projectId && (input.includeDisabled || policy.enabled)\n )\n .sort((left, right) => left.id.localeCompare(right.id))\n .map(cloneAiLimitPolicy)\n }\n\n async listPolicyStatuses(\n input: ListAiLimitPolicyStatusesInput\n ): Promise<readonly AiLimitPolicyStatus[]> {\n return this.operations.run(async () => {\n assertNonBlank(input.projectId, \"projectId\")\n const period = aiLimitCalendarMonth(input.at ?? new Date())\n const existingGroups =\n input.existingGroupIds === undefined ? undefined : new Set(input.existingGroupIds)\n const policies = await this.listPolicies({\n projectId: input.projectId,\n includeDisabled: input.includeDisabled,\n })\n return Promise.all(\n policies.map((policy) => this.policyStatus(policy, period, existingGroups))\n )\n })\n }\n\n async reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult> {\n return this.operations.run(async () => {\n const request = normalizeReserveAiModelCall(input)\n const reservationKey = aiModelCallReservationKey(request.identity)\n const existing = this.reservations.get(reservationKey)\n if (existing) {\n if (!aiLimitReservationRequestMatches(existing, request)) {\n throw new AiLimitStorageError(\n \"reservation_conflict\",\n `[Sixb] AI model-call reservation '${input.callId}' was replayed with different subjects, estimates, or period.`\n )\n }\n if (existing.state !== \"active\") {\n return { status: \"terminal\", reservation: structuredClone(existing), created: false }\n }\n return { status: \"reserved\", reservation: structuredClone(existing), created: false }\n }\n await this.assertExecutionExists(request.identity.projectId, request.identity.executionId)\n\n const enabledPolicies = [...this.policies.values()].filter(\n (policy) => policy.projectId === request.identity.projectId && policy.enabled\n )\n const subjectKeys = new Set(request.subjects.map(aiLimitSubjectKey))\n const estimates = new Map(\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [aiLimitAmountKey(amount), amount] as const\n })\n )\n const exhaustedPolicies: AiLimitPolicyStatus[] = []\n const unavailablePolicies: AiLimitPolicyStatus[] = []\n const unavailableReasons = new Set<\"missingEstimate\" | \"incompleteAccounting\">()\n for (const policy of enabledPolicies) {\n if (!subjectKeys.has(aiLimitSubjectKey(policy.subject))) continue\n const limit = normalizeAiLimitAmount(policy.limit)\n const estimate = estimates.get(aiLimitAmountKey(limit))\n const status = await this.policyStatus(policy, request.period)\n if (!estimate || status.accountingStatus === \"unavailable\") {\n unavailablePolicies.push(status)\n if (!estimate) unavailableReasons.add(\"missingEstimate\")\n if (status.accountingStatus === \"unavailable\") {\n unavailableReasons.add(\"incompleteAccounting\")\n }\n continue\n }\n const actual = normalizeAiLimitAmount(status.consumption.actual).amount\n const reserved = normalizeAiLimitAmount(status.consumption.reserved).amount\n const unknown = normalizeAiLimitAmount(status.consumption.unknown).amount\n if (actual + reserved + unknown + estimate.amount > limit.amount) {\n exhaustedPolicies.push(status)\n }\n }\n if (unavailablePolicies.length > 0) {\n unavailablePolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"unavailable\",\n unavailablePolicies,\n reasons: [...unavailableReasons].sort(),\n }\n }\n if (exhaustedPolicies.length > 0) {\n exhaustedPolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"denied\",\n exhaustedPolicies,\n resetAt: new Date(\n Math.min(...exhaustedPolicies.map((status) => status.period.resetAt.getTime()))\n ),\n }\n }\n\n const buckets = aiLimitReservationBuckets(\n enabledPolicies,\n request.subjects,\n request.estimates\n )\n if (buckets.length === 0) return { status: \"notRequired\" }\n for (const bucket of buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n request.identity.projectId,\n bucket.subject,\n amount,\n request.period\n )\n state.reserved += amount.amount\n state.updatedAt = new Date(request.reservedAt)\n }\n const reservation: AiModelCallReservation = {\n ...request.identity,\n buckets,\n requestKey: aiLimitReservationRequestKey(request),\n period: request.period,\n state: \"active\",\n reservedAt: request.reservedAt,\n updatedAt: new Date(request.reservedAt),\n }\n this.reservations.set(reservationKey, structuredClone(reservation))\n return { status: \"reserved\", reservation: structuredClone(reservation), created: true }\n })\n }\n\n async recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void> {\n return this.operations.run(async () => {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), \"recordedAt\")\n const entry = await this.requireAccountingEntry(input.projectId, input.usageRecordId)\n const period = aiLimitCalendarMonth(entry.occurredAt)\n const subjectKeys = new Set(aiLimitSubjectsFromAccountingEntry(entry).map(aiLimitSubjectKey))\n for (const state of this.periodStates.values()) {\n if (\n state.projectId !== input.projectId ||\n state.period.start.getTime() !== period.start.getTime() ||\n !subjectKeys.has(aiLimitSubjectKey(state.subject))\n ) {\n continue\n }\n const actual = resolveAiLimitActual([entry], state)\n state.actual += actual.amount\n if (actual.accountingStatus === \"unavailable\") state.accountingStatus = \"unavailable\"\n state.updatedAt = new Date(recordedAt)\n }\n })\n }\n\n async reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation> {\n return this.operations.run(async () => {\n const identity = normalizeAiModelCallReservationIdentity(input)\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const reconciledAt = cloneValidDate(input.reconciledAt ?? new Date(), \"reconciledAt\")\n const key = aiModelCallReservationKey(identity)\n const reservation = this.reservations.get(key)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"reconciled\") {\n if (reservation.usageRecordId === input.usageRecordId) {\n return structuredClone(reservation)\n }\n throw new AiLimitStorageError(\n \"reconciliation_conflict\",\n `[Sixb] AI model-call reservation '${identity.callId}' was reconciled with a different usage record.`\n )\n }\n const accounting = await this.requireAccountingEntry(identity.projectId, input.usageRecordId)\n assertAiLimitAccountingMatchesReservation(reservation, accounting)\n this.reconcileEstimateCounters(reservation, accounting, reconciledAt)\n const reconciled: AiModelCallReservation = {\n ...reservation,\n state: \"reconciled\",\n usageRecordId: input.usageRecordId,\n updatedAt: reconciledAt,\n }\n this.reservations.set(key, structuredClone(reconciled))\n return structuredClone(reconciled)\n })\n }\n\n async markReservationUnknown(\n input: MarkAiModelCallReservationUnknownInput\n ): Promise<AiModelCallReservation> {\n return this.operations.run(async () => {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const markedAt = cloneValidDate(input.markedAt ?? new Date(), \"markedAt\")\n const key = aiModelCallReservationKey(identity)\n const reservation = this.reservations.get(key)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"unknown\") return structuredClone(reservation)\n if (reservation.state !== \"active\") throw invalidState(reservation, \"mark unknown\")\n this.moveEstimateCounter(reservation, \"reserved\", -1n, markedAt)\n this.moveEstimateCounter(reservation, \"unknown\", 1n, markedAt)\n const unknown: AiModelCallReservation = {\n ...reservation,\n state: \"unknown\",\n updatedAt: markedAt,\n }\n this.reservations.set(key, structuredClone(unknown))\n return structuredClone(unknown)\n })\n }\n\n snapshot(): InMemoryAiLimitStorageSnapshot {\n return structuredClone({\n policies: this.policies,\n policyIdsByDimension: this.policyIdsByDimension,\n periodStates: this.periodStates,\n reservations: this.reservations,\n })\n }\n\n restore(snapshot: InMemoryAiLimitStorageSnapshot): void {\n replaceMap(this.policies, snapshot.policies)\n replaceMap(this.policyIdsByDimension, snapshot.policyIdsByDimension)\n replaceMap(this.periodStates, snapshot.periodStates)\n replaceMap(this.reservations, snapshot.reservations)\n }\n\n private async policyStatus(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n existingGroups?: ReadonlySet<string>\n ): Promise<AiLimitPolicyStatus> {\n const limit = normalizeAiLimitAmount(policy.limit)\n const state = await this.ensurePeriodState(policy, period)\n const reserved = state.reserved\n const unknown = state.unknown\n const consumed = state.actual + reserved + unknown\n const remaining = limit.amount > consumed ? limit.amount - consumed : 0n\n const quantity = (amount: bigint): AiLimitQuantity =>\n aiLimitQuantityFromAmount({ ...limit, amount })\n return {\n policy: cloneAiLimitPolicy(policy),\n period: structuredClone(period),\n consumption: {\n actual: quantity(state.actual),\n reserved: quantity(reserved),\n unknown: quantity(unknown),\n remaining: quantity(remaining),\n },\n accountingStatus: state.accountingStatus,\n exhausted: consumed >= limit.amount,\n orphaned:\n policy.subject.type === \"group\" &&\n existingGroups !== undefined &&\n !existingGroups.has(policy.subject.id),\n }\n }\n\n private async ensurePeriodState(\n policy: AiLimitPolicy,\n period: AiLimitPeriod\n ): Promise<AiLimitPeriodState> {\n const amount = normalizeAiLimitAmount(policy.limit)\n const key = periodStateKey(policy.projectId, policy.subject, amount, period)\n const existing = this.periodStates.get(key)\n if (existing?.accountingStatus === \"complete\") return existing\n // A late valuation can repair the ledger after this period was cached as unavailable.\n const actual = await this.resolvePolicyActual(policy, period, amount)\n if (existing) {\n existing.actual = actual.amount\n existing.accountingStatus = actual.accountingStatus\n existing.updatedAt = new Date()\n return existing\n }\n const state: AiLimitPeriodState = {\n projectId: policy.projectId,\n subject: structuredClone(policy.subject),\n meter: amount.meter,\n currency: amount.currency,\n period: structuredClone(period),\n actual: actual.amount,\n reserved: 0n,\n unknown: 0n,\n accountingStatus: actual.accountingStatus,\n updatedAt: new Date(),\n }\n this.periodStates.set(key, state)\n return state\n }\n\n private moveEstimateCounter(\n reservation: AiModelCallReservation,\n counter: \"reserved\" | \"unknown\",\n direction: 1n | -1n,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period\n )\n state[counter] += direction * amount.amount\n if (state[counter] < 0n) {\n throw new Error(`[Sixb] In-memory AI limit ${counter} counter became negative.`)\n }\n state.updatedAt = new Date(updatedAt)\n }\n }\n\n private reconcileEstimateCounters(\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period\n )\n const counter = reservation.state === \"active\" ? \"reserved\" : \"unknown\"\n const actual = resolveAiLimitActual([entry], amount)\n if (actual.accountingStatus === \"complete\") {\n state[counter] -= amount.amount\n } else if (reservation.state === \"active\") {\n state.reserved -= amount.amount\n state.unknown += amount.amount\n }\n if (state.reserved < 0n || state.unknown < 0n) {\n throw new Error(\"[Sixb] In-memory AI limit reservation counter became negative.\")\n }\n state.updatedAt = new Date(updatedAt)\n }\n }\n\n private requirePeriodState(\n projectId: string,\n subject: AiLimitSubject,\n amount: NormalizedAiLimitAmount,\n period: AiLimitPeriod\n ): AiLimitPeriodState {\n const state = this.periodStates.get(periodStateKey(projectId, subject, amount, period))\n if (!state) throw new Error(\"[Sixb] In-memory AI limit period state is inconsistent.\")\n return state\n }\n\n private async assertExecutionExists(projectId: string, executionId: string): Promise<void> {\n if (this.options.resolveExecution) {\n if (await this.options.resolveExecution({ projectId, executionId })) return\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[Sixb] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n if (\n this.options.executionExists &&\n (await this.options.executionExists({ projectId, executionId }))\n ) {\n return\n }\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[Sixb] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n\n private async resolvePolicyActual(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n dimension: NormalizedAiLimitAmount\n ): Promise<ReturnType<typeof resolveAiLimitActual>> {\n if (\n !this.options.listUsageRecords ||\n ((policy.subject.type === \"user\" || policy.subject.type === \"serviceAccount\") &&\n !this.options.resolveExecution)\n ) {\n return { amount: 0n, accountingStatus: \"unavailable\" }\n }\n const records = await this.options.listUsageRecords({ projectId: policy.projectId })\n const entries = await Promise.all(\n records\n .filter(\n (record) =>\n record.occurredAt.getTime() >= period.start.getTime() &&\n record.occurredAt.getTime() < period.end.getTime()\n )\n .map((record) => this.accountingEntry(record))\n )\n return resolveAiLimitActual(\n entries.filter((entry) => aiLimitAccountingEntryAppliesToSubject(entry, policy.subject)),\n dimension\n )\n }\n\n private async requireAccountingEntry(\n projectId: string,\n usageRecordId: string\n ): Promise<AiLimitAccountingEntry> {\n if (!this.options.resolveUsageRecord) {\n throw new AiLimitStorageError(\n \"unavailable_actuals\",\n \"[Sixb] In-memory AI limit storage has no immutable accounting source.\"\n )\n }\n const record = await this.options.resolveUsageRecord({ projectId, usageRecordId })\n if (!record) {\n throw new AiLimitStorageError(\n \"missing_usage_record\",\n `[Sixb] AI usage record '${usageRecordId}' does not exist in project '${projectId}'.`\n )\n }\n return this.accountingEntry(record)\n }\n\n private async accountingEntry(record: AiModelCallUsageRecord): Promise<AiLimitAccountingEntry> {\n const [execution, cost] = await Promise.all([\n this.options.resolveExecution?.({\n projectId: record.projectId,\n executionId: record.executionId,\n }),\n this.options.resolveCostRecord?.({\n projectId: record.projectId,\n usageRecordId: record.id,\n }),\n ])\n const requester = execution?.requestedBy\n return {\n projectId: record.projectId,\n usageRecordId: record.id,\n executionId: record.executionId,\n attempt: record.attempt,\n callId: record.callId,\n occurredAt: new Date(record.occurredAt),\n ...(record.usage.totalTokens === undefined ? {} : { totalTokens: record.usage.totalTokens }),\n requesterGroupIds: [...record.requesterGroupIds],\n ...(requester?.type === \"user\" || requester?.type === \"serviceAccount\"\n ? { requester: { type: requester.type, id: requester.id } }\n : {}),\n ...(cost?.status === \"rated\"\n ? { valuation: { status: \"rated\" as const, money: structuredClone(cost.money) } }\n : cost\n ? { valuation: { status: \"unavailable\" as const } }\n : {}),\n }\n }\n}\n\nfunction policyKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction periodStateKey(\n projectId: string,\n subject: AiLimitSubject,\n amount: Pick<NormalizedAiLimitAmount, \"meter\" | \"currency\">,\n period: AiLimitPeriod\n): string {\n return JSON.stringify([\n projectId,\n aiLimitSubjectKey(subject),\n amount.meter,\n amount.currency,\n period.start.toISOString(),\n ])\n}\n\nfunction validatePolicyIdentity(input: GetAiLimitPolicyInput): void {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n}\n\nfunction missingPolicy(projectId: string, id: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_policy\",\n `[Sixb] AI limit policy '${id}' does not exist in project '${projectId}'.`\n )\n}\n\nfunction missingReservation(identity: {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n}): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_reservation\",\n `[Sixb] AI model-call reservation '${identity.callId}' does not exist for execution '${identity.executionId}' attempt ${identity.attempt}.`\n )\n}\n\nfunction invalidState(reservation: AiModelCallReservation, operation: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"invalid_reservation_state\",\n `[Sixb] Cannot ${operation} AI model-call reservation '${reservation.callId}' in state '${reservation.state}'.`\n )\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n",
|
|
11
11
|
"import { timingSafeEqual } from \"node:crypto\"\nimport { createSixbError, parseSixbFailure, toSixbFailure } from \"../../errors/internal\"\nimport { ConnectorConnectionStorageError } from \"./errors\"\nimport type {\n AttachConnectorConnectionRunAuthorizationInput,\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorConnectionRunCallbackResult,\n ClaimConnectorCredentialMutationInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationAttemptRecord,\n ConnectorAuthorizationKey,\n ConnectorAuthorizationRecord,\n ConnectorConnectionKey,\n ConnectorConnectionRecord,\n ConnectorConnectionRunAwaitingProviderRecord,\n ConnectorConnectionRunAwaitingSelectionRecord,\n ConnectorConnectionRunProcessingRecord,\n ConnectorConnectionRunRecord,\n ConnectorConnectionRunSucceededRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationFence,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorAuthorizationInput,\n CreateConnectorConnectionRunInput,\n CreateConnectorConnectionSelectionRunInput,\n FinalizeConnectorReauthorizationInput,\n FinishConnectorConnectionRunInput,\n GetConnectorConnectionInput,\n GetConnectorConnectionRunInput,\n InitializeConnectorAuthorizationAccountsInput,\n ListConnectorConnectionsInput,\n MarkConnectorAuthorizationNeedsReauthorizationInput,\n MarkConnectorCredentialMutationExecutingInput,\n PutConnectorConnectionFromRunInput,\n PutConnectorConnectionFromRunResult,\n PutConnectorConnectionInput,\n PutConnectorConnectionResult,\n RecoverExpiredConnectorCredentialMutationInput,\n ReleaseConnectorCredentialMutationInput,\n RenewConnectorCredentialMutationInput,\n StageConnectorCredentialMutationCredentialsInput,\n StageConnectorCredentialMutationRevocationInput,\n WaitForConnectorConnectionRunSelectionInput,\n} from \"./types\"\nimport { CONNECTOR_CONNECTION_RUN_FAILURE_CODES } from \"./types\"\n\nexport interface InMemoryConnectorConnectionStorageSnapshot {\n readonly attempts: Map<string, ConnectorAuthorizationAttemptRecord>\n readonly connectionRuns: Map<string, ConnectorConnectionRunRecord>\n readonly authorizations: Map<string, ConnectorAuthorizationRecord>\n readonly connections: Map<string, ConnectorConnectionRecord>\n}\n\nfunction connectionRunBase(record: ConnectorConnectionRunRecord, updatedAt: Date) {\n return {\n id: record.id,\n projectId: record.projectId,\n connectorId: record.connectorId,\n kind: record.kind,\n owner: structuredClone(record.owner),\n slot: record.slot,\n initiatedByExecutionId: record.initiatedByExecutionId,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(updatedAt),\n }\n}\n\nfunction expireConnectionRun(\n record: Extract<ConnectorConnectionRunRecord, { readonly status: \"waiting\" }>,\n now: Date\n) {\n return {\n ...connectionRunBase(record, now),\n status: \"expired\" as const,\n ...(record.waitingFor === \"account_selection\"\n ? { authorizationId: record.authorizationId }\n : {}),\n finishedAt: new Date(now),\n }\n}\n\nfunction failExpiredProcessingRun(record: ConnectorConnectionRunProcessingRecord, now: Date) {\n return {\n ...connectionRunBase(record, now),\n status: \"failed\" as const,\n ...(record.authorizationId === undefined ? {} : { authorizationId: record.authorizationId }),\n error: toSixbFailure(\n createSixbError(\n \"internal.unexpected\",\n \"[Sixb] Connector callback processing did not complete before its deadline.\"\n ),\n { allowedCodes: CONNECTOR_CONNECTION_RUN_FAILURE_CODES, at: now }\n ),\n finishedAt: new Date(now),\n }\n}\n\nexport interface InMemoryConnectorConnectionStorageOptions {\n /** Storage-authoritative clock. Durable implementations should use their database clock. */\n readonly now?: () => Date\n}\n\nexport class InMemoryConnectorConnectionStorage implements ConnectorConnectionStorage {\n readonly durability = \"ephemeral\" as const\n private readonly attempts = new Map<string, ConnectorAuthorizationAttemptRecord>()\n private readonly connectionRuns = new Map<string, ConnectorConnectionRunRecord>()\n private readonly authorizations = new Map<string, ConnectorAuthorizationRecord>()\n private readonly connections = new Map<string, ConnectorConnectionRecord>()\n\n constructor(private readonly options: InMemoryConnectorConnectionStorageOptions = {}) {}\n\n async createAuthorizationAttempt(\n input: CreateConnectorAuthorizationAttemptInput\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n assertPositiveDuration(input.ttlMs, \"authorization attempt TTL\")\n if (this.attempts.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt already exists.\"\n )\n }\n if (input.connectionRunId !== undefined) {\n const run = this.connectionRuns.get(input.connectionRunId)\n const existingAttempt = this.findAuthorizationAttemptByConnectionRunId(input.connectionRunId)\n if (\n !run ||\n existingAttempt ||\n run.projectId !== input.projectId ||\n run.connectorId !== input.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== input.slot ||\n run.initiatedByExecutionId !== input.initiatedByExecutionId\n ) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt does not match its connection run.\"\n )\n }\n }\n const now = this.now()\n const record: ConnectorAuthorizationAttemptRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n stateHash: input.stateHash,\n ...(input.codeVerifier === undefined\n ? {}\n : { codeVerifier: structuredClone(input.codeVerifier) }),\n redirectUri: input.redirectUri,\n ...(input.connectionRunId === undefined ? {} : { connectionRunId: input.connectionRunId }),\n ...(input.returnTo === undefined ? {} : { returnTo: input.returnTo }),\n ...(input.callbackBindingHash === undefined\n ? {}\n : { callbackBindingHash: input.callbackBindingHash }),\n ...(input.reauthorizationId === undefined\n ? {}\n : { reauthorizationId: input.reauthorizationId }),\n ...(input.reauthorizationRevision === undefined\n ? {}\n : { reauthorizationRevision: input.reauthorizationRevision }),\n ...(input.reauthorizationConnectionIds === undefined\n ? {}\n : { reauthorizationConnectionIds: [...input.reauthorizationConnectionIds] }),\n createdAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.attempts.set(record.id, record)\n return structuredClone(record)\n }\n\n async consumeAuthorizationAttempt(\n input: Parameters<ConnectorConnectionStorage[\"consumeAuthorizationAttempt\"]>[0]\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n const record = this.attempts.get(input.id)\n if (record && record.expiresAt.getTime() <= this.now().getTime()) {\n this.attempts.delete(record.id)\n throw invalidAttempt()\n }\n if (\n !record ||\n record.projectId !== input.projectId ||\n record.connectorId !== input.connectorId ||\n record.redirectUri !== input.redirectUri ||\n !safeEqual(record.stateHash, input.stateHash)\n ) {\n throw invalidAttempt()\n }\n\n this.attempts.delete(input.id)\n return structuredClone(record)\n }\n\n async createConnectionRun(\n input: CreateConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingProviderRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: input.kind,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"provider_authorization\",\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async createConnectionSelectionRun(\n input: CreateConnectorConnectionSelectionRunInput\n ): Promise<ConnectorConnectionRunAwaitingSelectionRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"active\" ||\n authorization.credentialMutation\n ) {\n throw authorizationConflict()\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingSelectionRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: \"connect\",\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"account_selection\",\n authorizationId: input.authorizationId,\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async claimConnectionRunCallback(\n input: ClaimConnectorConnectionRunCallbackInput\n ): Promise<ClaimConnectorConnectionRunCallbackResult | null> {\n assertPositiveDuration(input.processingTtlMs, \"connection run processing TTL\")\n const attempt = this.attempts.get(input.attemptId)\n if (\n !attempt ||\n attempt.projectId !== input.projectId ||\n attempt.connectionRunId === undefined ||\n attempt.returnTo === undefined ||\n attempt.callbackBindingHash === undefined ||\n attempt.redirectUri !== input.redirectUri ||\n !safeEqual(attempt.stateHash, input.stateHash) ||\n !safeEqual(attempt.callbackBindingHash, input.callbackBindingHash)\n ) {\n return null\n }\n\n const run = this.connectionRuns.get(attempt.connectionRunId)\n if (\n !run ||\n run.projectId !== input.projectId ||\n run.connectorId !== attempt.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== attempt.slot ||\n run.initiatedByExecutionId !== attempt.initiatedByExecutionId\n ) {\n return null\n }\n\n const now = this.now()\n this.attempts.delete(attempt.id)\n if (attempt.expiresAt.getTime() <= now.getTime() || run.expiresAt.getTime() <= now.getTime()) {\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return { type: \"expired\", run: structuredClone(expired), returnTo: attempt.returnTo }\n }\n\n const processing: ConnectorConnectionRunProcessingRecord = {\n ...connectionRunBase(run, now),\n status: \"running\" as const,\n processingId: input.processingId,\n callbackStartedAt: now,\n expiresAt: new Date(now.getTime() + input.processingTtlMs),\n ...(attempt.reauthorizationId === undefined\n ? {}\n : { authorizationId: attempt.reauthorizationId }),\n }\n this.connectionRuns.set(run.id, processing)\n return {\n type: \"claimed\",\n run: structuredClone(processing),\n attempt: structuredClone(attempt),\n returnTo: attempt.returnTo,\n }\n }\n\n async attachConnectionRunAuthorization(\n input: AttachConnectorConnectionRunAuthorizationInput\n ): Promise<ConnectorConnectionRunProcessingRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.processingId !== input.processingId ||\n (run.authorizationId !== undefined && run.authorizationId !== input.authorizationId) ||\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"pending_selection\"\n ) {\n return null\n }\n const updated: ConnectorConnectionRunProcessingRecord = {\n ...run,\n authorizationId: input.authorizationId,\n updatedAt: this.now(),\n }\n this.connectionRuns.set(run.id, updated)\n return structuredClone(updated)\n }\n\n async waitForConnectionRunSelection(input: WaitForConnectorConnectionRunSelectionInput) {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.kind !== \"connect\" ||\n run.processingId !== input.processingId ||\n run.authorizationId !== input.authorizationId\n ) {\n return null\n }\n const now = this.now()\n const waiting = {\n ...connectionRunBase(run, now),\n status: \"waiting\" as const,\n waitingFor: \"account_selection\" as const,\n authorizationId: input.authorizationId,\n expiresAt: new Date(input.expiresAt),\n }\n this.connectionRuns.set(run.id, waiting)\n return structuredClone(waiting)\n }\n\n async finishConnectionRun(\n input: FinishConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n if (!sameConnectionRunScope(run, input) || run.status !== \"running\") return null\n if (input.processingId !== run.processingId) return null\n const now = this.now()\n const authorizationId =\n input.status === \"succeeded\"\n ? input.authorizationId\n : input.status === \"failed\"\n ? (input.authorizationId ?? run.authorizationId)\n : run.authorizationId\n if (input.status !== \"succeeded\" && run.kind === \"connect\" && authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, authorizationId, now)\n }\n const base = connectionRunBase(run, now)\n const finished: ConnectorConnectionRunRecord =\n input.status === \"succeeded\"\n ? {\n ...base,\n status: \"succeeded\",\n authorizationId: input.authorizationId,\n ...(input.cleanupAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: input.cleanupAuthorizationId }),\n connections: structuredClone(input.connections),\n finishedAt: now,\n }\n : input.status === \"failed\"\n ? {\n ...base,\n status: \"failed\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n error: parseSixbFailure(input.error, CONNECTOR_CONNECTION_RUN_FAILURE_CODES),\n finishedAt: now,\n }\n : {\n ...base,\n status: \"cancelled\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, finished)\n return structuredClone(finished)\n }\n\n async listPendingConnectionRuns(\n input: Parameters<ConnectorConnectionStorage[\"listPendingConnectionRuns\"]>[0]\n ): Promise<readonly ConnectorConnectionRunRecord[]> {\n return [...this.connectionRuns.values()]\n .filter(\n (run) =>\n run.projectId === input.projectId &&\n run.connectorId === input.connectorId &&\n (run.status === \"running\" ||\n (run.status === \"waiting\" && run.waitingFor === \"account_selection\"))\n )\n .map((run) => structuredClone(run))\n }\n\n async getConnectionRun(\n input: GetConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n return sameConnectionRunScope(run, input) ? structuredClone(run) : null\n }\n\n async createAuthorization(\n input: CreateConnectorAuthorizationInput\n ): Promise<ConnectorAuthorizationRecord> {\n assertPositiveDuration(input.selectionTtlMs, \"account selection TTL\")\n if (this.authorizations.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorAuthorizationRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n authorizedBy: structuredClone(input.authorizedBy),\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n accounts: structuredClone(input.accounts),\n status: \"pending_selection\",\n selectionExpiresAt: new Date(now.getTime() + input.selectionTtlMs),\n revision: 0,\n createdAt: now,\n updatedAt: now,\n }\n this.authorizations.set(record.id, record)\n return structuredClone(record)\n }\n\n async initializeAuthorizationAccounts(\n input: InitializeConnectorAuthorizationAccountsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n record.status !== \"pending_selection\" ||\n record.credentialMutation\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n accounts: structuredClone(input.accounts),\n revision: record.revision + 1,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async getAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const authorization = this.authorizations.get(input.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async getAuthorizationByConnectionId(\n input: ConnectorConnectionKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const connection = this.connections.get(input.connectionId)\n if (!sameConnectionScope(connection, input)) return null\n const authorization = this.authorizations.get(connection.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async claimCredentialMutation(\n input: ClaimConnectorCredentialMutationInput\n ): Promise<ClaimConnectorCredentialMutationResult | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n assertPositiveDuration(input.operationTimeoutMs, \"credential mutation timeout\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n !canClaimMutation(record.status, input.mutation.kind)\n ) {\n return null\n }\n\n if (record.credentialMutation) {\n const canReplacePrepared =\n record.credentialMutation.phase === \"prepared\" &&\n record.credentialMutation.expiresAt.getTime() <= now.getTime()\n if (!canReplacePrepared) return null\n }\n\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n input.mutation.kind === \"reauthorization\" &&\n !sameIds(\n attached.map((connection) => connection.id),\n input.expectedConnectionIds ?? []\n )\n ) {\n return null\n }\n\n const deadlineAt = new Date(now.getTime() + input.operationTimeoutMs)\n const mutation = {\n ...structuredClone(input.mutation),\n phase: \"prepared\" as const,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, deadlineAt),\n deadlineAt,\n ...(input.mutation.kind === \"reauthorization\"\n ? { expectedConnectionIds: [...(input.expectedConnectionIds ?? [])] }\n : {}),\n }\n const startsRevocation =\n input.mutation.kind === \"revocation\" && record.status !== \"revocation_pending\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: input.mutation.kind === \"revocation\" ? \"revocation_pending\" : record.status,\n selectionExpiresAt:\n input.mutation.kind === \"revocation\" ? undefined : record.selectionExpiresAt,\n revision: startsRevocation ? record.revision + 1 : record.revision,\n credentialMutation: mutation,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n\n const disconnected: ConnectorConnectionRecord[] = []\n if (input.mutation.kind === \"revocation\") {\n for (const connection of attached) {\n const updatedConnection = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, updatedConnection)\n disconnected.push(structuredClone(updatedConnection))\n }\n }\n return { authorization: structuredClone(updated), disconnected }\n }\n\n async markCredentialMutationExecuting(\n input: MarkConnectorCredentialMutationExecutingInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"prepared\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"executing\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async renewCredentialMutation(\n input: RenewConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, record.credentialMutation.deadlineAt),\n },\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationCredentials(\n input: StageConnectorCredentialMutationCredentialsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n mutationExpired(record, now) ||\n record.credentialMutation.kind === \"revocation\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n phase: \"result_staged\",\n stagedCredentials: {\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n },\n },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationRevocation(\n input: StageConnectorCredentialMutationRevocationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n record.credentialMutation.kind !== \"revocation\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"result_staged\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async releaseCredentialMutation(\n input: ReleaseConnectorCredentialMutationInput\n ): Promise<boolean> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\"\n ) {\n return false\n }\n this.authorizations.set(record.id, {\n ...record,\n credentialMutation: undefined,\n updatedAt: this.now(),\n })\n return true\n }\n\n async recoverExpiredCredentialMutation(\n input: RecoverExpiredConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(record, input) || !record.credentialMutation) return null\n if (record.credentialMutation.phase === \"result_staged\") return structuredClone(record)\n\n const now = this.now()\n if (!mutationExpired(record, now)) return null\n const ambiguous = record.credentialMutation.phase === \"executing\"\n const failClosed = ambiguous && record.credentialMutation.kind !== \"revocation\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: failClosed ? \"needs_reauthorization\" : record.status,\n selectionExpiresAt: failClosed ? undefined : record.selectionExpiresAt,\n revision: failClosed ? record.revision + 1 : record.revision,\n credentialMutation: undefined,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async markNeedsReauthorization(\n input: MarkConnectorAuthorizationNeedsReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!matchesMutation(record, input)) return null\n const staged = record.credentialMutation.stagedCredentials\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n ...(staged\n ? {\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined\n ? undefined\n : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n }\n : {}),\n status: \"needs_reauthorization\",\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeRefresh(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"refresh\")\n if (!record || !staged) return null\n const updated = applyStagedCredentials(record, staged, this.now(), {\n status: \"active\",\n accounts: record.accounts,\n })\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeReauthorization(\n input: FinalizeConnectorReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"reauthorization\")\n if (!record || !staged || !record.credentialMutation) return null\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n !sameIds(\n attached.map((connection) => connection.id),\n record.credentialMutation.expectedConnectionIds ?? []\n )\n ) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections attached to the connector authorization changed during reauthorization.\"\n )\n }\n const accountsById = new Map(input.accounts.map((account) => [account.id, account]))\n if (attached.some((connection) => !accountsById.has(connection.account.id))) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Reauthorized connector grant no longer exposes every attached account.\"\n )\n }\n\n const now = this.now()\n const updated = applyStagedCredentials(record, staged, now, {\n status: \"active\",\n accounts: input.accounts,\n })\n this.authorizations.set(record.id, updated)\n for (const connection of attached) {\n this.connections.set(connection.id, {\n ...connection,\n account: structuredClone(accountsById.get(connection.account.id)!),\n updatedAt: now,\n })\n }\n return structuredClone(updated)\n }\n\n async finalizeRevocation(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== \"revocation\" ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: \"revoked\",\n credentials: undefined,\n credentialExpiresAt: undefined,\n scopes: [],\n accounts: [],\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async putConnection(input: PutConnectorConnectionInput): Promise<PutConnectorConnectionResult> {\n return this.putConnectionNow(input, this.now())\n }\n\n async putConnectionFromRun(\n input: PutConnectorConnectionFromRunInput\n ): Promise<PutConnectorConnectionFromRunResult> {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"account_selection\"\n ) {\n throw invalidRun()\n }\n const now = this.now()\n const result = this.putConnectionNow(\n {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: run.owner,\n slot: run.slot,\n authorizationId: run.authorizationId,\n account: input.account,\n replace: input.replace,\n },\n now\n )\n const succeeded: ConnectorConnectionRunSucceededRecord = {\n ...connectionRunBase(run, now),\n status: \"succeeded\",\n authorizationId: run.authorizationId,\n ...(result.revocationPendingAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: result.revocationPendingAuthorizationId }),\n connections: [structuredClone(result.connection)],\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, succeeded)\n return { ...result, run: structuredClone(succeeded) }\n }\n\n private putConnectionNow(\n input: PutConnectorConnectionInput,\n now: Date\n ): PutConnectorConnectionResult {\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n !isSelectable(authorization.status) ||\n authorization.credentialMutation?.kind === \"reauthorization\"\n ) {\n throw authorizationConflict()\n }\n const account = authorization.accounts.find((candidate) => candidate.id === input.account.id)\n if (!account) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection account is not exposed by its authorization.\"\n )\n }\n const existing = this.findConnectionRecord(input)\n const sameAccount = existing?.account.id === account.id\n if (existing && !sameAccount && !input.replace) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n `[Sixb] Connector slot '${input.slot}' is already connected to another account; explicit replacement is required.`\n )\n }\n if (!existing && this.connections.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n \"[Sixb] Connector connection id already exists.\"\n )\n }\n\n let revocationPendingAuthorizationId: string | undefined\n if (existing?.status === \"connected\" && existing.authorizationId !== authorization.id) {\n const previous = this.authorizations.get(existing.authorizationId)\n if (!previous) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Existing connector connection references an unavailable authorization.\"\n )\n }\n const remaining = this.connectedConnectionsForAuthorization(previous.id).filter(\n (connection) => connection.id !== existing.id\n )\n this.assertConnectionCanMove(existing, previous, remaining.length === 0)\n if (remaining.length === 0) {\n const pending = markAuthorizationRevocationPending(previous, now)\n this.authorizations.set(previous.id, pending)\n revocationPendingAuthorizationId = previous.id\n }\n } else if (existing?.status === \"connected\") {\n const previous = this.authorizations.get(existing.authorizationId)\n if (previous) this.assertConnectionCanMove(existing, previous, false)\n }\n\n const updatedAuthorization: ConnectorAuthorizationRecord =\n authorization.status === \"pending_selection\"\n ? {\n ...authorization,\n status: \"active\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: now,\n }\n : authorization\n const connection: ConnectorConnectionRecord = existing\n ? {\n ...existing,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n disconnectedAt: undefined,\n updatedAt: now,\n }\n : {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n createdAt: now,\n updatedAt: now,\n }\n\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(updatedAuthorization.id, updatedAuthorization)\n }\n this.connections.set(connection.id, connection)\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(updatedAuthorization),\n ...(revocationPendingAuthorizationId === undefined\n ? {}\n : { revocationPendingAuthorizationId }),\n created: existing === undefined,\n replaced: existing !== undefined && !sameAccount,\n }\n }\n\n async getConnection(\n input: GetConnectorConnectionInput\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.findConnectionRecord(input)\n return connection?.status === \"connected\" ? structuredClone(connection) : null\n }\n\n async getConnectionById(\n input: ConnectorConnectionKey\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.connections.get(input.connectionId)\n return sameConnectionScope(connection, input) ? structuredClone(connection) : null\n }\n\n async listConnections(\n input: ListConnectorConnectionsInput\n ): Promise<readonly ConnectorConnectionRecord[]> {\n return [...this.connections.values()]\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async listConnectionsByAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<readonly ConnectorConnectionRecord[]> {\n const authorization = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) return []\n return this.connectedConnectionsForAuthorization(input.authorizationId)\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async disconnectConnection(input: ConnectorConnectionKey): Promise<{\n readonly connection: ConnectorConnectionRecord\n readonly authorization: ConnectorAuthorizationRecord\n readonly revocationPendingAuthorizationId?: string\n } | null> {\n const connection = this.connections.get(input.connectionId)\n if (\n !connection ||\n connection.projectId !== input.projectId ||\n connection.connectorId !== input.connectorId\n ) {\n return null\n }\n const authorization = this.authorizations.get(connection.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection references an unavailable authorization.\"\n )\n }\n if (connection.status === \"disconnected\") {\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(authorization),\n ...(authorization.status === \"revocation_pending\"\n ? { revocationPendingAuthorizationId: authorization.id }\n : {}),\n }\n }\n\n const now = this.now()\n const remaining = this.connectedConnectionsForAuthorization(authorization.id).filter(\n (candidate) => candidate.id !== connection.id\n )\n this.assertConnectionCanMove(connection, authorization, remaining.length === 0)\n const disconnected = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, disconnected)\n const updatedAuthorization =\n remaining.length === 0\n ? markAuthorizationRevocationPending(authorization, now)\n : authorization\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(authorization.id, updatedAuthorization)\n }\n return {\n connection: structuredClone(disconnected),\n authorization: structuredClone(updatedAuthorization),\n ...(updatedAuthorization.status === \"revocation_pending\" && remaining.length === 0\n ? { revocationPendingAuthorizationId: updatedAuthorization.id }\n : {}),\n }\n }\n\n snapshot(): InMemoryConnectorConnectionStorageSnapshot {\n return {\n attempts: structuredClone(this.attempts),\n connectionRuns: structuredClone(this.connectionRuns),\n authorizations: structuredClone(this.authorizations),\n connections: structuredClone(this.connections),\n }\n }\n\n restore(snapshot: InMemoryConnectorConnectionStorageSnapshot): void {\n replaceMap(this.attempts, snapshot.attempts)\n replaceMap(this.connectionRuns, snapshot.connectionRuns)\n replaceMap(this.authorizations, snapshot.authorizations)\n replaceMap(this.connections, snapshot.connections)\n }\n\n private now(): Date {\n return new Date(this.options.now?.() ?? new Date())\n }\n\n private currentConnectionRun(runId: string): ConnectorConnectionRunRecord | undefined {\n const run = this.connectionRuns.get(runId)\n if (!run || (run.status !== \"waiting\" && run.status !== \"running\")) return run\n\n if (run.status === \"waiting\" && run.waitingFor === \"account_selection\") return run\n const now = this.now()\n if (run.expiresAt.getTime() > now.getTime()) return run\n\n if (run.status === \"waiting\" && run.waitingFor === \"provider_authorization\") {\n const attempt = this.findAuthorizationAttemptByConnectionRunId(run.id)\n if (attempt) this.attempts.delete(attempt.id)\n }\n if (run.status === \"waiting\") {\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return expired\n }\n\n if (run.kind === \"connect\" && run.authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, run.authorizationId, now)\n }\n const failed = failExpiredProcessingRun(run, now)\n this.connectionRuns.set(run.id, failed)\n return failed\n }\n\n private findConnectionRecord(\n input: GetConnectorConnectionInput\n ): ConnectorConnectionRecord | undefined {\n for (const connection of this.connections.values()) {\n if (\n connection.projectId === input.projectId &&\n connection.connectorId === input.connectorId &&\n connection.owner.type === input.owner.type &&\n connection.slot === input.slot\n ) {\n return connection\n }\n }\n return undefined\n }\n\n private findAuthorizationAttemptByConnectionRunId(\n connectionRunId: string\n ): ConnectorAuthorizationAttemptRecord | undefined {\n for (const attempt of this.attempts.values()) {\n if (attempt.connectionRunId === connectionRunId) return attempt\n }\n return undefined\n }\n\n private connectionRecordsForAuthorization(authorizationId: string): ConnectorConnectionRecord[] {\n return [...this.connections.values()].filter(\n (connection) => connection.authorizationId === authorizationId\n )\n }\n\n private connectedConnectionsForAuthorization(\n authorizationId: string\n ): ConnectorConnectionRecord[] {\n return this.connectionRecordsForAuthorization(authorizationId).filter(\n (connection) => connection.status === \"connected\"\n )\n }\n\n private assertConnectionCanMove(\n _connection: ConnectorConnectionRecord,\n authorization: ConnectorAuthorizationRecord,\n removingLastConnection = true\n ): void {\n const mutation = authorization.credentialMutation\n if (mutation?.kind === \"reauthorization\") {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections cannot change while their connector authorization is being reauthorized.\"\n )\n }\n if (removingLastConnection && mutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] The last connector connection cannot be removed while credentials are being mutated.\"\n )\n }\n }\n\n private markPendingAuthorizationForCleanup(\n connectorId: string,\n authorizationId: string,\n now: Date\n ): void {\n const authorization = this.authorizations.get(authorizationId)\n if (\n !authorization ||\n authorization.connectorId !== connectorId ||\n authorization.status !== \"pending_selection\"\n ) {\n return\n }\n this.authorizations.set(\n authorization.id,\n markAuthorizationRevocationPending(authorization, now)\n )\n }\n}\n\nfunction disconnectConnectionRecord(\n connection: ConnectorConnectionRecord,\n now: Date\n): ConnectorConnectionRecord {\n return {\n ...connection,\n status: \"disconnected\",\n disconnectedAt: new Date(now),\n updatedAt: new Date(now),\n }\n}\n\nfunction markAuthorizationRevocationPending(\n authorization: ConnectorAuthorizationRecord,\n now: Date\n): ConnectorAuthorizationRecord {\n if (authorization.status === \"revocation_pending\" || authorization.status === \"revoked\") {\n return authorization\n }\n if (authorization.credentialMutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization cannot begin revocation while credentials are being mutated.\"\n )\n }\n return {\n ...authorization,\n status: \"revocation_pending\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: new Date(now),\n }\n}\n\nfunction safeEqual(left: string, right: string): boolean {\n const leftBytes = Buffer.from(left)\n const rightBytes = Buffer.from(right)\n return leftBytes.length === rightBytes.length && timingSafeEqual(leftBytes, rightBytes)\n}\n\nfunction invalidRun(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"run_invalid\",\n \"[Sixb] Connector connection run is invalid, expired, or already used.\"\n )\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n\nfunction sameIds(left: readonly string[], right: readonly string[]): boolean {\n const leftSorted = [...left].sort()\n const rightSorted = [...right].sort()\n return (\n leftSorted.length === rightSorted.length &&\n leftSorted.every((value, index) => value === rightSorted[index])\n )\n}\n\nfunction invalidAttempt(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"attempt_invalid\",\n \"[Sixb] Connector authorization attempt is invalid, expired, or already used.\"\n )\n}\n\nfunction authorizationConflict(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection requires a selectable authorization from the same project and connector.\"\n )\n}\n\nfunction assertPositiveDuration(value: number, name: string): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new ConnectorConnectionStorageError(\n \"invalid_input\",\n `[Sixb] Connector ${name} must be positive.`\n )\n }\n}\n\nfunction sameAuthorizationScope(\n record: ConnectorAuthorizationRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorAuthorizationRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionScope(\n record: ConnectorConnectionRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionRunScope(\n record: ConnectorConnectionRunRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRunRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction canClaimMutation(\n status: ConnectorAuthorizationRecord[\"status\"],\n kind: ClaimConnectorCredentialMutationInput[\"mutation\"][\"kind\"]\n): boolean {\n if (kind === \"refresh\") return status === \"active\"\n if (kind === \"reauthorization\") {\n return status === \"active\" || status === \"needs_reauthorization\"\n }\n return status !== \"revoked\"\n}\n\nfunction isSelectable(status: ConnectorAuthorizationRecord[\"status\"]): boolean {\n return status === \"pending_selection\" || status === \"active\"\n}\n\nfunction leaseExpiry(now: Date, durationMs: number, deadlineAt: Date): Date {\n return new Date(Math.min(now.getTime() + durationMs, deadlineAt.getTime()))\n}\n\nfunction mutationExpired(record: ConnectorAuthorizationRecord, now: Date): boolean {\n return (\n record.credentialMutation!.expiresAt.getTime() <= now.getTime() ||\n record.credentialMutation!.deadlineAt.getTime() <= now.getTime()\n )\n}\n\nfunction matchesMutation(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n holderId?: string\n): record is ConnectorAuthorizationRecord & {\n readonly credentialMutation: NonNullable<ConnectorAuthorizationRecord[\"credentialMutation\"]>\n} {\n return (\n sameAuthorizationScope(record, input) &&\n record.revision === input.expectedRevision &&\n record.credentialMutation?.id === input.mutationId &&\n (holderId === undefined || record.credentialMutation.holderId === holderId)\n )\n}\n\nfunction stagedCredentials(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n kind: \"refresh\" | \"reauthorization\"\n) {\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== kind ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n return record.credentialMutation.stagedCredentials ?? null\n}\n\nfunction applyStagedCredentials(\n record: ConnectorAuthorizationRecord,\n staged: NonNullable<ReturnType<typeof stagedCredentials>>,\n now: Date,\n input: {\n readonly status: \"active\"\n readonly accounts: readonly ConnectorAuthorizationRecord[\"accounts\"][number][]\n }\n): ConnectorAuthorizationRecord {\n return {\n ...record,\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined ? undefined : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n accounts: structuredClone(input.accounts),\n status: input.status,\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: now,\n }\n}\n",
|
|
12
|
-
"/**\n *
|
|
13
|
-
"import type { Principal } from \"../../auth\"\nimport type { FileRef, SignedBlobUploadPart } from \"../../blob-storage\"\nimport { FileUploadSessionError } from \"./errors\"\nimport type {\n CreateFileUploadSessionInput,\n FileUploadSession,\n FileUploadSessionStore,\n} from \"./types\"\nimport {\n createFileUploadId,\n isFileUploadSessionExpired,\n isTerminalFileUploadSessionExpired,\n principalKey,\n shouldDeleteFileUploadSession,\n} from \"./utils\"\n\nexport type InMemoryFileUploadSessionsSnapshot = Map<string, FileUploadSession>\n\n/**\n * In-memory {@link FileUploadSessionStore}.\n *\n * Sessions live only in this process's memory: they do not survive a restart and\n * are not shared across instances. Staged/direct-put uploads therefore require a\n * single-instance deployment for now; a durable (Pg/Sqlite) store is a follow-up.\n * Expired sessions are reaped opportunistically on `create` and on demand via\n * `cleanupExpired` (there is no background sweeper).\n */\nexport class InMemoryFileUploadSessions implements FileUploadSessionStore {\n private readonly sessionsById = new Map<string, FileUploadSession>()\n\n snapshot(): InMemoryFileUploadSessionsSnapshot {\n return structuredClone(this.sessionsById)\n }\n\n restore(snapshot: InMemoryFileUploadSessionsSnapshot): void {\n this.sessionsById.clear()\n for (const [id, session] of snapshot) {\n this.sessionsById.set(id, structuredClone(session))\n }\n }\n\n async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {\n await this.cleanupExpired()\n\n const session: FileUploadSession = {\n id: input.id ?? createFileUploadId(),\n projectId: input.projectId,\n principalKey: principalKey(input.principal),\n strategy: input.strategy,\n status: \"pending\",\n ...(input.fileName === undefined ? {} : { fileName: input.fileName }),\n ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),\n ...(input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath }),\n ...(input.expectedSizeBytes === undefined\n ? {}\n : { expectedSizeBytes: input.expectedSizeBytes }),\n ...(input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest }),\n ...(input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload }),\n signedParts: [],\n createdAt: new Date(),\n expiresAt: input.expiresAt,\n }\n\n this.sessionsById.set(session.id, session)\n return session\n }\n\n async getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession> {\n const session = this.sessionsById.get(uploadId)\n if (!session || session.principalKey !== principalKey(principal)) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n const nowMs = Date.now()\n if (isFileUploadSessionExpired(session, nowMs)) {\n this.sessionsById.delete(uploadId)\n throw new FileUploadSessionError(\"expired\", \"File upload session has expired.\")\n }\n\n if (isTerminalFileUploadSessionExpired(session, nowMs)) {\n this.sessionsById.delete(uploadId)\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n return session\n }\n\n async markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n fileRef,\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n signedParts: [\n ...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),\n part,\n ].sort((left, right) => left.partNumber - right.partNumber),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n status: \"completed\" as const,\n fileRef,\n completedAt: new Date(),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async abort(uploadId: string): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n status: \"aborted\" as const,\n abortedAt: new Date(),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async cleanupExpired(now = new Date()): Promise<number> {\n let deleted = 0\n for (const [id, session] of this.sessionsById) {\n if (shouldDeleteFileUploadSession(session, now.getTime())) {\n this.sessionsById.delete(id)\n deleted += 1\n }\n }\n\n return deleted\n }\n\n private requirePending(uploadId: string): FileUploadSession {\n const session = this.sessionsById.get(uploadId)\n if (!session) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n if (session.status !== \"pending\") {\n throw new FileUploadSessionError(\n session.status === \"completed\" ? \"already_completed\" : \"already_aborted\",\n `File upload session is already ${session.status}.`\n )\n }\n\n return session\n }\n}\n",
|
|
12
|
+
"import {\n DurableFileUploadSessions,\n type FileUploadSessionPersistence,\n type FileUploadSessionPersistenceBackend,\n} from \"./provider\"\nimport type {\n CreateFileUploadSessionInput,\n FileUploadSession,\n ListAbandonedFileUploadSessionsInput,\n} from \"./types\"\nimport { isAbandonedFileUploadSession, shouldDeleteFileUploadSession } from \"./utils\"\n\nexport type InMemoryFileUploadSessionsSnapshot = Map<string, FileUploadSession>\n\n/**\n * In-memory {@link FileUploadSessionStore}: the shared durable state machine over a Map.\n *\n * Sessions live only in this process's memory: they do not survive a restart and are not\n * shared across instances, so staged uploads need a single instance. `@sixb/pg` and\n * `@sixb/sqlite` provide durable stores. Reapable sessions are also reaped on `create`.\n */\nexport class InMemoryFileUploadSessions extends DurableFileUploadSessions {\n private readonly sessionsById: Map<string, FileUploadSession>\n\n constructor() {\n const sessionsById = new Map<string, FileUploadSession>()\n super(new InMemoryFileUploadSessionBackend(sessionsById))\n this.sessionsById = sessionsById\n }\n\n override async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {\n await this.cleanupExpired()\n return super.create(input)\n }\n\n snapshot(): InMemoryFileUploadSessionsSnapshot {\n return structuredClone(this.sessionsById)\n }\n\n restore(snapshot: InMemoryFileUploadSessionsSnapshot): void {\n this.sessionsById.clear()\n for (const [id, session] of snapshot) {\n this.sessionsById.set(id, structuredClone(session))\n }\n }\n}\n\nclass InMemoryFileUploadSessionBackend implements FileUploadSessionPersistenceBackend {\n private readonly persistence: FileUploadSessionPersistence\n // Every await yields; chaining transactions keeps read-modify-write atomic.\n private tail: Promise<unknown> = Promise.resolve()\n\n constructor(sessionsById: Map<string, FileUploadSession>) {\n this.persistence = new InMemoryFileUploadSessionPersistence(sessionsById)\n }\n\n read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return run(this.persistence)\n }\n\n transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n const result = this.tail.then(() => run(this.persistence))\n this.tail = result.catch(() => undefined)\n return result\n }\n}\n\nclass InMemoryFileUploadSessionPersistence implements FileUploadSessionPersistence {\n constructor(private readonly sessionsById: Map<string, FileUploadSession>) {}\n\n async now(): Promise<Date> {\n return new Date()\n }\n\n async insert(session: FileUploadSession): Promise<boolean> {\n if (this.sessionsById.has(session.id)) return false\n this.sessionsById.set(session.id, session)\n return true\n }\n\n async get(uploadId: string): Promise<FileUploadSession | null> {\n return this.sessionsById.get(uploadId) ?? null\n }\n\n async update(session: FileUploadSession): Promise<void> {\n this.sessionsById.set(session.id, session)\n }\n\n async listAbandoned(\n input: ListAbandonedFileUploadSessionsInput\n ): Promise<readonly FileUploadSession[]> {\n return [...this.sessionsById.values()]\n .filter(\n (session) =>\n session.projectId === input.projectId &&\n isAbandonedFileUploadSession(session, input.now.getTime())\n )\n .sort((left, right) => left.expiresAt.getTime() - right.expiresAt.getTime())\n .slice(0, input.limit)\n }\n\n async deleteReapable(now: Date): Promise<number> {\n let deleted = 0\n for (const [id, session] of this.sessionsById) {\n if (shouldDeleteFileUploadSession(session, now.getTime())) {\n this.sessionsById.delete(id)\n deleted += 1\n }\n }\n return deleted\n }\n}\n",
|
|
14
13
|
"import { AsyncLocalStorage } from \"node:async_hooks\"\nimport { InMemoryActionRunStorage } from \"../action-runs\"\nimport { type AgentStorage, InMemoryAgentStorage } from \"../agents\"\nimport { type AiAccountingAttribution, type AiCostStorage, InMemoryAiCostStorage } from \"../ai-cost\"\nimport { directModelCallAttribution } from \"../ai-cost/attribution\"\nimport { type AiLimitStorage, InMemoryAiLimitStorage } from \"../ai-limits\"\nimport { type AiUsageStorage, InMemoryAiUsageStorage } from \"../ai-usage\"\nimport { type AuthStorage, InMemoryAuthStorage } from \"../auth\"\nimport {\n type ConnectorConnectionStorage,\n InMemoryConnectorConnectionStorage,\n} from \"../connector-connections\"\nimport { StorageTransactionError } from \"../errors\"\nimport { InMemoryExecutionStorage } from \"../executions/in-memory\"\nimport type { ExecutionStorage } from \"../executions/types\"\nimport { type FileUploadSessionStore, InMemoryFileUploadSessions } from \"../file-upload-sessions\"\nimport type { ObjectStorage } from \"../objects\"\nimport { InMemoryObjectStorage } from \"../objects/in-memory\"\nimport type { OntologyStorage } from \"../ontology\"\nimport { InMemoryOntologyStorage } from \"../ontology/in-memory\"\nimport { ProviderMaterializationTransactionLifecycle } from \"../ontology/provider\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"../operation-scope\"\nimport { InMemoryPipelineRunStorage, type PipelineRunStorage } from \"../pipeline-runs\"\nimport { InMemoryProjectionRunStorage } from \"../projection-runs\"\nimport { InMemoryRulesStorage, type RulesStorage } from \"../rules\"\nimport { InMemoryShareGrantStorage, type ShareGrantStorage } from \"../share-grants\"\nimport { InMemoryShareSessionStorage, type ShareSessionStorage } from \"../share-sessions\"\nimport { InMemorySyncRunStorage, type SyncRunStorage } from \"../sync-runs\"\nimport type { TimeseriesStorage } from \"../timeseries\"\nimport { InMemoryTimeseriesStorage } from \"../timeseries/store\"\nimport { createTransactionStorageProxy, throwNestedStorageTransaction } from \"../transaction\"\nimport type { Storage, StorageTransactionOptions } from \"../types\"\nimport { InMemoryWebhookRunStorage, type WebhookRunStorage } from \"../webhook-runs\"\nimport {\n InMemoryWorkflowInterventionStorage,\n type WorkflowInterventionStorage,\n} from \"../workflow-interventions\"\nimport { InMemoryWorkflowRunStorage, type WorkflowRunStorage } from \"../workflow-runs\"\nimport { registerInMemoryStorageTestingAdapter } from \"./testing\"\n\n/**\n * In-memory {@link Storage} used for dev and tests.\n *\n * Every top-level storage call (\"root operation\") serializes against a single promise-chain lock\n * unless a transaction is already active, which is what gives {@link InMemoryStorage.transaction}\n * snapshot/rollback atomicity. The provider owns one operation scope and applies it to every async\n * root capability. Transaction calls reuse the already-active scope and therefore never reacquire\n * its non-reentrant lock.\n */\nexport interface InMemoryStorageOptions {\n readonly connectorConnections?: {\n /** Storage-authoritative clock override for deterministic development and tests. */\n readonly now?: () => Date\n }\n}\n\nexport class InMemoryStorage implements Storage {\n readonly objects: ObjectStorage\n readonly timeseries: TimeseriesStorage\n readonly ontology: OntologyStorage\n private readonly objectStorage = new InMemoryObjectStorage()\n private readonly timeseriesStorage = new InMemoryTimeseriesStorage()\n private readonly ontologyStorage: InMemoryOntologyStorage\n private readonly authStorage = new InMemoryAuthStorage()\n private readonly shareGrantStorage = new InMemoryShareGrantStorage()\n private readonly shareSessionStorage = new InMemoryShareSessionStorage(this.shareGrantStorage)\n private readonly executionStorage = new InMemoryExecutionStorage(this.authStorage, {\n shareSessions: this.shareSessionStorage,\n })\n private readonly agentStorage = new InMemoryAgentStorage(this.executionStorage)\n private readonly aiUsageStorage = new InMemoryAiUsageStorage(this.executionStorage)\n private readonly aiCostStorage = new InMemoryAiCostStorage(this.aiUsageStorage, {\n resolve: (input) => this.resolveAiAccountingAttribution(input),\n resolveGroup: async (input) => {\n const attribution = await this.resolveAiAccountingAttribution(input)\n if (attribution?.kind !== \"subagent\") return { executionId: input.executionId, attribution }\n const parent = await this.agentStorage.runs.getById({\n projectId: input.projectId,\n id: attribution.parentRunId,\n })\n if (!parent) throw new Error(\"[Sixb] Subagent accounting parent is missing.\")\n return {\n executionId: parent.executionId,\n attribution: await this.resolveAiAccountingAttribution({\n ...input,\n executionId: parent.executionId,\n }),\n }\n },\n })\n private readonly aiLimitStorage = new InMemoryAiLimitStorage({\n resolveExecution: ({ projectId, executionId }) =>\n this.executionStorage.getById({ projectId, id: executionId }),\n resolveUsageRecord: ({ projectId, usageRecordId }) =>\n this.aiUsageStorage.getRecord(projectId, usageRecordId),\n resolveCostRecord: ({ projectId, usageRecordId }) =>\n this.aiCostStorage.getRecord(projectId, usageRecordId),\n listUsageRecords: ({ projectId }) => this.aiUsageStorage.listRecords(projectId),\n })\n private readonly actionRunStorage = new InMemoryActionRunStorage(this.executionStorage)\n private readonly syncRunStorage = new InMemorySyncRunStorage(this.executionStorage)\n private readonly pipelineRunStorage = new InMemoryPipelineRunStorage(this.executionStorage)\n private readonly projectionRunStorage = new InMemoryProjectionRunStorage({\n executions: this.executionStorage,\n })\n private readonly workflowRunStorage = new InMemoryWorkflowRunStorage(this.executionStorage)\n private readonly workflowInterventionStorage = new InMemoryWorkflowInterventionStorage()\n private readonly webhookRunStorage = new InMemoryWebhookRunStorage(this.executionStorage)\n private readonly rulesStorage = new InMemoryRulesStorage()\n private readonly fileUploadSessionStorage = new InMemoryFileUploadSessions()\n private readonly connectorConnectionStorage: InMemoryConnectorConnectionStorage\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n readonly agents: AgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: InMemoryActionRunStorage\n readonly syncRuns: SyncRunStorage\n readonly pipelineRuns: PipelineRunStorage\n readonly projectionRuns: InMemoryProjectionRunStorage\n readonly workflowRuns: WorkflowRunStorage\n readonly workflowInterventions: WorkflowInterventionStorage\n readonly webhookRuns: WebhookRunStorage\n readonly rules: RulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly fileUploadSessions: FileUploadSessionStore\n readonly connectorConnections: ConnectorConnectionStorage\n\n constructor(options: InMemoryStorageOptions = {}) {\n this.connectorConnectionStorage = new InMemoryConnectorConnectionStorage(\n options.connectorConnections\n )\n const scope = createStorageOperationScope(\n (run) => this.withStorageOperation(run),\n () => this.assertRootOperationAvailable()\n )\n this.objects = createObjectOperationScope(this.objectStorage, scope)\n this.timeseries = createOperationScopedFacade(this.timeseriesStorage, scope)\n this.auth = createAuthOperationScope(this.authStorage, scope)\n this.executions = createOperationScopedFacade(this.executionStorage, scope)\n this.agents = createAgentOperationScope(this.agentStorage, scope)\n this.aiUsage = createOperationScopedFacade(this.aiUsageStorage, scope)\n this.aiCosts = createOperationScopedFacade(this.aiCostStorage, scope)\n this.aiLimits = createOperationScopedFacade(this.aiLimitStorage, scope)\n this.actionRuns = createOperationScopedFacade(this.actionRunStorage, scope)\n this.syncRuns = createOperationScopedFacade(this.syncRunStorage, scope)\n this.pipelineRuns = createOperationScopedFacade(this.pipelineRunStorage, scope)\n this.projectionRuns = createOperationScopedFacade(this.projectionRunStorage, scope)\n this.workflowRuns = createWorkflowRunOperationScope(this.workflowRunStorage, scope)\n this.workflowInterventions = createOperationScopedFacade(\n this.workflowInterventionStorage,\n scope\n )\n this.webhookRuns = createOperationScopedFacade(this.webhookRunStorage, scope)\n this.rules = createOperationScopedFacade(this.rulesStorage, scope)\n this.shareGrants = createOperationScopedFacade(this.shareGrantStorage, scope)\n this.shareSessions = createOperationScopedFacade(this.shareSessionStorage, scope)\n this.fileUploadSessions = createOperationScopedFacade(this.fileUploadSessionStorage, scope)\n this.connectorConnections = createOperationScopedFacade(this.connectorConnectionStorage, scope)\n this.ontologyStorage = new InMemoryOntologyStorage(this.objectStorage, this.timeseriesStorage, {\n runRootOperation: async (run) => run(),\n getTransactionToken: () => this.getActiveTransactionToken(),\n getMaterializationLifecycle: () => this.getActiveMaterializationLifecycle(),\n assertSourceMaterializationExecution: (input) =>\n this.projectionRunStorage.assertSourceMaterializationExecutionUnlocked(input),\n executionExists: async (projectId, executionId) =>\n (await this.executionStorage.getById({ projectId, id: executionId })) !== null,\n })\n this.ontology = createOntologyOperationScope(this.ontologyStorage, scope)\n this.ontologyStorage.registerTestingAlias(this.ontology)\n registerInMemoryStorageTestingAdapter(this, { snapshot: () => this.snapshot() })\n }\n\n private async resolveAiAccountingAttribution(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<AiAccountingAttribution | undefined> {\n const execution = await this.executionStorage.getById({\n projectId: input.projectId,\n id: input.executionId,\n })\n if (!execution) return undefined\n if (execution.executor.type !== \"agent\") {\n const executor = execution.executor\n return directModelCallAttribution(\n executor.type === \"primitive\" ? executor.kind : executor.type,\n executor.type === \"request\"\n ? executor.requestId\n : executor.type === \"primitive\"\n ? executor.runId\n : null,\n execution.authorizationRef.type === \"trustedPrimitive\"\n ? execution.authorizationRef.primitive.id\n : null\n )\n }\n const directRun = await this.agentStorage.runs.getById({\n projectId: input.projectId,\n id: execution.executor.runId,\n })\n if (directRun?.kind === \"conversation\") {\n return {\n kind: \"agent\",\n agentRunId: directRun.id,\n threadId: directRun.threadId,\n }\n }\n if (directRun?.kind === \"subagent\") {\n return {\n kind: \"subagent\",\n subagentRunId: directRun.id,\n parentRunId: directRun.parentRunId,\n }\n }\n const agentRun = await this.workflowRunStorage.agentNodes.getByNodeRunId({\n projectId: input.projectId,\n nodeRunId: execution.executor.runId,\n })\n if (!agentRun) return undefined\n const node = await this.workflowRunStorage.nodes.getById({\n projectId: input.projectId,\n id: agentRun.nodeRunId,\n })\n if (!node) return undefined\n return {\n kind: \"workflowAgent\",\n agentStepId: node.nodeId,\n nodeRunId: agentRun.nodeRunId,\n workflowId: node.workflowId,\n workflowRunId: node.workflowRunId,\n }\n }\n\n private readonly transactionScope = new AsyncLocalStorage<object>()\n private readonly activeTransactionTokens = new WeakSet<object>()\n private readonly materializationLifecycles = new WeakMap<\n object,\n ProviderMaterializationTransactionLifecycle\n >()\n private transactionTail: Promise<void> = Promise.resolve()\n\n async ping(): Promise<void> {\n await this.withStorageOperation(() => undefined)\n }\n\n /**\n * Run `run` against a transactional view of this storage.\n *\n * Atomicity is achieved by snapshotting every store before the callback and restoring that\n * snapshot if it throws. The snapshot is a full structural clone of the in-memory dataset, so\n * its cost scales with total dataset size rather than changeset size. That is acceptable for the\n * dev/test role of {@link InMemoryStorage} but is the reason it is not intended for large\n * datasets under heavy transactional load — the SQL providers use real database transactions.\n *\n * The `isolation` option is intentionally ignored: the promise-chain lock serializes\n * transactions one at a time, which is at least as strong as `serializable`.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n const inheritedTransactionToken = this.transactionScope.getStore()\n if (inheritedTransactionToken && this.activeTransactionTokens.has(inheritedTransactionToken)) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n const snapshot = this.snapshot()\n let active = true\n const tx = createTransactionStorageProxy(this.createTransactionStorage(), () => active)\n const transactionToken = {}\n const materializationLifecycle = new ProviderMaterializationTransactionLifecycle()\n this.activeTransactionTokens.add(transactionToken)\n this.materializationLifecycles.set(transactionToken, materializationLifecycle)\n\n try {\n const result = await this.transactionScope.run(transactionToken, async () => {\n try {\n return await run(tx)\n } finally {\n await this.aiLimitStorage.settleOperations()\n }\n })\n materializationLifecycle.assertCommittable()\n return result\n } catch (error) {\n // A failed rollback leaves the store in an unknown state. Surface that explicitly instead\n // of letting the restore error silently replace (mask) the original transaction error.\n try {\n this.restore(snapshot)\n } catch (restoreError) {\n throw new StorageTransactionError(\n `[Sixb] In-memory storage failed to roll back after a transaction error; state may be inconsistent. Original transaction error: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { cause: restoreError }\n )\n }\n throw error\n } finally {\n this.ontologyStorage.completeTransaction(transactionToken)\n materializationLifecycle.deactivate()\n this.activeTransactionTokens.delete(transactionToken)\n active = false\n }\n })\n }\n\n private async withStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.getActiveTransactionToken()) return\n throw new StorageTransactionError(\n \"[Sixb] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private getActiveTransactionToken(): object | null {\n const token = this.transactionScope.getStore()\n return token && this.activeTransactionTokens.has(token) ? token : null\n }\n\n private getActiveMaterializationLifecycle(): ProviderMaterializationTransactionLifecycle | null {\n const token = this.getActiveTransactionToken()\n return token ? (this.materializationLifecycles.get(token) ?? null) : null\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n\n private createTransactionStorage(): Storage {\n return {\n objects: this.objectStorage,\n timeseries: this.timeseriesStorage,\n ontology: this.ontologyStorage,\n auth: this.authStorage,\n executions: this.executionStorage,\n agents: this.agentStorage,\n aiUsage: this.aiUsageStorage,\n aiCosts: this.aiCostStorage,\n aiLimits: this.aiLimitStorage,\n actionRuns: this.actionRunStorage,\n syncRuns: this.syncRunStorage,\n pipelineRuns: this.pipelineRunStorage,\n projectionRuns: this.projectionRunStorage,\n workflowRuns: this.workflowRunStorage,\n workflowInterventions: this.workflowInterventionStorage,\n webhookRuns: this.webhookRunStorage,\n rules: this.rulesStorage,\n shareGrants: this.shareGrantStorage,\n shareSessions: this.shareSessionStorage,\n fileUploadSessions: this.fileUploadSessionStorage,\n connectorConnections: this.connectorConnectionStorage,\n ping: async () => undefined,\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private snapshot(): InMemoryStorageSnapshot {\n return {\n objects: this.objectStorage.snapshot(),\n timeseries: this.timeseriesStorage.snapshot(),\n ontology: this.ontologyStorage.snapshot(),\n auth: this.authStorage.snapshot(),\n executions: this.executionStorage.snapshot(),\n agents: this.agentStorage.snapshot(),\n aiUsage: this.aiUsageStorage.snapshot(),\n aiCosts: this.aiCostStorage.snapshot(),\n aiLimits: this.aiLimitStorage.snapshot(),\n actionRuns: this.actionRunStorage.snapshot(),\n syncRuns: this.syncRunStorage.snapshot(),\n pipelineRuns: this.pipelineRunStorage.snapshot(),\n projectionRuns: this.projectionRunStorage.snapshot(),\n workflowRuns: this.workflowRunStorage.snapshot(),\n workflowInterventions: this.workflowInterventionStorage.snapshot(),\n webhookRuns: this.webhookRunStorage.snapshot(),\n rules: this.rulesStorage.snapshot(),\n shareGrants: this.shareGrantStorage.snapshot(),\n shareSessions: this.shareSessionStorage.snapshot(),\n fileUploadSessions: this.fileUploadSessionStorage.snapshot(),\n connectorConnections: this.connectorConnectionStorage.snapshot(),\n }\n }\n\n private restore(snapshot: InMemoryStorageSnapshot): void {\n this.objectStorage.restore(snapshot.objects)\n this.timeseriesStorage.restore(snapshot.timeseries)\n this.ontologyStorage.restore(snapshot.ontology)\n this.authStorage.restore(snapshot.auth)\n this.executionStorage.restore(snapshot.executions)\n this.agentStorage.restore(snapshot.agents)\n this.aiUsageStorage.restore(snapshot.aiUsage)\n this.aiCostStorage.restore(snapshot.aiCosts)\n this.aiLimitStorage.restore(snapshot.aiLimits)\n this.actionRunStorage.restore(snapshot.actionRuns)\n this.syncRunStorage.restore(snapshot.syncRuns)\n this.pipelineRunStorage.restore(snapshot.pipelineRuns)\n this.projectionRunStorage.restore(snapshot.projectionRuns)\n this.workflowRunStorage.restore(snapshot.workflowRuns)\n this.workflowInterventionStorage.restore(snapshot.workflowInterventions)\n this.webhookRunStorage.restore(snapshot.webhookRuns)\n this.rulesStorage.restore(snapshot.rules)\n this.shareGrantStorage.restore(snapshot.shareGrants)\n this.shareSessionStorage.restore(snapshot.shareSessions)\n this.fileUploadSessionStorage.restore(snapshot.fileUploadSessions)\n this.connectorConnectionStorage.restore(snapshot.connectorConnections)\n }\n}\n\nexport interface InMemoryStorageSnapshot {\n readonly objects: ReturnType<InMemoryObjectStorage[\"snapshot\"]>\n readonly timeseries: ReturnType<InMemoryTimeseriesStorage[\"snapshot\"]>\n readonly ontology: ReturnType<InMemoryOntologyStorage[\"snapshot\"]>\n readonly auth: ReturnType<InMemoryAuthStorage[\"snapshot\"]>\n readonly executions: ReturnType<InMemoryExecutionStorage[\"snapshot\"]>\n readonly agents: ReturnType<InMemoryAgentStorage[\"snapshot\"]>\n readonly aiUsage: ReturnType<InMemoryAiUsageStorage[\"snapshot\"]>\n readonly aiCosts: ReturnType<InMemoryAiCostStorage[\"snapshot\"]>\n readonly aiLimits: ReturnType<InMemoryAiLimitStorage[\"snapshot\"]>\n readonly actionRuns: ReturnType<InMemoryActionRunStorage[\"snapshot\"]>\n readonly syncRuns: ReturnType<InMemorySyncRunStorage[\"snapshot\"]>\n readonly pipelineRuns: ReturnType<InMemoryPipelineRunStorage[\"snapshot\"]>\n readonly projectionRuns: ReturnType<InMemoryProjectionRunStorage[\"snapshot\"]>\n readonly workflowRuns: ReturnType<InMemoryWorkflowRunStorage[\"snapshot\"]>\n readonly workflowInterventions: ReturnType<InMemoryWorkflowInterventionStorage[\"snapshot\"]>\n readonly webhookRuns: ReturnType<InMemoryWebhookRunStorage[\"snapshot\"]>\n readonly rules: ReturnType<InMemoryRulesStorage[\"snapshot\"]>\n readonly shareGrants: ReturnType<InMemoryShareGrantStorage[\"snapshot\"]>\n readonly shareSessions: ReturnType<InMemoryShareSessionStorage[\"snapshot\"]>\n readonly fileUploadSessions: ReturnType<InMemoryFileUploadSessions[\"snapshot\"]>\n readonly connectorConnections: ReturnType<InMemoryConnectorConnectionStorage[\"snapshot\"]>\n}\n",
|
|
15
14
|
"import type { AuthStorage } from \"../auth\"\nimport type { ShareSessionStorage } from \"../share-sessions\"\nimport { ExecutionStorageError } from \"./errors\"\nimport type { CreateExecutionInput, ExecutionRecord, ExecutionStorage } from \"./types\"\nimport { cloneExecutionRecord, prepareExecutionRecord } from \"./validation\"\n\ntype RunRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nconst runDirectly: RunRootOperation = async <T>(run: () => Promise<T> | T): Promise<T> => run()\n\nfunction executionKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nexport class InMemoryExecutionStorage implements ExecutionStorage {\n private readonly rows = new Map<string, ExecutionRecord>()\n private readonly runRootOperation: RunRootOperation\n private readonly shareSessions?: Pick<ShareSessionStorage, \"getById\">\n\n constructor(\n private readonly auth: AuthStorage,\n input: {\n readonly runRootOperation?: RunRootOperation\n readonly shareSessions?: Pick<ShareSessionStorage, \"getById\">\n } = {}\n ) {\n this.runRootOperation = input.runRootOperation ?? runDirectly\n this.shareSessions = input.shareSessions\n }\n\n snapshot(): InMemoryExecutionStorageSnapshot {\n return structuredClone(this.rows)\n }\n\n restore(snapshot: InMemoryExecutionStorageSnapshot): void {\n this.rows.clear()\n for (const [key, record] of structuredClone(snapshot)) {\n this.rows.set(key, record)\n }\n }\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n return this.runRootOperation(async () => {\n const key = executionKey(input.projectId, input.id)\n if (this.rows.has(key)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[Sixb] Execution '${input.id}' already exists in project '${input.projectId}'.`\n )\n }\n\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: async ({ projectId, id }) => {\n const existing = this.rows.get(executionKey(projectId, id))\n return existing ? cloneExecutionRecord(existing) : null\n },\n getShareSession: async ({ projectId, id }) =>\n (await this.shareSessions?.getById({ projectId, id })) ?? null,\n })\n\n this.rows.set(key, cloneExecutionRecord(record))\n return cloneExecutionRecord(record)\n })\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ExecutionRecord | null> {\n return this.runRootOperation(() => {\n const record = this.rows.get(executionKey(params.projectId, params.id))\n return record ? cloneExecutionRecord(record) : null\n })\n }\n}\n\nexport type InMemoryExecutionStorageSnapshot = Map<string, ExecutionRecord>\n",
|
|
16
15
|
"import type { ObjectQuery } from \"../query/ir\"\n\nexport function hasVectorProfile(query: ObjectQuery): boolean {\n if (query.kind === \"vector\") return true\n if (query.kind === \"set\") return query.inputs.some(hasVectorProfile)\n return \"input\" in query && hasVectorProfile(query.input)\n}\n\n/** V1 supports one exact top-k, with filters applied before ranking. */\nexport function isVectorProfileQuery(query: ObjectQuery): boolean {\n if (query.kind === \"limit\" || query.kind === \"project\") return isVectorProfileQuery(query.input)\n if (query.kind !== \"vector\" || !query.profile) return false\n let input = query.input\n while (input.kind === \"filter\") input = input.input\n return input.kind === \"start\" && !input.includeSubtypes\n}\n",
|
|
17
16
|
"import type { ObjectLinkCursor, ObjectLinkRow } from \"./types\"\n\nexport type ObjectBatchKey = string & {\n readonly __sixbObjectBatchKey: true\n}\n\nexport type LinkBatchKey = string & {\n readonly __sixbLinkBatchKey: true\n}\n\n/** Collision-safe key for object batch-read results. */\nexport function objectBatchKey(objectTypeId: string, primaryId: string): ObjectBatchKey {\n return JSON.stringify([objectTypeId, primaryId]) as ObjectBatchKey\n}\n\n/** Collision-safe key for directional link batch-read results, keyed by the requested object. */\nexport function linkBatchKey(objectTypeId: string, objectId: string, linkId: string): LinkBatchKey {\n return JSON.stringify([objectTypeId, objectId, linkId]) as LinkBatchKey\n}\n\n/** Canonical storage ordering and cursor for physical links. */\nexport function objectLinkCursor(link: ObjectLinkRow): ObjectLinkCursor {\n return [link.sourceTypeId, link.sourceId, link.linkId, link.targetTypeId, link.targetId]\n}\n\nexport function compareObjectLinkCursors(left: ObjectLinkCursor, right: ObjectLinkCursor): number {\n for (let index = 0; index < left.length; index += 1) {\n if (left[index] < right[index]) return -1\n if (left[index] > right[index]) return 1\n }\n return 0\n}\n\nexport function compareObjectLinks(left: ObjectLinkRow, right: ObjectLinkRow): number {\n return compareObjectLinkCursors(objectLinkCursor(left), objectLinkCursor(right))\n}\n",
|
|
18
17
|
"import { objectBatchKey } from \"../keys\"\nimport type { ObjectLinkRow, ObjectRow } from \"../types\"\n\nexport function objectRowKey(projectId: string, objectTypeId: string): string {\n return JSON.stringify([projectId, objectTypeId])\n}\n\nexport function objectRowProjectPrefix(projectId: string): string {\n return `[${JSON.stringify(projectId)},`\n}\n\nexport function compareStrings(left: string, right: string): number {\n if (left < right) return -1\n if (left > right) return 1\n return 0\n}\n\nexport function sourceLinkBucketKey(\n projectId: string,\n sourceTypeId: string,\n sourceId: string\n): string {\n return JSON.stringify([projectId, sourceTypeId, sourceId])\n}\n\nexport function linkRowKey(linkId: string, targetTypeId: string, targetId: string): string {\n return JSON.stringify([linkId, targetTypeId, targetId])\n}\n\nexport function fullLinkRowKey(row: ObjectLinkRow): string {\n return JSON.stringify([\n row.sourceTypeId,\n row.sourceId,\n row.linkId,\n row.targetTypeId,\n row.targetId,\n ])\n}\n\nexport function rowIdentityKey(row: ObjectRow): string {\n return rowIdentityKeyParts(row.objectTypeId, row.primaryId)\n}\n\nexport function rowIdentityKeyParts(objectTypeId: string, primaryId: string): string {\n return objectBatchKey(objectTypeId, primaryId)\n}\n",
|
|
19
|
-
"import { compareDecimalValues } from \"../../ontology\"\nimport type { QueryScalarKind } from \"./ir\"\n\n/** Compare two values according to the scalar schema resolved by query validation. */\nexport function compareQueryScalarValues(\n left: unknown,\n right: unknown,\n scalarKind?: QueryScalarKind\n): number {\n if (left === undefined || right === undefined || left === null || right === null) {\n return Number.NaN\n }\n\n if (scalarKind === undefined) return compareRuntimeValues(left, right)\n\n switch (scalarKind) {\n case \"string\":\n case \"uuid\":\n return typeof left === \"string\" && typeof right === \"string\"\n ? compareStrings(left, right)\n : Number.NaN\n case \"boolean\":\n return typeof left === \"boolean\" && typeof right === \"boolean\"\n ? Number(left) - Number(right)\n : Number.NaN\n case \"integer\":\n case \"double\":\n return typeof left === \"number\" && typeof right === \"number\" ? left - right : Number.NaN\n case \"decimal\":\n return typeof left === \"string\" && typeof right === \"string\"\n ? compareDecimalValues(left, right)\n : Number.NaN\n case \"date\":\n case \"timestamp\":\n return compareTemporalValues(left, right)\n }\n}\n\n/** Test equality with the same schema semantics used for ordered comparisons. */\nexport function queryScalarValuesEqual(\n left: unknown,\n right: unknown,\n scalarKind?: QueryScalarKind\n): boolean {\n if (scalarKind === \"decimal\") {\n const comparison = compareQueryScalarValues(left, right, scalarKind)\n return !Number.isNaN(comparison) && comparison === 0\n }\n\n if (scalarKind === \"date\" || scalarKind === \"timestamp\") {\n const comparison = compareTemporalValues(left, right)\n return !Number.isNaN(comparison) && comparison === 0\n }\n\n if (scalarKind !== undefined) return Object.is(left, right)\n return runtimeValuesEqual(left, right)\n}\n\nfunction compareRuntimeValues(left: unknown, right: unknown): number {\n if (typeof left === \"number\" && typeof right === \"number\") return left - right\n if (typeof left === \"string\" && typeof right === \"string\") return compareStrings(left, right)\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right)\n }\n if (left instanceof Date || right instanceof Date) return compareTemporalValues(left, right)\n return Number.NaN\n}\n\nfunction runtimeValuesEqual(left: unknown, right: unknown): boolean {\n if (left instanceof Date || right instanceof Date) {\n const comparison = compareTemporalValues(left, right)\n return !Number.isNaN(comparison) && comparison === 0\n }\n return Object.is(left, right)\n}\n\nfunction compareTemporalValues(left: unknown, right: unknown): number {\n const leftTime = dateTime(left)\n const rightTime = dateTime(right)\n if (leftTime === null || rightTime === null) return Number.NaN\n return leftTime - rightTime\n}\n\nfunction dateTime(value: unknown): number | null {\n if (value instanceof Date) {\n const time = value.getTime()\n return Number.isNaN(time) ? null : time\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n const time = new Date(value).getTime()\n return Number.isNaN(time) ? null : time\n }\n return null\n}\n\nfunction compareStrings(left: string, right: string): number {\n if (left < right) return -1\n if (left > right) return 1\n return 0\n}\n",
|
|
18
|
+
"import { compareDecimalValues } from \"../../ontology\"\nimport type { QueryScalarKind } from \"./ir\"\n\n/** Compare two values according to the scalar schema resolved by query validation. */\nexport function compareQueryScalarValues(\n left: unknown,\n right: unknown,\n scalarKind?: QueryScalarKind\n): number {\n if (left === undefined || right === undefined || left === null || right === null) {\n return Number.NaN\n }\n\n if (scalarKind === undefined) return compareRuntimeValues(left, right)\n\n switch (scalarKind) {\n case \"string\":\n case \"uuid\":\n return typeof left === \"string\" && typeof right === \"string\"\n ? compareStrings(left, right)\n : Number.NaN\n case \"boolean\":\n return typeof left === \"boolean\" && typeof right === \"boolean\"\n ? Number(left) - Number(right)\n : Number.NaN\n case \"integer\":\n case \"double\":\n return typeof left === \"number\" && typeof right === \"number\" ? left - right : Number.NaN\n case \"decimal\":\n return typeof left === \"string\" && typeof right === \"string\"\n ? compareDecimalValues(left, right)\n : Number.NaN\n case \"date\":\n case \"timestamp\":\n return compareTemporalValues(left, right)\n case \"userRef\":\n // Identity only: user references have no order.\n return Number.NaN\n }\n}\n\n/** Test equality with the same schema semantics used for ordered comparisons. */\nexport function queryScalarValuesEqual(\n left: unknown,\n right: unknown,\n scalarKind?: QueryScalarKind\n): boolean {\n if (scalarKind === \"decimal\") {\n const comparison = compareQueryScalarValues(left, right, scalarKind)\n return !Number.isNaN(comparison) && comparison === 0\n }\n\n if (scalarKind === \"date\" || scalarKind === \"timestamp\") {\n const comparison = compareTemporalValues(left, right)\n return !Number.isNaN(comparison) && comparison === 0\n }\n\n if (scalarKind === \"userRef\") return userRefsEqual(left, right)\n if (scalarKind !== undefined) return Object.is(left, right)\n return runtimeValuesEqual(left, right)\n}\n\nfunction userRefsEqual(left: unknown, right: unknown): boolean {\n if (left === null || right === null) return left === right\n return (\n isRecord(left) &&\n isRecord(right) &&\n left.type === right.type &&\n typeof left.id === \"string\" &&\n left.id === right.id\n )\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction compareRuntimeValues(left: unknown, right: unknown): number {\n if (typeof left === \"number\" && typeof right === \"number\") return left - right\n if (typeof left === \"string\" && typeof right === \"string\") return compareStrings(left, right)\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right)\n }\n if (left instanceof Date || right instanceof Date) return compareTemporalValues(left, right)\n return Number.NaN\n}\n\nfunction runtimeValuesEqual(left: unknown, right: unknown): boolean {\n if (left instanceof Date || right instanceof Date) {\n const comparison = compareTemporalValues(left, right)\n return !Number.isNaN(comparison) && comparison === 0\n }\n return Object.is(left, right)\n}\n\nfunction compareTemporalValues(left: unknown, right: unknown): number {\n const leftTime = dateTime(left)\n const rightTime = dateTime(right)\n if (leftTime === null || rightTime === null) return Number.NaN\n return leftTime - rightTime\n}\n\nfunction dateTime(value: unknown): number | null {\n if (value instanceof Date) {\n const time = value.getTime()\n return Number.isNaN(time) ? null : time\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n const time = new Date(value).getTime()\n return Number.isNaN(time) ? null : time\n }\n return null\n}\n\nfunction compareStrings(left: string, right: string): number {\n if (left < right) return -1\n if (left > right) return 1\n return 0\n}\n",
|
|
20
19
|
"import { MaterializationValidationError } from \"../../materialization/errors\"\nimport { sha256Canonical } from \"../../materialization/identity\"\nimport type { ObjectVectorSearchProfile } from \"../../ontology/types\"\n\nexport const MAX_VECTOR_K = 1000\nexport const VECTOR_INPUT_VERSION = 1\n\nexport function vectorConfiguration(profile: ObjectVectorSearchProfile): string {\n return sha256Canonical({\n format: VECTOR_INPUT_VERSION,\n sources: [...profile.source],\n provider: profile.model.providerId,\n model: profile.model.modelId,\n representation: profile.model.definition.representation ?? { name: profile.model.modelId },\n dimensions: profile.model.definition.dimensions,\n metric: \"cosine\",\n precision: \"float32\",\n normalization: \"l2-v1\",\n })\n}\n\nexport function vectorSources(\n source: readonly string[],\n properties: Readonly<Record<string, unknown>>\n) {\n const values: Record<string, string | null> = Object.create(null)\n for (const key of source) {\n const value = properties[key]\n if (value !== undefined && value !== null && typeof value !== \"string\") {\n throw new MaterializationValidationError(`Vector source must be text: ${key}`)\n }\n values[key] = typeof value === \"string\" ? value : null\n }\n // Ordered JSON pairs preserve field boundaries, escaping and absent/empty distinction.\n const text = JSON.stringify(source.map((key) => [key, values[key]]))\n return { text, sourceFingerprint: sha256Canonical(text) }\n}\n\n/** Unit-length float32 representation keeps native cosine arithmetic within range. */\nexport function normalizeVector(values: readonly number[], dimensions: number): readonly number[] {\n if (!Array.isArray(values) || values.length !== dimensions) {\n throw new MaterializationValidationError(`Vector dimension mismatch; expected ${dimensions}`)\n }\n const normalized = Array.from(values, (value) => {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n !Number.isFinite(Math.fround(value))\n ) {\n throw new MaterializationValidationError(\"Vector values must be finite float32 numbers.\")\n }\n return Math.fround(value)\n })\n if (!normalized.some((value) => value !== 0)) {\n throw new MaterializationValidationError(\"Cosine search requires a nonzero vector.\")\n }\n const norm = Math.hypot(...normalized)\n return Object.freeze(normalized.map((value) => Math.fround(value / norm)))\n}\n\n/** V1 envelope for exact SQL scoring; exceeding it must fail rather than truncate candidates. */\nexport function vectorSearchCandidateLimit(dimensions: number): number {\n return Math.min(10000, Math.floor(16000000 / dimensions))\n}\n",
|
|
21
|
-
"import type {\n ObjectQuery,\n ObjectQueryPredicate,\n ObjectQuerySortField,\n} from \"../../../objects/query\"\nimport {\n compareQueryScalarValues,\n queryScalarValuesEqual,\n} from \"../../../objects/query/scalar-values\"\nimport { vectorSources } from \"../../../objects/vectors/profile\"\nimport type { LinkBatchKey } from \"../keys\"\nimport {\n compareObjectLinkCursors,\n compareObjectLinks,\n linkBatchKey,\n objectLinkCursor,\n} from \"../keys\"\nimport type {\n ObjectFacetRequest,\n ObjectFacetResult,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n} from \"../types\"\nimport { compareStrings, fullLinkRowKey, rowIdentityKey, rowIdentityKeyParts } from \"./keys\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\nexport const IN_MEMORY_OBJECT_QUERY_CAPABILITIES: ObjectQueryCapabilities = {\n queryObjects: true,\n countObjects: true,\n existsObjects: true,\n facetObjects: true,\n nodes: {\n start: true,\n refs: true,\n filter: true,\n text: true,\n vector: true,\n traverse: true,\n set: true,\n sort: true,\n limit: true,\n page: true,\n project: true,\n },\n predicateOps: {\n and: true,\n or: true,\n not: true,\n eq: true,\n neq: true,\n lt: true,\n lte: true,\n gt: true,\n gte: true,\n in: true,\n exists: true,\n contains: true,\n },\n sortKinds: {\n property: true,\n relevance: true,\n },\n traversalDirections: {\n outgoing: true,\n incoming: true,\n },\n setOps: {\n union: true,\n intersect: true,\n subtract: true,\n },\n scalarOperations: {\n string: { equality: true, ordering: true },\n uuid: { equality: true, ordering: true },\n boolean: { equality: true },\n integer: { equality: true, ordering: true },\n double: { equality: true, ordering: true },\n decimal: { equality: true, ordering: true },\n date: { equality: true, ordering: true },\n timestamp: { equality: true, ordering: true },\n },\n limits: {\n totalCount: true,\n stablePageTokens: true,\n },\n}\n\ntype QueryEntry = {\n row: ObjectRow\n score: number\n order: number\n}\n\ntype QueryEvaluation = {\n entries: QueryEntry[]\n total: number\n hasMore: boolean\n nextPageToken?: string\n}\n\nconst PAGE_TOKEN_PREFIX = \"offset:\"\n\nfunction assertLinkQueryLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object link query limit must be a positive safe integer.\")\n }\n}\n\nexport function evaluateObjectQuery(\n query: ObjectQuery,\n source: InMemoryReadSource\n): QueryEvaluation {\n switch (query.kind) {\n case \"start\":\n return evaluateStart(query.objectTypeId, source)\n case \"refs\":\n return evaluateRefs(query.refs, source)\n case \"filter\": {\n const input = evaluateObjectQuery(query.input, source)\n const entries = input.entries.filter((entry) => matchesPredicate(entry.row, query.predicate))\n return completeEvaluation(entries)\n }\n case \"text\": {\n const input = evaluateObjectQuery(query.input, source)\n const scoredEntries = input.entries.flatMap((entry) => {\n const score = textScore(entry.row, query.query, query.fields, query.fieldsByObjectType)\n return score > 0 ? [{ ...entry, score: entry.score + score }] : []\n })\n return completeEvaluation(scoredEntries)\n }\n case \"vector\": {\n if (typeof query.vector === \"string\")\n throw new Error(\"[Sixb] Vector search text must be embedded before storage execution.\")\n const vector = query.vector\n const input = evaluateObjectQuery(query.input, source)\n const scoredEntries = input.entries.flatMap((entry) => {\n const stored = source.getVector?.(entry.row, query.profile)\n if (\n !stored ||\n !query.configuration ||\n stored.configuration !== query.configuration ||\n vectorSources(stored.source, entry.row.properties).sourceFingerprint !==\n stored.sourceFingerprint\n )\n return []\n const score = vectorSimilarity(stored.values, vector)\n return score === null\n ? []\n : [{ ...entry, score: entry.score + Math.max(-1, Math.min(1, score)) }]\n })\n scoredEntries.sort(\n (a, b) =>\n b.score - a.score ||\n Buffer.compare(Buffer.from(a.row.objectTypeId), Buffer.from(b.row.objectTypeId)) ||\n Buffer.compare(Buffer.from(a.row.primaryId), Buffer.from(b.row.primaryId))\n )\n const limit = Math.max(0, query.k)\n return {\n entries: scoredEntries.slice(0, limit),\n total: Math.min(limit, scoredEntries.length),\n hasMore: false,\n }\n }\n case \"traverse\": {\n const input = evaluateObjectQuery(query.input, source)\n const entries =\n query.direction === \"outgoing\"\n ? traverseOutgoing(input.entries, query.linkId, source)\n : traverseIncoming(input.entries, query.linkId, query.sourceObjectTypeId, source)\n return completeEvaluation(entries)\n }\n case \"set\":\n return evaluateSet(query.op, query.inputs, source)\n case \"sort\": {\n const input = evaluateObjectQuery(query.input, source)\n return {\n ...input,\n entries: sortEntries(input.entries, query.fields),\n }\n }\n case \"limit\": {\n const input = evaluateObjectQuery(query.input, source)\n const limit = Math.max(0, query.limit)\n return {\n entries: input.entries.slice(0, limit),\n total: input.entries.length,\n hasMore: limit < input.entries.length,\n }\n }\n case \"page\": {\n const input = evaluateObjectQuery(query.input, source)\n const offset = decodePageOffset(query.pageToken)\n const pageSize = Math.max(0, query.pageSize)\n const nextOffset = offset + pageSize\n const hasMore = pageSize > 0 && nextOffset < input.entries.length\n return {\n entries: input.entries.slice(offset, nextOffset),\n total: input.entries.length,\n hasMore,\n nextPageToken: hasMore ? encodePageOffset(nextOffset) : undefined,\n }\n }\n case \"project\": {\n const input = evaluateObjectQuery(query.input, source)\n if (!query.properties) return input\n const properties = query.properties\n return {\n ...input,\n entries: input.entries.map((entry) => ({\n ...entry,\n row: projectRow(entry.row, properties),\n })),\n }\n }\n case \"expand\":\n // `expand` is output-shaping and is gated off by the planner in this\n // slice (and stripped before aggregates run), so the in-memory engine\n // should never receive one. Link hydration lands in a later slice.\n throw new Error(\"[Sixb] In-memory object storage does not support 'expand' execution yet\")\n }\n}\n\nfunction evaluateStart(objectTypeId: string, source: InMemoryReadSource): QueryEvaluation {\n const rows = source.objectsOfType(objectTypeId)\n const entries = rows.map((row, index) => ({\n row,\n score: 0,\n order: index,\n }))\n return completeEvaluation(entries)\n}\n\nfunction evaluateRefs(\n refs: readonly { objectTypeId: string; primaryId: string }[],\n source: InMemoryReadSource\n): QueryEvaluation {\n const seen = new Set<string>()\n const entries = refs\n .flatMap((ref) => {\n const key = JSON.stringify([ref.objectTypeId, ref.primaryId])\n if (seen.has(key)) return []\n seen.add(key)\n const row = source.getObject(ref.objectTypeId, ref.primaryId)\n return row ? [row] : []\n })\n .sort(\n (left, right) =>\n compareStrings(left.objectTypeId, right.objectTypeId) ||\n compareStrings(left.primaryId, right.primaryId)\n )\n .map((row, order) => ({ row, score: 0, order }))\n\n return completeEvaluation(entries)\n}\n\nfunction evaluateSet(\n op: \"union\" | \"intersect\" | \"subtract\",\n inputs: readonly ObjectQuery[],\n source: InMemoryReadSource\n): QueryEvaluation {\n const evaluations = inputs.map((input) => evaluateObjectQuery(input, source))\n const first = evaluations[0]\n if (!first) return completeEvaluation([])\n\n if (op === \"union\") {\n const entriesByKey = new Map<string, QueryEntry>()\n for (const evaluation of evaluations) {\n for (const entry of evaluation.entries) {\n upsertEntry(entriesByKey, entry)\n }\n }\n return completeEvaluation([...entriesByKey.values()])\n }\n\n if (op === \"intersect\") {\n const otherKeySets = evaluations\n .slice(1)\n .map((evaluation) => new Set(evaluation.entries.map((entry) => rowIdentityKey(entry.row))))\n const entries = first.entries.filter((entry) => {\n const key = rowIdentityKey(entry.row)\n return otherKeySets.every((keys) => keys.has(key))\n })\n return completeEvaluation(entries)\n }\n\n const subtractKeys = new Set(\n evaluations\n .slice(1)\n .flatMap((evaluation) => evaluation.entries.map((entry) => rowIdentityKey(entry.row)))\n )\n return completeEvaluation(\n first.entries.filter((entry) => !subtractKeys.has(rowIdentityKey(entry.row)))\n )\n}\n\nfunction traverseOutgoing(\n entries: readonly QueryEntry[],\n linkId: string,\n source: InMemoryReadSource\n): QueryEntry[] {\n const resultsByKey = new Map<string, QueryEntry>()\n\n entries.forEach((entry, index) => {\n const links = [...source.outgoingLinks(entry.row.objectTypeId, entry.row.primaryId)]\n\n for (const link of links) {\n if (link.linkId !== linkId) continue\n const target = source.getObject(link.targetTypeId, link.targetId)\n if (!target) continue\n upsertEntry(resultsByKey, {\n row: target,\n score: entry.score,\n order: entry.order + index / 1_000_000,\n })\n }\n })\n\n return [...resultsByKey.values()]\n}\n\nfunction traverseIncoming(\n entries: readonly QueryEntry[],\n linkId: string,\n sourceObjectTypeId: string | undefined,\n source: InMemoryReadSource\n): QueryEntry[] {\n const inputEntriesByTarget = new Map(entries.map((entry) => [rowIdentityKey(entry.row), entry]))\n const resultsByKey = new Map<string, QueryEntry>()\n\n const links = [...source.allLinks()]\n for (const link of links) {\n if (link.projectId !== source.projectId || link.linkId !== linkId) continue\n if (sourceObjectTypeId !== undefined && link.sourceTypeId !== sourceObjectTypeId) continue\n const targetEntry = inputEntriesByTarget.get(\n rowIdentityKeyParts(link.targetTypeId, link.targetId)\n )\n if (!targetEntry) continue\n\n const row = source.getObject(link.sourceTypeId, link.sourceId)\n if (!row) continue\n upsertEntry(resultsByKey, {\n row,\n score: targetEntry.score,\n order: targetEntry.order,\n })\n }\n\n return [...resultsByKey.values()]\n}\n\nfunction completeEvaluation(entries: QueryEntry[]): QueryEvaluation {\n return {\n entries,\n total: entries.length,\n hasMore: false,\n }\n}\n\nfunction matchesPredicate(row: ObjectRow, predicate: ObjectQueryPredicate): boolean {\n switch (predicate.op) {\n case \"and\":\n return predicate.items.every((item) => matchesPredicate(row, item))\n case \"or\":\n return predicate.items.some((item) => matchesPredicate(row, item))\n case \"not\":\n return !matchesPredicate(row, predicate.item)\n case \"eq\":\n return queryScalarValuesEqual(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n )\n case \"neq\":\n return !queryScalarValuesEqual(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n )\n case \"lt\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) < 0\n )\n case \"lte\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) <= 0\n )\n case \"gt\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) > 0\n )\n case \"gte\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) >= 0\n )\n case \"in\":\n return predicate.values.some((value) =>\n queryScalarValuesEqual(row.properties[predicate.propertyId], value, predicate.scalarKind)\n )\n case \"exists\": {\n const exists =\n Object.hasOwn(row.properties, predicate.propertyId) &&\n row.properties[predicate.propertyId] !== undefined\n return predicate.value ? exists : !exists\n }\n case \"contains\":\n return containsValue(row.properties[predicate.propertyId], predicate.value)\n }\n}\n\nfunction containsValue(actual: unknown, expected: unknown): boolean {\n if (typeof actual === \"string\" && typeof expected === \"string\") {\n return actual.includes(expected)\n }\n\n if (Array.isArray(actual)) {\n return actual.some((item) => queryScalarValuesEqual(item, expected))\n }\n\n if (isPlainObject(actual) && typeof expected === \"string\") {\n return Object.hasOwn(actual, expected)\n }\n\n return false\n}\n\nfunction textScore(\n row: ObjectRow,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): number {\n const terms = tokenize(query)\n if (terms.length === 0) return 0\n\n const scopedFields = fields ?? fieldsByObjectType?.[row.objectTypeId]\n const values = fields\n ? fields.flatMap((field) => collectTextValues(row.properties[field]))\n : scopedFields\n ? scopedFields.flatMap((field) => collectTextValues(row.properties[field]))\n : [row.primaryId, ...Object.values(row.properties).flatMap(collectTextValues)]\n const haystack = values.join(\" \").toLowerCase()\n if (!terms.every((term) => haystack.includes(term))) return 0\n\n const phrase = query.trim().toLowerCase()\n const phraseBoost = phrase.length > 0 && haystack.includes(phrase) ? terms.length : 0\n return terms.reduce((score, term) => score + countOccurrences(haystack, term), phraseBoost)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction collectTextValues(value: unknown): string[] {\n if (typeof value === \"string\") return [value]\n if (Array.isArray(value)) return value.flatMap(collectTextValues)\n return []\n}\n\nfunction countOccurrences(value: string, needle: string): number {\n if (!needle) return 0\n let count = 0\n let index = value.indexOf(needle)\n while (index !== -1) {\n count += 1\n index = value.indexOf(needle, index + needle.length)\n }\n return count\n}\n\nfunction vectorSimilarity(actual: unknown, expected: readonly number[]): number | null {\n if (!Array.isArray(actual) || actual.length !== expected.length || actual.length === 0) {\n return null\n }\n\n let dot = 0\n let actualNorm = 0\n let expectedNorm = 0\n for (let index = 0; index < expected.length; index += 1) {\n const actualValue = actual[index]\n const expectedValue = expected[index]\n if (\n typeof actualValue !== \"number\" ||\n typeof expectedValue !== \"number\" ||\n !Number.isFinite(actualValue) ||\n !Number.isFinite(expectedValue)\n ) {\n return null\n }\n\n dot += actualValue * expectedValue\n actualNorm += actualValue * actualValue\n expectedNorm += expectedValue * expectedValue\n }\n\n if (actualNorm === 0 || expectedNorm === 0) return null\n return dot / (Math.sqrt(actualNorm) * Math.sqrt(expectedNorm))\n}\n\nfunction sortEntries(\n entries: readonly QueryEntry[],\n fields: readonly ObjectQuerySortField[]\n): QueryEntry[] {\n return [...entries].sort((left, right) => {\n for (const field of fields) {\n const comparison = compareSortField(left, right, field)\n if (comparison !== 0) return comparison\n }\n return (\n left.order - right.order || rowIdentityKey(left.row).localeCompare(rowIdentityKey(right.row))\n )\n })\n}\n\nfunction compareSortField(\n left: QueryEntry,\n right: QueryEntry,\n field: ObjectQuerySortField\n): number {\n if (field.kind === \"relevance\") {\n const direction = field.direction ?? \"desc\"\n const comparison = right.score - left.score\n return direction === \"desc\" ? comparison : -comparison\n }\n\n const leftValue = left.row.properties[field.propertyId]\n const rightValue = right.row.properties[field.propertyId]\n const leftMissing = leftValue === undefined || leftValue === null\n const rightMissing = rightValue === undefined || rightValue === null\n if (leftMissing && rightMissing) return 0\n if (leftMissing) return 1\n if (rightMissing) return -1\n\n const comparison = compareQueryScalarValues(leftValue, rightValue, field.scalarKind)\n if (Number.isNaN(comparison)) return 0\n return field.direction === \"desc\" ? -comparison : comparison\n}\n\nfunction projectRow(row: ObjectRow, properties: readonly string[]): ObjectRow {\n const projected: Record<string, unknown> = {}\n for (const propertyId of properties) {\n if (Object.hasOwn(row.properties, propertyId)) {\n projected[propertyId] = row.properties[propertyId]\n }\n }\n return {\n ...row,\n properties: projected,\n }\n}\n\nexport function stripOuterRowShape(query: ObjectQuery): ObjectQuery {\n switch (query.kind) {\n case \"limit\":\n case \"page\":\n case \"project\":\n case \"sort\":\n // `expand` is output-shaping: aggregates ignore it (it never changes which\n // objects match).\n case \"expand\":\n return stripOuterRowShape(query.input)\n default:\n return query\n }\n}\n\nexport function buildFacetResults(\n rows: readonly ObjectRow[],\n facets: readonly ObjectFacetRequest[]\n): ObjectFacetResult[] {\n return facets.map((facet) => ({\n propertyId: facet.propertyId,\n buckets: buildFacetBuckets(rows, facet),\n }))\n}\n\nfunction buildFacetBuckets(\n rows: readonly ObjectRow[],\n facet: ObjectFacetRequest\n): ObjectFacetResult[\"buckets\"] {\n const buckets = new Map<string, { value: unknown; count: number }>()\n\n for (const row of rows) {\n if (!Object.hasOwn(row.properties, facet.propertyId)) continue\n const value = row.properties[facet.propertyId]\n if (value === undefined) continue\n const key = facetValueKey(value)\n const existing = buckets.get(key)\n if (existing) {\n existing.count += 1\n } else {\n buckets.set(key, { value, count: 1 })\n }\n }\n\n return [...buckets.values()]\n .sort(\n (left, right) =>\n right.count - left.count ||\n facetValueSortKey(left.value).localeCompare(facetValueSortKey(right.value))\n )\n .slice(0, facet.limit)\n}\n\nfunction facetValueKey(value: unknown): string {\n return JSON.stringify(value) ?? String(value)\n}\n\nfunction facetValueSortKey(value: unknown): string {\n return JSON.stringify(value) ?? String(value)\n}\n\nexport async function queryLinksFrom(\n params: QueryObjectLinksInput,\n listLinks: (\n input: Parameters<ObjectReadStorage[\"listLinks\"]>[0]\n ) => Promise<readonly ObjectLinkRow[]> | readonly ObjectLinkRow[]\n): Promise<QueryObjectLinksResult> {\n assertLinkQueryLimit(params.limit)\n if (params.objectRefs.length === 0 || params.endpointObjectTypeIds?.length === 0) {\n return { links: [], hasMore: false }\n }\n\n const allowedTypes = params.endpointObjectTypeIds\n ? new Set(params.endpointObjectTypeIds)\n : undefined\n const deduped = new Map<string, ObjectLinkRow>()\n for (const object of params.objectRefs) {\n const rows = await listLinks({\n projectId: params.projectId,\n objectTypeId: object.objectTypeId,\n objectId: object.primaryId,\n direction: params.direction,\n ...(params.linkId === undefined ? {} : { linkId: params.linkId }),\n })\n for (const row of rows) {\n if (\n allowedTypes &&\n (!allowedTypes.has(row.sourceTypeId) || !allowedTypes.has(row.targetTypeId))\n ) {\n continue\n }\n if (params.after && compareObjectLinkCursors(objectLinkCursor(row), params.after) <= 0) {\n continue\n }\n deduped.set(fullLinkRowKey(row), row)\n }\n }\n\n const rows = [...deduped.values()].sort(compareObjectLinks).slice(0, params.limit + 1)\n return { links: rows.slice(0, params.limit), hasMore: rows.length > params.limit }\n}\n\ninterface LinkBatchSource {\n all(): Iterable<ObjectLinkRow>\n outgoing(item: {\n readonly objectTypeId: string\n readonly objectId: string\n readonly linkId: string\n }): Iterable<ObjectLinkRow>\n}\n\nexport function collectLinksBatch(\n source: LinkBatchSource,\n params: Parameters<ObjectReadStorage[\"listLinksBatch\"]>[0],\n cloneRows: boolean\n): Map<LinkBatchKey, ObjectLinkRow[]> {\n const direction = params.direction ?? \"outgoing\"\n const orderedKeys = [\n ...new Set(\n params.items.map((item) => linkBatchKey(item.objectTypeId, item.objectId, item.linkId))\n ),\n ]\n const requestedKeys = new Set(orderedKeys)\n const grouped = new Map<LinkBatchKey, Map<string, ObjectLinkRow>>()\n const append = (key: LinkBatchKey, row: ObjectLinkRow): void => {\n const bucket = grouped.get(key) ?? new Map<string, ObjectLinkRow>()\n bucket.set(fullLinkRowKey(row), row)\n grouped.set(key, bucket)\n }\n\n if (direction === \"outgoing\" || direction === \"both\") {\n for (const item of params.items) {\n const key = linkBatchKey(item.objectTypeId, item.objectId, item.linkId)\n for (const row of source.outgoing(item)) {\n if (row.projectId === params.projectId && row.linkId === item.linkId) append(key, row)\n }\n }\n }\n\n if (direction === \"incoming\" || direction === \"both\") {\n for (const row of source.all()) {\n if (row.projectId !== params.projectId) continue\n const key = linkBatchKey(row.targetTypeId, row.targetId, row.linkId)\n if (requestedKeys.has(key)) append(key, row)\n }\n }\n\n return new Map(\n orderedKeys.flatMap((key) => {\n const bucket = grouped.get(key)\n if (!bucket) return []\n return [\n [key, [...bucket.values()].map((row) => (cloneRows ? structuredClone(row) : row))] as const,\n ]\n })\n )\n}\n\nfunction upsertEntry(entriesByKey: Map<string, QueryEntry>, entry: QueryEntry): void {\n const key = rowIdentityKey(entry.row)\n const existing = entriesByKey.get(key)\n if (!existing) {\n entriesByKey.set(key, entry)\n return\n }\n\n if (entry.score > existing.score) {\n entriesByKey.set(key, {\n ...existing,\n score: entry.score,\n })\n }\n}\n\nfunction encodePageOffset(offset: number): string {\n return `${PAGE_TOKEN_PREFIX}${offset}`\n}\n\nfunction decodePageOffset(token: string | undefined): number {\n if (!token) return 0\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throw new Error(\"[Sixb] Invalid object query page token\")\n }\n\n const offset = Number(token.slice(PAGE_TOKEN_PREFIX.length))\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error(\"[Sixb] Invalid object query page token\")\n }\n return offset\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
20
|
+
"import type {\n ObjectQuery,\n ObjectQueryPredicate,\n ObjectQuerySortField,\n QueryScalarKind,\n} from \"../../../objects/query\"\nimport {\n compareQueryScalarValues,\n queryScalarValuesEqual,\n} from \"../../../objects/query/scalar-values\"\nimport { vectorSources } from \"../../../objects/vectors/profile\"\nimport type { LinkBatchKey } from \"../keys\"\nimport {\n compareObjectLinkCursors,\n compareObjectLinks,\n linkBatchKey,\n objectLinkCursor,\n} from \"../keys\"\nimport type {\n ObjectFacetRequest,\n ObjectFacetResult,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n} from \"../types\"\nimport { compareStrings, fullLinkRowKey, rowIdentityKey, rowIdentityKeyParts } from \"./keys\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\nexport const IN_MEMORY_OBJECT_QUERY_CAPABILITIES: ObjectQueryCapabilities = {\n queryObjects: true,\n countObjects: true,\n existsObjects: true,\n facetObjects: true,\n nodes: {\n start: true,\n refs: true,\n filter: true,\n text: true,\n vector: true,\n traverse: true,\n set: true,\n sort: true,\n limit: true,\n page: true,\n project: true,\n },\n predicateOps: {\n and: true,\n or: true,\n not: true,\n eq: true,\n neq: true,\n lt: true,\n lte: true,\n gt: true,\n gte: true,\n in: true,\n exists: true,\n contains: true,\n },\n sortKinds: {\n property: true,\n relevance: true,\n },\n traversalDirections: {\n outgoing: true,\n incoming: true,\n },\n setOps: {\n union: true,\n intersect: true,\n subtract: true,\n },\n scalarOperations: {\n string: { equality: true, ordering: true },\n uuid: { equality: true, ordering: true },\n boolean: { equality: true },\n integer: { equality: true, ordering: true },\n double: { equality: true, ordering: true },\n decimal: { equality: true, ordering: true },\n date: { equality: true, ordering: true },\n timestamp: { equality: true, ordering: true },\n userRef: { equality: true },\n },\n limits: {\n totalCount: true,\n stablePageTokens: true,\n },\n}\n\ntype QueryEntry = {\n row: ObjectRow\n score: number\n order: number\n}\n\ntype QueryEvaluation = {\n entries: QueryEntry[]\n total: number\n hasMore: boolean\n nextPageToken?: string\n}\n\nconst PAGE_TOKEN_PREFIX = \"offset:\"\n\nfunction assertLinkQueryLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object link query limit must be a positive safe integer.\")\n }\n}\n\nexport function evaluateObjectQuery(\n query: ObjectQuery,\n source: InMemoryReadSource\n): QueryEvaluation {\n switch (query.kind) {\n case \"start\":\n return evaluateStart(query.objectTypeId, source)\n case \"refs\":\n return evaluateRefs(query.refs, source)\n case \"filter\": {\n const input = evaluateObjectQuery(query.input, source)\n const entries = input.entries.filter((entry) => matchesPredicate(entry.row, query.predicate))\n return completeEvaluation(entries)\n }\n case \"text\": {\n const input = evaluateObjectQuery(query.input, source)\n const scoredEntries = input.entries.flatMap((entry) => {\n const score = textScore(entry.row, query.query, query.fields, query.fieldsByObjectType)\n return score > 0 ? [{ ...entry, score: entry.score + score }] : []\n })\n return completeEvaluation(scoredEntries)\n }\n case \"vector\": {\n if (typeof query.vector === \"string\")\n throw new Error(\"[Sixb] Vector search text must be embedded before storage execution.\")\n const vector = query.vector\n const input = evaluateObjectQuery(query.input, source)\n const scoredEntries = input.entries.flatMap((entry) => {\n const stored = source.getVector?.(entry.row, query.profile)\n if (\n !stored ||\n !query.configuration ||\n stored.configuration !== query.configuration ||\n vectorSources(stored.source, entry.row.properties).sourceFingerprint !==\n stored.sourceFingerprint\n )\n return []\n const score = vectorSimilarity(stored.values, vector)\n return score === null\n ? []\n : [{ ...entry, score: entry.score + Math.max(-1, Math.min(1, score)) }]\n })\n scoredEntries.sort(\n (a, b) =>\n b.score - a.score ||\n Buffer.compare(Buffer.from(a.row.objectTypeId), Buffer.from(b.row.objectTypeId)) ||\n Buffer.compare(Buffer.from(a.row.primaryId), Buffer.from(b.row.primaryId))\n )\n const limit = Math.max(0, query.k)\n return {\n entries: scoredEntries.slice(0, limit),\n total: Math.min(limit, scoredEntries.length),\n hasMore: false,\n }\n }\n case \"traverse\": {\n const input = evaluateObjectQuery(query.input, source)\n const entries =\n query.direction === \"outgoing\"\n ? traverseOutgoing(input.entries, query.linkId, source)\n : traverseIncoming(input.entries, query.linkId, query.sourceObjectTypeId, source)\n return completeEvaluation(entries)\n }\n case \"set\":\n return evaluateSet(query.op, query.inputs, source)\n case \"sort\": {\n const input = evaluateObjectQuery(query.input, source)\n return {\n ...input,\n entries: sortEntries(input.entries, query.fields),\n }\n }\n case \"limit\": {\n const input = evaluateObjectQuery(query.input, source)\n const limit = Math.max(0, query.limit)\n return {\n entries: input.entries.slice(0, limit),\n total: input.entries.length,\n hasMore: limit < input.entries.length,\n }\n }\n case \"page\": {\n const input = evaluateObjectQuery(query.input, source)\n const offset = decodePageOffset(query.pageToken)\n const pageSize = Math.max(0, query.pageSize)\n const nextOffset = offset + pageSize\n const hasMore = pageSize > 0 && nextOffset < input.entries.length\n return {\n entries: input.entries.slice(offset, nextOffset),\n total: input.entries.length,\n hasMore,\n nextPageToken: hasMore ? encodePageOffset(nextOffset) : undefined,\n }\n }\n case \"project\": {\n const input = evaluateObjectQuery(query.input, source)\n if (!query.properties) return input\n const properties = query.properties\n return {\n ...input,\n entries: input.entries.map((entry) => ({\n ...entry,\n row: projectRow(entry.row, properties),\n })),\n }\n }\n case \"expand\":\n // `expand` is output-shaping and is gated off by the planner in this\n // slice (and stripped before aggregates run), so the in-memory engine\n // should never receive one. Link hydration lands in a later slice.\n throw new Error(\"[Sixb] In-memory object storage does not support 'expand' execution yet\")\n }\n}\n\nfunction evaluateStart(objectTypeId: string, source: InMemoryReadSource): QueryEvaluation {\n const rows = source.objectsOfType(objectTypeId)\n const entries = rows.map((row, index) => ({\n row,\n score: 0,\n order: index,\n }))\n return completeEvaluation(entries)\n}\n\nfunction evaluateRefs(\n refs: readonly { objectTypeId: string; primaryId: string }[],\n source: InMemoryReadSource\n): QueryEvaluation {\n const seen = new Set<string>()\n const entries = refs\n .flatMap((ref) => {\n const key = JSON.stringify([ref.objectTypeId, ref.primaryId])\n if (seen.has(key)) return []\n seen.add(key)\n const row = source.getObject(ref.objectTypeId, ref.primaryId)\n return row ? [row] : []\n })\n .sort(\n (left, right) =>\n compareStrings(left.objectTypeId, right.objectTypeId) ||\n compareStrings(left.primaryId, right.primaryId)\n )\n .map((row, order) => ({ row, score: 0, order }))\n\n return completeEvaluation(entries)\n}\n\nfunction evaluateSet(\n op: \"union\" | \"intersect\" | \"subtract\",\n inputs: readonly ObjectQuery[],\n source: InMemoryReadSource\n): QueryEvaluation {\n const evaluations = inputs.map((input) => evaluateObjectQuery(input, source))\n const first = evaluations[0]\n if (!first) return completeEvaluation([])\n\n if (op === \"union\") {\n const entriesByKey = new Map<string, QueryEntry>()\n for (const evaluation of evaluations) {\n for (const entry of evaluation.entries) {\n upsertEntry(entriesByKey, entry)\n }\n }\n return completeEvaluation([...entriesByKey.values()])\n }\n\n if (op === \"intersect\") {\n const otherKeySets = evaluations\n .slice(1)\n .map((evaluation) => new Set(evaluation.entries.map((entry) => rowIdentityKey(entry.row))))\n const entries = first.entries.filter((entry) => {\n const key = rowIdentityKey(entry.row)\n return otherKeySets.every((keys) => keys.has(key))\n })\n return completeEvaluation(entries)\n }\n\n const subtractKeys = new Set(\n evaluations\n .slice(1)\n .flatMap((evaluation) => evaluation.entries.map((entry) => rowIdentityKey(entry.row)))\n )\n return completeEvaluation(\n first.entries.filter((entry) => !subtractKeys.has(rowIdentityKey(entry.row)))\n )\n}\n\nfunction traverseOutgoing(\n entries: readonly QueryEntry[],\n linkId: string,\n source: InMemoryReadSource\n): QueryEntry[] {\n const resultsByKey = new Map<string, QueryEntry>()\n\n entries.forEach((entry, index) => {\n const links = [...source.outgoingLinks(entry.row.objectTypeId, entry.row.primaryId)]\n\n for (const link of links) {\n if (link.linkId !== linkId) continue\n const target = source.getObject(link.targetTypeId, link.targetId)\n if (!target) continue\n upsertEntry(resultsByKey, {\n row: target,\n score: entry.score,\n order: entry.order + index / 1_000_000,\n })\n }\n })\n\n return [...resultsByKey.values()]\n}\n\nfunction traverseIncoming(\n entries: readonly QueryEntry[],\n linkId: string,\n sourceObjectTypeId: string | undefined,\n source: InMemoryReadSource\n): QueryEntry[] {\n const inputEntriesByTarget = new Map(entries.map((entry) => [rowIdentityKey(entry.row), entry]))\n const resultsByKey = new Map<string, QueryEntry>()\n\n const links = [...source.allLinks()]\n for (const link of links) {\n if (link.projectId !== source.projectId || link.linkId !== linkId) continue\n if (sourceObjectTypeId !== undefined && link.sourceTypeId !== sourceObjectTypeId) continue\n const targetEntry = inputEntriesByTarget.get(\n rowIdentityKeyParts(link.targetTypeId, link.targetId)\n )\n if (!targetEntry) continue\n\n const row = source.getObject(link.sourceTypeId, link.sourceId)\n if (!row) continue\n upsertEntry(resultsByKey, {\n row,\n score: targetEntry.score,\n order: targetEntry.order,\n })\n }\n\n return [...resultsByKey.values()]\n}\n\nfunction completeEvaluation(entries: QueryEntry[]): QueryEvaluation {\n return {\n entries,\n total: entries.length,\n hasMore: false,\n }\n}\n\nfunction matchesPredicate(row: ObjectRow, predicate: ObjectQueryPredicate): boolean {\n switch (predicate.op) {\n case \"and\":\n return predicate.items.every((item) => matchesPredicate(row, item))\n case \"or\":\n return predicate.items.some((item) => matchesPredicate(row, item))\n case \"not\":\n return !matchesPredicate(row, predicate.item)\n case \"eq\":\n return queryScalarValuesEqual(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n )\n case \"neq\":\n return !queryScalarValuesEqual(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n )\n case \"lt\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) < 0\n )\n case \"lte\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) <= 0\n )\n case \"gt\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) > 0\n )\n case \"gte\":\n return (\n compareQueryScalarValues(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n ) >= 0\n )\n case \"in\":\n return predicate.values.some((value) =>\n queryScalarValuesEqual(row.properties[predicate.propertyId], value, predicate.scalarKind)\n )\n case \"exists\": {\n const exists =\n Object.hasOwn(row.properties, predicate.propertyId) &&\n row.properties[predicate.propertyId] !== undefined\n return predicate.value ? exists : !exists\n }\n case \"contains\":\n return containsValue(\n row.properties[predicate.propertyId],\n predicate.value,\n predicate.scalarKind\n )\n }\n}\n\nfunction containsValue(\n actual: unknown,\n expected: unknown,\n itemScalarKind: QueryScalarKind | undefined\n): boolean {\n if (typeof actual === \"string\" && typeof expected === \"string\") {\n return actual.includes(expected)\n }\n\n if (Array.isArray(actual)) {\n return actual.some((item) => queryScalarValuesEqual(item, expected, itemScalarKind))\n }\n\n if (isPlainObject(actual) && typeof expected === \"string\") {\n return Object.hasOwn(actual, expected)\n }\n\n return false\n}\n\nfunction textScore(\n row: ObjectRow,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): number {\n const terms = tokenize(query)\n if (terms.length === 0) return 0\n\n const scopedFields = fields ?? fieldsByObjectType?.[row.objectTypeId]\n const values = fields\n ? fields.flatMap((field) => collectTextValues(row.properties[field]))\n : scopedFields\n ? scopedFields.flatMap((field) => collectTextValues(row.properties[field]))\n : [row.primaryId, ...Object.values(row.properties).flatMap(collectTextValues)]\n const haystack = values.join(\" \").toLowerCase()\n if (!terms.every((term) => haystack.includes(term))) return 0\n\n const phrase = query.trim().toLowerCase()\n const phraseBoost = phrase.length > 0 && haystack.includes(phrase) ? terms.length : 0\n return terms.reduce((score, term) => score + countOccurrences(haystack, term), phraseBoost)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction collectTextValues(value: unknown): string[] {\n if (typeof value === \"string\") return [value]\n if (Array.isArray(value)) return value.flatMap(collectTextValues)\n return []\n}\n\nfunction countOccurrences(value: string, needle: string): number {\n if (!needle) return 0\n let count = 0\n let index = value.indexOf(needle)\n while (index !== -1) {\n count += 1\n index = value.indexOf(needle, index + needle.length)\n }\n return count\n}\n\nfunction vectorSimilarity(actual: unknown, expected: readonly number[]): number | null {\n if (!Array.isArray(actual) || actual.length !== expected.length || actual.length === 0) {\n return null\n }\n\n let dot = 0\n let actualNorm = 0\n let expectedNorm = 0\n for (let index = 0; index < expected.length; index += 1) {\n const actualValue = actual[index]\n const expectedValue = expected[index]\n if (\n typeof actualValue !== \"number\" ||\n typeof expectedValue !== \"number\" ||\n !Number.isFinite(actualValue) ||\n !Number.isFinite(expectedValue)\n ) {\n return null\n }\n\n dot += actualValue * expectedValue\n actualNorm += actualValue * actualValue\n expectedNorm += expectedValue * expectedValue\n }\n\n if (actualNorm === 0 || expectedNorm === 0) return null\n return dot / (Math.sqrt(actualNorm) * Math.sqrt(expectedNorm))\n}\n\nfunction sortEntries(\n entries: readonly QueryEntry[],\n fields: readonly ObjectQuerySortField[]\n): QueryEntry[] {\n return [...entries].sort((left, right) => {\n for (const field of fields) {\n const comparison = compareSortField(left, right, field)\n if (comparison !== 0) return comparison\n }\n return (\n left.order - right.order || rowIdentityKey(left.row).localeCompare(rowIdentityKey(right.row))\n )\n })\n}\n\nfunction compareSortField(\n left: QueryEntry,\n right: QueryEntry,\n field: ObjectQuerySortField\n): number {\n if (field.kind === \"relevance\") {\n const direction = field.direction ?? \"desc\"\n const comparison = right.score - left.score\n return direction === \"desc\" ? comparison : -comparison\n }\n\n const leftValue = left.row.properties[field.propertyId]\n const rightValue = right.row.properties[field.propertyId]\n const leftMissing = leftValue === undefined || leftValue === null\n const rightMissing = rightValue === undefined || rightValue === null\n if (leftMissing && rightMissing) return 0\n if (leftMissing) return 1\n if (rightMissing) return -1\n\n const comparison = compareQueryScalarValues(leftValue, rightValue, field.scalarKind)\n if (Number.isNaN(comparison)) return 0\n return field.direction === \"desc\" ? -comparison : comparison\n}\n\nfunction projectRow(row: ObjectRow, properties: readonly string[]): ObjectRow {\n const projected: Record<string, unknown> = {}\n for (const propertyId of properties) {\n if (Object.hasOwn(row.properties, propertyId)) {\n projected[propertyId] = row.properties[propertyId]\n }\n }\n return {\n ...row,\n properties: projected,\n }\n}\n\nexport function stripOuterRowShape(query: ObjectQuery): ObjectQuery {\n switch (query.kind) {\n case \"limit\":\n case \"page\":\n case \"project\":\n case \"sort\":\n // `expand` is output-shaping: aggregates ignore it (it never changes which\n // objects match).\n case \"expand\":\n return stripOuterRowShape(query.input)\n default:\n return query\n }\n}\n\nexport function buildFacetResults(\n rows: readonly ObjectRow[],\n facets: readonly ObjectFacetRequest[]\n): ObjectFacetResult[] {\n return facets.map((facet) => ({\n propertyId: facet.propertyId,\n buckets: buildFacetBuckets(rows, facet),\n }))\n}\n\nfunction buildFacetBuckets(\n rows: readonly ObjectRow[],\n facet: ObjectFacetRequest\n): ObjectFacetResult[\"buckets\"] {\n const buckets = new Map<string, { value: unknown; count: number }>()\n\n for (const row of rows) {\n if (!Object.hasOwn(row.properties, facet.propertyId)) continue\n const value = row.properties[facet.propertyId]\n if (value === undefined) continue\n const key = facetValueKey(value)\n const existing = buckets.get(key)\n if (existing) {\n existing.count += 1\n } else {\n buckets.set(key, { value, count: 1 })\n }\n }\n\n return [...buckets.values()]\n .sort(\n (left, right) =>\n right.count - left.count ||\n facetValueSortKey(left.value).localeCompare(facetValueSortKey(right.value))\n )\n .slice(0, facet.limit)\n}\n\nfunction facetValueKey(value: unknown): string {\n return JSON.stringify(value) ?? String(value)\n}\n\nfunction facetValueSortKey(value: unknown): string {\n return JSON.stringify(value) ?? String(value)\n}\n\nexport async function queryLinksFrom(\n params: QueryObjectLinksInput,\n listLinks: (\n input: Parameters<ObjectReadStorage[\"listLinks\"]>[0]\n ) => Promise<readonly ObjectLinkRow[]> | readonly ObjectLinkRow[]\n): Promise<QueryObjectLinksResult> {\n assertLinkQueryLimit(params.limit)\n if (params.objectRefs.length === 0 || params.endpointObjectTypeIds?.length === 0) {\n return { links: [], hasMore: false }\n }\n\n const allowedTypes = params.endpointObjectTypeIds\n ? new Set(params.endpointObjectTypeIds)\n : undefined\n const deduped = new Map<string, ObjectLinkRow>()\n for (const object of params.objectRefs) {\n const rows = await listLinks({\n projectId: params.projectId,\n objectTypeId: object.objectTypeId,\n objectId: object.primaryId,\n direction: params.direction,\n ...(params.linkId === undefined ? {} : { linkId: params.linkId }),\n })\n for (const row of rows) {\n if (\n allowedTypes &&\n (!allowedTypes.has(row.sourceTypeId) || !allowedTypes.has(row.targetTypeId))\n ) {\n continue\n }\n if (params.after && compareObjectLinkCursors(objectLinkCursor(row), params.after) <= 0) {\n continue\n }\n deduped.set(fullLinkRowKey(row), row)\n }\n }\n\n const rows = [...deduped.values()].sort(compareObjectLinks).slice(0, params.limit + 1)\n return { links: rows.slice(0, params.limit), hasMore: rows.length > params.limit }\n}\n\ninterface LinkBatchSource {\n all(): Iterable<ObjectLinkRow>\n outgoing(item: {\n readonly objectTypeId: string\n readonly objectId: string\n readonly linkId: string\n }): Iterable<ObjectLinkRow>\n}\n\nexport function collectLinksBatch(\n source: LinkBatchSource,\n params: Parameters<ObjectReadStorage[\"listLinksBatch\"]>[0],\n cloneRows: boolean\n): Map<LinkBatchKey, ObjectLinkRow[]> {\n const direction = params.direction ?? \"outgoing\"\n const orderedKeys = [\n ...new Set(\n params.items.map((item) => linkBatchKey(item.objectTypeId, item.objectId, item.linkId))\n ),\n ]\n const requestedKeys = new Set(orderedKeys)\n const grouped = new Map<LinkBatchKey, Map<string, ObjectLinkRow>>()\n const append = (key: LinkBatchKey, row: ObjectLinkRow): void => {\n const bucket = grouped.get(key) ?? new Map<string, ObjectLinkRow>()\n bucket.set(fullLinkRowKey(row), row)\n grouped.set(key, bucket)\n }\n\n if (direction === \"outgoing\" || direction === \"both\") {\n for (const item of params.items) {\n const key = linkBatchKey(item.objectTypeId, item.objectId, item.linkId)\n for (const row of source.outgoing(item)) {\n if (row.projectId === params.projectId && row.linkId === item.linkId) append(key, row)\n }\n }\n }\n\n if (direction === \"incoming\" || direction === \"both\") {\n for (const row of source.all()) {\n if (row.projectId !== params.projectId) continue\n const key = linkBatchKey(row.targetTypeId, row.targetId, row.linkId)\n if (requestedKeys.has(key)) append(key, row)\n }\n }\n\n return new Map(\n orderedKeys.flatMap((key) => {\n const bucket = grouped.get(key)\n if (!bucket) return []\n return [\n [key, [...bucket.values()].map((row) => (cloneRows ? structuredClone(row) : row))] as const,\n ]\n })\n )\n}\n\nfunction upsertEntry(entriesByKey: Map<string, QueryEntry>, entry: QueryEntry): void {\n const key = rowIdentityKey(entry.row)\n const existing = entriesByKey.get(key)\n if (!existing) {\n entriesByKey.set(key, entry)\n return\n }\n\n if (entry.score > existing.score) {\n entriesByKey.set(key, {\n ...existing,\n score: entry.score,\n })\n }\n}\n\nfunction encodePageOffset(offset: number): string {\n return `${PAGE_TOKEN_PREFIX}${offset}`\n}\n\nfunction decodePageOffset(token: string | undefined): number {\n if (!token) return 0\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throw new Error(\"[Sixb] Invalid object query page token\")\n }\n\n const offset = Number(token.slice(PAGE_TOKEN_PREFIX.length))\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error(\"[Sixb] Invalid object query page token\")\n }\n return offset\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
22
21
|
"import { type ObjectReadExecutionLimits, ObjectReadLimitExceededError } from \"../execution-limits\"\nimport type {\n CompiledObjectReadRoot,\n CompiledObjectReadStep,\n CompiledSelectedObjectReadScope,\n ObjectLinkRow,\n ObjectRow,\n} from \"../types\"\nimport { fullLinkRowKey, rowIdentityKey, rowIdentityKeyParts, sourceLinkBucketKey } from \"./keys\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\nexport interface InMemoryReadUniverse extends InMemoryReadSource {\n readonly objects: ReadonlyMap<string, ObjectRow>\n readonly links: ReadonlyMap<string, ObjectLinkRow>\n readonly linksBySource: ReadonlyMap<string, readonly ObjectLinkRow[]>\n readonly objectProperties: ReadonlyMap<string, ReadonlySet<string>>\n}\n\ninterface InMemoryReadPlan {\n readonly roots: readonly CompiledObjectReadRoot[]\n readonly selectionsByNode: ReadonlyMap<number, ReadonlyMap<string, ReadonlySet<string>>>\n readonly steps: readonly CompiledObjectReadStep[]\n}\n\nexport function prepareReadPlan(scope: CompiledSelectedObjectReadScope): InMemoryReadPlan {\n const selectionsByNode = new Map<number, Map<string, ReadonlySet<string>>>()\n for (const selection of scope.objects) {\n const byType = selectionsByNode.get(selection.nodeId) ?? new Map()\n byType.set(selection.objectTypeId, new Set(selection.propertyIds))\n selectionsByNode.set(selection.nodeId, byType)\n }\n\n // The compiler allocates node ids parent-first. Resolve every step from lower parent ids to\n // higher child ids so a node reached through several concrete definitions is complete before\n // its nested selections run.\n const steps = [...scope.steps].sort(\n (left, right) =>\n left.parentNodeId - right.parentNodeId ||\n left.nodeId - right.nodeId ||\n left.sourceObjectTypeId.localeCompare(right.sourceObjectTypeId) ||\n left.linkId.localeCompare(right.linkId) ||\n left.targetObjectTypeId.localeCompare(right.targetObjectTypeId)\n )\n return {\n roots: scope.roots,\n selectionsByNode,\n steps,\n }\n}\n\nexport function resolveSelectedReadUniverse(\n source: InMemoryReadSource,\n plan: InMemoryReadPlan,\n limits: ObjectReadExecutionLimits\n): InMemoryReadUniverse {\n // Reachability stays path-sensitive until every finite selection step has run. The final\n // object/link universes union exact identities only after that traversal, so the same type\n // reached through another branch cannot inherit nested link authority.\n const reachableByNode = new Map<number, Map<string, ObjectRow>>()\n const rawObjects = new Map<string, ObjectRow>()\n const objectProperties = new Map<string, Set<string>>()\n const authorizedLinks = new Map<\n string,\n { readonly row: ObjectLinkRow; readonly propertyIds: Set<string> }\n >()\n let traversalFacts = 0\n const consumeTraversalFact = (): void => {\n traversalFacts += 1\n if (traversalFacts > limits.maxTraversalFacts) {\n throw new ObjectReadLimitExceededError(\"traversalFacts\", limits.maxTraversalFacts)\n }\n }\n\n const addReachable = (nodeId: number, row: ObjectRow): void => {\n const selectedProperties = plan.selectionsByNode.get(nodeId)?.get(row.objectTypeId)\n if (!selectedProperties) return\n const key = rowIdentityKey(row)\n const reachable = reachableByNode.get(nodeId) ?? new Map<string, ObjectRow>()\n reachable.set(key, row)\n reachableByNode.set(nodeId, reachable)\n rawObjects.set(key, row)\n unionInto(objectProperties, key, selectedProperties)\n }\n\n for (const root of plan.roots) {\n const row = source.getObject(root.objectTypeId, root.primaryId)\n if (row) {\n consumeTraversalFact()\n addReachable(root.nodeId, row)\n }\n }\n\n for (const step of plan.steps) {\n const parents = reachableByNode.get(step.parentNodeId)\n if (!parents) continue\n for (const parent of parents.values()) {\n if (parent.objectTypeId !== step.sourceObjectTypeId) continue\n for (const link of source.outgoingLinks(parent.objectTypeId, parent.primaryId)) {\n if (link.linkId !== step.linkId || link.targetTypeId !== step.targetObjectTypeId) {\n continue\n }\n const target = source.getObject(link.targetTypeId, link.targetId)\n if (!target) continue\n consumeTraversalFact()\n addReachable(step.nodeId, target)\n\n const linkKey = fullLinkRowKey(link)\n const selected = authorizedLinks.get(linkKey)\n if (selected) {\n for (const propertyId of step.propertyIds) selected.propertyIds.add(propertyId)\n } else {\n authorizedLinks.set(linkKey, {\n row: link,\n propertyIds: new Set(step.propertyIds),\n })\n }\n }\n }\n }\n\n const objects = new Map<string, ObjectRow>()\n for (const [key, propertyIds] of objectProperties) {\n const row = rawObjects.get(key)\n if (row) objects.set(key, redactObjectRow(row, propertyIds))\n }\n\n const links = new Map<string, ObjectLinkRow>()\n for (const [key, selected] of authorizedLinks) {\n // Both endpoint identities must remain live and selected. This also prevents a stale link\n // from exposing metadata after its target object disappears.\n if (\n !objects.has(rowIdentityKeyParts(selected.row.sourceTypeId, selected.row.sourceId)) ||\n !objects.has(rowIdentityKeyParts(selected.row.targetTypeId, selected.row.targetId))\n ) {\n continue\n }\n links.set(key, redactLinkRow(selected.row, selected.propertyIds))\n }\n\n return createReadUniverse(source, objects, links, objectProperties)\n}\n\nfunction createReadUniverse(\n source: InMemoryReadSource,\n objects: ReadonlyMap<string, ObjectRow>,\n links: ReadonlyMap<string, ObjectLinkRow>,\n objectProperties: ReadonlyMap<string, ReadonlySet<string>>\n): InMemoryReadUniverse {\n const projectId = source.projectId\n const linksBySource = new Map<string, ObjectLinkRow[]>()\n for (const link of links.values()) {\n const key = sourceLinkBucketKey(link.projectId, link.sourceTypeId, link.sourceId)\n const bucket = linksBySource.get(key) ?? []\n bucket.push(link)\n linksBySource.set(key, bucket)\n }\n return {\n projectId,\n objects,\n links,\n linksBySource,\n objectProperties,\n getVector: (ref, profile) => {\n const key = rowIdentityKeyParts(ref.objectTypeId, ref.primaryId)\n if (!objects.has(key)) return undefined\n const value = source.getVector?.(ref, profile)\n return value?.source.every((id) => objectProperties.get(key)?.has(id)) ? value : undefined\n },\n objectsOfType: (objectTypeId) =>\n [...objects.values()].filter((row) => row.objectTypeId === objectTypeId),\n getObject: (objectTypeId, primaryId) =>\n objects.get(rowIdentityKeyParts(objectTypeId, primaryId)),\n outgoingLinks: (objectTypeId, primaryId) =>\n linksBySource.get(sourceLinkBucketKey(projectId, objectTypeId, primaryId)) ?? [],\n allLinks: () => links.values(),\n }\n}\n\nfunction unionInto(\n target: Map<string, Set<string>>,\n key: string,\n values: ReadonlySet<string>\n): void {\n const union = target.get(key) ?? new Set<string>()\n for (const value of values) union.add(value)\n target.set(key, union)\n}\n\nfunction redactObjectRow(row: ObjectRow, propertyIds: ReadonlySet<string>): ObjectRow {\n const clone = structuredClone(row)\n delete clone.links\n clone.properties = redactProperties(clone.properties, propertyIds)\n return clone\n}\n\nfunction redactLinkRow(row: ObjectLinkRow, propertyIds: ReadonlySet<string>): ObjectLinkRow {\n const clone = structuredClone(row)\n const properties = redactProperties(clone.properties ?? {}, propertyIds)\n if (Object.keys(properties).length === 0) {\n delete clone.properties\n } else {\n clone.properties = properties\n }\n return clone\n}\n\nfunction redactProperties(\n properties: Readonly<Record<string, unknown>>,\n propertyIds: ReadonlySet<string>\n): Record<string, unknown> {\n // Object.fromEntries uses CreateDataProperty, so valid ontology ids such as `__proto__` remain\n // ordinary own properties without changing the returned object's prototype.\n return Object.fromEntries(\n [...propertyIds]\n .filter((propertyId) => Object.hasOwn(properties, propertyId))\n .map((propertyId) => [propertyId, properties[propertyId]])\n )\n}\n",
|
|
23
22
|
"import { hasVectorProfile } from \"../../../objects/vectors/query\"\nimport {\n assertObjectReadFacetCount,\n assertObjectReadOutputWithinLimit,\n type ObjectReadExecutionLimits,\n snapshotObjectReadExecutionLimits,\n} from \"../execution-limits\"\nimport { type ObjectBatchKey, objectBatchKey } from \"../keys\"\nimport { assertObjectReaderProject } from \"../read-scope\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n ExistsObjectsInput,\n FacetObjectsInput,\n LinkDirection,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectsInput,\n} from \"../types\"\nimport { fullLinkRowKey, rowIdentityKeyParts, sourceLinkBucketKey } from \"./keys\"\nimport {\n buildFacetResults,\n collectLinksBatch,\n evaluateObjectQuery,\n queryLinksFrom,\n stripOuterRowShape,\n} from \"./query\"\nimport {\n type InMemoryReadUniverse,\n prepareReadPlan,\n resolveSelectedReadUniverse,\n} from \"./read-scope\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\n/** Capture a selection once, then resolve its live data and enforce budgets per operation. */\nexport function createInMemorySelectedReader(\n source: InMemoryReadSource,\n params: {\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const projectId = source.projectId\n const plan = prepareReadPlan(params.scope)\n const limits = snapshotObjectReadExecutionLimits(params.limits)\n const assertProject = (actualProjectId: string) =>\n assertObjectReaderProject(projectId, actualProjectId)\n const visible = <T>(value: T): T => {\n assertObjectReadOutputWithinLimit(value, limits)\n return value\n }\n const visibleMap = <TKey, TValue>(value: Map<TKey, TValue>): Map<TKey, TValue> => {\n assertObjectReadOutputWithinLimit([...value.entries()], limits)\n return value\n }\n const selectsObjectProperties: ObjectReadStorage[\"selectsObjectProperties\"] = async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(\n input.items.map((item) => {\n const key = rowIdentityKeyParts(item.objectTypeId, item.primaryId)\n if (!universe.objects.has(key)) return false\n return universe.objectProperties.get(key)?.has(item.propertyId) ?? false\n })\n )\n }\n\n return Object.freeze({\n queryCapabilities,\n queryObjects: async (input: QueryObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const result = evaluateObjectQuery(input.query, universe)\n return visible({\n objects: result.entries.map((entry) => ({\n ...structuredClone(entry.row),\n ...(hasVectorProfile(input.query) ? { score: entry.score } : {}),\n })),\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n ...(input.includeTotal === false ? {} : { total: result.total }),\n })\n },\n countObjects: async (input: CountObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible({\n count: evaluateObjectQuery(stripOuterRowShape(input.query), universe).total,\n })\n },\n existsObjects: async (input: ExistsObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible({\n exists: evaluateObjectQuery(stripOuterRowShape(input.query), universe).total > 0,\n })\n },\n facetObjects: async (input: FacetObjectsInput) => {\n assertProject(input.projectId)\n assertObjectReadFacetCount(input.facets.length)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const result = evaluateObjectQuery(stripOuterRowShape(input.query), universe)\n return visible(\n structuredClone({\n facets: buildFacetResults(\n result.entries.map((entry) => entry.row),\n input.facets\n ),\n })\n )\n },\n getByPrimaryId: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const row = universe.objects.get(rowIdentityKeyParts(input.objectTypeId, input.primaryId))\n return visible(row ? structuredClone(row) : null)\n },\n selectsObjectProperties,\n listLinks: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(listUniverseLinks(universe, input).map((row) => structuredClone(row)))\n },\n getByPrimaryIdBatch: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const rows = new Map<ObjectBatchKey, ObjectRow>()\n for (const item of input.items) {\n const row = universe.objects.get(rowIdentityKeyParts(item.objectTypeId, item.primaryId))\n if (row) {\n rows.set(objectBatchKey(item.objectTypeId, item.primaryId), structuredClone(row))\n }\n }\n return visibleMap(rows)\n },\n listLinksBatch: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visibleMap(\n collectLinksBatch(\n {\n all: () => universe.links.values(),\n outgoing: (item) =>\n universe.linksBySource.get(\n sourceLinkBucketKey(projectId, item.objectTypeId, item.objectId)\n ) ?? [],\n },\n input,\n true\n )\n )\n },\n queryLinks: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(\n structuredClone(await queryLinksFrom(input, (item) => listUniverseLinks(universe, item)))\n )\n },\n list: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(listRows(input, [...universe.objects.values()]))\n },\n } satisfies ObjectReadStorage)\n}\n\nfunction listUniverseLinks(\n universe: InMemoryReadUniverse,\n params: {\n readonly projectId: string\n readonly objectTypeId: string\n readonly objectId: string\n readonly linkId?: string\n readonly direction?: LinkDirection\n }\n): ObjectLinkRow[] {\n const direction = params.direction ?? \"outgoing\"\n const matches = (row: ObjectLinkRow) => !params.linkId || row.linkId === params.linkId\n const rows: ObjectLinkRow[] = []\n\n if (direction === \"outgoing\" || direction === \"both\") {\n const outgoing = universe.linksBySource.get(\n sourceLinkBucketKey(params.projectId, params.objectTypeId, params.objectId)\n )\n if (outgoing) rows.push(...outgoing.filter(matches))\n }\n if (direction === \"incoming\" || direction === \"both\") {\n for (const row of universe.links.values()) {\n if (\n row.targetTypeId === params.objectTypeId &&\n row.targetId === params.objectId &&\n matches(row)\n ) {\n rows.push(row)\n }\n }\n }\n\n if (direction !== \"both\") return rows\n return [...new Map(rows.map((row) => [fullLinkRowKey(row), row])).values()]\n}\n\nfunction listRows(\n params: Parameters<ObjectReadStorage[\"list\"]>[0],\n candidates: readonly ObjectRow[]\n): { objects: readonly ObjectRow[]; hasMore: boolean; total: number } {\n const requestedTypes =\n params.objectTypeId === undefined\n ? undefined\n : new Set(\n typeof params.objectTypeId === \"string\" ? [params.objectTypeId] : params.objectTypeId\n )\n let rows = candidates.filter(\n (row) =>\n row.projectId === params.projectId &&\n (!requestedTypes || requestedTypes.has(row.objectTypeId))\n )\n\n rows = rows.filter(\n (row) =>\n (!params.primaryIdPrefix || row.primaryId.startsWith(params.primaryIdPrefix)) &&\n (!params.primaryIdSuffix || row.primaryId.endsWith(params.primaryIdSuffix)) &&\n (!params.updatedAfter || row.updatedAt >= params.updatedAfter) &&\n (!params.updatedBefore || row.updatedAt <= params.updatedBefore) &&\n (!params.createdAfter || row.createdAt >= params.createdAfter) &&\n (!params.createdBefore || row.createdAt <= params.createdBefore)\n )\n\n const total = rows.length\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n rows.sort((left, right) => {\n const comparison =\n orderBy === \"primaryId\"\n ? left.primaryId.localeCompare(right.primaryId)\n : orderBy === \"createdAt\"\n ? left.createdAt.getTime() - right.createdAt.getTime()\n : left.updatedAt.getTime() - right.updatedAt.getTime()\n return order === \"desc\" ? -comparison : comparison\n })\n\n const objects = rows.slice(offset, offset + limit).map((row) => structuredClone(row))\n return {\n objects,\n hasMore: offset + limit < total,\n total,\n }\n}\n",
|
|
24
23
|
"import type { EffectiveLinkSnapshot, EffectiveObjectSnapshot } from \"../../../materialization/model\"\nimport { hasVectorProfile } from \"../../../objects/vectors/query\"\nimport type { StoredObjectVector } from \"../../ontology/vectors\"\nimport type { ObjectReadExecutionLimits } from \"../execution-limits\"\nimport { type LinkBatchKey, type ObjectBatchKey, objectBatchKey } from \"../keys\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkDirection,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"../types\"\nimport {\n compareStrings,\n fullLinkRowKey,\n linkRowKey,\n objectRowKey,\n objectRowProjectPrefix,\n sourceLinkBucketKey,\n} from \"./keys\"\nimport {\n buildFacetResults,\n collectLinksBatch,\n evaluateObjectQuery,\n IN_MEMORY_OBJECT_QUERY_CAPABILITIES,\n queryLinksFrom,\n stripOuterRowShape,\n} from \"./query\"\nimport type { InMemoryReadSource } from \"./read-source\"\nimport { createInMemorySelectedReader } from \"./selected-reader\"\n\nexport interface InMemoryObjectStorageSnapshot {\n readonly rows: Map<string, Map<string, ObjectRow>>\n readonly links: Map<string, Map<string, ObjectLinkRow>>\n}\n\ntype VectorReader = (\n projectId: string,\n ref: { objectTypeId: string; primaryId: string },\n profile: string\n) => StoredObjectVector | undefined\n\ninterface InMemoryObjectMaterializerAdapter {\n setVectorReader(reader: VectorReader): void\n getExactObjectRow(projectId: string, objectTypeId: string, primaryId: string): ObjectRow | null\n getExactLinkRow(\n projectId: string,\n ref: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n }\n ): ObjectLinkRow | null\n applyExactObject(row: EffectiveObjectSnapshot, projectId: string): void\n deleteExactObject(projectId: string, objectTypeId: string, primaryId: string): void\n applyExactLink(row: EffectiveLinkSnapshot, projectId: string): void\n deleteExactLink(row: {\n projectId: string\n sourceTypeId: string\n sourceId: string\n linkId: string\n targetTypeId: string\n targetId: string\n }): void\n visitExactLinks(projectId: string, visit: (row: ObjectLinkRow) => void): void\n visitExactScopeLinks(\n projectId: string,\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n visit: (row: ObjectLinkRow) => void\n ): void\n}\n\nconst materializerAdapters = new WeakMap<InMemoryObjectStorage, InMemoryObjectMaterializerAdapter>()\n\n/** @internal Exact access for the in-memory ontology provider; not exported from package barrels. */\nexport function getInMemoryObjectMaterializerAdapter(\n storage: InMemoryObjectStorage\n): InMemoryObjectMaterializerAdapter {\n const adapter = materializerAdapters.get(storage)\n if (!adapter) throw new Error(\"[Sixb] In-memory object materializer adapter is unavailable.\")\n return adapter\n}\n\nexport class InMemoryObjectStorage implements ObjectStorage {\n private readonly rows = new Map<string, Map<string, ObjectRow>>()\n private readonly links = new Map<string, Map<string, ObjectLinkRow>>()\n\n private vectorReader?: VectorReader\n\n constructor() {\n materializerAdapters.set(this, {\n setVectorReader: (reader) => {\n this.vectorReader = reader\n },\n getExactObjectRow: (projectId, objectTypeId, primaryId) =>\n this.getExactObjectRow(projectId, objectTypeId, primaryId),\n getExactLinkRow: (projectId, ref) => this.getExactLinkRow(projectId, ref),\n applyExactObject: (row, projectId) => this.applyExactObject(row, projectId),\n deleteExactObject: (projectId, objectTypeId, primaryId) =>\n this.deleteExactObject(projectId, objectTypeId, primaryId),\n applyExactLink: (row, projectId) => this.applyExactLink(row, projectId),\n deleteExactLink: (row) => this.deleteExactLink(row),\n visitExactLinks: (projectId, visit) => {\n for (const bucket of this.links.values()) {\n for (const row of bucket.values()) {\n if (row.projectId === projectId) visit(structuredClone(row))\n }\n }\n },\n visitExactScopeLinks: (projectId, sourceTypeId, sourceId, linkId, visit) => {\n const bucket = this.links.get(sourceLinkBucketKey(projectId, sourceTypeId, sourceId))\n if (!bucket) return\n for (const row of bucket.values()) {\n if (row.linkId === linkId) visit(structuredClone(row))\n }\n },\n })\n }\n\n snapshot(): InMemoryObjectStorageSnapshot {\n return {\n rows: cloneObjectBuckets(this.rows),\n links: cloneLinkBuckets(this.links),\n }\n }\n\n restore(snapshot: InMemoryObjectStorageSnapshot): void {\n this.rows.clear()\n for (const [key, bucket] of cloneObjectBuckets(snapshot.rows)) {\n this.rows.set(key, bucket)\n }\n\n this.links.clear()\n for (const [key, bucket] of cloneLinkBuckets(snapshot.links)) {\n this.links.set(key, bucket)\n }\n }\n\n private getExactObjectRow(\n projectId: string,\n objectTypeId: string,\n primaryId: string\n ): ObjectRow | null {\n const row = this.rows.get(objectRowKey(projectId, objectTypeId))?.get(primaryId)\n return row ? structuredClone(row) : null\n }\n\n private getExactLinkRow(\n projectId: string,\n ref: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n }\n ): ObjectLinkRow | null {\n const row = this.links\n .get(sourceLinkBucketKey(projectId, ref.sourceTypeId, ref.sourceId))\n ?.get(linkRowKey(ref.linkId, ref.targetTypeId, ref.targetId))\n return row ? structuredClone(row) : null\n }\n\n private applyExactObject(row: EffectiveObjectSnapshot, projectId: string): void {\n const bucketId = objectRowKey(projectId, row.ref.objectTypeId)\n const bucket = this.rows.get(bucketId) ?? new Map<string, ObjectRow>()\n this.rows.set(bucketId, bucket)\n bucket.set(row.ref.primaryId, {\n projectId,\n objectTypeId: row.ref.objectTypeId,\n primaryId: row.ref.primaryId,\n properties: structuredClone(row.properties) as Record<string, unknown>,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n version: row.version,\n lastCommitId: row.lastCommitId,\n })\n }\n\n private deleteExactObject(projectId: string, objectTypeId: string, primaryId: string): void {\n this.deleteObjectRow(projectId, objectTypeId, primaryId)\n }\n\n private applyExactLink(row: EffectiveLinkSnapshot, projectId: string): void {\n const bucketKey = sourceLinkBucketKey(\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId\n )\n const bucket = this.links.get(bucketKey) ?? new Map<string, ObjectLinkRow>()\n this.links.set(bucketKey, bucket)\n bucket.set(linkRowKey(row.ref.linkId, row.ref.target.objectTypeId, row.ref.target.primaryId), {\n projectId,\n sourceTypeId: row.ref.source.objectTypeId,\n sourceId: row.ref.source.primaryId,\n linkId: row.ref.linkId,\n targetTypeId: row.ref.target.objectTypeId,\n targetId: row.ref.target.primaryId,\n properties: row.properties\n ? (structuredClone(row.properties) as Record<string, unknown>)\n : undefined,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n lastCommitId: row.lastCommitId,\n })\n }\n\n private deleteExactLink(row: {\n projectId: string\n sourceTypeId: string\n sourceId: string\n linkId: string\n targetTypeId: string\n targetId: string\n }): void {\n this.deleteLinkRow(\n row.projectId,\n row.sourceTypeId,\n row.sourceId,\n row.linkId,\n row.targetTypeId,\n row.targetId\n )\n }\n\n queryCapabilities(): ObjectQueryCapabilities {\n return IN_MEMORY_OBJECT_QUERY_CAPABILITIES\n }\n\n createSelectedReadScope(params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n }): ObjectReadStorage {\n return createInMemorySelectedReader(this.readSource(params.projectId), params, () =>\n this.queryCapabilities()\n )\n }\n\n private readSource(projectId: string): InMemoryReadSource {\n // Keep indexed access live across writes and snapshot restores; do not capture individual buckets.\n return {\n projectId,\n getVector: (ref, profile) => this.vectorReader?.(projectId, ref, profile),\n objectsOfType: (objectTypeId) => [\n ...(this.rows.get(objectRowKey(projectId, objectTypeId))?.values() ?? []),\n ],\n getObject: (objectTypeId, primaryId) =>\n this.rows.get(objectRowKey(projectId, objectTypeId))?.get(primaryId),\n outgoingLinks: (objectTypeId, primaryId) =>\n this.links.get(sourceLinkBucketKey(projectId, objectTypeId, primaryId))?.values() ?? [],\n allLinks: () => allLinkRows(this.links),\n }\n }\n\n async queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult> {\n const result = evaluateObjectQuery(params.query, this.readSource(params.projectId))\n return {\n objects: result.entries.map((entry) => ({\n ...entry.row,\n ...(hasVectorProfile(params.query) ? { score: entry.score } : {}),\n })),\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n ...(params.includeTotal === false ? {} : { total: result.total }),\n }\n }\n\n async countObjects(params: CountObjectsInput): Promise<CountObjectsResult> {\n return {\n count: evaluateObjectQuery(\n stripOuterRowShape(params.query),\n this.readSource(params.projectId)\n ).total,\n }\n }\n\n async existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult> {\n return {\n exists:\n evaluateObjectQuery(stripOuterRowShape(params.query), this.readSource(params.projectId))\n .total > 0,\n }\n }\n\n async facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult> {\n const result = evaluateObjectQuery(\n stripOuterRowShape(params.query),\n this.readSource(params.projectId)\n )\n return {\n facets: buildFacetResults(\n result.entries.map((entry) => entry.row),\n params.facets\n ),\n }\n }\n\n /**\n * Reads return the *live* stored row by reference (the SQL providers detach a copy via JSON\n * round-trip). Callers must treat read results as immutable: mutating a returned row mutates the\n * store in place — including after the transaction that read it has completed, which escapes the\n * transaction guard. Internal call sites (e.g. the EditBatch planner) already copy before\n * mutating; external callers must do the same.\n */\n async getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): Promise<ObjectRow | null> {\n const bucket = this.rows.get(objectRowKey(params.projectId, params.objectTypeId))\n if (!bucket) return null\n return bucket.get(params.primaryId) ?? null\n }\n\n async selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): Promise<readonly boolean[]> {\n return params.items.map(\n (item) =>\n this.rows.get(objectRowKey(params.projectId, item.objectTypeId))?.has(item.primaryId) ??\n false\n )\n }\n\n async listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): Promise<readonly ObjectLinkRow[]> {\n const direction = params.direction ?? \"outgoing\"\n const matches = (row: ObjectLinkRow) => !params.linkId || row.linkId === params.linkId\n const rows: ObjectLinkRow[] = []\n\n if (direction === \"outgoing\" || direction === \"both\") {\n const bucket = this.links.get(\n sourceLinkBucketKey(params.projectId, params.objectTypeId, params.objectId)\n )\n if (bucket) rows.push(...[...bucket.values()].filter(matches))\n }\n\n if (direction === \"incoming\" || direction === \"both\") {\n for (const bucket of this.links.values()) {\n for (const row of bucket.values()) {\n if (\n row.projectId === params.projectId &&\n row.targetTypeId === params.objectTypeId &&\n row.targetId === params.objectId &&\n matches(row)\n ) {\n rows.push(row)\n }\n }\n }\n }\n\n if (direction !== \"both\") return rows\n return [...new Map(rows.map((row) => [fullLinkRowKey(row), row])).values()]\n }\n\n async getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Promise<Map<ObjectBatchKey, ObjectRow>> {\n const result = new Map<ObjectBatchKey, ObjectRow>()\n for (const item of params.items) {\n const row = await this.getByPrimaryId({\n projectId: params.projectId,\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n })\n if (row) {\n result.set(objectBatchKey(item.objectTypeId, item.primaryId), row)\n }\n }\n return result\n }\n\n async listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>> {\n return collectLinksBatch(\n {\n all: () => allLinkRows(this.links),\n outgoing: (item) =>\n this.links\n .get(sourceLinkBucketKey(params.projectId, item.objectTypeId, item.objectId))\n ?.values() ?? [],\n },\n params,\n false\n )\n }\n\n async queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult> {\n return queryLinksFrom(params, (input) => this.listLinks(input))\n }\n\n async listIncidentLinksBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; objectId: string }[]\n }): Promise<readonly ObjectLinkRow[]> {\n const deduped = new Map<string, ObjectLinkRow>()\n for (const item of params.items) {\n const rows = await this.listLinks({\n projectId: params.projectId,\n objectTypeId: item.objectTypeId,\n objectId: item.objectId,\n direction: \"both\",\n })\n for (const row of rows) {\n deduped.set(fullLinkRowKey(row), row)\n }\n }\n return [...deduped.values()]\n }\n\n async listByPrimaryIdPage(params: {\n projectId: string\n objectTypeId: string\n afterPrimaryId?: string\n limit: number\n }): Promise<{ objects: readonly ObjectRow[]; nextPrimaryId?: string }> {\n assertReconciliationPageLimit(params.limit)\n const bucket = this.rows.get(objectRowKey(params.projectId, params.objectTypeId))\n const rows = [...(bucket?.values() ?? [])]\n .filter(\n (row) => !params.afterPrimaryId || compareStrings(row.primaryId, params.afterPrimaryId) > 0\n )\n .sort((left, right) => compareStrings(left.primaryId, right.primaryId))\n .slice(0, params.limit + 1)\n const hasMore = rows.length > params.limit\n const objects = rows.slice(0, params.limit).map((row) => structuredClone(row))\n const last = objects.at(-1)\n return {\n objects,\n ...(hasMore && last ? { nextPrimaryId: last.primaryId } : {}),\n }\n }\n\n async list(params: {\n projectId: string\n objectTypeId?: string | readonly string[]\n primaryIdPrefix?: string\n primaryIdSuffix?: string\n updatedAfter?: Date\n updatedBefore?: Date\n createdAfter?: Date\n createdBefore?: Date\n limit?: number\n offset?: number\n orderBy?: \"createdAt\" | \"updatedAt\" | \"primaryId\"\n order?: \"asc\" | \"desc\"\n }): Promise<{ objects: readonly ObjectRow[]; hasMore: boolean; total: number }> {\n let allRows: ObjectRow[] = []\n\n if (params.objectTypeId) {\n const typeIds = Array.isArray(params.objectTypeId)\n ? params.objectTypeId\n : [params.objectTypeId]\n for (const typeId of typeIds) {\n const bucket = this.rows.get(objectRowKey(params.projectId, typeId))\n if (bucket) {\n allRows.push(...bucket.values())\n }\n }\n } else {\n for (const [key, bucket] of this.rows) {\n if (key.startsWith(objectRowProjectPrefix(params.projectId))) {\n allRows.push(...bucket.values())\n }\n }\n }\n\n const {\n primaryIdPrefix,\n primaryIdSuffix,\n updatedAfter,\n updatedBefore,\n createdAfter,\n createdBefore,\n } = params\n if (\n primaryIdPrefix ||\n primaryIdSuffix ||\n updatedAfter ||\n updatedBefore ||\n createdAfter ||\n createdBefore\n ) {\n allRows = allRows.filter(\n (row) =>\n (!primaryIdPrefix || row.primaryId.startsWith(primaryIdPrefix)) &&\n (!primaryIdSuffix || row.primaryId.endsWith(primaryIdSuffix)) &&\n (!updatedAfter || row.updatedAt >= updatedAfter) &&\n (!updatedBefore || row.updatedAt <= updatedBefore) &&\n (!createdAfter || row.createdAt >= createdAfter) &&\n (!createdBefore || row.createdAt <= createdBefore)\n )\n }\n\n const total = allRows.length\n\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n\n allRows.sort((a, b) => {\n let comparison = 0\n switch (orderBy) {\n case \"primaryId\":\n comparison = a.primaryId.localeCompare(b.primaryId)\n break\n case \"createdAt\":\n comparison = a.createdAt.getTime() - b.createdAt.getTime()\n break\n default:\n comparison = a.updatedAt.getTime() - b.updatedAt.getTime()\n break\n }\n return order === \"desc\" ? -comparison : comparison\n })\n\n const objects = allRows.slice(offset, offset + limit)\n const hasMore = offset + limit < total\n\n return { objects, hasMore, total }\n }\n\n private deleteObjectRow(projectId: string, objectTypeId: string, primaryId: string): void {\n const bucket = this.rows.get(objectRowKey(projectId, objectTypeId))\n bucket?.delete(primaryId)\n }\n\n private deleteLinkRow(\n projectId: string,\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n targetTypeId: string,\n targetId: string\n ): void {\n const bucket = this.links.get(sourceLinkBucketKey(projectId, sourceTypeId, sourceId))\n bucket?.delete(linkRowKey(linkId, targetTypeId, targetId))\n }\n}\n\nfunction assertReconciliationPageLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object reconciliation page limit must be a positive safe integer.\")\n }\n}\n\nfunction cloneObjectBuckets(\n rows: Map<string, Map<string, ObjectRow>>\n): Map<string, Map<string, ObjectRow>> {\n const clone = new Map<string, Map<string, ObjectRow>>()\n for (const [key, bucket] of rows) {\n clone.set(\n key,\n new Map([...bucket.entries()].map(([primaryId, row]) => [primaryId, structuredClone(row)]))\n )\n }\n return clone\n}\n\nfunction cloneLinkBuckets(\n links: Map<string, Map<string, ObjectLinkRow>>\n): Map<string, Map<string, ObjectLinkRow>> {\n const clone = new Map<string, Map<string, ObjectLinkRow>>()\n for (const [key, bucket] of links) {\n clone.set(\n key,\n new Map([...bucket.entries()].map(([linkId, row]) => [linkId, structuredClone(row)]))\n )\n }\n return clone\n}\n\nfunction* allLinkRows(\n buckets: ReadonlyMap<string, ReadonlyMap<string, ObjectLinkRow>>\n): Iterable<ObjectLinkRow> {\n for (const bucket of buckets.values()) yield* bucket.values()\n}\n",
|
|
@@ -29,7 +28,7 @@
|
|
|
29
28
|
"import { stableJsonStringify } from \"../../../json\"\nimport { MaterializationConflictError } from \"../../../materialization/errors\"\nimport type {\n MaterializationPlanChunk,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n} from \"../materializations\"\nimport { invalidCorrelation, materializationPlanItems } from \"../provider-work\"\nimport type { SessionState } from \"./materializations\"\n\nexport * from \"../provider-work\"\n\nexport function assertChunkSequence(session: SessionState, chunk: MaterializationPlanChunk): void {\n const planItems = materializationPlanItems(chunk)\n const applyStream = session.workStreams.apply\n const appliedStart = session.appliedPlanItems.length\n if (\n planItems.length > 0 &&\n (!applyStream.started || appliedStart + planItems.length > applyStream.emittedCount)\n ) {\n invalidCorrelation(\"Materialization plan items cannot be applied before they are streamed.\")\n }\n for (let offset = 0; offset < planItems.length; offset += 1) {\n const expected = session.applyWork[appliedStart + offset]?.item\n if (!expected || stableJsonStringify(planItems[offset]) !== stableJsonStringify(expected)) {\n invalidCorrelation(\"Materialization plan items must be applied in exact streamed order.\")\n }\n }\n\n const eventStream = session.workStreams.event\n const appliedOutboxCount = session.outboxEnvelopes.size\n if (\n chunk.outbox.length > 0 &&\n (!eventStream.started || appliedOutboxCount + chunk.outbox.length > eventStream.emittedCount)\n ) {\n invalidCorrelation(\"Materialization events cannot be applied before they are streamed.\")\n }\n for (let offset = 0; offset < chunk.outbox.length; offset += 1) {\n const expected = session.eventWork[appliedOutboxCount + offset]\n const actual = chunk.outbox[offset]?.envelope\n if (!expected || !actual) {\n invalidCorrelation(\"Materialization outbox events must follow exact streamed order.\")\n }\n const { id: _id, commitOrdinal, ...actualDraft } = actual\n if (\n commitOrdinal !== appliedOutboxCount + offset ||\n stableJsonStringify(actualDraft) !== stableJsonStringify(expected.draft)\n ) {\n invalidCorrelation(\"Materialization outbox events must follow exact streamed order.\")\n }\n }\n}\n\nexport function assertLastCommit(\n value: StoredObjectOverride | StoredLinkOverride | StoredLinkSlotOverride | undefined,\n expected: string | null,\n label: string\n): void {\n if ((value?.lastCommitId ?? null) !== expected) {\n throw new MaterializationConflictError(\"effective-state\", `Expected ${label} changed.`)\n }\n}\n",
|
|
30
29
|
"import { stableJsonStringify } from \"../../../json\"\nimport { assertPinnedDatasetWatermark } from \"../../../materialization/dataset-watermark\"\nimport { MaterializationConflictError } from \"../../../materialization/errors\"\nimport { createEventId } from \"../../../materialization/identity\"\nimport type {\n EffectiveChangeCounts,\n OntologyObjectRef,\n PinnedDatasetVersion,\n TelemetryCommitResult,\n} from \"../../../materialization/model\"\nimport { linkRefSortKey } from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { MaterializationCardinalityOccupantWorkRecord } from \"../materializations\"\nimport type { SessionState } from \"./materializations\"\nimport { findActiveSourceMaterialization, linkRef } from \"./materializations-state\"\nimport { compareEventWork, invalidCorrelation } from \"./materializations-work\"\nimport { type InMemoryOntologyState, outboxKey, sourceMaterializationKey } from \"./shared-state\"\n\nexport function assertFinalizationCorrelations(\n session: SessionState,\n finalization: import(\"../materializations\").MaterializationPlanFinalization,\n state: InMemoryOntologyState,\n objects: InMemoryObjectStorage\n): void {\n const { commit } = session.header\n const { result, sourceActivations } = finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== session.outboxEnvelopes.size\n ) {\n invalidCorrelation(\"Materialization result does not correlate with its commit intent.\")\n }\n for (let ordinal = 0; ordinal < result.eventCount; ordinal += 1) {\n if (!session.outboxEnvelopes.has(ordinal)) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n }\n\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidCorrelation(\"Edit materialization cannot activate a source materialization.\")\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidCorrelation(\"Projection result requires exactly one correlated source activation.\")\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n\n for (const activation of sourceActivations) {\n assertSourceActivationCorrelation(activation, session, state)\n }\n if (sourceActivations[0]) {\n assertReplacementFullyStreamed(session, sourceActivations[0])\n }\n assertFinalizedWork(session, state, objects)\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || !projectionCountsCorrelate(session, result.counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n } else if (\n commit.intent.kind === \"telemetry\" &&\n (result.kind !== \"telemetry\" ||\n !telemetryCountsCorrelate(session, commit.intent.pointCount, result))\n ) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n}\n\nfunction projectionCountsCorrelate(session: SessionState, actual: EffectiveChangeCounts): boolean {\n const expected = deriveExpectedProjectionCounts(session)\n if (expected === null) return false\n\n return effectiveChangeCountsMatch(actual, expected)\n}\n\ninterface ClassifiedProjectionCounts {\n objects: number\n links: number\n}\n\ninterface AppliedProjectionChangeCounts {\n objectsCreated: number\n objectsUpdated: number\n objectsDeleted: number\n linksCreated: number\n linksUpdated: number\n linksDeleted: number\n}\n\nconst effectiveChangeCountKeys = [\n \"objectsCreated\",\n \"objectsUpdated\",\n \"objectsDeleted\",\n \"objectsUnchanged\",\n \"linksCreated\",\n \"linksUpdated\",\n \"linksDeleted\",\n \"linksUnchanged\",\n] as const satisfies readonly (keyof EffectiveChangeCounts)[]\n\nfunction deriveExpectedProjectionCounts(session: SessionState): EffectiveChangeCounts | null {\n const classified = countClassifiedProjectionEntities(session)\n const applied = countAppliedProjectionChanges(session)\n const objectsUnchanged = remainingClassifiedCount(\n classified.objects,\n applied.objectsCreated,\n applied.objectsUpdated,\n applied.objectsDeleted\n )\n const linksUnchanged = remainingClassifiedCount(\n classified.links,\n applied.linksCreated,\n applied.linksUpdated,\n applied.linksDeleted\n )\n\n if (objectsUnchanged < 0 || linksUnchanged < 0) return null\n\n return { ...applied, objectsUnchanged, linksUnchanged }\n}\n\nfunction countClassifiedProjectionEntities(session: SessionState): ClassifiedProjectionCounts {\n const counts = { objects: 0, links: 0 }\n\n for (const record of session.work.values()) {\n if (record.kind !== \"classification\") continue\n\n if (record.entityKind === \"object\") counts.objects += 1\n if (record.entityKind === \"link\") counts.links += 1\n }\n\n return counts\n}\n\nfunction countAppliedProjectionChanges(session: SessionState): AppliedProjectionChangeCounts {\n const counts: AppliedProjectionChangeCounts = {\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n }\n\n for (const work of session.applyWork) {\n const { item } = work\n\n switch (item.kind) {\n case \"object-upsert\":\n if (item.value.expected.exists) counts.objectsUpdated += 1\n else counts.objectsCreated += 1\n break\n case \"object-delete\":\n counts.objectsDeleted += 1\n break\n case \"link-upsert\":\n if (item.value.expected.exists) counts.linksUpdated += 1\n else counts.linksCreated += 1\n break\n case \"link-delete\":\n counts.linksDeleted += 1\n break\n }\n }\n\n return counts\n}\n\nfunction remainingClassifiedCount(\n classified: number,\n created: number,\n updated: number,\n deleted: number\n): number {\n return classified - created - updated - deleted\n}\n\nfunction effectiveChangeCountsMatch(\n actual: EffectiveChangeCounts,\n expected: EffectiveChangeCounts\n): boolean {\n return effectiveChangeCountKeys.every((key) => {\n const count = actual[key]\n return Number.isSafeInteger(count) && count >= 0 && count === expected[key]\n })\n}\n\nfunction telemetryCountsCorrelate(\n session: SessionState,\n pointCount: number,\n actual: TelemetryCommitResult\n): boolean {\n let pointsCreated = 0\n let pointsUpdated = 0\n let latestObjectsChanged = 0\n for (const work of session.applyWork) {\n if (work.item.kind === \"point-upsert\") {\n if (work.item.value.expected.lastCommitId === null) pointsCreated += 1\n else pointsUpdated += 1\n } else if (work.item.kind === \"object-upsert\") {\n latestObjectsChanged += 1\n }\n }\n const expected = {\n pointsCreated,\n pointsUpdated,\n pointsUnchanged: pointCount - pointsCreated - pointsUpdated,\n latestObjectsChanged,\n }\n return (\n expected.pointsUnchanged >= 0 &&\n (Object.keys(expected) as (keyof typeof expected)[]).every(\n (key) =>\n Number.isSafeInteger(actual[key]) && actual[key] >= 0 && actual[key] === expected[key]\n )\n )\n}\n\nfunction assertSourceActivationCorrelation(\n activation: import(\"../materializations\").SourceActivationWrite,\n session: SessionState,\n state: InMemoryOntologyState\n): void {\n const { header } = session\n const { commit } = header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidCorrelation(\"Source activation does not correlate with its projection commit.\")\n }\n const candidate = state.sourceMaterializations.get(\n sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n if (\n candidate.projectionRunId !== activation.execution.projectionRunId ||\n candidate.executionToken !== activation.execution.executionToken ||\n candidate.projectionKind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n stableJsonStringify(candidate.datasetVersion) !==\n stableJsonStringify(activation.datasetVersion) ||\n candidate.projectionRevision !== activation.projectionRevision ||\n candidate.ownershipHash !== activation.ownershipHash ||\n candidate.ontologyRevision !== activation.ontologyRevision\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n if (candidate.readyAt === null) {\n invalidCorrelation(\"Source activation candidate has no ready timestamp.\")\n }\n assertTimestampNotBefore(\n activation.updatedAt,\n candidate.readyAt,\n \"Source activation cannot precede candidate readiness.\"\n )\n const previous = findActiveSourceMaterialization(\n state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n assertSourceDatasetWatermark(previous.datasetVersion, activation.datasetVersion)\n assertTimestampNotBefore(\n activation.updatedAt,\n previous.updatedAt,\n \"Source activation cannot precede the active materialization update.\"\n )\n }\n}\n\nfunction assertSourceDatasetWatermark(\n active: PinnedDatasetVersion,\n next: PinnedDatasetVersion\n): void {\n assertPinnedDatasetWatermark(active, next, \"Source activation\")\n}\n\nfunction assertFinalizedWork(\n session: SessionState,\n state: InMemoryOntologyState,\n objects: InMemoryObjectStorage\n): void {\n const expectedPlanItems = session.applyWork.map((record) => stableJsonStringify(record.item))\n const appliedPlanItems = session.appliedPlanItems\n if (expectedPlanItems.length > 0 && !session.workStreams.apply.completed) {\n invalidCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (stableJsonStringify(appliedPlanItems) !== stableJsonStringify(expectedPlanItems)) {\n invalidCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (session.cardinalityWork.length > 0 && !session.workStreams.cardinality.completed) {\n invalidCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n assertFinalCardinality(session.cardinalityWork, session.header.commit.projectId, objects)\n if (session.header.commit.intent.kind === \"telemetry\") {\n const pointKeys = classificationKeys(session, \"point\")\n if (pointKeys.length !== session.header.commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n }\n\n const expectedEvents = [...session.eventWork].sort(compareEventWork)\n if (expectedEvents.length > 0 && !session.workStreams.event.completed) {\n invalidCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (session.outboxEnvelopes.size !== expectedEvents.length) {\n invalidCorrelation(\"Materialization event work was not fully written to the outbox.\")\n }\n for (let ordinal = 0; ordinal < expectedEvents.length; ordinal += 1) {\n const expected = expectedEvents[ordinal]\n const actual = session.outboxEnvelopes.get(ordinal)\n if (!expected || !actual) {\n invalidCorrelation(\"Materialization event work was not fully written to the outbox.\")\n }\n const { id, commitOrdinal, ...actualDraft } = actual\n if (\n commitOrdinal !== ordinal ||\n id !== createEventId(session.header.commit.projectId, session.header.commit.id, ordinal) ||\n stableJsonStringify(actualDraft) !== stableJsonStringify(expected.draft)\n ) {\n invalidCorrelation(\"Materialization outbox event does not match its staged event work.\")\n }\n const persisted = state.outbox.get(outboxKey(session.header.commit.projectId, actual.id))\n if (!persisted || stableJsonStringify(persisted.envelope) !== stableJsonStringify(actual)) {\n invalidCorrelation(\"Materialization outbox event was not persisted.\")\n }\n }\n}\n\nfunction assertFinalCardinality(\n records: readonly MaterializationCardinalityOccupantWorkRecord[],\n projectId: string,\n objects: InMemoryObjectStorage\n): void {\n const effectiveOccupants = records.filter((record) => record.view === \"effective\")\n const scopes = new Map<\n string,\n {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly occupiedLinkKeys: Set<string>\n }\n >()\n let currentScope: string | null = null\n let occupiedCount = 0\n for (const record of effectiveOccupants) {\n if (record.scopeSortKey !== currentScope) {\n currentScope = record.scopeSortKey\n occupiedCount = 0\n }\n const scope = scopes.get(record.scopeSortKey) ?? {\n source: structuredClone(record.ref.source),\n linkId: record.ref.linkId,\n occupiedLinkKeys: new Set<string>(),\n }\n scopes.set(record.scopeSortKey, scope)\n if (record.occupied) {\n occupiedCount += 1\n scope.occupiedLinkKeys.add(record.linkSortKey)\n if (occupiedCount > 1) {\n invalidCorrelation(\"Materialization cardinality work violates cardinality-one.\")\n }\n }\n }\n\n const adapter = getInMemoryObjectMaterializerAdapter(objects)\n for (const scope of scopes.values()) {\n const effectiveLinkKeys: string[] = []\n adapter.visitExactScopeLinks(\n projectId,\n scope.source.objectTypeId,\n scope.source.primaryId,\n scope.linkId,\n (row) => effectiveLinkKeys.push(linkRefSortKey(linkRef(row)))\n )\n effectiveLinkKeys.sort()\n const occupiedLinkKeys = [...scope.occupiedLinkKeys].sort()\n if (stableJsonStringify(effectiveLinkKeys) !== stableJsonStringify(occupiedLinkKeys)) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n}\n\nfunction assertReplacementFullyStreamed(\n session: SessionState,\n activation: import(\"../materializations\").SourceActivationWrite\n): void {\n const replacement = session.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.candidate.materializationId !== activation.materializationId ||\n replacement.candidate.projectionKind !== activation.projectionKind ||\n replacement.candidate.protocol !== activation.protocol\n ) {\n invalidCorrelation(\n \"Source activation does not match the replacement candidate opened by the session.\"\n )\n }\n if (\n activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)\n ) {\n invalidCorrelation(\"Object projection replacement state was not fully streamed.\")\n }\n if (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted) {\n invalidCorrelation(\"Link projection replacement state was not fully streamed.\")\n }\n const expectedObjectKeys =\n activation.projectionKind === \"object\" ? [...replacement.objects.keys()].sort() : []\n const expectedLinkKeys = [...replacement.links.entries()]\n .filter(([, value]) => value.diffRequired)\n .map(([key]) => key)\n .sort()\n if (\n stableJsonStringify(classificationKeys(session, \"object\")) !==\n stableJsonStringify(expectedObjectKeys) ||\n stableJsonStringify(classificationKeys(session, \"link\")) !==\n stableJsonStringify(expectedLinkKeys) ||\n classificationKeys(session, \"point\").length > 0\n ) {\n invalidCorrelation(\n \"Projection replacement classification coverage does not match its streamed state.\"\n )\n }\n}\n\nfunction classificationKeys(\n session: SessionState,\n entityKind: import(\"../materializations\").MaterializationWorkEntityKind\n): string[] {\n return [...session.work.values()]\n .filter(\n (record): record is import(\"../materializations\").MaterializationClassificationWorkRecord =>\n record.kind === \"classification\" && record.entityKind === entityKind\n )\n .map((record) => record.identityKey)\n .sort()\n}\n\nfunction assertTimestampNotBefore(value: string, minimum: string, message: string): void {\n if (Date.parse(value) < Date.parse(minimum)) invalidCorrelation(message)\n}\n",
|
|
31
30
|
"import { MaterializationConflictError } from \"../../../materialization/errors\"\nimport { linkScopeSortKey, projectionEntityKey } from \"../../../materialization/refs\"\nimport type { SourceActivationWrite } from \"../materializations\"\nimport type { StoredSourceAssertion, StoredSourceLinkAssertion } from \"../sources\"\nimport { storedSource } from \"./materializations-state\"\nimport {\n type InMemoryOntologyState,\n type InMemorySourceMaterialization,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\n\nexport function* previousSourceRows(\n state: InMemoryOntologyState,\n candidate: InMemorySourceMaterialization\n): Iterable<StoredSourceAssertion> {\n const sourceKey = projectEntityKey(candidate.projectId, candidate.source.projectionId)\n const active = state.activeSourceRoots.get(sourceKey)\n if (!active) return\n for (const rootKey of candidate.base ? candidate.roots.keys() : active.keys()) {\n const materializationId = active.get(rootKey)\n if (!materializationId) continue\n const materialization = state.sourceMaterializations.get(\n sourceMaterializationKey(\n candidate.projectId,\n candidate.source.projectionId,\n materializationId\n )\n )!\n for (const entityKey of materialization.roots.get(rootKey)!.entityKeys) {\n yield storedSource(\n candidate.source.projectionId,\n materializationId,\n materialization.rowsByEntity.get(entityKey)!\n )\n }\n }\n}\n\nexport function activateSourceRoots(\n state: InMemoryOntologyState,\n candidate: InMemorySourceMaterialization,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base &&\n (candidate.base.materializationId !== activation.expected.activeMaterializationId ||\n candidate.base.lastCommitId !== activation.expected.lastCommitId)\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n }\n const sourceKey = projectEntityKey(candidate.projectId, candidate.source.projectionId)\n const active = state.activeSourceRoots.get(sourceKey) ?? new Map<string, string>()\n for (const key of candidate.base ? candidate.roots.keys() : [...active.keys()]) {\n const materializationId = active.get(key)\n if (!materializationId) continue\n const old = state.sourceMaterializations.get(\n sourceMaterializationKey(\n candidate.projectId,\n candidate.source.projectionId,\n materializationId\n )\n )!\n const root = old.roots.get(key)!\n root.active = false\n root.retiredAt = activation.updatedAt\n active.delete(key)\n for (const entityKey of root.entityKeys) {\n const row = old.rowsByEntity.get(entityKey)!\n const indexKey = projectEntityKey(candidate.projectId, entityKey)\n const sources = state.activeSourceRows.get(indexKey)!\n sources.delete(candidate.source.projectionId)\n if (sources.size === 0) state.activeSourceRows.delete(indexKey)\n if (row.assertion.kind === \"link\") {\n const scopeKey = projectEntityKey(\n candidate.projectId,\n linkScopeSortKey(row.assertion.ref.source, row.assertion.ref.linkId)\n )\n const scope = state.activeSourceLinkScopes.get(scopeKey)!\n scope.delete(JSON.stringify([candidate.source.projectionId, entityKey]))\n if (scope.size === 0) state.activeSourceLinkScopes.delete(scopeKey)\n }\n }\n }\n for (const [rootKey, root] of candidate.roots) {\n root.active = !root.deleted\n root.retiredAt = root.deleted ? activation.updatedAt : null\n if (root.deleted) continue\n active.set(rootKey, candidate.materializationId)\n for (const entityKey of root.entityKeys) {\n // These are internal immutable assertions. Share their payload between indexes;\n // read methods clone returned values and transaction snapshots preserve aliases.\n const row = {\n source: candidate.source,\n materializationId: candidate.materializationId,\n ...candidate.rowsByEntity.get(entityKey)!,\n } as StoredSourceAssertion\n const indexKey = projectEntityKey(candidate.projectId, projectionEntityKey(row.assertion))\n const sources =\n state.activeSourceRows.get(indexKey) ?? new Map<string, StoredSourceAssertion>()\n sources.set(candidate.source.projectionId, row)\n state.activeSourceRows.set(indexKey, sources)\n if (row.assertion.kind === \"link\") {\n const scopeKey = projectEntityKey(\n candidate.projectId,\n linkScopeSortKey(row.assertion.ref.source, row.assertion.ref.linkId)\n )\n const scope =\n state.activeSourceLinkScopes.get(scopeKey) ?? new Map<string, StoredSourceLinkAssertion>()\n scope.set(\n JSON.stringify([candidate.source.projectionId, entityKey]),\n row as StoredSourceLinkAssertion\n )\n state.activeSourceLinkScopes.set(scopeKey, scope)\n }\n }\n }\n state.activeSourceRoots.set(sourceKey, active)\n state.activeSourceHeads.set(sourceKey, candidate.materializationId)\n}\n",
|
|
32
|
-
"import { stableJsonStringify } from \"../../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ExpectedLinkRevision,\n ExpectedObjectRevision,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeKey,\n linkScopeSortKey,\n objectRefKey,\n objectRefSortKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { ObjectLinkRow } from \"../../objects/types\"\nimport {\n getInMemoryTimeseriesMaterializerAdapter,\n type InMemoryTimeseriesStorage,\n} from \"../../timeseries/store\"\nimport type { OntologyCommitRecord } from \"../commits\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n ExpectedSourceRevision,\n ExpectedTimeseriesPointRevision,\n FinalizeMaterializationInput,\n MaterializationCardinalityOccupantWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectExistence,\n MaterializationObjectExistenceWorkRecord,\n MaterializationObjectState,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StoredTelemetryPoint,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"../materializations\"\nimport type { OntologyMaterializationEvent } from \"../outbox\"\nimport {\n appendScopeSnapshot,\n assertMaterializationHeader,\n finishScopeAccumulator,\n type ProviderMaterializationTransactionLifecycle,\n startScopeAccumulator,\n uniqueSorted,\n} from \"../provider\"\nimport type {\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport { assertFinalizationCorrelations } from \"./materializations-finalization\"\nimport {\n addReplacementLink,\n findActiveSourceMaterialization,\n linkRef,\n linkSnapshot,\n objectSnapshot,\n publicLinkOverride,\n publicLinkSlotOverride,\n publicObjectOverride,\n storedPoint,\n storedSourceLink,\n storedSourceObject,\n uniqueBy,\n} from \"./materializations-state\"\nimport {\n assertChunkSequence,\n assertLastCommit,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./materializations-work\"\nimport {\n assertTimestamp,\n commitKey,\n commitOriginKey,\n type InMemoryOntologyState,\n type InMemoryOntologyStorageTestHooks,\n type InMemorySourceMaterialization,\n idempotencyKey,\n ontologyCommitOriginSelector,\n outboxKey,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\nimport { activateSourceRoots, previousSourceRows } from \"./source-roots\"\n\nexport interface SessionState {\n readonly providerToken: object\n readonly header: MaterializationPlanHeader\n readonly transactionToken: object\n readonly lifecycle: ProviderMaterializationTransactionLifecycle\n active: boolean\n writeOrdinal: number\n readonly work: Map<string, MaterializationWorkRecord>\n readonly workUniqueKeys: Set<string>\n readonly applyWork: MaterializationPlanWorkRecord[]\n readonly cardinalityWork: MaterializationCardinalityOccupantWorkRecord[]\n readonly eventWork: MaterializationEventWorkRecord[]\n readonly appliedPlanItems: string[]\n readonly outboxEnvelopes: Map<number, OntologyMaterializationEvent>\n readonly workStreams: Record<StreamMaterializationWorkInput[\"order\"], WorkStreamState>\n workSealed: boolean\n incidentLinksByObject: Map<string, readonly OntologyLinkRef[]> | null\n linkSlotStates: Map<string, MaterializationLinkScopeState> | null\n readonly objectExistence: Map<string, MaterializationObjectExistenceWorkRecord>\n replacement: ReplacementSessionState | null\n}\n\nexport interface WorkStreamState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport interface ReplacementObjectWork {\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n}\n\nexport interface ReplacementLinkWork {\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n diffRequired: boolean\n}\n\nexport interface ReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly owned: Set<string>\n readonly candidate: InMemorySourceMaterialization\n readonly objects: Map<string, ReplacementObjectWork>\n readonly links: Map<string, ReplacementLinkWork>\n orderedObjects: ReplacementObjectWork[]\n orderedLinks: ReplacementLinkWork[] | null\n readonly affectedScopes: Set<string>\n readonly incidentObjects: Map<string, OntologyObjectRef>\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n linksExpanded: boolean\n}\n\nexport class InMemoryOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions = new WeakMap<object, SessionState>()\n private readonly liveSessions = new Set<SessionState>()\n\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly objects: InMemoryObjectStorage,\n private readonly timeseries: InMemoryTimeseriesStorage,\n private readonly getTransactionToken: () => object | null,\n private readonly getMaterializationLifecycle: () => ProviderMaterializationTransactionLifecycle | null,\n private readonly executionExists: (projectId: string, executionId: string) => Promise<boolean>,\n private readonly hooks: InMemoryOntologyStorageTestHooks = {}\n ) {}\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n const transactionToken = this.getTransactionToken()\n const lifecycle = this.getMaterializationLifecycle()\n if (!transactionToken || !lifecycle) {\n throw new MaterializationValidationError(\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n assertMaterializationHeader(input)\n if (!(await this.executionExists(input.commit.projectId, input.commit.executionId))) {\n throw new MaterializationValidationError(\n `Ontology commit execution '${input.commit.executionId}' does not exist in project '${input.commit.projectId}'.`\n )\n }\n this.assertCommitAbsent(input)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects)\n await this.assertObject(expected, input.commit.projectId)\n for (const expected of input.expected.links)\n await this.assertLink(expected, input.commit.projectId)\n const expectedScopeRevisions = new Map<string, MaterializationLinkScopeRevision>()\n for (const expected of input.expected.linkScopes) {\n const key = linkScopeSortKey(expected.source, expected.linkId)\n const current =\n expectedScopeRevisions.get(key) ??\n this.computeEffectiveLinkScope(input.commit.projectId, expected.source, expected.linkId)\n expectedScopeRevisions.set(key, current)\n if (current.fingerprint !== expected.fingerprint) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`\n )\n }\n }\n for (const expected of input.expected.points) this.assertPoint(expected, input.commit.projectId)\n\n const providerToken = {}\n const session = {\n providerToken,\n header: structuredClone(input),\n transactionToken,\n lifecycle,\n active: true,\n writeOrdinal: 0,\n work: new Map<string, MaterializationWorkRecord>(),\n workUniqueKeys: new Set<string>(),\n applyWork: [],\n cardinalityWork: [],\n eventWork: [],\n appliedPlanItems: [],\n outboxEnvelopes: new Map<number, OntologyMaterializationEvent>(),\n workStreams: {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n },\n workSealed: false,\n incidentLinksByObject: null,\n linkSlotStates: new Map(),\n objectExistence: new Map<string, MaterializationObjectExistenceWorkRecord>(),\n replacement: null,\n }\n this.sessions.set(providerToken, session)\n this.liveSessions.add(session)\n lifecycle.register(providerToken)\n return { providerToken }\n }\n\n deactivateTransaction(transactionToken: object): void {\n for (const session of this.liveSessions) {\n if (session.transactionToken !== transactionToken) continue\n this.releaseSession(session)\n }\n }\n\n /** Deactivate a session, drop its transaction-local work, and stop tracking it as live. */\n private releaseSession(session: SessionState): void {\n session.active = false\n session.work.clear()\n session.workUniqueKeys.clear()\n session.applyWork.length = 0\n session.cardinalityWork.length = 0\n session.eventWork.length = 0\n session.appliedPlanItems.length = 0\n session.outboxEnvelopes.clear()\n session.incidentLinksByObject = null\n session.linkSlotStates = null\n session.objectExistence.clear()\n session.replacement = null\n this.liveSessions.delete(session)\n session.lifecycle.complete(session.providerToken)\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n for await (const request of input.requests) {\n this.requireSession(input.session)\n this.hooks.beforeRead?.(\"state.read\")\n const objectRefs = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objectRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const objects: MaterializationObjectState[] = []\n for (const ref of objectRefs.slice(offset, offset + input.pageRows)) {\n objects.push(await this.objectState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.object.page\", objects.length)\n yield { objects, links: [], linkScopes: [], points: [] }\n }\n\n const linkRefs = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < linkRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const links: MaterializationLinkState[] = []\n for (const ref of linkRefs.slice(offset, offset + input.pageRows)) {\n links.push(await this.linkState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n const incidentRefs = this.incidentLinkRefs(session, request.incidentObjects)\n for (let offset = 0; offset < incidentRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const refs = incidentRefs.slice(offset, offset + input.pageRows)\n const links: MaterializationLinkState[] = []\n for (const ref of refs) links.push(await this.linkState(session, ref))\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.incident-link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n for (const scope of uniqueBy(request.linkScopes, (value) =>\n linkScopeSortKey(value.source, value.linkId)\n )) {\n this.requireSession(input.session)\n const value = this.linkSlotState(session, scope.source, scope.linkId)\n // Scope rows are currently only requested for cardinality-one links, so the complete member\n // set is bounded by the ontology invariant. Replacement scope enumeration is flattened in\n // its dedicated stream and never uses this shape.\n yield { objects: [], links: [], linkScopes: [value], points: [] }\n }\n\n const requestedPoints = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < requestedPoints.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const points: StoredTelemetryPoint[] = []\n for (const point of requestedPoints.slice(offset, offset + input.pageRows)) {\n const stored = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n session.header.commit.projectId,\n point.series,\n point.at\n )\n if (stored) points.push(storedPoint(stored))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.point.page\", points.length)\n if (points.length > 0) yield { objects: [], links: [], linkScopes: [], points }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n if (input.entityKind === \"object\") {\n if (replacement.candidate.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n replacement.objectStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.object\")\n for (let offset = 0; offset < replacement.orderedObjects.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedObjects.slice(offset, offset + input.pageRows)\n const objects: SourceReplacementObjectState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"object\", ref: entry.ref })\n const base = await this.objectState(session, entry.ref)\n objects.push({\n ref: base.ref,\n candidateSource: storedSourceObject(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n ),\n override: base.override,\n effective: base.effective,\n latestTelemetry: base.latestTelemetry,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.object.page\", objects.length)\n yield { objects, links: [] }\n }\n this.requireSession(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.candidate.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n replacement.linkStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.link\")\n this.expandReplacementLinks(session, replacement)\n replacement.orderedLinks ??= [...replacement.links.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n for (let offset = 0; offset < replacement.orderedLinks.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedLinks.slice(offset, offset + input.pageRows)\n const links: SourceReplacementLinkState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"link\", ref: entry.ref })\n const base = await this.linkState(session, entry.ref)\n const ownedByReplacement = replacement.owned.has(key)\n links.push({\n ref: base.ref,\n candidateSource: ownedByReplacement\n ? storedSourceLink(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n )\n : base.source,\n override: base.override,\n slotOverride: base.slotOverride,\n effective: base.effective,\n diffRequired: entry.diffRequired,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.link.page\", links.length)\n yield { objects: [], links }\n }\n this.requireSession(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n const session = this.requireSession(input.session)\n if (session.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const batchKeys = new Set<string>()\n const batchUniqueKeys = new Set<string>()\n for (const record of input.records) {\n assertWorkRecord(record, session.header)\n const uniqueKey = workUniquenessKey(record)\n if (\n batchKeys.has(record.recordKey) ||\n session.work.has(record.recordKey) ||\n batchUniqueKeys.has(uniqueKey) ||\n session.workUniqueKeys.has(uniqueKey)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate materialization work key '${record.recordKey}'.`\n )\n }\n if (\n record.kind === \"incident-object\" &&\n (!session.replacement || session.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n batchKeys.add(record.recordKey)\n batchUniqueKeys.add(uniqueKey)\n }\n const cloned = input.records.map((record) => structuredClone(record))\n this.hooks.observeWork?.(cloned)\n for (const record of cloned) {\n session.work.set(record.recordKey, record)\n session.workUniqueKeys.add(workUniquenessKey(record))\n if (record.kind === \"plan\") session.applyWork.push(record)\n if (record.kind === \"cardinality\") session.cardinalityWork.push(record)\n if (record.kind === \"event\") session.eventWork.push(record)\n if (record.kind === \"object-existence\") {\n session.objectExistence.set(objectRefKey(record.ref), record)\n }\n if (record.kind === \"incident-object\") {\n const replacement = session.replacement\n if (replacement) {\n replacement.incidentObjects.set(objectRefKey(record.ref), record.ref)\n replacement.linksExpanded = false\n replacement.orderedLinks = null\n }\n }\n }\n this.hooks.observeBuffer?.(\"work.stage\", cloned.length)\n }\n\n async *streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n if (!session.workSealed) {\n session.applyWork.sort(comparePlanWork)\n session.cardinalityWork.sort(compareCardinalityWork)\n session.eventWork.sort(compareEventWork)\n session.workSealed = true\n }\n const records =\n input.order === \"apply\"\n ? session.applyWork\n : input.order === \"cardinality\"\n ? session.cardinalityWork\n : session.eventWork\n for (let offset = 0; offset < records.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = records.slice(offset, offset + input.pageRows)\n this.hooks.observeBuffer?.(`work.${input.order}.page`, selected.length)\n stream.emittedCount = offset + selected.length\n yield { records: structuredClone(selected) }\n }\n this.requireSession(input.session)\n stream.completed = true\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.requireSession(input.session)\n const result: MaterializationObjectExistence[] = []\n for (const ref of input.refs) {\n const record = session.objectExistence.get(objectRefKey(ref))\n if (record) {\n result.push({ ref: structuredClone(record.ref), exists: record.exists })\n }\n }\n return result\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.requireSession(input.session)\n const projectId = session.header.commit.projectId\n assertPlanChunkCorrelations(input.chunk, session.header.commit)\n assertChunkSequence(session, input.chunk)\n this.hooks.observeBuffer?.(\"apply.chunk\", materializationChunkRows(input.chunk))\n const write = (boundary: string, apply: () => void): void => {\n this.hooks.beforeWrite?.(boundary, session.writeOrdinal++)\n apply()\n }\n\n for (const item of input.chunk.overrides.objects.upserts)\n write(\"override.object.upsert\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n editedAt: { ...item.editedAt },\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.objects.deletes)\n write(\"override.object.delete\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.edges.upserts)\n write(\"override.link.upsert\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.edges.deletes)\n write(\"override.link.delete\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.slots.upserts)\n write(\"override.link-slot.upsert\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.slots.deletes)\n write(\"override.link-slot.delete\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.delete(key)\n })\n\n for (const item of input.chunk.effective.linkDeletes)\n write(\"effective.link.delete\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactLink({\n projectId,\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n })\n })\n for (const item of input.chunk.effective.objectDeletes)\n write(\"effective.object.delete\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactObject(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId\n )\n })\n for (const item of input.chunk.effective.objectUpserts)\n write(\"effective.object.upsert\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactObject(item.row, projectId)\n })\n for (const item of input.chunk.effective.linkUpserts)\n write(\"effective.link.upsert\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactLink(item.row, projectId)\n })\n for (const item of input.chunk.timeseries.pointUpserts)\n write(\"timeseries.point.upsert\", () => {\n this.assertPoint(item.expected, projectId)\n getInMemoryTimeseriesMaterializerAdapter(this.timeseries).applyExactPoint(\n projectId,\n item.point\n )\n })\n for (const item of input.chunk.outbox)\n write(\"outbox.insert\", () => {\n const envelope = item.envelope\n if (envelope.projectId !== projectId || envelope.commitId !== session.header.commit.id) {\n throw new MaterializationValidationError(\n \"Outbox event does not correlate with its materialization commit.\"\n )\n }\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n assertTimestamp(envelope.occurredAt, \"Outbox event occurredAt\")\n const key = outboxKey(projectId, envelope.id)\n if (this.state.outbox.has(key)) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate outbox event '${envelope.id}'.`\n )\n }\n if (session.outboxEnvelopes.has(envelope.commitOrdinal))\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Duplicate outbox commit ordinal.\"\n )\n this.state.outbox.set(key, {\n envelope: structuredClone(envelope),\n availableAt: item.availableAt,\n attempts: 0,\n leaseId: null,\n leaseExpiresAt: null,\n publishedAt: null,\n lastFailure: null,\n createdAt: item.createdAt,\n })\n session.outboxEnvelopes.set(envelope.commitOrdinal, structuredClone(envelope))\n })\n for (const item of materializationPlanItems(input.chunk)) {\n session.appliedPlanItems.push(stableJsonStringify(item))\n }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.requireSession(input.session)\n const { commit } = session.header\n // Recheck reservations at the durable boundary: callers may open more than one session in the\n // same transaction before either one finalizes.\n this.assertCommitAbsent(session.header)\n assertFinalizationCorrelations(session, input.finalization, this.state, this.objects)\n this.hooks.beforeWrite?.(\"finalize\", session.writeOrdinal++)\n for (const activation of input.finalization.sourceActivations) {\n this.hooks.beforeWrite?.(\"source.activate\", session.writeOrdinal++)\n assertTimestamp(activation.datasetVersion.createdAt, \"Source dataset version createdAt\")\n assertTimestamp(activation.updatedAt, \"Source activation updatedAt\")\n this.assertSource(activation.expected, commit.projectId)\n const candidateKey = sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n const candidate = this.state.sourceMaterializations.get(candidateKey)\n if (!candidate || candidate.status !== \"ready\")\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n const previous = findActiveSourceMaterialization(\n this.state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n previous.projectId,\n previous.source.projectionId,\n previous.materializationId\n ),\n {\n ...previous,\n status: \"superseded\",\n executionToken: null,\n terminalAt: activation.updatedAt,\n updatedAt: activation.updatedAt,\n }\n )\n }\n activateSourceRoots(this.state, candidate, activation)\n this.state.sourceMaterializations.set(candidateKey, {\n ...candidate,\n status: \"active\",\n executionToken: null,\n activatedAt: activation.updatedAt,\n lastCommitId: activation.lastCommitId,\n updatedAt: activation.updatedAt,\n })\n }\n const record = {\n ...structuredClone(commit),\n result: structuredClone(input.finalization.result),\n } as OntologyCommitRecord\n this.state.commitsById.set(commitKey(commit.projectId, commit.id), record)\n this.state.commitIdByIdempotency.set(\n idempotencyKey(commit.projectId, commit.idempotencyKey),\n commit.id\n )\n const origin = ontologyCommitOriginSelector(commit.origin)\n if (origin) {\n this.state.commitIdByOrigin.set(commitOriginKey(commit.projectId, origin), commit.id)\n }\n this.releaseSession(session)\n return { commit: structuredClone(record) }\n }\n\n /** @internal Share the existing transaction/session fence with derived vector writes. */\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.requireSession(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n private requireSession(session: MaterializationSession): SessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.getTransactionToken() ||\n this.getTransactionToken() !== value.transactionToken\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n private requireReplacement(\n session: SessionState,\n input: StreamSourceReplacementStateInput\n ): ReplacementSessionState {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const sourceId = input.source.projectionId\n const candidate = this.state.sourceMaterializations.get(\n sourceMaterializationKey(projectId, sourceId, input.candidateMaterializationId)\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n const previous = findActiveSourceMaterialization(this.state, projectId, sourceId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projectionKind !== candidate.projectionKind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n const replacement: ReplacementSessionState = {\n sourceId,\n candidateMaterializationId: input.candidateMaterializationId,\n owned: new Set(),\n candidate,\n objects: new Map(),\n links: new Map(),\n orderedObjects: [],\n orderedLinks: null,\n affectedScopes: new Set(),\n incidentObjects: new Map(),\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n linksExpanded: false,\n }\n for (const rows of [\n previousSourceRows(this.state, candidate),\n candidate.rowsByEntity.values(),\n ]) {\n for (const row of rows) {\n replacement.owned.add(projectionEntityKey(row.assertion))\n if (row.assertion.kind === \"object\") {\n const ref = row.assertion.ref\n replacement.objects.set(objectRefKey(ref), { ref, sortKey: objectRefSortKey(ref) })\n } else {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n replacement.orderedObjects = [...replacement.objects.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n session.replacement = replacement\n return replacement\n }\n\n private expandReplacementLinks(\n session: SessionState,\n replacement: ReplacementSessionState\n ): void {\n if (replacement.linksExpanded) return\n const projectId = session.header.commit.projectId\n const incident = replacement.incidentObjects\n const touchesIncident = (ref: OntologyLinkRef): boolean =>\n incident.has(objectRefKey(ref.source)) || incident.has(objectRefKey(ref.target))\n\n const adapter = getInMemoryObjectMaterializerAdapter(this.objects)\n if (incident.size > 0) {\n adapter.visitExactLinks(projectId, (row) => {\n const ref = linkRef(row)\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n })\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId !== projectId) continue\n if (touchesIncident(override.ref)) addReplacementLink(replacement, override.ref, true)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n const ref = {\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n }\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\" && touchesIncident(row.assertion.ref)) {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n }\n const scopes = new Map<string, { source: OntologyObjectRef; linkId: string }>()\n for (const { ref } of replacement.links.values()) {\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (replacement.affectedScopes.has(key)) scopes.set(key, ref)\n }\n for (const scope of scopes.values()) {\n adapter.visitExactScopeLinks(\n projectId,\n scope.source.objectTypeId,\n scope.source.primaryId,\n scope.linkId,\n (row) => {\n addReplacementLink(replacement, linkRef(row), false)\n }\n )\n const override = this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(scope.source, scope.linkId))\n )\n if (override)\n addReplacementLink(replacement, { ...scope, target: override.value.target }, false)\n }\n replacement.linksExpanded = true\n replacement.orderedLinks = null\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n if (this.state.commitsById.has(commitKey(header.commit.projectId, header.commit.id))) {\n throw new MaterializationConflictError(\n \"idempotency\",\n `Ontology commit '${header.commit.id}' already exists.`\n )\n }\n if (\n this.state.commitIdByIdempotency.has(\n idempotencyKey(header.commit.projectId, header.commit.idempotencyKey)\n )\n ) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology idempotency key already exists.\"\n )\n }\n const origin = ontologyCommitOriginSelector(header.commit.origin)\n if (\n origin &&\n this.state.commitIdByOrigin.has(commitOriginKey(header.commit.projectId, origin))\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n }\n\n private assertSource(expected: ExpectedSourceRevision, projectId: string): void {\n const current = findActiveSourceMaterialization(\n this.state,\n projectId,\n expected.source.projectionId\n )\n if (\n (current?.materializationId ?? null) !== expected.activeMaterializationId ||\n (current?.lastCommitId ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertObject(expected: ExpectedObjectRevision, projectId: string): Promise<void> {\n this.assertObjectSync(expected, projectId)\n }\n\n private assertObjectSync(expected: ExpectedObjectRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactObjectRow(\n projectId,\n expected.ref.objectTypeId,\n expected.ref.primaryId\n )\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.version !== expected.version || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private async assertLink(expected: ExpectedLinkRevision, projectId: string): Promise<void> {\n this.assertLinkSync(expected, projectId)\n }\n\n private assertLinkSync(expected: ExpectedLinkRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: expected.ref.source.objectTypeId,\n sourceId: expected.ref.source.primaryId,\n linkId: expected.ref.linkId,\n targetTypeId: expected.ref.target.objectTypeId,\n targetId: expected.ref.target.primaryId,\n })\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private assertPoint(expected: ExpectedTimeseriesPointRevision, projectId: string): void {\n const point = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n projectId,\n expected.series,\n expected.at\n )\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n\n private async objectState(\n session: SessionState,\n ref: OntologyObjectRef\n ): Promise<MaterializationObjectState> {\n const projectId = session.header.commit.projectId\n const row = await this.objects.getByPrimaryId({\n projectId,\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveObjectSource(projectId, ref),\n override: structuredClone(\n publicObjectOverride(\n this.state.objectOverrides.get(projectEntityKey(projectId, objectRefKey(ref)))\n )\n ),\n effective: row ? objectSnapshot(row) : null,\n latestTelemetry: getInMemoryTimeseriesMaterializerAdapter(this.timeseries)\n .listLatestForObject(projectId, ref.objectTypeId, ref.primaryId)\n .map(storedPoint),\n }\n }\n\n private async linkState(\n session: SessionState,\n ref: OntologyLinkRef\n ): Promise<MaterializationLinkState> {\n const projectId = session.header.commit.projectId\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveLinkSource(projectId, ref),\n override: structuredClone(\n publicLinkOverride(\n this.state.linkOverrides.get(projectEntityKey(projectId, linkRefKey(ref)))\n )\n ),\n slotOverride: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(ref.source, ref.linkId))\n )\n )\n ),\n effective: row ? linkSnapshot(row) : null,\n }\n }\n\n private linkSlotState(\n session: SessionState,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n session.linkSlotStates ??= new Map()\n const key = linkScopeSortKey(source, linkId)\n const existing = session.linkSlotStates.get(key)\n if (existing) return structuredClone(existing)\n const computed = this.computeLinkSlotState(session.header.commit.projectId, source, linkId)\n session.linkSlotStates.set(key, computed)\n return structuredClone(computed)\n }\n\n private computeLinkSlotState(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n const value = this.computeEffectiveLinkScope(projectId, source, linkId)\n return {\n ...value,\n sourceAssertion: this.findActiveLinkScopeSource(projectId, source, linkId),\n override: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(source, linkId))\n )\n )\n ),\n }\n }\n\n private computeEffectiveLinkScope(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeRevision & Pick<MaterializationLinkScopeState, \"effective\"> {\n const rows: ObjectLinkRow[] = []\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactScopeLinks(\n projectId,\n source.objectTypeId,\n source.primaryId,\n linkId,\n (row) => rows.push(row)\n )\n rows.sort((left, right) =>\n linkRefSortKey(linkRef(left)).localeCompare(linkRefSortKey(linkRef(right)))\n )\n const accumulator = startScopeAccumulator(source, linkId)\n for (let offset = 0; offset < rows.length; offset += 1_000) {\n const page = rows.slice(offset, offset + 1_000)\n this.hooks.observeBuffer?.(\"state.link-scope.page\", page.length)\n for (const row of page) {\n appendScopeSnapshot(accumulator, linkSnapshot(row))\n }\n }\n const effective = rows.length === 1 ? linkSnapshot(rows[0]!) : null\n return {\n ...finishScopeAccumulator(accumulator),\n effective,\n }\n }\n\n private findActiveLinkScopeSource(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): StoredSourceLinkAssertion | null {\n const rows = this.state.activeSourceLinkScopes.get(\n projectEntityKey(projectId, linkScopeSortKey(source, linkId))\n )\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active source links assert cardinality-one scope '${source.objectTypeId}.${linkId}'.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private findActiveObjectSource(\n projectId: string,\n ref: OntologyObjectRef\n ): StoredSourceObjectAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"object\", ref }))\n return found?.assertion.kind === \"object\" ? (found as StoredSourceObjectAssertion) : null\n }\n\n private findActiveLinkSource(\n projectId: string,\n ref: OntologyLinkRef\n ): StoredSourceLinkAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"link\", ref }))\n return found?.assertion.kind === \"link\" ? (found as StoredSourceLinkAssertion) : null\n }\n\n private findActiveSource(projectId: string, entityKey: string): StoredSourceAssertion | null {\n const rows = this.state.activeSourceRows.get(projectEntityKey(projectId, entityKey))\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${entityKey}.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private incidentLinkRefs(\n session: SessionState,\n objects: readonly OntologyObjectRef[]\n ): readonly OntologyLinkRef[] {\n if (objects.length === 0) return []\n session.incidentLinksByObject ??= this.buildIncidentLinkIndex(session.header.commit.projectId)\n const selected = new Map<string, OntologyLinkRef>()\n for (const object of objects) {\n for (const ref of session.incidentLinksByObject.get(objectRefKey(object)) ?? []) {\n selected.set(linkRefSortKey(ref), ref)\n }\n }\n return [...selected.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n }\n\n private buildIncidentLinkIndex(projectId: string): Map<string, readonly OntologyLinkRef[]> {\n const mutable = new Map<string, Map<string, OntologyLinkRef>>()\n const consider = (ref: OntologyLinkRef): void => {\n const sortKey = linkRefSortKey(ref)\n for (const endpoint of [ref.source, ref.target]) {\n const key = objectRefKey(endpoint)\n const links = mutable.get(key) ?? new Map<string, OntologyLinkRef>()\n links.set(sortKey, structuredClone(ref))\n mutable.set(key, links)\n }\n }\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactLinks(projectId, (row) =>\n consider(linkRef(row))\n )\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId === projectId) consider(override.ref)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n consider({\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n })\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\") consider(row.assertion.ref)\n }\n }\n const index = new Map<string, readonly OntologyLinkRef[]>()\n for (const [objectKey, refs] of mutable) {\n index.set(\n objectKey,\n [...refs.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n )\n }\n return index\n }\n}\n",
|
|
31
|
+
"import { stableJsonStringify } from \"../../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ExpectedLinkRevision,\n ExpectedObjectRevision,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeKey,\n linkScopeSortKey,\n objectRefKey,\n objectRefSortKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { ObjectLinkRow } from \"../../objects/types\"\nimport {\n getInMemoryTimeseriesMaterializerAdapter,\n type InMemoryTimeseriesStorage,\n} from \"../../timeseries/store\"\nimport type { OntologyCommitRecord } from \"../commits\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n ExpectedSourceRevision,\n ExpectedTimeseriesPointRevision,\n FinalizeMaterializationInput,\n MaterializationCardinalityOccupantWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectExistence,\n MaterializationObjectExistenceWorkRecord,\n MaterializationObjectState,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StoredTelemetryPoint,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"../materializations\"\nimport type { OntologyMaterializationEvent } from \"../outbox\"\nimport {\n appendScopeSnapshot,\n assertExpectedLinkRevision,\n assertExpectedLinkScopeRevision,\n assertExpectedObjectRevision,\n assertMaterializationHeader,\n finishScopeAccumulator,\n type ProviderMaterializationTransactionLifecycle,\n startScopeAccumulator,\n uniqueSorted,\n} from \"../provider\"\nimport type {\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport { assertFinalizationCorrelations } from \"./materializations-finalization\"\nimport {\n addReplacementLink,\n findActiveSourceMaterialization,\n linkRef,\n linkSnapshot,\n objectSnapshot,\n publicLinkOverride,\n publicLinkSlotOverride,\n publicObjectOverride,\n storedPoint,\n storedSourceLink,\n storedSourceObject,\n uniqueBy,\n} from \"./materializations-state\"\nimport {\n assertChunkSequence,\n assertLastCommit,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./materializations-work\"\nimport {\n assertTimestamp,\n commitKey,\n commitOriginKey,\n type InMemoryOntologyState,\n type InMemoryOntologyStorageTestHooks,\n type InMemorySourceMaterialization,\n idempotencyKey,\n ontologyCommitOriginSelector,\n outboxKey,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\nimport { activateSourceRoots, previousSourceRows } from \"./source-roots\"\n\nexport interface SessionState {\n readonly providerToken: object\n readonly header: MaterializationPlanHeader\n readonly transactionToken: object\n readonly lifecycle: ProviderMaterializationTransactionLifecycle\n active: boolean\n writeOrdinal: number\n readonly work: Map<string, MaterializationWorkRecord>\n readonly workUniqueKeys: Set<string>\n readonly applyWork: MaterializationPlanWorkRecord[]\n readonly cardinalityWork: MaterializationCardinalityOccupantWorkRecord[]\n readonly eventWork: MaterializationEventWorkRecord[]\n readonly appliedPlanItems: string[]\n readonly outboxEnvelopes: Map<number, OntologyMaterializationEvent>\n readonly workStreams: Record<StreamMaterializationWorkInput[\"order\"], WorkStreamState>\n workSealed: boolean\n incidentLinksByObject: Map<string, readonly OntologyLinkRef[]> | null\n linkSlotStates: Map<string, MaterializationLinkScopeState> | null\n readonly objectExistence: Map<string, MaterializationObjectExistenceWorkRecord>\n replacement: ReplacementSessionState | null\n}\n\nexport interface WorkStreamState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport interface ReplacementObjectWork {\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n}\n\nexport interface ReplacementLinkWork {\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n diffRequired: boolean\n}\n\nexport interface ReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly owned: Set<string>\n readonly candidate: InMemorySourceMaterialization\n readonly objects: Map<string, ReplacementObjectWork>\n readonly links: Map<string, ReplacementLinkWork>\n orderedObjects: ReplacementObjectWork[]\n orderedLinks: ReplacementLinkWork[] | null\n readonly affectedScopes: Set<string>\n readonly incidentObjects: Map<string, OntologyObjectRef>\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n linksExpanded: boolean\n}\n\nexport class InMemoryOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions = new WeakMap<object, SessionState>()\n private readonly liveSessions = new Set<SessionState>()\n\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly objects: InMemoryObjectStorage,\n private readonly timeseries: InMemoryTimeseriesStorage,\n private readonly getTransactionToken: () => object | null,\n private readonly getMaterializationLifecycle: () => ProviderMaterializationTransactionLifecycle | null,\n private readonly executionExists: (projectId: string, executionId: string) => Promise<boolean>,\n private readonly hooks: InMemoryOntologyStorageTestHooks = {}\n ) {}\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n const transactionToken = this.getTransactionToken()\n const lifecycle = this.getMaterializationLifecycle()\n if (!transactionToken || !lifecycle) {\n throw new MaterializationValidationError(\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n assertMaterializationHeader(input)\n if (!(await this.executionExists(input.commit.projectId, input.commit.executionId))) {\n throw new MaterializationValidationError(\n `Ontology commit execution '${input.commit.executionId}' does not exist in project '${input.commit.projectId}'.`\n )\n }\n this.assertCommitAbsent(input)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects)\n await this.assertObject(expected, input.commit.projectId)\n for (const expected of input.expected.links)\n await this.assertLink(expected, input.commit.projectId)\n const expectedScopeRevisions = new Map<string, MaterializationLinkScopeRevision>()\n for (const expected of input.expected.linkScopes) {\n const key = linkScopeSortKey(expected.source, expected.linkId)\n const current =\n expectedScopeRevisions.get(key) ??\n this.computeEffectiveLinkScope(input.commit.projectId, expected.source, expected.linkId)\n expectedScopeRevisions.set(key, current)\n assertExpectedLinkScopeRevision(current.fingerprint, expected)\n }\n for (const expected of input.expected.points) this.assertPoint(expected, input.commit.projectId)\n\n const providerToken = {}\n const session = {\n providerToken,\n header: structuredClone(input),\n transactionToken,\n lifecycle,\n active: true,\n writeOrdinal: 0,\n work: new Map<string, MaterializationWorkRecord>(),\n workUniqueKeys: new Set<string>(),\n applyWork: [],\n cardinalityWork: [],\n eventWork: [],\n appliedPlanItems: [],\n outboxEnvelopes: new Map<number, OntologyMaterializationEvent>(),\n workStreams: {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n },\n workSealed: false,\n incidentLinksByObject: null,\n linkSlotStates: new Map(),\n objectExistence: new Map<string, MaterializationObjectExistenceWorkRecord>(),\n replacement: null,\n }\n this.sessions.set(providerToken, session)\n this.liveSessions.add(session)\n lifecycle.register(providerToken)\n return { providerToken }\n }\n\n deactivateTransaction(transactionToken: object): void {\n for (const session of this.liveSessions) {\n if (session.transactionToken !== transactionToken) continue\n this.releaseSession(session)\n }\n }\n\n /** Deactivate a session, drop its transaction-local work, and stop tracking it as live. */\n private releaseSession(session: SessionState): void {\n session.active = false\n session.work.clear()\n session.workUniqueKeys.clear()\n session.applyWork.length = 0\n session.cardinalityWork.length = 0\n session.eventWork.length = 0\n session.appliedPlanItems.length = 0\n session.outboxEnvelopes.clear()\n session.incidentLinksByObject = null\n session.linkSlotStates = null\n session.objectExistence.clear()\n session.replacement = null\n this.liveSessions.delete(session)\n session.lifecycle.complete(session.providerToken)\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n for await (const request of input.requests) {\n this.requireSession(input.session)\n this.hooks.beforeRead?.(\"state.read\")\n const objectRefs = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objectRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const objects: MaterializationObjectState[] = []\n for (const ref of objectRefs.slice(offset, offset + input.pageRows)) {\n objects.push(await this.objectState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.object.page\", objects.length)\n yield { objects, links: [], linkScopes: [], points: [] }\n }\n\n const linkRefs = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < linkRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const links: MaterializationLinkState[] = []\n for (const ref of linkRefs.slice(offset, offset + input.pageRows)) {\n links.push(await this.linkState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n const incidentRefs = this.incidentLinkRefs(session, request.incidentObjects)\n for (let offset = 0; offset < incidentRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const refs = incidentRefs.slice(offset, offset + input.pageRows)\n const links: MaterializationLinkState[] = []\n for (const ref of refs) links.push(await this.linkState(session, ref))\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.incident-link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n for (const scope of uniqueBy(request.linkScopes, (value) =>\n linkScopeSortKey(value.source, value.linkId)\n )) {\n this.requireSession(input.session)\n const value = this.linkSlotState(session, scope.source, scope.linkId)\n // Scope rows are currently only requested for cardinality-one links, so the complete member\n // set is bounded by the ontology invariant. Replacement scope enumeration is flattened in\n // its dedicated stream and never uses this shape.\n yield { objects: [], links: [], linkScopes: [value], points: [] }\n }\n\n const requestedPoints = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < requestedPoints.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const points: StoredTelemetryPoint[] = []\n for (const point of requestedPoints.slice(offset, offset + input.pageRows)) {\n const stored = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n session.header.commit.projectId,\n point.series,\n point.at\n )\n if (stored) points.push(storedPoint(stored))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.point.page\", points.length)\n if (points.length > 0) yield { objects: [], links: [], linkScopes: [], points }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n if (input.entityKind === \"object\") {\n if (replacement.candidate.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n replacement.objectStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.object\")\n for (let offset = 0; offset < replacement.orderedObjects.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedObjects.slice(offset, offset + input.pageRows)\n const objects: SourceReplacementObjectState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"object\", ref: entry.ref })\n const base = await this.objectState(session, entry.ref)\n objects.push({\n ref: base.ref,\n candidateSource: storedSourceObject(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n ),\n override: base.override,\n effective: base.effective,\n latestTelemetry: base.latestTelemetry,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.object.page\", objects.length)\n yield { objects, links: [] }\n }\n this.requireSession(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.candidate.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n replacement.linkStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.link\")\n this.expandReplacementLinks(session, replacement)\n replacement.orderedLinks ??= [...replacement.links.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n for (let offset = 0; offset < replacement.orderedLinks.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedLinks.slice(offset, offset + input.pageRows)\n const links: SourceReplacementLinkState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"link\", ref: entry.ref })\n const base = await this.linkState(session, entry.ref)\n const ownedByReplacement = replacement.owned.has(key)\n links.push({\n ref: base.ref,\n candidateSource: ownedByReplacement\n ? storedSourceLink(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n )\n : base.source,\n override: base.override,\n slotOverride: base.slotOverride,\n effective: base.effective,\n diffRequired: entry.diffRequired,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.link.page\", links.length)\n yield { objects: [], links }\n }\n this.requireSession(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n const session = this.requireSession(input.session)\n if (session.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const batchKeys = new Set<string>()\n const batchUniqueKeys = new Set<string>()\n for (const record of input.records) {\n assertWorkRecord(record, session.header)\n const uniqueKey = workUniquenessKey(record)\n if (\n batchKeys.has(record.recordKey) ||\n session.work.has(record.recordKey) ||\n batchUniqueKeys.has(uniqueKey) ||\n session.workUniqueKeys.has(uniqueKey)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate materialization work key '${record.recordKey}'.`\n )\n }\n if (\n record.kind === \"incident-object\" &&\n (!session.replacement || session.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n batchKeys.add(record.recordKey)\n batchUniqueKeys.add(uniqueKey)\n }\n const cloned = input.records.map((record) => structuredClone(record))\n this.hooks.observeWork?.(cloned)\n for (const record of cloned) {\n session.work.set(record.recordKey, record)\n session.workUniqueKeys.add(workUniquenessKey(record))\n if (record.kind === \"plan\") session.applyWork.push(record)\n if (record.kind === \"cardinality\") session.cardinalityWork.push(record)\n if (record.kind === \"event\") session.eventWork.push(record)\n if (record.kind === \"object-existence\") {\n session.objectExistence.set(objectRefKey(record.ref), record)\n }\n if (record.kind === \"incident-object\") {\n const replacement = session.replacement\n if (replacement) {\n replacement.incidentObjects.set(objectRefKey(record.ref), record.ref)\n replacement.linksExpanded = false\n replacement.orderedLinks = null\n }\n }\n }\n this.hooks.observeBuffer?.(\"work.stage\", cloned.length)\n }\n\n async *streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n if (!session.workSealed) {\n session.applyWork.sort(comparePlanWork)\n session.cardinalityWork.sort(compareCardinalityWork)\n session.eventWork.sort(compareEventWork)\n session.workSealed = true\n }\n const records =\n input.order === \"apply\"\n ? session.applyWork\n : input.order === \"cardinality\"\n ? session.cardinalityWork\n : session.eventWork\n for (let offset = 0; offset < records.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = records.slice(offset, offset + input.pageRows)\n this.hooks.observeBuffer?.(`work.${input.order}.page`, selected.length)\n stream.emittedCount = offset + selected.length\n yield { records: structuredClone(selected) }\n }\n this.requireSession(input.session)\n stream.completed = true\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.requireSession(input.session)\n const result: MaterializationObjectExistence[] = []\n for (const ref of input.refs) {\n const record = session.objectExistence.get(objectRefKey(ref))\n if (record) {\n result.push({ ref: structuredClone(record.ref), exists: record.exists })\n }\n }\n return result\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.requireSession(input.session)\n const projectId = session.header.commit.projectId\n assertPlanChunkCorrelations(input.chunk, session.header.commit)\n assertChunkSequence(session, input.chunk)\n this.hooks.observeBuffer?.(\"apply.chunk\", materializationChunkRows(input.chunk))\n const write = (boundary: string, apply: () => void): void => {\n this.hooks.beforeWrite?.(boundary, session.writeOrdinal++)\n apply()\n }\n\n for (const item of input.chunk.overrides.objects.upserts)\n write(\"override.object.upsert\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n editedAt: { ...item.editedAt },\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.objects.deletes)\n write(\"override.object.delete\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.edges.upserts)\n write(\"override.link.upsert\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.edges.deletes)\n write(\"override.link.delete\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.slots.upserts)\n write(\"override.link-slot.upsert\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.slots.deletes)\n write(\"override.link-slot.delete\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.delete(key)\n })\n\n for (const item of input.chunk.effective.linkDeletes)\n write(\"effective.link.delete\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactLink({\n projectId,\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n })\n })\n for (const item of input.chunk.effective.objectDeletes)\n write(\"effective.object.delete\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactObject(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId\n )\n })\n for (const item of input.chunk.effective.objectUpserts)\n write(\"effective.object.upsert\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactObject(item.row, projectId)\n })\n for (const item of input.chunk.effective.linkUpserts)\n write(\"effective.link.upsert\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactLink(item.row, projectId)\n })\n for (const item of input.chunk.timeseries.pointUpserts)\n write(\"timeseries.point.upsert\", () => {\n this.assertPoint(item.expected, projectId)\n getInMemoryTimeseriesMaterializerAdapter(this.timeseries).applyExactPoint(\n projectId,\n item.point\n )\n })\n for (const item of input.chunk.outbox)\n write(\"outbox.insert\", () => {\n const envelope = item.envelope\n if (envelope.projectId !== projectId || envelope.commitId !== session.header.commit.id) {\n throw new MaterializationValidationError(\n \"Outbox event does not correlate with its materialization commit.\"\n )\n }\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n assertTimestamp(envelope.occurredAt, \"Outbox event occurredAt\")\n const key = outboxKey(projectId, envelope.id)\n if (this.state.outbox.has(key)) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate outbox event '${envelope.id}'.`\n )\n }\n if (session.outboxEnvelopes.has(envelope.commitOrdinal))\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Duplicate outbox commit ordinal.\"\n )\n this.state.outbox.set(key, {\n envelope: structuredClone(envelope),\n availableAt: item.availableAt,\n attempts: 0,\n leaseId: null,\n leaseExpiresAt: null,\n publishedAt: null,\n lastFailure: null,\n createdAt: item.createdAt,\n })\n session.outboxEnvelopes.set(envelope.commitOrdinal, structuredClone(envelope))\n })\n for (const item of materializationPlanItems(input.chunk)) {\n session.appliedPlanItems.push(stableJsonStringify(item))\n }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.requireSession(input.session)\n const { commit } = session.header\n // Recheck reservations at the durable boundary: callers may open more than one session in the\n // same transaction before either one finalizes.\n this.assertCommitAbsent(session.header)\n assertFinalizationCorrelations(session, input.finalization, this.state, this.objects)\n this.hooks.beforeWrite?.(\"finalize\", session.writeOrdinal++)\n for (const activation of input.finalization.sourceActivations) {\n this.hooks.beforeWrite?.(\"source.activate\", session.writeOrdinal++)\n assertTimestamp(activation.datasetVersion.createdAt, \"Source dataset version createdAt\")\n assertTimestamp(activation.updatedAt, \"Source activation updatedAt\")\n this.assertSource(activation.expected, commit.projectId)\n const candidateKey = sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n const candidate = this.state.sourceMaterializations.get(candidateKey)\n if (!candidate || candidate.status !== \"ready\")\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n const previous = findActiveSourceMaterialization(\n this.state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n previous.projectId,\n previous.source.projectionId,\n previous.materializationId\n ),\n {\n ...previous,\n status: \"superseded\",\n executionToken: null,\n terminalAt: activation.updatedAt,\n updatedAt: activation.updatedAt,\n }\n )\n }\n activateSourceRoots(this.state, candidate, activation)\n this.state.sourceMaterializations.set(candidateKey, {\n ...candidate,\n status: \"active\",\n executionToken: null,\n activatedAt: activation.updatedAt,\n lastCommitId: activation.lastCommitId,\n updatedAt: activation.updatedAt,\n })\n }\n const record = {\n ...structuredClone(commit),\n result: structuredClone(input.finalization.result),\n } as OntologyCommitRecord\n this.state.commitsById.set(commitKey(commit.projectId, commit.id), record)\n this.state.commitIdByIdempotency.set(\n idempotencyKey(commit.projectId, commit.idempotencyKey),\n commit.id\n )\n const origin = ontologyCommitOriginSelector(commit.origin)\n if (origin) {\n this.state.commitIdByOrigin.set(commitOriginKey(commit.projectId, origin), commit.id)\n }\n this.releaseSession(session)\n return { commit: structuredClone(record) }\n }\n\n /** @internal Share the existing transaction/session fence with derived vector writes. */\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.requireSession(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n private requireSession(session: MaterializationSession): SessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.getTransactionToken() ||\n this.getTransactionToken() !== value.transactionToken\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n private requireReplacement(\n session: SessionState,\n input: StreamSourceReplacementStateInput\n ): ReplacementSessionState {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const sourceId = input.source.projectionId\n const candidate = this.state.sourceMaterializations.get(\n sourceMaterializationKey(projectId, sourceId, input.candidateMaterializationId)\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n const previous = findActiveSourceMaterialization(this.state, projectId, sourceId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projectionKind !== candidate.projectionKind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n const replacement: ReplacementSessionState = {\n sourceId,\n candidateMaterializationId: input.candidateMaterializationId,\n owned: new Set(),\n candidate,\n objects: new Map(),\n links: new Map(),\n orderedObjects: [],\n orderedLinks: null,\n affectedScopes: new Set(),\n incidentObjects: new Map(),\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n linksExpanded: false,\n }\n for (const rows of [\n previousSourceRows(this.state, candidate),\n candidate.rowsByEntity.values(),\n ]) {\n for (const row of rows) {\n replacement.owned.add(projectionEntityKey(row.assertion))\n if (row.assertion.kind === \"object\") {\n const ref = row.assertion.ref\n replacement.objects.set(objectRefKey(ref), { ref, sortKey: objectRefSortKey(ref) })\n } else {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n replacement.orderedObjects = [...replacement.objects.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n session.replacement = replacement\n return replacement\n }\n\n private expandReplacementLinks(\n session: SessionState,\n replacement: ReplacementSessionState\n ): void {\n if (replacement.linksExpanded) return\n const projectId = session.header.commit.projectId\n const incident = replacement.incidentObjects\n const touchesIncident = (ref: OntologyLinkRef): boolean =>\n incident.has(objectRefKey(ref.source)) || incident.has(objectRefKey(ref.target))\n\n const adapter = getInMemoryObjectMaterializerAdapter(this.objects)\n if (incident.size > 0) {\n adapter.visitExactLinks(projectId, (row) => {\n const ref = linkRef(row)\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n })\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId !== projectId) continue\n if (touchesIncident(override.ref)) addReplacementLink(replacement, override.ref, true)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n const ref = {\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n }\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\" && touchesIncident(row.assertion.ref)) {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n }\n const scopes = new Map<string, { source: OntologyObjectRef; linkId: string }>()\n for (const { ref } of replacement.links.values()) {\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (replacement.affectedScopes.has(key)) scopes.set(key, ref)\n }\n for (const scope of scopes.values()) {\n adapter.visitExactScopeLinks(\n projectId,\n scope.source.objectTypeId,\n scope.source.primaryId,\n scope.linkId,\n (row) => {\n addReplacementLink(replacement, linkRef(row), false)\n }\n )\n const override = this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(scope.source, scope.linkId))\n )\n if (override)\n addReplacementLink(replacement, { ...scope, target: override.value.target }, false)\n }\n replacement.linksExpanded = true\n replacement.orderedLinks = null\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n if (this.state.commitsById.has(commitKey(header.commit.projectId, header.commit.id))) {\n throw new MaterializationConflictError(\n \"idempotency\",\n `Ontology commit '${header.commit.id}' already exists.`\n )\n }\n if (\n this.state.commitIdByIdempotency.has(\n idempotencyKey(header.commit.projectId, header.commit.idempotencyKey)\n )\n ) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology idempotency key already exists.\"\n )\n }\n const origin = ontologyCommitOriginSelector(header.commit.origin)\n if (\n origin &&\n this.state.commitIdByOrigin.has(commitOriginKey(header.commit.projectId, origin))\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n }\n\n private assertSource(expected: ExpectedSourceRevision, projectId: string): void {\n const current = findActiveSourceMaterialization(\n this.state,\n projectId,\n expected.source.projectionId\n )\n if (\n (current?.materializationId ?? null) !== expected.activeMaterializationId ||\n (current?.lastCommitId ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertObject(expected: ExpectedObjectRevision, projectId: string): Promise<void> {\n this.assertObjectSync(expected, projectId)\n }\n\n private assertObjectSync(expected: ExpectedObjectRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactObjectRow(\n projectId,\n expected.ref.objectTypeId,\n expected.ref.primaryId\n )\n assertExpectedObjectRevision(row ?? null, expected)\n }\n\n private async assertLink(expected: ExpectedLinkRevision, projectId: string): Promise<void> {\n this.assertLinkSync(expected, projectId)\n }\n\n private assertLinkSync(expected: ExpectedLinkRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: expected.ref.source.objectTypeId,\n sourceId: expected.ref.source.primaryId,\n linkId: expected.ref.linkId,\n targetTypeId: expected.ref.target.objectTypeId,\n targetId: expected.ref.target.primaryId,\n })\n assertExpectedLinkRevision(row?.lastCommitId, expected)\n }\n\n private assertPoint(expected: ExpectedTimeseriesPointRevision, projectId: string): void {\n const point = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n projectId,\n expected.series,\n expected.at\n )\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n\n private async objectState(\n session: SessionState,\n ref: OntologyObjectRef\n ): Promise<MaterializationObjectState> {\n const projectId = session.header.commit.projectId\n const row = await this.objects.getByPrimaryId({\n projectId,\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveObjectSource(projectId, ref),\n override: structuredClone(\n publicObjectOverride(\n this.state.objectOverrides.get(projectEntityKey(projectId, objectRefKey(ref)))\n )\n ),\n effective: row ? objectSnapshot(row) : null,\n latestTelemetry: getInMemoryTimeseriesMaterializerAdapter(this.timeseries)\n .listLatestForObject(projectId, ref.objectTypeId, ref.primaryId)\n .map(storedPoint),\n }\n }\n\n private async linkState(\n session: SessionState,\n ref: OntologyLinkRef\n ): Promise<MaterializationLinkState> {\n const projectId = session.header.commit.projectId\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveLinkSource(projectId, ref),\n override: structuredClone(\n publicLinkOverride(\n this.state.linkOverrides.get(projectEntityKey(projectId, linkRefKey(ref)))\n )\n ),\n slotOverride: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(ref.source, ref.linkId))\n )\n )\n ),\n effective: row ? linkSnapshot(row) : null,\n }\n }\n\n private linkSlotState(\n session: SessionState,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n session.linkSlotStates ??= new Map()\n const key = linkScopeSortKey(source, linkId)\n const existing = session.linkSlotStates.get(key)\n if (existing) return structuredClone(existing)\n const computed = this.computeLinkSlotState(session.header.commit.projectId, source, linkId)\n session.linkSlotStates.set(key, computed)\n return structuredClone(computed)\n }\n\n private computeLinkSlotState(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n const value = this.computeEffectiveLinkScope(projectId, source, linkId)\n return {\n ...value,\n sourceAssertion: this.findActiveLinkScopeSource(projectId, source, linkId),\n override: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(source, linkId))\n )\n )\n ),\n }\n }\n\n private computeEffectiveLinkScope(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeRevision & Pick<MaterializationLinkScopeState, \"effective\"> {\n const rows: ObjectLinkRow[] = []\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactScopeLinks(\n projectId,\n source.objectTypeId,\n source.primaryId,\n linkId,\n (row) => rows.push(row)\n )\n rows.sort((left, right) =>\n linkRefSortKey(linkRef(left)).localeCompare(linkRefSortKey(linkRef(right)))\n )\n const accumulator = startScopeAccumulator(source, linkId)\n for (let offset = 0; offset < rows.length; offset += 1_000) {\n const page = rows.slice(offset, offset + 1_000)\n this.hooks.observeBuffer?.(\"state.link-scope.page\", page.length)\n for (const row of page) {\n appendScopeSnapshot(accumulator, linkSnapshot(row))\n }\n }\n const effective = rows.length === 1 ? linkSnapshot(rows[0]!) : null\n return {\n ...finishScopeAccumulator(accumulator),\n effective,\n }\n }\n\n private findActiveLinkScopeSource(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): StoredSourceLinkAssertion | null {\n const rows = this.state.activeSourceLinkScopes.get(\n projectEntityKey(projectId, linkScopeSortKey(source, linkId))\n )\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active source links assert cardinality-one scope '${source.objectTypeId}.${linkId}'.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private findActiveObjectSource(\n projectId: string,\n ref: OntologyObjectRef\n ): StoredSourceObjectAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"object\", ref }))\n return found?.assertion.kind === \"object\" ? (found as StoredSourceObjectAssertion) : null\n }\n\n private findActiveLinkSource(\n projectId: string,\n ref: OntologyLinkRef\n ): StoredSourceLinkAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"link\", ref }))\n return found?.assertion.kind === \"link\" ? (found as StoredSourceLinkAssertion) : null\n }\n\n private findActiveSource(projectId: string, entityKey: string): StoredSourceAssertion | null {\n const rows = this.state.activeSourceRows.get(projectEntityKey(projectId, entityKey))\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${entityKey}.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private incidentLinkRefs(\n session: SessionState,\n objects: readonly OntologyObjectRef[]\n ): readonly OntologyLinkRef[] {\n if (objects.length === 0) return []\n session.incidentLinksByObject ??= this.buildIncidentLinkIndex(session.header.commit.projectId)\n const selected = new Map<string, OntologyLinkRef>()\n for (const object of objects) {\n for (const ref of session.incidentLinksByObject.get(objectRefKey(object)) ?? []) {\n selected.set(linkRefSortKey(ref), ref)\n }\n }\n return [...selected.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n }\n\n private buildIncidentLinkIndex(projectId: string): Map<string, readonly OntologyLinkRef[]> {\n const mutable = new Map<string, Map<string, OntologyLinkRef>>()\n const consider = (ref: OntologyLinkRef): void => {\n const sortKey = linkRefSortKey(ref)\n for (const endpoint of [ref.source, ref.target]) {\n const key = objectRefKey(endpoint)\n const links = mutable.get(key) ?? new Map<string, OntologyLinkRef>()\n links.set(sortKey, structuredClone(ref))\n mutable.set(key, links)\n }\n }\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactLinks(projectId, (row) =>\n consider(linkRef(row))\n )\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId === projectId) consider(override.ref)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n consider({\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n })\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\") consider(row.assertion.ref)\n }\n }\n const index = new Map<string, readonly OntologyLinkRef[]>()\n for (const [objectKey, refs] of mutable) {\n index.set(\n objectKey,\n [...refs.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n )\n }\n return index\n }\n}\n",
|
|
33
32
|
"import {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxRecord,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"../outbox\"\nimport {\n assertNonblank,\n assertTimestamp,\n type InMemoryOntologyState,\n insertBounded,\n outboxKey,\n} from \"./shared-state\"\n\nexport class InMemoryOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n ) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(() => this.claimUnlocked(input))\n }\n\n private claimUnlocked(input: ClaimOntologyOutboxInput): readonly ClaimedOntologyOutboxRow[] {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveLimit(input.limit)\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiresAt = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiresAt <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n const rows: OntologyOutboxRecord[] = []\n for (const row of this.state.outbox.values()) {\n if (row.envelope.projectId !== input.projectId) continue\n assertPairedLease(row)\n if (row.publishedAt !== null || Date.parse(row.availableAt) > now) continue\n if (row.leaseExpiresAt !== null && Date.parse(row.leaseExpiresAt) > now) continue\n insertBounded(rows, row, input.limit, compareClaimRows)\n }\n return rows.map((row) => {\n const claimed: ClaimedOntologyOutboxRow = {\n ...row,\n attempts: row.attempts + 1,\n leaseId: input.leaseId,\n leaseExpiresAt: input.leaseExpiresAt,\n }\n this.state.outbox.set(outboxKey(input.projectId, row.envelope.id), structuredClone(claimed))\n return structuredClone(claimed)\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => this.markPublishedUnlocked(input))\n }\n\n private markPublishedUnlocked(input: CompleteOntologyOutboxLeaseInput): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const rows = this.validateLeaseBatch(input.projectId, input.ids, input.leaseId)\n for (const [key, row] of rows) {\n this.state.outbox.set(key, {\n ...row,\n publishedAt: input.publishedAt,\n leaseId: null,\n leaseExpiresAt: null,\n })\n }\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => this.rescheduleUnlocked(input))\n }\n\n private rescheduleUnlocked(input: RescheduleOntologyOutboxLeaseInput): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const rows = this.validateLeaseBatch(input.projectId, input.ids, input.leaseId)\n for (const [key, row] of rows) {\n this.state.outbox.set(key, {\n ...row,\n availableAt: input.availableAt,\n lastFailure: input.failure === undefined ? row.lastFailure : structuredClone(input.failure),\n leaseId: null,\n leaseExpiresAt: null,\n })\n }\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(() => this.purgePublishedUnlocked(input))\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n let pendingCount = 0\n let oldestPendingAt: string | null = null\n let retryingCount = 0\n let maxAttempts = 0\n\n for (const row of this.state.outbox.values()) {\n if (row.envelope.projectId !== input.projectId || row.publishedAt !== null) continue\n pendingCount += 1\n if (row.attempts > 0) retryingCount += 1\n maxAttempts = Math.max(maxAttempts, row.attempts)\n if (oldestPendingAt === null || row.createdAt < oldestPendingAt) {\n oldestPendingAt = row.createdAt\n }\n }\n\n return { pendingCount, oldestPendingAt, retryingCount, maxAttempts }\n })\n }\n\n private purgePublishedUnlocked(input: PurgePublishedOntologyOutboxInput): number {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveLimit(input.limit)\n const cutoff = assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n const rows: [string, OntologyOutboxRecord][] = []\n for (const entry of this.state.outbox.entries()) {\n const [, row] = entry\n if (\n row.envelope.projectId !== input.projectId ||\n row.publishedAt === null ||\n Date.parse(row.publishedAt) >= cutoff\n ) {\n continue\n }\n insertBounded(rows, entry, input.limit, ([, left], [, right]) =>\n comparePublishedRows(left, right)\n )\n }\n for (const [key] of rows) this.state.outbox.delete(key)\n return rows.length\n }\n\n private requireLease(key: string, leaseId: string) {\n const row = this.state.outbox.get(key)\n if (!row || row.leaseId !== leaseId || row.leaseExpiresAt === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox lease does not match.\"\n )\n }\n return row\n }\n\n private validateLeaseBatch(\n projectId: string,\n ids: readonly string[],\n leaseId: string\n ): readonly (readonly [string, ReturnType<InMemoryOntologyOutboxStorage[\"requireLease\"]>])[] {\n const seen = new Set<string>()\n return ids.map((id) => {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(\n `Ontology outbox lease batch repeats event '${id}'.`\n )\n }\n seen.add(id)\n const key = outboxKey(projectId, id)\n return [key, this.requireLease(key, leaseId)] as const\n })\n }\n}\n\n/**\n * Deterministic claim order.\n *\n * Every row of one commit shares `createdAt`, so `commitOrdinal` gives providers a stable batch\n * order. It correlates facts but does not promise broker delivery order: concurrent leases and\n * retries may publish later rows first.\n */\nfunction compareClaimRows(\n left: import(\"../outbox\").OntologyOutboxRecord,\n right: import(\"../outbox\").OntologyOutboxRecord\n): number {\n return (\n left.createdAt.localeCompare(right.createdAt) ||\n left.envelope.commitId.localeCompare(right.envelope.commitId) ||\n left.envelope.commitOrdinal - right.envelope.commitOrdinal\n )\n}\n\nfunction comparePublishedRows(\n left: import(\"../outbox\").OntologyOutboxRecord,\n right: import(\"../outbox\").OntologyOutboxRecord\n): number {\n return (\n (left.publishedAt ?? \"\").localeCompare(right.publishedAt ?? \"\") ||\n left.envelope.id.localeCompare(right.envelope.id)\n )\n}\n\nfunction assertPositiveLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new MaterializationValidationError(\"Ontology outbox limit must be positive.\")\n }\n}\n\nfunction assertPairedLease(row: {\n readonly leaseId: string | null\n readonly leaseExpiresAt: string | null\n}): void {\n if ((row.leaseId === null) !== (row.leaseExpiresAt === null)) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox row has an unpaired lease lifecycle.\"\n )\n }\n}\n",
|
|
34
33
|
"import { stableJsonStringify } from \"../../../json\"\nimport { MaterializationValidationError } from \"../../../materialization/errors\"\nimport type { ProjectionExecution } from \"../../../materialization/model\"\nimport { projectionEntityKey } from \"../../../materialization/refs\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertTimestamp as assertCanonicalTimestamp,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceExecutionIdentity,\n assertSourceStagedRow,\n assertSourceWriteIdentity as assertWriteIdentity,\n isExactStagingManifest,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRoots,\n} from \"../provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecution,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceAssertion,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"../sources\"\nimport { findActiveSourceMaterialization } from \"./materializations-state\"\nimport {\n assertNonblank,\n type InMemoryOntologyState,\n type InMemorySourceMaterialization,\n insertBounded,\n sourceMaterializationKey,\n sourceMaterializationRecord,\n} from \"./shared-state\"\n\nexport class InMemoryOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>,\n private readonly assertExecution: AssertSourceMaterializationExecution\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertBeginInput(input)\n await this.assertCurrentExecution(input)\n const key = sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n const existing = this.state.sourceMaterializations.get(key)\n if (existing) {\n if (isExactStagingManifest(sourceMaterializationRecord(existing), input)) {\n return sourceMaterializationRecord(existing)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const nonterminal = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (nonterminal.length > 0) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n const materialization: InMemorySourceMaterialization = {\n projectId: input.projectId,\n source: structuredClone(input.source),\n materializationId: input.materializationId,\n projectionRunId: input.execution.projectionRunId,\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n status: \"staging\",\n executionToken: input.execution.executionToken,\n datasetVersion: structuredClone(input.datasetVersion),\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n ...(input.base ? { base: structuredClone(input.base) } : {}),\n rootCount: null,\n assertionCount: null,\n createdAt: input.createdAt,\n readyAt: null,\n activatedAt: null,\n terminalAt: null,\n lastCommitId: null,\n updatedAt: input.createdAt,\n rowsByEntity: new Map(),\n roots: new Map(),\n rootOrdinals: new Map(),\n ordinalRoots: new Map(),\n }\n this.state.sourceMaterializations.set(key, materialization)\n return sourceMaterializationRecord(materialization)\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${materialization.status}' and cannot accept rows.`\n )\n }\n return stageRowsAtomically(materialization, input)\n })\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n assertCanonicalTimestamp(input.readyAt, \"Source readyAt\")\n assertCount(input.rootCount, \"Source root count\")\n assertCount(input.assertionCount, \"Source assertion count\")\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n\n if (materialization.status === \"ready\") {\n if (\n materialization.rootCount === input.rootCount &&\n materialization.assertionCount === input.assertionCount &&\n materialization.readyAt === input.readyAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'ready'.`\n )\n }\n assertNotBefore(input.readyAt, materialization.createdAt, \"Source readyAt\", \"createdAt\")\n assertReadyCounts(materialization, input.rootCount, input.assertionCount)\n\n const ready: InMemorySourceMaterialization = {\n ...materialization,\n status: \"ready\",\n rootCount: input.rootCount,\n assertionCount: input.assertionCount,\n readyAt: input.readyAt,\n updatedAt: input.readyAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n ),\n ready\n )\n return sourceMaterializationRecord(ready)\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const active = findActiveSourceMaterialization(\n this.state,\n input.projectId,\n input.source.projectionId\n )\n return active ? sourceMaterializationRecord(active) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(async () => {\n assertProjectAndSource(input)\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertCanonicalTimestamp(input.abandonedAt, \"Source abandonedAt\")\n await this.assertCurrentExecution(input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(input)\n : this.abandonForReclaim(input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertCanonicalTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\")\n if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {\n throw new MaterializationValidationError(\n \"Terminal source cleanup limit must be a positive safe integer.\"\n )\n }\n\n const candidates: [string, InMemorySourceMaterialization][] = []\n for (const entry of this.state.sourceMaterializations.entries()) {\n const materialization = entry[1]\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null ||\n materialization.terminalAt >= input.terminalBefore\n ) {\n continue\n }\n if (\n materialization.roots.size > 0 &&\n ![...materialization.roots.values()].some(\n (root) =>\n !root.active && root.retiredAt !== null && root.retiredAt < input.terminalBefore\n )\n )\n continue\n insertBounded(candidates, entry, input.limit, compareTerminalMaterializations)\n }\n\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n for (const [key, candidate] of candidates) {\n if (remaining === 0) break\n const current = this.state.sourceMaterializations.get(key)\n if (current !== candidate) continue\n current.rootOrdinals.clear()\n current.ordinalRoots.clear()\n for (const [rootKey, root] of current.roots) {\n if (remaining === 0) break\n if (root.active || root.retiredAt === null || root.retiredAt >= input.terminalBefore)\n continue\n for (const entityKey of root.entityKeys) {\n if (remaining === 0) break\n current.rowsByEntity.delete(entityKey)\n root.entityKeys.delete(entityKey)\n rowsDeleted += 1\n remaining -= 1\n }\n if (root.entityKeys.size === 0 && remaining > 0) {\n current.roots.delete(rootKey)\n current.rootOrdinals.delete(rootKey)\n current.ordinalRoots.delete(root.stagingOrdinal)\n rowsDeleted += 1\n remaining -= 1\n }\n }\n if (current.roots.size === 0 && current.rowsByEntity.size === 0 && remaining > 0) {\n this.state.sourceMaterializations.delete(key)\n materializationsDeleted += 1\n remaining -= 1\n }\n }\n return { rowsDeleted, materializationsDeleted }\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n let count = 0\n let oldestTerminalAt: string | null = null\n for (const materialization of this.state.sourceMaterializations.values()) {\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null\n ) {\n continue\n }\n count += 1\n if (oldestTerminalAt === null || materialization.terminalAt < oldestTerminalAt) {\n oldestTerminalAt = materialization.terminalAt\n }\n }\n return { count, oldestTerminalAt }\n })\n }\n\n private async assertCurrentExecution(\n input:\n | BeginSourceMaterializationInput\n | {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly execution: ProjectionExecution\n }\n ): Promise<void> {\n await this.assertExecution({\n projectId: input.projectId,\n source: input.source,\n execution: input.execution,\n ...(\"projectionKind\" in input ? { identity: sourceMaterializationIdentity(input) } : {}),\n })\n }\n\n private requireMaterialization(input: {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly materializationId: string\n }): InMemorySourceMaterialization {\n const materialization = this.state.sourceMaterializations.get(\n sourceMaterializationKey(input.projectId, input.source.projectionId, input.materializationId)\n )\n if (!materialization) {\n throw sourceConflict(`Source materialization '${input.materializationId}' does not exist.`)\n }\n return materialization\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const materialization = this.requireMaterialization(input)\n if (materialization.status === \"abandoned\") {\n if (\n materialization.projectionRunId === input.execution.projectionRunId &&\n materialization.terminalAt === input.abandonedAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\" && materialization.status !== \"ready\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'abandoned'.`\n )\n }\n return this.transitionToAbandoned(materialization, input.abandonedAt)\n }\n\n private abandonForReclaim(input: ReclaimSourceMaterializationInput): OntologySourceRecord | null {\n const candidates = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (\n candidates.some(\n ([, materialization]) => materialization.executionToken === input.execution.executionToken\n )\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n const candidate = candidates[0]?.[1]\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n }\n\n private transitionToAbandoned(\n materialization: InMemorySourceMaterialization,\n abandonedAt: string\n ): OntologySourceRecord {\n assertNotBefore(abandonedAt, materialization.createdAt, \"Source abandonedAt\", \"createdAt\")\n if (materialization.readyAt !== null) {\n assertNotBefore(abandonedAt, materialization.readyAt, \"Source abandonedAt\", \"readyAt\")\n }\n for (const root of materialization.roots.values()) root.retiredAt = abandonedAt\n const abandoned: InMemorySourceMaterialization = {\n ...materialization,\n status: \"abandoned\",\n executionToken: null,\n terminalAt: abandonedAt,\n updatedAt: abandonedAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n materialization.projectId,\n materialization.source.projectionId,\n materialization.materializationId\n ),\n abandoned\n )\n return sourceMaterializationRecord(abandoned)\n }\n\n private findRunCandidates(\n projectId: string,\n sourceId: string,\n projectionRunId: string\n ): [string, InMemorySourceMaterialization][] {\n return [...this.state.sourceMaterializations.entries()].filter(\n ([, materialization]) =>\n materialization.projectId === projectId &&\n materialization.source.projectionId === sourceId &&\n materialization.projectionRunId === projectionRunId &&\n (materialization.status === \"staging\" || materialization.status === \"ready\")\n )\n }\n}\n\nfunction stageRowsAtomically(\n materialization: InMemorySourceMaterialization,\n input: StageSourceRowsInput\n): StageSourceRowsResult {\n let inserted = 0\n let unchanged = 0\n const newRows = new Map<string, StageSourceRowsInput[\"rows\"][number]>()\n const newRootOrdinals = new Map<string, number>()\n const newOrdinalRoots = new Map<number, string>()\n const roots = sourceStageRoots(materialization.projectionKind, input)\n if (!materialization.base && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n for (const root of roots) {\n const previous = materialization.roots.get(root.rootKey)\n const otherRoot = materialization.ordinalRoots.get(root.stagingOrdinal)\n if (\n (previous &&\n (previous.deleted !== root.deleted || previous.stagingOrdinal !== root.stagingOrdinal)) ||\n (otherRoot !== undefined && otherRoot !== root.rootKey)\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n newRootOrdinals.set(root.rootKey, root.stagingOrdinal)\n newOrdinalRoots.set(root.stagingOrdinal, root.rootKey)\n }\n for (const row of input.rows) {\n assertSourceStagedRow(materialization.projectionKind, row)\n\n const rootKey = projectionEntityKey(row.root)\n const existingOrdinal =\n materialization.rootOrdinals.get(rootKey) ?? newRootOrdinals.get(rootKey)\n if (existingOrdinal !== undefined && existingOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const existingRoot =\n materialization.ordinalRoots.get(row.stagingOrdinal) ??\n newOrdinalRoots.get(row.stagingOrdinal)\n if (existingRoot !== undefined && existingRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const entityKey = projectionEntityKey(row.assertion)\n const existing = materialization.rowsByEntity.get(entityKey) ?? newRows.get(entityKey)\n if (existing) {\n if (stableJsonStringify(existing) === stableJsonStringify(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n newRootOrdinals.set(rootKey, row.stagingOrdinal)\n newOrdinalRoots.set(row.stagingOrdinal, rootKey)\n newRows.set(entityKey, structuredClone(row))\n inserted += 1\n }\n\n for (const [rootKey, ordinal] of newRootOrdinals) {\n materialization.rootOrdinals.set(rootKey, ordinal)\n }\n for (const [ordinal, rootKey] of newOrdinalRoots) {\n materialization.ordinalRoots.set(ordinal, rootKey)\n }\n for (const root of roots) {\n if (!materialization.roots.has(root.rootKey))\n materialization.roots.set(root.rootKey, {\n root: structuredClone(root.root),\n stagingOrdinal: root.stagingOrdinal,\n deleted: root.deleted,\n entityKeys: new Set(),\n active: false,\n retiredAt: null,\n })\n }\n for (const [entityKey, row] of newRows) {\n materialization.rowsByEntity.set(entityKey, row)\n materialization.roots.get(projectionEntityKey(row.root))!.entityKeys.add(entityKey)\n }\n return { inserted, unchanged }\n}\n\nfunction assertReadyCounts(\n materialization: InMemorySourceMaterialization,\n rootCount: number,\n assertionCount: number\n): void {\n if (\n materialization.rootOrdinals.size !== rootCount ||\n materialization.ordinalRoots.size !== rootCount ||\n materialization.rowsByEntity.size !== assertionCount\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n for (let ordinal = 0; ordinal < rootCount; ordinal += 1) {\n if (!materialization.ordinalRoots.has(ordinal)) {\n throw new MaterializationValidationError(\n `Source staging ordinals must be contiguous from zero; missing ${ordinal}.`\n )\n }\n }\n assertReadyTopology(materialization)\n}\n\nfunction assertReadyTopology(materialization: InMemorySourceMaterialization): void {\n const rowsByRoot = new Map<string, StageSourceAssertion[]>()\n for (const row of materialization.rowsByEntity.values()) {\n const rootKey = projectionEntityKey(row.root)\n const rows = rowsByRoot.get(rootKey) ?? []\n rows.push(row)\n rowsByRoot.set(rootKey, rows)\n }\n\n for (const rootKey of materialization.rootOrdinals.keys()) {\n const rows = rowsByRoot.get(rootKey) ?? []\n if (materialization.roots.get(rootKey)?.deleted) {\n if (rows.length > 0)\n throw new MaterializationValidationError(\"Deleted source roots cannot contain assertions.\")\n continue\n }\n const first = rows[0]\n if (!first) {\n throw new MaterializationValidationError(`Source root ${rootKey} has no staged assertions.`)\n }\n const root = first.root\n\n if (materialization.projectionKind === \"link\") {\n if (\n rows.length !== 1 ||\n root.kind !== \"link\" ||\n first.assertion.kind !== \"link\" ||\n projectionEntityKey(first.assertion) !== rootKey\n ) {\n throw new MaterializationValidationError(\n `Link projection root ${rootKey} must contain exactly its matching link assertion.`\n )\n }\n continue\n }\n\n if (root.kind !== \"object\") {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must be an object.`\n )\n }\n const matchingObjects = rows.filter(\n (row) => row.assertion.kind === \"object\" && projectionEntityKey(row.assertion) === rootKey\n )\n const hasForeignAssertion = rows.some((row) => {\n if (row.assertion.kind === \"object\") return projectionEntityKey(row.assertion) !== rootKey\n return projectionEntityKey({ kind: \"object\", ref: row.assertion.ref.source }) !== rootKey\n })\n if (matchingObjects.length !== 1 || hasForeignAssertion) {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must contain exactly its matching object assertion plus links sourced from that root.`\n )\n }\n }\n}\n\nfunction assertCount(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nfunction assertNotBefore(\n value: string,\n minimum: string,\n label: string,\n minimumLabel: string\n): void {\n if (value < minimum) {\n throw new MaterializationValidationError(`${label} cannot precede source ${minimumLabel}.`)\n }\n}\n\nfunction compareTerminalMaterializations(\n [, left]: readonly [string, InMemorySourceMaterialization],\n [, right]: readonly [string, InMemorySourceMaterialization]\n): number {\n return (\n (left.terminalAt ?? \"\").localeCompare(right.terminalAt ?? \"\") ||\n left.source.projectionId.localeCompare(right.source.projectionId) ||\n left.materializationId.localeCompare(right.materializationId)\n )\n}\n",
|
|
35
34
|
"import type { OntologyStorage } from \"..\"\nimport type { InMemoryOntologyState, InMemoryOntologyStorageTestHooks } from \"./shared-state\"\n\nexport interface InMemoryOntologyStorageTestingAdapter {\n setTestHooks(hooks: InMemoryOntologyStorageTestHooks): void\n snapshot(): InMemoryOntologyState\n}\n\nconst testingAdapters = new WeakMap<object, InMemoryOntologyStorageTestingAdapter>()\n\nexport function registerInMemoryOntologyStorageTestingAdapter(\n storage: OntologyStorage,\n adapter: InMemoryOntologyStorageTestingAdapter\n): void {\n testingAdapters.set(storage, adapter)\n}\n\n/** @internal Relative test-only access; intentionally absent from every package barrel. */\nexport function getInMemoryOntologyStorageTestingAdapter(\n storage: OntologyStorage\n): InMemoryOntologyStorageTestingAdapter {\n const adapter = testingAdapters.get(storage)\n if (!adapter) {\n throw new Error(\"[Sixb] In-memory ontology storage testing adapter is unavailable.\")\n }\n return adapter\n}\n\nexport type { InMemoryOntologyStorageTestHooks } from \"./shared-state\"\n",
|
|
@@ -57,7 +56,7 @@
|
|
|
57
56
|
"import type {\n DefineMigrationsOptions,\n MigrationHistoryStore,\n MigrationPlan,\n MigrationRecord,\n MigrationReport,\n MigrationSet,\n MigrationStatus,\n MigrationStep,\n MigrationStepOptions,\n} from \"./types\"\n\nexport interface PlanMigrationSetParams<TContext> {\n readonly migrations: MigrationSet<TContext>\n readonly state: MigrationHistoryStore\n}\n\nexport interface RunMigrationSetParams<TContext> extends PlanMigrationSetParams<TContext> {\n readonly context: TContext\n readonly now?: () => string\n}\n\nexport function step<TContext>(\n id: string,\n up: (context: TContext) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<TContext> {\n const { version, name } = parseMigrationId(id)\n\n return {\n id,\n version,\n name,\n checksum: options.checksum,\n up,\n }\n}\n\nexport function defineMigrations<TContext>(\n options: DefineMigrationsOptions<TContext>\n): MigrationSet<TContext> {\n const steps = [...options.steps]\n assertValidSteps(options.adapterId, steps)\n\n return {\n adapterId: options.adapterId,\n latestVersion: steps.at(-1)?.version ?? 0,\n steps,\n }\n}\n\nasync function planMigrationSet<TContext>(\n params: PlanMigrationSetParams<TContext>\n): Promise<MigrationPlan<TContext>> {\n await params.state.ensure()\n\n const rows = await params.state.readHistory(params.migrations.adapterId)\n const applied = assertAppliedPrefix(params.migrations, rows)\n\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n applied,\n pending: params.migrations.steps.slice(applied.length),\n }\n}\n\nexport async function runMigrationSet<TContext>(\n params: RunMigrationSetParams<TContext>\n): Promise<MigrationReport> {\n const now = params.now ?? (() => new Date().toISOString())\n const plan = await planMigrationSet(params)\n const applied: string[] = []\n\n for (const migration of plan.pending) {\n await params.state.transaction(async () => {\n await params.state.markStarted(plan.adapterId, migration, now())\n await migration.up(params.context)\n await params.state.markApplied(plan.adapterId, migration, now())\n })\n\n applied.push(migration.id)\n }\n\n return {\n adapterId: plan.adapterId,\n latestVersion: plan.latestVersion,\n status: applied.length > 0 ? \"migrated\" : \"current\",\n applied,\n skipped: plan.applied.map((migration) => migration.id),\n }\n}\n\nfunction parseMigrationId(id: string): { version: number; name: string } {\n const match = /^(\\d+)(?:[-_](.+))?$/.exec(id)\n\n if (!match) {\n throw new Error(`[Sixb] Migration id must start with a numeric prefix: ${id}`)\n }\n\n const version = Number(match[1])\n\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(`[Sixb] Migration id must start with a positive version: ${id}`)\n }\n\n return {\n version,\n name: match[2] ?? id,\n }\n}\n\nfunction assertValidSteps<TContext>(\n adapterId: string,\n steps: readonly MigrationStep<TContext>[]\n): void {\n let previousVersion = 0\n\n for (const migration of steps) {\n if (migration.version <= previousVersion) {\n throw new Error(`[${adapterId}] Migrations must be ordered by ascending version.`)\n }\n\n previousVersion = migration.version\n }\n}\n\n/**\n * Classifies migration history without touching the database.\n *\n * The single source of truth for what a history means. `status()` reports the result\n * and `assertAppliedPrefix` throws on it, so the read-only probe and the migration\n * path can never disagree about whether a database is usable.\n *\n * `rows: null` means the history table itself is absent, which a probe must be able to\n * express without creating it.\n */\nexport function describeMigrationHistory<TContext>(params: {\n readonly migrations: MigrationSet<TContext>\n readonly rows: readonly MigrationRecord[] | null\n}): MigrationStatus {\n const { migrations, rows } = params\n const base = { adapterId: migrations.adapterId, latestVersion: migrations.latestVersion }\n\n // An adapter that declares no migrations and has recorded none is as current as it can\n // be. Reading that as `uninitialized` sent an operator to run `sixb db migrate`, which\n // would have applied nothing and reported the same state again. Only the empty history\n // qualifies: an adapter with no steps whose database recorded some is `ahead`, which\n // the walk below still finds.\n if (rows === null) {\n return migrations.steps.length === 0\n ? { ...base, appliedVersion: 0, state: \"current\" }\n : {\n ...base,\n appliedVersion: 0,\n state: \"uninitialized\",\n reason: \"No migration history exists. Run `sixb db migrate`.\",\n }\n }\n\n const applied = [...rows].sort((a, b) => a.version - b.version)\n const appliedVersion = applied.at(-1)?.version ?? 0\n const found = { ...base, appliedVersion }\n const seen = new Set<number>()\n\n for (const row of applied) {\n if (row.adapterId !== migrations.adapterId) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Migration state belongs to a different adapter: ${row.adapterId}`,\n }\n }\n\n if (row.status === \"started\") {\n return {\n ...found,\n state: \"dirty\",\n reason: `Migration '${row.id}' started and never finished. Resolve it by hand before serving traffic.`,\n }\n }\n\n if (row.status !== \"applied\") {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Invalid migration status: ${row.status}`,\n }\n }\n\n if (seen.has(row.version)) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Duplicate applied migration: ${row.version}`,\n }\n }\n\n seen.add(row.version)\n }\n\n for (const [index, row] of applied.entries()) {\n const migration = migrations.steps[index]\n\n if (!migration || row.version > migrations.latestVersion) {\n return {\n ...found,\n state: \"ahead\",\n reason:\n \"Database schema is newer than this Sixb version. Downgrades are not supported; \" +\n \"deploy a build that knows this schema.\",\n }\n }\n\n if (row.version !== migration.version || row.id !== migration.id) {\n return {\n ...found,\n state: \"incompatible\",\n reason: \"Applied migration history does not match declared migrations\",\n }\n }\n\n if ((row.checksum ?? null) !== (migration.checksum ?? null)) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Applied migration checksum changed: ${row.id}`,\n }\n }\n }\n\n if (applied.length === 0) {\n return migrations.steps.length === 0\n ? { ...found, state: \"current\" }\n : {\n ...found,\n state: \"uninitialized\",\n reason: \"Migration history is empty. Run `sixb db migrate`.\",\n }\n }\n\n const pendingCount = migrations.steps.length - applied.length\n if (pendingCount > 0) {\n return {\n ...found,\n state: \"pending\",\n reason: `${pendingCount} migration(s) are not applied. Run \\`sixb db migrate\\`.`,\n }\n }\n\n return { ...found, state: \"current\" }\n}\n\nfunction assertAppliedPrefix<TContext>(\n migrations: MigrationSet<TContext>,\n rows: readonly MigrationRecord[]\n): readonly MigrationRecord[] {\n const status = describeMigrationHistory({ migrations, rows })\n\n // `uninitialized` and `pending` are the normal inputs to a migration, not failures.\n if (\n status.state !== \"current\" &&\n status.state !== \"uninitialized\" &&\n status.state !== \"pending\"\n ) {\n throw new Error(`[${migrations.adapterId}] ${status.reason}`)\n }\n\n return [...rows].sort((a, b) => a.version - b.version)\n}\n",
|
|
58
57
|
"import type { SixbFailure } from \"../../errors/types\"\nimport type { OntologyObjectRef } from \"../../materialization/model\"\nimport type { MaterializationSession } from \"./materializations\"\n\nexport const VECTOR_INDEXING_FAILURE_CODES = [\n \"vector.model_unavailable\",\n \"vector.response_invalid\",\n \"vector.outcome_unknown\",\n \"internal.unexpected\",\n] as const\n\nexport type VectorIndexingFailureCode = (typeof VECTOR_INDEXING_FAILURE_CODES)[number]\n\n/** Latest desired representation; replacing its id fences every older delivery. */\nexport interface VectorIndexingRequest {\n readonly id: string\n /** Set only by projection materialization; a bounded, immediately durable group. */\n readonly batchId?: string\n readonly ref: OntologyObjectRef\n readonly profile: string\n readonly configuration: string\n readonly sourceFingerprint: string\n readonly sourceCommitId: string\n}\n\nexport interface VectorIndexingWork extends VectorIndexingRequest {\n readonly status: \"pending\" | \"running\" | \"ready\" | \"failed\"\n readonly availableAt: string\n readonly values?: readonly number[]\n readonly error?: SixbFailure<VectorIndexingFailureCode>\n}\n\nexport interface VectorIndexingUpdate {\n readonly id: string\n readonly expectedStatus: VectorIndexingWork[\"status\"]\n readonly status: VectorIndexingWork[\"status\"]\n readonly availableAt: string\n readonly values?: readonly number[]\n readonly error?: SixbFailure<VectorIndexingFailureCode>\n}\n\n/** Durable intent belongs to ontology storage; delivery leases belong to Queues. */\nexport interface OntologyVectorIndexingStorage {\n /** Called inside the transaction that changes the effective object. */\n schedule(input: {\n projectId: string\n session: MaterializationSession\n requests: readonly VectorIndexingRequest[]\n deleted: readonly OntologyObjectRef[]\n availableAt: string\n }): Promise<void>\n /** Clear matching intent atomically with a successful automatic or explicit vector write. */\n complete(input: {\n projectId: string\n session: MaterializationSession\n entries: readonly Pick<\n VectorIndexingRequest,\n \"ref\" | \"profile\" | \"configuration\" | \"sourceFingerprint\"\n >[]\n }): Promise<void>\n dispatched(input: {\n projectId: string\n ids: readonly string[]\n nextDispatchAt: string\n }): Promise<void>\n get(input: { projectId: string; id: string }): Promise<VectorIndexingWork | null>\n getBatch(input: { projectId: string; batchId: string }): Promise<readonly VectorIndexingWork[]>\n /** Read only the result this kernel batch is allowed to publish. */\n getBatchMember(input: {\n projectId: string\n batchId: string\n ref: OntologyObjectRef\n profile: string\n }): Promise<VectorIndexingWork | null>\n /** Atomic transitions; requireAll prevents admission if any prepared member was superseded. */\n updateBatch(input: {\n projectId: string\n updates: readonly VectorIndexingUpdate[]\n requireAll?: boolean\n }): Promise<boolean>\n /** Bounded fair redispatch scan. Never scans objects or backfills existing data. */\n listDue(input: {\n projectId: string\n now: string\n limit: number\n }): Promise<readonly VectorIndexingWork[]>\n /** CAS also fences concurrent deliveries and source changes. */\n update(input: {\n projectId: string\n id: string\n expectedStatus: VectorIndexingWork[\"status\"]\n status: VectorIndexingWork[\"status\"]\n availableAt: string\n values?: readonly number[]\n error?: SixbFailure<VectorIndexingFailureCode>\n }): Promise<boolean>\n remove(input: { projectId: string; id: string }): Promise<void>\n}\n"
|
|
59
58
|
],
|
|
60
|
-
"mappings": "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",
|
|
61
|
-
"debugId": "
|
|
59
|
+
"mappings": "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",
|
|
60
|
+
"debugId": "1A5AE33B23C6729064756E2164756E21",
|
|
62
61
|
"names": []
|
|
63
62
|
}
|