@sixb/core 0.1.16 → 0.1.18
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.js +30 -27
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +1 -1
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +6 -2
- package/dist/actions/worker.js.map +3 -3
- package/dist/agents/adapters.d.ts +7 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +7 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context/entries.d.ts +10 -1
- package/dist/agents/context/entries.d.ts.map +1 -1
- package/dist/agents/context/index.d.ts +1 -1
- package/dist/agents/context/index.d.ts.map +1 -1
- package/dist/agents/context/index.js +4 -2
- package/dist/agents/context/index.js.map +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +54 -46
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +8 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/request.d.ts +19 -5
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts +41 -0
- package/dist/agents/skills.d.ts.map +1 -0
- package/dist/agents/streams/index.js +1 -1
- package/dist/agents/streams/internal.js +1 -1
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +9 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/types.d.ts +6 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +5 -3
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/download-urls.d.ts +41 -0
- package/dist/blob-storage/download-urls.d.ts.map +1 -0
- package/dist/blob-storage/execution.d.ts +9 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/file-content.d.ts +18 -0
- package/dist/blob-storage/file-content.d.ts.map +1 -0
- package/dist/blob-storage/index.d.ts +1 -1
- package/dist/blob-storage/index.d.ts.map +1 -1
- package/dist/blob-storage/index.js +6 -4
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/internal.d.ts +4 -0
- package/dist/blob-storage/internal.d.ts.map +1 -0
- package/dist/blob-storage/internal.js +23 -0
- package/dist/blob-storage/internal.js.map +9 -0
- package/dist/blob-storage/media-type.d.ts +8 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -0
- package/dist/blob-storage/types.d.ts +12 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/blob-storage/validation.d.ts +6 -0
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/agent-context.d.ts +33 -0
- package/dist/bootstrap/agent-context.d.ts.map +1 -0
- package/dist/bootstrap/discovery.d.ts +23 -3
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +287 -75
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-kttr5ftm.js → chunk-1b1f2d5f.js} +23 -6
- package/dist/chunk-1b1f2d5f.js.map +12 -0
- package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
- package/dist/chunk-1hqwggsn.js.map +12 -0
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
- package/dist/{chunk-tnvafr7g.js → chunk-29yx306f.js} +124 -9
- package/dist/chunk-29yx306f.js.map +22 -0
- package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
- package/dist/chunk-3zxk45er.js +152 -0
- package/dist/chunk-3zxk45er.js.map +11 -0
- package/dist/{chunk-gmdvns8f.js → chunk-48e3cn2d.js} +2 -2
- package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
- package/dist/chunk-4as3wt1c.js.map +12 -0
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-2xvgy3x5.js → chunk-6h5m9xjx.js} +43 -415
- package/dist/{chunk-2xvgy3x5.js.map → chunk-6h5m9xjx.js.map} +7 -11
- package/dist/{chunk-cq44v1a6.js → chunk-7hpdd6r9.js} +3 -3
- package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
- package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
- package/dist/chunk-b9affek3.js +261 -0
- package/dist/chunk-b9affek3.js.map +12 -0
- package/dist/{chunk-zvmr2hqk.js → chunk-bs7sqkre.js} +10 -4
- package/dist/chunk-bs7sqkre.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-667x4drs.js → chunk-d0eb5yy6.js} +143 -7
- package/dist/chunk-d0eb5yy6.js.map +14 -0
- package/dist/chunk-d62kjtbg.js.map +2 -2
- package/dist/{chunk-gkxsenvp.js → chunk-de4z2bj6.js} +31 -7
- package/dist/{chunk-gkxsenvp.js.map → chunk-de4z2bj6.js.map} +5 -4
- package/dist/{chunk-mdnw7nj8.js → chunk-dnmadg9k.js} +35 -10
- package/dist/chunk-dnmadg9k.js.map +15 -0
- package/dist/chunk-enpsx8k5.js +127 -0
- package/dist/chunk-enpsx8k5.js.map +10 -0
- package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
- package/dist/chunk-ere85b8y.js.map +15 -0
- package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
- package/dist/chunk-ewqa58h9.js.map +11 -0
- package/dist/{chunk-7g2gjvah.js → chunk-ex496vct.js} +1 -1
- package/dist/{chunk-nvymebc1.js → chunk-f1zxad2t.js} +1 -1
- package/dist/{chunk-3q7z9hd4.js → chunk-fe52eczz.js} +483 -101
- package/dist/chunk-fe52eczz.js.map +49 -0
- package/dist/{chunk-8x74221e.js → chunk-fx93hd2n.js} +79 -32
- package/dist/chunk-fx93hd2n.js.map +20 -0
- package/dist/{chunk-39tqv9hz.js → chunk-gc4ntf7d.js} +6 -7
- package/dist/{chunk-39tqv9hz.js.map → chunk-gc4ntf7d.js.map} +3 -4
- package/dist/chunk-h8teetr0.js +9 -0
- package/dist/chunk-h8teetr0.js.map +10 -0
- package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
- package/dist/chunk-hkc3jct7.js.map +10 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-h044jb97.js → chunk-htr6wjmv.js} +282 -58
- package/dist/chunk-htr6wjmv.js.map +19 -0
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-chdg6eqq.js → chunk-k6hrnf35.js} +5 -5
- package/dist/chunk-k6hrnf35.js.map +10 -0
- package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
- package/dist/chunk-kpx7jrmn.js.map +12 -0
- package/dist/{chunk-b9y8hcm2.js → chunk-mfs23znk.js} +1 -1
- package/dist/{chunk-kvysp909.js → chunk-ny3xyvcn.js} +32 -19
- package/dist/chunk-ny3xyvcn.js.map +17 -0
- package/dist/{chunk-h4138ww2.js → chunk-p0dqwj3n.js} +450 -799
- package/dist/chunk-p0dqwj3n.js.map +49 -0
- package/dist/{chunk-f72rbvsb.js → chunk-p844e0rn.js} +23 -8
- package/dist/chunk-p844e0rn.js.map +19 -0
- package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
- package/dist/chunk-pfp1txq2.js.map +11 -0
- package/dist/chunk-pqajwytd.js.map +3 -3
- package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
- package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
- package/dist/{chunk-69kt9q43.js → chunk-qkbx3tf6.js} +17 -128
- package/dist/{chunk-69kt9q43.js.map → chunk-qkbx3tf6.js.map} +6 -7
- package/dist/{chunk-h866d223.js → chunk-qkvz64nd.js} +2 -2
- package/dist/{chunk-vsvrv7n8.js → chunk-qmnnhde6.js} +4 -8
- package/dist/{chunk-vsvrv7n8.js.map → chunk-qmnnhde6.js.map} +3 -3
- package/dist/{chunk-6z1q7j19.js → chunk-qq90g05n.js} +1128 -782
- package/dist/chunk-qq90g05n.js.map +66 -0
- package/dist/{chunk-40qb8wpe.js → chunk-qxvp5epv.js} +84 -29
- package/dist/{chunk-40qb8wpe.js.map → chunk-qxvp5epv.js.map} +10 -9
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
- package/dist/chunk-rj69qcrd.js.map +11 -0
- package/dist/{chunk-tkdbge6v.js → chunk-rt9p8m9t.js} +1 -1
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-a7ne02hk.js → chunk-s4jhg8a3.js} +351 -296
- package/dist/chunk-s4jhg8a3.js.map +15 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-dsv8kdgk.js → chunk-tffvfy6s.js} +8 -7
- package/dist/{chunk-dsv8kdgk.js.map → chunk-tffvfy6s.js.map} +3 -3
- package/dist/{chunk-sbcm1b92.js → chunk-v6xpd60t.js} +3 -3
- package/dist/{chunk-nj0020ay.js → chunk-vgk3hknm.js} +1 -1
- package/dist/{chunk-qnd7ehe5.js → chunk-vx2yp45y.js} +2 -2
- package/dist/{chunk-vjqt7q3a.js → chunk-vz3gc1tm.js} +607 -45
- package/dist/chunk-vz3gc1tm.js.map +41 -0
- package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
- package/dist/chunk-wt4szfec.js.map +14 -0
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/{chunk-swxzncrv.js → chunk-y05543x6.js} +51 -8
- package/dist/{chunk-swxzncrv.js.map → chunk-y05543x6.js.map} +5 -5
- package/dist/{chunk-zdkcdshk.js → chunk-y9jmd7e5.js} +41 -3
- package/dist/{chunk-zdkcdshk.js.map → chunk-y9jmd7e5.js.map} +4 -3
- package/dist/{chunk-nkbev3tr.js → chunk-yv9czyfr.js} +3 -3
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- package/dist/{chunk-cxj8y8t0.js → chunk-za5yd58j.js} +2 -2
- package/dist/{chunk-zb47r1c8.js → chunk-zb77kjth.js} +3 -3
- package/dist/{chunk-dp7yk20b.js → chunk-zxawp1n2.js} +1 -1
- package/dist/datasets/builders.d.ts +12 -1
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +27 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -1
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/types.d.ts +2 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +5 -0
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +10 -5
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/properties.d.ts.map +1 -1
- package/dist/events/execution.d.ts +2 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/objects.d.ts +5 -0
- package/dist/events/types/objects.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +10 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +49 -43
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +9 -2
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +45 -41
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +46 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -71
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +5 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +1 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +8 -5
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +26 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +5 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/maintenance/types.d.ts +1 -4
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +20 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -0
- package/dist/materialization/events.d.ts +29 -3
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +4 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +9 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -10
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/effective/build-events.d.ts +5 -21
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +2 -3
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
- package/dist/materializer/effective/vectors.d.ts +2 -3
- package/dist/materializer/effective/vectors.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +1 -11
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/execution/work-executor.d.ts +5 -7
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +1 -3
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +35 -33
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +8 -11
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/batching.d.ts +5 -0
- package/dist/materializer/shared/batching.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -8
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +20 -0
- package/dist/models/audio/catalog.d.ts.map +1 -0
- package/dist/models/audio/errors.d.ts +8 -0
- package/dist/models/audio/errors.d.ts.map +1 -0
- package/dist/models/audio/file.d.ts +9 -0
- package/dist/models/audio/file.d.ts.map +1 -0
- package/dist/models/audio/runtime.d.ts +8 -0
- package/dist/models/audio/runtime.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +60 -0
- package/dist/models/audio/types.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +24 -2
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/events.d.ts +3 -0
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +6 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.js +27 -24
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-admission.d.ts +6 -1
- package/dist/models/execution/model-call-admission.d.ts.map +1 -1
- package/dist/models/execution/model-call-limits.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +4 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/reranking.d.ts +4 -0
- package/dist/models/execution/reranking.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +2 -1
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +7 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +6 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/language-model.d.ts +6 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/pricing.d.ts +2 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/reranking-model.d.ts +49 -0
- package/dist/models/reranking-model.d.ts.map +1 -0
- package/dist/objects/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +6 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +2 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +31 -27
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +41 -0
- package/dist/objects/property-clearance.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +5 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +1 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +27 -24
- 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/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/primary-id.d.ts +7 -0
- package/dist/objects/query/primary-id.d.ts.map +1 -0
- package/dist/objects/query/reranking-executor.d.ts +13 -0
- package/dist/objects/query/reranking-executor.d.ts.map +1 -0
- package/dist/objects/query/reranking-limits.d.ts +3 -0
- package/dist/objects/query/reranking-limits.d.ts.map +1 -0
- package/dist/objects/query/reranking-query.d.ts +4 -0
- package/dist/objects/query/reranking-query.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +10 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/file-handle.d.ts +6 -0
- package/dist/objects/sdk/file-handle.d.ts.map +1 -0
- package/dist/objects/sdk/object-handle.d.ts +2 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -0
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -0
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -2
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/vectors/indexing-dispatch.d.ts +21 -0
- package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +12 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +35 -0
- package/dist/ontology/docs-markdown.d.ts.map +1 -0
- package/dist/ontology/docs.d.ts +50 -0
- package/dist/ontology/docs.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +1 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +7 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +19 -0
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +3 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +276 -3
- package/dist/ontology/internal.js.map +4 -3
- package/dist/ontology/query-capabilities.d.ts +1 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +8 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +25 -0
- package/dist/ontology/types.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/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +7 -0
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +29 -26
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +27 -24
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +3 -0
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +4 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +11 -2
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -1
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +14 -2
- 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.d.ts +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +32 -27
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/locale.d.ts +9 -0
- package/dist/runtime/locale.d.ts.map +1 -0
- package/dist/runtime/public-origin.d.ts +10 -0
- package/dist/runtime/public-origin.d.ts.map +1 -0
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +1 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +42 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/runtime.d.ts +3 -0
- package/dist/scheduler/runtime.d.ts.map +1 -1
- package/dist/security/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/index.d.ts +4 -4
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/markings.d.ts +19 -0
- package/dist/security/markings.d.ts.map +1 -0
- package/dist/security/redactions.d.ts +4 -0
- package/dist/security/redactions.d.ts.map +1 -0
- package/dist/security/registry.d.ts +7 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +25 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -21
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +5 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +15 -9
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +3 -3
- package/dist/storage/ai-cost/types.d.ts +1 -1
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +7 -2
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +4 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-limits/types.d.ts +3 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +8 -4
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
- package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/file-download-grants/index.d.ts +3 -0
- package/dist/storage/file-download-grants/index.d.ts.map +1 -0
- package/dist/storage/file-download-grants/record.d.ts +11 -0
- package/dist/storage/file-download-grants/record.d.ts.map +1 -0
- package/dist/storage/file-download-grants/types.d.ts +44 -0
- package/dist/storage/file-download-grants/types.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +10 -7
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/in-memory/index.d.ts +4 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +6 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +35 -32
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +9 -4
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +3 -3
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/types.d.ts +7 -0
- package/dist/storage/migrations/types.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/query-preparation.d.ts +39 -0
- package/dist/storage/objects/query-preparation.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +9 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -6
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -2
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
- package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
- package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
- package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -3
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +40 -59
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +4 -6
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +114 -3
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -39
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +26 -12
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/replacement-plans.d.ts +103 -0
- package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/sources.d.ts +0 -8
- package/dist/storage/ontology/sources.d.ts.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/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/types.d.ts +2 -0
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +30 -27
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
- package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2556 -1495
- package/dist/testing/index.js.map +14 -13
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts +14 -0
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +5 -1
- 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/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +25 -22
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +15 -17
- package/dist/workers/index.js.map +3 -3
- package/dist/workers/queue-worker.d.ts +3 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +51 -47
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -3
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +2 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/actions/read-facade.ts +2 -1
- package/src/actions/types/context.ts +5 -2
- package/src/actions/validation.ts +4 -1
- package/src/agents/adapters.ts +15 -0
- package/src/agents/authority.ts +15 -0
- package/src/agents/context/entries.ts +48 -4
- package/src/agents/context/index.ts +1 -0
- package/src/agents/context-compaction.ts +6 -0
- package/src/agents/errors.ts +3 -0
- package/src/agents/index.ts +13 -1
- package/src/agents/message.ts +9 -0
- package/src/agents/request.ts +178 -22
- package/src/agents/skills.ts +63 -0
- package/src/agents/types.ts +35 -5
- package/src/auth/runtime.ts +14 -0
- package/src/auth/types.ts +6 -0
- package/src/authorization/resolve.ts +6 -1
- package/src/authorization/types.ts +7 -0
- package/src/blob-storage/download-urls.ts +138 -0
- package/src/blob-storage/execution.ts +44 -1
- package/src/blob-storage/file-content.ts +106 -0
- package/src/blob-storage/index.ts +1 -0
- package/src/blob-storage/internal.ts +8 -0
- package/src/blob-storage/media-type.ts +29 -0
- package/src/blob-storage/types.ts +13 -1
- package/src/blob-storage/validation.ts +13 -0
- package/src/bootstrap/agent-context.ts +356 -0
- package/src/bootstrap/discovery.ts +100 -33
- package/src/bootstrap/index.ts +1 -1
- package/src/bootstrap/ontology-type-manifest.ts +3 -38
- package/src/datasets/builders.ts +17 -1
- package/src/datasets/execution.ts +110 -2
- package/src/datasets/index.ts +7 -1
- package/src/datasets/types.ts +2 -0
- package/src/datasets/write.ts +21 -2
- package/src/edits/properties.ts +3 -0
- package/src/events/execution.ts +15 -16
- package/src/events/types/objects.ts +5 -0
- package/src/execution/agent.ts +27 -0
- package/src/execution/authorization.ts +1 -0
- package/src/execution/authorized-object-reader.ts +104 -35
- package/src/execution/scopes.ts +2 -6
- package/src/http/api-routes.ts +4 -3
- package/src/index.ts +52 -2
- package/src/lake-storage/in-memory.ts +38 -9
- package/src/lake-storage/index.ts +2 -0
- package/src/lake-storage/types.ts +30 -0
- package/src/maintenance/ontology-maintenance.ts +50 -23
- package/src/maintenance/types.ts +1 -4
- package/src/materialization/event-envelopes.ts +168 -0
- package/src/materialization/events.ts +40 -4
- package/src/materialization/index.ts +9 -1
- package/src/materializer/README.md +55 -10
- package/src/materializer/edits/commit.ts +3 -19
- package/src/materializer/edits/plan.ts +20 -71
- package/src/materializer/effective/build-events.ts +42 -136
- package/src/materializer/effective/vector-indexing.ts +2 -3
- package/src/materializer/effective/vectors.ts +2 -3
- package/src/materializer/execution/scope.ts +1 -38
- package/src/materializer/execution/work-executor.ts +21 -115
- package/src/materializer/execution/work-records.ts +0 -15
- package/src/materializer/projections/replace.ts +106 -63
- package/src/materializer/projections/replacement-plan.ts +73 -218
- package/src/materializer/shared/batching.ts +7 -0
- package/src/materializer/telemetry/append.ts +2 -14
- package/src/materializer/telemetry/plan.ts +6 -43
- package/src/models/audio/catalog.ts +90 -0
- package/src/models/audio/errors.ts +19 -0
- package/src/models/audio/file.ts +78 -0
- package/src/models/audio/runtime.ts +182 -0
- package/src/models/audio/types.ts +69 -0
- package/src/models/catalog.ts +78 -7
- package/src/models/definitions.ts +8 -1
- package/src/models/events.ts +3 -0
- package/src/models/execution/README.md +24 -4
- package/src/models/execution/binding.ts +6 -0
- package/src/models/execution/model-call-admission.ts +6 -1
- package/src/models/execution/model-call-limits.ts +21 -11
- package/src/models/execution/model-call-recorder.ts +11 -0
- package/src/models/execution/model-call-recovery.ts +1 -0
- package/src/models/execution/reranking.ts +137 -0
- package/src/models/execution/session.ts +2 -2
- package/src/models/execution/usage.ts +1 -0
- package/src/models/execution.ts +11 -3
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +32 -0
- package/src/models/language-model.ts +6 -0
- package/src/models/pricing.ts +2 -1
- package/src/models/reranking-model.ts +114 -0
- package/src/objects/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +4 -1
- package/src/objects/materializer-adapter.ts +3 -0
- package/src/objects/object/upsert-batch.ts +4 -1
- package/src/objects/object/upsert.ts +3 -1
- package/src/objects/property-clearance.ts +209 -0
- package/src/objects/query/executor.ts +85 -38
- package/src/objects/query/explain.ts +8 -0
- package/src/objects/query/index.ts +1 -0
- package/src/objects/query/ir.ts +10 -0
- package/src/objects/query/normalize.ts +2 -0
- package/src/objects/query/planner.ts +12 -1
- package/src/objects/query/primary-id.ts +56 -0
- package/src/objects/query/reranking-executor.ts +91 -0
- package/src/objects/query/reranking-limits.ts +3 -0
- package/src/objects/query/reranking-query.ts +8 -0
- package/src/objects/query/validate.ts +166 -15
- package/src/objects/sdk/file-handle.ts +77 -0
- package/src/objects/sdk/object-handle.ts +8 -4
- package/src/objects/sdk/object-set.ts +5 -2
- package/src/objects/sdk/query-builder.ts +15 -2
- package/src/objects/sdk/query-executor.ts +2 -2
- package/src/objects/sdk/runtime-query-executor.ts +7 -4
- package/src/objects/vectors/README.md +6 -2
- package/src/objects/vectors/indexing-dispatch.ts +83 -0
- package/src/objects/vectors/query.ts +3 -0
- package/src/ontology/builders.ts +19 -2
- package/src/ontology/docs-markdown.ts +394 -0
- package/src/ontology/docs.ts +196 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/inference/index.ts +25 -0
- package/src/ontology/internal.ts +7 -0
- package/src/ontology/query-capabilities.ts +1 -1
- package/src/ontology/tokens.ts +13 -2
- package/src/ontology/types.ts +26 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/query.ts +57 -0
- package/src/ontology/validation/schema.ts +26 -1
- package/src/query.ts +4 -0
- package/src/queues/in-memory.ts +54 -19
- package/src/queues/types.ts +4 -0
- package/src/runtime/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +73 -2
- package/src/runtime/index.ts +4 -0
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/public-origin.ts +33 -0
- package/src/runtime/resolve-definitions.ts +28 -1
- package/src/runtime/sixb.ts +14 -3
- package/src/runtime/types.ts +51 -5
- package/src/scheduler/runtime.ts +11 -2
- package/src/security/builders.ts +49 -5
- package/src/security/index.ts +6 -1
- package/src/security/markings.ts +313 -0
- package/src/security/redactions.ts +6 -0
- package/src/security/registry.ts +21 -1
- package/src/security/types.ts +26 -0
- package/src/security/validation.ts +59 -2
- package/src/storage/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/ai-cost/analytics.ts +2 -0
- package/src/storage/ai-cost/codec.ts +2 -1
- package/src/storage/ai-cost/types.ts +1 -0
- package/src/storage/ai-cost/validation.ts +21 -8
- package/src/storage/ai-limits/in-memory.ts +10 -2
- package/src/storage/ai-limits/provider.ts +29 -2
- package/src/storage/ai-limits/types.ts +3 -0
- package/src/storage/ai-usage/record.ts +9 -0
- package/src/storage/ai-usage/types.ts +8 -4
- package/src/storage/ai-usage/usage.ts +2 -0
- package/src/storage/file-download-grants/in-memory.ts +73 -0
- package/src/storage/file-download-grants/index.ts +8 -0
- package/src/storage/file-download-grants/record.ts +47 -0
- package/src/storage/file-download-grants/types.ts +48 -0
- package/src/storage/in-memory/index.ts +13 -2
- package/src/storage/index.ts +32 -13
- package/src/storage/internal.ts +1 -0
- package/src/storage/migrations/index.ts +1 -0
- package/src/storage/migrations/migrate-storage.ts +36 -12
- package/src/storage/migrations/types.ts +8 -0
- package/src/storage/objects/in-memory/query.ts +2 -0
- package/src/storage/objects/in-memory/selected-reader.ts +1 -0
- package/src/storage/objects/in-memory/storage.ts +1 -0
- package/src/storage/objects/query-preparation.ts +77 -0
- package/src/storage/objects/types.ts +9 -0
- package/src/storage/ontology/commits.ts +1 -6
- package/src/storage/ontology/in-memory/index.ts +28 -9
- package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
- package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
- package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
- package/src/storage/ontology/in-memory/materializations.ts +172 -653
- package/src/storage/ontology/in-memory/outbox.ts +37 -29
- package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
- package/src/storage/ontology/in-memory/shared-state.ts +24 -2
- package/src/storage/ontology/in-memory/source-roots.ts +7 -2
- package/src/storage/ontology/in-memory/sources.ts +7 -33
- package/src/storage/ontology/in-memory/state-reader.ts +245 -0
- package/src/storage/ontology/index.ts +19 -13
- package/src/storage/ontology/materializations.ts +45 -74
- package/src/storage/ontology/outbox.ts +4 -7
- package/src/storage/ontology/provider-header-validation.ts +0 -57
- package/src/storage/ontology/provider-work.ts +381 -90
- package/src/storage/ontology/provider.ts +74 -171
- package/src/storage/ontology/replacement-plans.ts +117 -0
- package/src/storage/ontology/sources.ts +0 -12
- package/src/storage/operation-scope.ts +33 -1
- package/src/storage/projection-runs/in-memory.ts +7 -1
- package/src/storage/projection-runs/types.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/testing/ai-cost-storage-contract.ts +1 -0
- package/src/testing/ai-limit-storage-contract.ts +62 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/file-download-grant-storage-contract.ts +139 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/lake-storage-contract.ts +87 -1
- package/src/testing/materializer-storage-contract.ts +1008 -1
- package/src/testing/object-read-scope-contract.ts +1 -0
- package/src/testing/ontology-contract-fixture.ts +11 -87
- package/src/testing/ontology-storage-contract.ts +70 -39
- package/src/testing/projection-run-storage-contract.ts +14 -0
- package/src/testing/queues-contract.ts +59 -0
- package/src/workers/queue-worker.ts +19 -16
- package/src/workflows/builders.ts +24 -1
- package/src/workflows/request.ts +3 -0
- package/src/workflows/types.ts +6 -3
- package/src/workflows/validation.ts +32 -4
- package/dist/chunk-3q7z9hd4.js.map +0 -46
- package/dist/chunk-667x4drs.js.map +0 -12
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6z1q7j19.js.map +0 -62
- package/dist/chunk-7ytf06d3.js +0 -113
- package/dist/chunk-7ytf06d3.js.map +0 -10
- package/dist/chunk-8x74221e.js.map +0 -20
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-a0073121.js.map +0 -12
- package/dist/chunk-a7ne02hk.js.map +0 -15
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-chdg6eqq.js.map +0 -10
- package/dist/chunk-dmn70ztd.js.map +0 -11
- package/dist/chunk-f72rbvsb.js.map +0 -19
- package/dist/chunk-g4rbm4a6.js.map +0 -15
- package/dist/chunk-h044jb97.js.map +0 -15
- package/dist/chunk-h3v76ams.js.map +0 -11
- package/dist/chunk-h4138ww2.js.map +0 -50
- package/dist/chunk-hgqpcmyr.js.map +0 -12
- package/dist/chunk-jgwb25gc.js.map +0 -12
- package/dist/chunk-k4kkp58d.js.map +0 -11
- package/dist/chunk-kttr5ftm.js.map +0 -12
- package/dist/chunk-kvysp909.js.map +0 -17
- package/dist/chunk-mdnw7nj8.js.map +0 -15
- package/dist/chunk-s3csryxe.js.map +0 -11
- package/dist/chunk-tnvafr7g.js.map +0 -19
- package/dist/chunk-vjqt7q3a.js.map +0 -36
- package/dist/chunk-xnx96gfy.js.map +0 -15
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- package/dist/chunk-zvmr2hqk.js.map +0 -12
- package/dist/materializer/execution/plan-stream.d.ts +0 -8
- package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
- package/src/materializer/execution/plan-stream.ts +0 -121
- /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
- /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
- /package/dist/{chunk-gmdvns8f.js.map → chunk-48e3cn2d.js.map} +0 -0
- /package/dist/{chunk-cq44v1a6.js.map → chunk-7hpdd6r9.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-7g2gjvah.js.map → chunk-ex496vct.js.map} +0 -0
- /package/dist/{chunk-nvymebc1.js.map → chunk-f1zxad2t.js.map} +0 -0
- /package/dist/{chunk-b9y8hcm2.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-h866d223.js.map → chunk-qkvz64nd.js.map} +0 -0
- /package/dist/{chunk-tkdbge6v.js.map → chunk-rt9p8m9t.js.map} +0 -0
- /package/dist/{chunk-sbcm1b92.js.map → chunk-v6xpd60t.js.map} +0 -0
- /package/dist/{chunk-nj0020ay.js.map → chunk-vgk3hknm.js.map} +0 -0
- /package/dist/{chunk-qnd7ehe5.js.map → chunk-vx2yp45y.js.map} +0 -0
- /package/dist/{chunk-nkbev3tr.js.map → chunk-yv9czyfr.js.map} +0 -0
- /package/dist/{chunk-cxj8y8t0.js.map → chunk-za5yd58j.js.map} +0 -0
- /package/dist/{chunk-zb47r1c8.js.map → chunk-zb77kjth.js.map} +0 -0
- /package/dist/{chunk-dp7yk20b.js.map → chunk-zxawp1n2.js.map} +0 -0
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
ActionRunTimeoutError2,
|
|
4
|
+
createSixbError2,
|
|
5
|
+
toSixbFailure2
|
|
6
|
+
} from "./chunk-6fsr7y93.js";
|
|
2
7
|
import {
|
|
3
8
|
MAX_OBJECT_READ_FACETS2,
|
|
4
9
|
assertObjectReadOutputWithinLimit2,
|
|
@@ -10,19 +15,14 @@ import {
|
|
|
10
15
|
isAllowed2,
|
|
11
16
|
assertAuthorized2,
|
|
12
17
|
canViewActionRun2
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import {
|
|
15
|
-
ActionRunTimeoutError2,
|
|
16
|
-
createSixbError2,
|
|
17
|
-
toSixbFailure2
|
|
18
|
-
} from "./chunk-6fsr7y93.js";
|
|
18
|
+
} from "./chunk-qkbx3tf6.js";
|
|
19
19
|
import {
|
|
20
20
|
collectUserRefIds,
|
|
21
21
|
userReferenceProblem
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-y05543x6.js";
|
|
23
23
|
import {
|
|
24
24
|
isObjectRefSchema2
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-rt9p8m9t.js";
|
|
26
26
|
import {
|
|
27
27
|
ACTION_RUN_FAILURE_CODES2,
|
|
28
28
|
parseActionRunFailure2
|
|
@@ -35,11 +35,17 @@ import {
|
|
|
35
35
|
normalizeActionParams,
|
|
36
36
|
validateActionSubject,
|
|
37
37
|
resolveObjectActionSubject
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-6h5m9xjx.js";
|
|
39
39
|
import {
|
|
40
40
|
snapshotVectorProfiles
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-bs7sqkre.js";
|
|
42
|
+
import {
|
|
43
|
+
resolvePropertyClearance,
|
|
44
|
+
redactObjectRow,
|
|
45
|
+
createClearanceQueryAdmission
|
|
46
|
+
} from "./chunk-d0eb5yy6.js";
|
|
42
47
|
import {
|
|
48
|
+
composeObjectQueryAdmissions,
|
|
43
49
|
validateObjectQuery2,
|
|
44
50
|
validateObjectQueryWithAdmission,
|
|
45
51
|
executeObjectQuery2,
|
|
@@ -49,23 +55,23 @@ import {
|
|
|
49
55
|
validateObjectFacetRequests,
|
|
50
56
|
preflightObjectQueryLinks,
|
|
51
57
|
executeObjectQueryLinks2
|
|
52
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-htr6wjmv.js";
|
|
53
59
|
import {
|
|
54
60
|
reportRunFailure2
|
|
55
61
|
} from "./chunk-vjcd8d27.js";
|
|
56
|
-
import {
|
|
57
|
-
ObjectQueryValidationError2
|
|
58
|
-
} from "./chunk-a0073121.js";
|
|
59
62
|
import {
|
|
60
63
|
executionRecordInputFromRuntime,
|
|
61
64
|
ensureExecutionRecord2,
|
|
62
65
|
createPrimitiveExecutionRecord
|
|
63
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-ex496vct.js";
|
|
67
|
+
import {
|
|
68
|
+
ObjectQueryValidationError2
|
|
69
|
+
} from "./chunk-kpx7jrmn.js";
|
|
64
70
|
import {
|
|
65
71
|
actionSubjectsEqual2,
|
|
66
72
|
actionRunParamsEqual2,
|
|
67
73
|
isTerminalActionRun2
|
|
68
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-y9jmd7e5.js";
|
|
69
75
|
import {
|
|
70
76
|
findPrimitiveParentRequestExecution
|
|
71
77
|
} from "./chunk-ey1nk510.js";
|
|
@@ -625,11 +631,13 @@ class AuthorizedObjectReaderImpl {
|
|
|
625
631
|
#runtime;
|
|
626
632
|
#ontology;
|
|
627
633
|
#embeddingModels;
|
|
634
|
+
#rerankingModels;
|
|
628
635
|
#ontologyView;
|
|
629
636
|
#storage;
|
|
630
637
|
#delegatedObjectTypeIds;
|
|
631
638
|
#delegatedLinkDefinitions;
|
|
632
639
|
#delegatedQueryAdmission;
|
|
640
|
+
#clearance;
|
|
633
641
|
constructor(key, input) {
|
|
634
642
|
if (key !== readerConstructionKey) {
|
|
635
643
|
throw new Error("[Sixb] AuthorizedObjectReader can only be created by Core.");
|
|
@@ -638,10 +646,12 @@ class AuthorizedObjectReaderImpl {
|
|
|
638
646
|
this.#authority = input.authority;
|
|
639
647
|
this.#ontology = input.ontology;
|
|
640
648
|
this.#embeddingModels = input.embeddingModels;
|
|
649
|
+
this.#rerankingModels = input.rerankingModels;
|
|
641
650
|
this.#storage = input.storage;
|
|
642
651
|
this.#delegatedObjectTypeIds = input.authority.type === "delegated" ? new Set(input.authority.objectRead.scope.objects.map((object) => object.objectTypeId)) : undefined;
|
|
643
652
|
this.#delegatedLinkDefinitions = input.authority.type === "delegated" ? new Set(input.authority.objectRead.scope.steps.map(delegatedLinkDefinitionKey)) : undefined;
|
|
644
653
|
this.#delegatedQueryAdmission = input.authority.type === "delegated" ? createSelectedObjectQueryAdmission(input.authority.objectRead.scope) : undefined;
|
|
654
|
+
this.#clearance = clearanceForAuthority(input.authority, input.ontology);
|
|
645
655
|
this.#runtime = Object.freeze({
|
|
646
656
|
projectId: input.scope.execution.projectId,
|
|
647
657
|
runtimeAuthorization: input.scope.authorization,
|
|
@@ -675,10 +685,11 @@ class AuthorizedObjectReaderImpl {
|
|
|
675
685
|
primaryId: input.primaryId
|
|
676
686
|
});
|
|
677
687
|
this.#assertObjectTypesViewable([request.objectTypeId]);
|
|
678
|
-
|
|
688
|
+
const row = await this.#storage.getByPrimaryId({
|
|
679
689
|
...request,
|
|
680
690
|
projectId: this.#runtime.projectId
|
|
681
|
-
})
|
|
691
|
+
});
|
|
692
|
+
return detachReadResult(row && this.#redact(row));
|
|
682
693
|
}
|
|
683
694
|
async getByPrimaryIdBatch(input) {
|
|
684
695
|
const request = snapshotReadValue({
|
|
@@ -688,10 +699,11 @@ class AuthorizedObjectReaderImpl {
|
|
|
688
699
|
}))
|
|
689
700
|
});
|
|
690
701
|
this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId));
|
|
691
|
-
|
|
702
|
+
const rows = await this.#storage.getByPrimaryIdBatch({
|
|
692
703
|
...request,
|
|
693
704
|
projectId: this.#runtime.projectId
|
|
694
|
-
})
|
|
705
|
+
});
|
|
706
|
+
return detachReadResult(new Map([...rows].map(([key, row]) => [key, this.#redact(row)])));
|
|
695
707
|
}
|
|
696
708
|
async canReadObjectProperty(input) {
|
|
697
709
|
const request = snapshotReadValue({
|
|
@@ -700,6 +712,8 @@ class AuthorizedObjectReaderImpl {
|
|
|
700
712
|
propertyId: input.propertyId
|
|
701
713
|
});
|
|
702
714
|
this.#assertObjectTypesViewable([request.objectTypeId]);
|
|
715
|
+
if (this.#hidesProperty(request))
|
|
716
|
+
return false;
|
|
703
717
|
if (this.#authority.type !== "delegated")
|
|
704
718
|
return true;
|
|
705
719
|
const [readable] = await this.#storage.selectsObjectProperties({
|
|
@@ -717,12 +731,11 @@ class AuthorizedObjectReaderImpl {
|
|
|
717
731
|
}))
|
|
718
732
|
});
|
|
719
733
|
this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId));
|
|
720
|
-
|
|
721
|
-
return request.items.map(() => true);
|
|
722
|
-
return detachReadResult(await this.#storage.selectsObjectProperties({
|
|
734
|
+
const selected = this.#authority.type === "delegated" ? await this.#storage.selectsObjectProperties({
|
|
723
735
|
...request,
|
|
724
736
|
projectId: this.#runtime.projectId
|
|
725
|
-
}));
|
|
737
|
+
}) : request.items.map(() => true);
|
|
738
|
+
return request.items.map((item, index) => !this.#hidesProperty(item) && selected[index] === true);
|
|
726
739
|
}
|
|
727
740
|
async list(input) {
|
|
728
741
|
const request = snapshotReadValue({
|
|
@@ -742,11 +755,12 @@ class AuthorizedObjectReaderImpl {
|
|
|
742
755
|
if (Array.isArray(objectTypeId) && objectTypeId.length === 0) {
|
|
743
756
|
return { objects: [], hasMore: false, total: 0 };
|
|
744
757
|
}
|
|
745
|
-
|
|
758
|
+
const page = await this.#storage.list({
|
|
746
759
|
...request,
|
|
747
760
|
...objectTypeId === undefined ? {} : { objectTypeId },
|
|
748
761
|
projectId: this.#runtime.projectId
|
|
749
|
-
})
|
|
762
|
+
});
|
|
763
|
+
return detachReadResult({ ...page, objects: page.objects.map((row) => this.#redact(row)) });
|
|
750
764
|
}
|
|
751
765
|
async listLinks(input) {
|
|
752
766
|
const request = snapshotReadValue({
|
|
@@ -786,12 +800,13 @@ class AuthorizedObjectReaderImpl {
|
|
|
786
800
|
const query = snapshotAuthoredQuery(input.query);
|
|
787
801
|
const includeTotal = snapshotReadValue(input.includeTotal);
|
|
788
802
|
const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query;
|
|
789
|
-
|
|
803
|
+
const result = await executeObjectQuery2({
|
|
790
804
|
query: executionQuery,
|
|
791
805
|
...includeTotal === undefined ? {} : { includeTotal },
|
|
792
806
|
projectId: this.#runtime.projectId,
|
|
793
807
|
signal: input.signal
|
|
794
|
-
}, this.#queryExecutorOptions())
|
|
808
|
+
}, this.#queryExecutorOptions());
|
|
809
|
+
return detachReadResult({ ...result, objects: result.objects.map((row) => this.#redact(row)) });
|
|
795
810
|
}
|
|
796
811
|
async queryLinks(input) {
|
|
797
812
|
const query = snapshotAuthoredQuery(input.query);
|
|
@@ -819,7 +834,7 @@ class AuthorizedObjectReaderImpl {
|
|
|
819
834
|
if (result.objects.some((row) => !this.#isObjectTypeViewable(row.objectTypeId)) || result.links.some((link) => !this.#isLinkViewable(link))) {
|
|
820
835
|
throw new Error("[Sixb] Object storage returned a link page outside its authorized scope.");
|
|
821
836
|
}
|
|
822
|
-
return result;
|
|
837
|
+
return { ...result, objects: result.objects.map((row) => this.#redact(row)) };
|
|
823
838
|
}
|
|
824
839
|
async count(input) {
|
|
825
840
|
const query = snapshotAuthoredQuery(input.query);
|
|
@@ -860,6 +875,9 @@ class AuthorizedObjectReaderImpl {
|
|
|
860
875
|
projectId: this.#runtime.projectId
|
|
861
876
|
}, this.#queryExecutorOptions()));
|
|
862
877
|
}
|
|
878
|
+
redactWrittenRow(row) {
|
|
879
|
+
return this.#redact(row);
|
|
880
|
+
}
|
|
863
881
|
assertVisibleOutputWithinLimit(value) {
|
|
864
882
|
if (this.#authority.type !== "delegated")
|
|
865
883
|
return;
|
|
@@ -869,21 +887,39 @@ class AuthorizedObjectReaderImpl {
|
|
|
869
887
|
return admitTelemetryHistoryReadWorkload(input, this.#authority.type === "delegated");
|
|
870
888
|
}
|
|
871
889
|
#queryExecutorOptions() {
|
|
890
|
+
const admission = this.#executorAdmission();
|
|
872
891
|
if (this.#authority.type === "delegated") {
|
|
873
892
|
return {
|
|
874
893
|
ontology: this.#ontology,
|
|
875
894
|
storage: this.#storage,
|
|
876
|
-
embeddingModels: this.#embeddingModels
|
|
895
|
+
embeddingModels: this.#embeddingModels,
|
|
896
|
+
rerankingModels: this.#rerankingModels,
|
|
897
|
+
...admission === undefined ? {} : { admission }
|
|
877
898
|
};
|
|
878
899
|
}
|
|
879
900
|
return {
|
|
880
901
|
ontology: this.#ontology,
|
|
881
902
|
embeddingModels: this.#embeddingModels,
|
|
903
|
+
rerankingModels: this.#rerankingModels,
|
|
882
904
|
storage: this.#storage,
|
|
883
905
|
runtimeAuthorization: this.#runtime.runtimeAuthorization,
|
|
884
|
-
...this.#runtime.authorization === undefined ? {} : { authorization: this.#runtime.authorization }
|
|
906
|
+
...this.#runtime.authorization === undefined ? {} : { authorization: this.#runtime.authorization },
|
|
907
|
+
...admission === undefined ? {} : { admission }
|
|
885
908
|
};
|
|
886
909
|
}
|
|
910
|
+
#executorAdmission() {
|
|
911
|
+
const clearance = this.#clearance && createClearanceQueryAdmission(this.#clearance);
|
|
912
|
+
const selected = this.#delegatedQueryAdmission;
|
|
913
|
+
if (selected && clearance)
|
|
914
|
+
return composeObjectQueryAdmissions(selected, clearance);
|
|
915
|
+
return selected ?? clearance;
|
|
916
|
+
}
|
|
917
|
+
#redact(row) {
|
|
918
|
+
return this.#clearance ? redactObjectRow(row, this.#clearance) : row;
|
|
919
|
+
}
|
|
920
|
+
#hidesProperty(item) {
|
|
921
|
+
return this.#clearance?.hiddenPropertyIds(item.objectTypeId).has(item.propertyId) ?? false;
|
|
922
|
+
}
|
|
887
923
|
#admitDelegatedQuery(query) {
|
|
888
924
|
if (!this.#delegatedQueryAdmission)
|
|
889
925
|
return;
|
|
@@ -939,6 +975,7 @@ function createAuthorizedObjectReader(input) {
|
|
|
939
975
|
scope,
|
|
940
976
|
ontology: input.ontology,
|
|
941
977
|
embeddingModels: input.embeddingModels,
|
|
978
|
+
rerankingModels: input.rerankingModels,
|
|
942
979
|
storage,
|
|
943
980
|
authority
|
|
944
981
|
});
|
|
@@ -951,6 +988,16 @@ function assertAuthorizedObjectReaderBinding(input) {
|
|
|
951
988
|
function getAuthorizedOntologyView(reader) {
|
|
952
989
|
return AuthorizedObjectReaderImpl.ontologyView(reader);
|
|
953
990
|
}
|
|
991
|
+
function clearanceForAuthority(authority, ontology) {
|
|
992
|
+
switch (authority.type) {
|
|
993
|
+
case "unrestricted":
|
|
994
|
+
return;
|
|
995
|
+
case "principal":
|
|
996
|
+
return resolvePropertyClearance(ontology, authority.context.clearances ?? new Set);
|
|
997
|
+
case "delegated":
|
|
998
|
+
return resolvePropertyClearance(ontology, new Set);
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
954
1001
|
function objectStorageForAuthority(authority, objectStorage) {
|
|
955
1002
|
switch (authority.type) {
|
|
956
1003
|
case "principal":
|
|
@@ -1564,4 +1611,4 @@ function requireActionRunStorage2(runtime) {
|
|
|
1564
1611
|
|
|
1565
1612
|
export { assertParamUsersActive, createAuthorizedObjectReader, assertAuthorizedObjectReaderBinding, getAuthorizedOntologyView, canDelegationAccessActionRun, requestAction3, requestActionAndWait2, waitForActionRun2 };
|
|
1566
1613
|
|
|
1567
|
-
//# debugId=
|
|
1614
|
+
//# debugId=17E16217ECB6D51064756E2164756E21
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/shared/params/user-refs.ts", "../src/assert-never.ts", "../src/objects/authorized-ontology-view.ts", "../src/objects/query/selected-read-admission.ts", "../src/objects/telemetry/workload.ts", "../src/execution/authorized-object-reader.ts", "../src/actions/delegated-admission.ts", "../src/actions/run-authorization.ts", "../src/actions/run-dispatch.ts", "../src/actions/run-id.ts", "../src/actions/request.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { SchemaOrRef, ValueType } from \"../../ontology\"\nimport { isObjectRefSchema } from \"../../ontology/refs\"\nimport { collectUserRefIds, userReferenceProblem } from \"../../ontology/user-ref\"\nimport type { AuthStorage } from \"../../storage/auth/types\"\n\n/**\n * Reject params that reference a user who does not exist or is not active.\n *\n * Callers run it only when a new run is created: replaying an existing run keeps the params it was\n * accepted with, even if a referenced user was suspended since.\n */\nexport async function assertParamUsersActive(input: {\n readonly auth: AuthStorage | undefined\n readonly projectId: string\n readonly schemas: Readonly<Record<string, SchemaOrRef>>\n readonly values: Readonly<Record<string, unknown>>\n readonly valueTypesById: ReadonlyMap<string, ValueType>\n /** Names one param in error messages, for example `Action param 'task.assign.assignee'`. */\n readonly describe: (paramId: string) => string\n readonly invalid: (message: string) => Error\n}): Promise<void> {\n const references: { readonly paramId: string; readonly id: string }[] = []\n for (const [paramId, schema] of Object.entries(input.schemas)) {\n if (isObjectRefSchema(schema)) continue\n const ids = collectUserRefIds(schema, input.values[paramId], input.valueTypesById, new Set())\n for (const id of ids) references.push({ paramId, id })\n }\n if (references.length === 0) return\n\n const users = input.auth?.users\n const statuses = new Map(\n await Promise.all(\n [...new Set(references.map((reference) => reference.id))].map(\n async (id) =>\n [\n id,\n users\n ? ((await users.getById({ projectId: input.projectId, id }))?.status ?? null)\n : \"unverifiable\",\n ] as const\n )\n )\n )\n for (const { paramId, id } of references) {\n const problem = userReferenceProblem(input.describe(paramId), id, statuses.get(id) ?? null)\n if (problem) throw input.invalid(problem)\n }\n}\n",
|
|
6
|
+
"/**\n * Closes a switch over a union: the call stops compiling when a new member has no case, and throws\n * if an untyped value reaches it at runtime.\n */\nexport function assertNever(_value: never, message: string): never {\n throw new Error(message)\n}\n",
|
|
7
|
+
"import {\n formatUnknownObjectTypeMessage,\n OntologyNotFoundError,\n OntologyValidationError,\n} from \"../ontology/errors\"\nimport type { OntologyDefinitionCatalog } from \"../ontology/registry\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport { createLinkTokenMap, createPropertyTokenMap } from \"../ontology/tokens\"\nimport type {\n ObjectLink,\n ObjectType,\n ObjectTypeSearchMetadata,\n Property,\n PropertyQueryMetadata,\n Schema,\n ValueType,\n} from \"../ontology/types\"\nimport { snapshotVectorProfiles } from \"../ontology/vector-profiles\"\nimport type { CompiledSelectedObjectReadScope } from \"../storage/objects/types\"\n\n/** Public ontology operations that may cross an execution-bound authorization boundary. */\nexport type AuthorizedOntologyView = Pick<\n OntologyDefinitionCatalog,\n | \"listObjectTypes\"\n | \"getObjectTypeById\"\n | \"resolveObjectType\"\n | \"getValueTypesById\"\n | \"getPrimaryPropertyId\"\n | \"listSubTypes\"\n | \"isValidLinkTarget\"\n>\n\nexport type AuthorizedOntologySelection =\n | { readonly kind: \"all\" }\n | { readonly kind: \"types\"; readonly objectTypeIds: readonly string[] }\n | { readonly kind: \"selected\"; readonly scope: CompiledSelectedObjectReadScope }\n\ninterface LinkSelection {\n readonly targetObjectTypeIds: Set<string>\n readonly propertyIds: Set<string>\n}\n\ninterface SelectedSchema {\n readonly propertyIdsByObjectType: ReadonlyMap<string, ReadonlySet<string>>\n readonly linksBySourceType: ReadonlyMap<string, ReadonlyMap<string, LinkSelection>>\n}\n\n/**\n * Project inert ontology metadata from one already-captured authority.\n *\n * Query validation intentionally keeps using the complete internal registry. This view is only\n * the discovery surface returned to application code and HTTP serializers.\n */\nexport function createAuthorizedOntologyView(input: {\n readonly ontology: OntologyDefinitionCatalog\n readonly selection: AuthorizedOntologySelection\n readonly assertOutputWithinLimit?: (value: unknown) => void\n}): AuthorizedOntologyView {\n const allObjectTypes = input.ontology.listObjectTypes()\n const registeredObjectTypeIds = new Set(allObjectTypes.map((objectType) => objectType.id))\n const requestedObjectTypeIds = selectedObjectTypeIds(input.selection, allObjectTypes)\n const visibleObjectTypeIds = new Set(\n [...requestedObjectTypeIds].filter((objectTypeId) => registeredObjectTypeIds.has(objectTypeId))\n )\n const selectedSchema =\n input.selection.kind === \"selected\" ? collectSelectedSchema(input.selection.scope) : undefined\n const projectedObjectTypes: ObjectTypeWithPropertyTokens[] = []\n\n for (const objectType of allObjectTypes) {\n if (!visibleObjectTypeIds.has(objectType.id)) continue\n const propertyIds =\n selectedSchema?.propertyIdsByObjectType.get(objectType.id) ??\n new Set(objectType.properties.map((property) => property.id))\n const links = selectedSchema\n ? (selectedSchema.linksBySourceType.get(objectType.id) ?? new Map())\n : input.selection.kind === \"all\"\n ? allDeclaredLinks(objectType)\n : allVisibleLinks(input.ontology, objectType, visibleObjectTypeIds)\n projectedObjectTypes.push(\n projectObjectType({\n objectType,\n propertyIds,\n links,\n visibleObjectTypeIds,\n ontology: input.ontology,\n targetMode:\n input.selection.kind === \"all\"\n ? \"original\"\n : input.selection.kind === \"types\"\n ? \"principal\"\n : \"exact\",\n exposeContracts: input.selection.kind !== \"selected\",\n })\n )\n }\n\n const objectTypes = projectedObjectTypes\n const objectTypesById = new Map(objectTypes.map((objectType) => [objectType.id, objectType]))\n const valueTypesById =\n input.selection.kind === \"selected\"\n ? collectVisibleValueTypes(input.ontology.getValueTypesById(), objectTypes)\n : snapshotAllValueTypes(input.ontology.getValueTypesById())\n const release = <T>(value: T, budgetValue: unknown = value): T => {\n input.assertOutputWithinLimit?.(budgetValue)\n return value\n }\n const cloneObjectType = (objectType: ObjectTypeWithPropertyTokens) => structuredClone(objectType)\n const cloneValueTypes = () =>\n new Map(\n [...valueTypesById].map(([valueTypeId, valueType]) => [\n valueTypeId,\n structuredClone(valueType),\n ])\n )\n\n return Object.freeze({\n listObjectTypes: () => release(objectTypes.map(cloneObjectType)),\n getObjectTypeById: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n return release(objectType ? cloneObjectType(objectType) : null)\n },\n resolveObjectType: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n return objectType ? release(cloneObjectType(objectType)) : unknownObjectType(objectTypeId)\n },\n getValueTypesById: () => {\n const valueTypes = cloneValueTypes()\n return release(valueTypes, [...valueTypes.entries()])\n },\n getPrimaryPropertyId: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n if (!objectType) return unknownObjectType(objectTypeId)\n const primary = objectType.properties.find((property) => property.primary)\n if (!primary) {\n throw new OntologyValidationError(\n `[Sixb] Object type '${objectTypeId}' does not expose its primary property in this execution scope.`\n )\n }\n return release(primary.id)\n },\n listSubTypes: (objectTypeId: string) => {\n const subTypes = visibleObjectTypeIds.has(objectTypeId)\n ? input.ontology\n .listSubTypes(objectTypeId)\n .filter((subTypeId) => visibleObjectTypeIds.has(subTypeId))\n : []\n return release(subTypes)\n },\n isValidLinkTarget: (expected: string | string[], actual: string) => {\n if (input.selection.kind === \"all\") {\n return release(input.ontology.isValidLinkTarget(expected, actual))\n }\n if (!visibleObjectTypeIds.has(actual)) return release(false)\n const expectedTypes = Array.isArray(expected) ? expected : [expected]\n if (input.selection.kind === \"selected\") {\n return release(\n expectedTypes.some((expectedType) => expectedType === \"*\" || expectedType === actual)\n )\n }\n return release(\n expectedTypes.some(\n (expectedType) =>\n expectedType === \"*\" ||\n (visibleObjectTypeIds.has(expectedType) &&\n input.ontology.isValidLinkTarget(expectedType, actual))\n )\n )\n },\n })\n}\n\nfunction selectedObjectTypeIds(\n selection: AuthorizedOntologySelection,\n allObjectTypes: readonly ObjectTypeWithPropertyTokens[]\n): ReadonlySet<string> {\n switch (selection.kind) {\n case \"all\":\n return new Set(allObjectTypes.map((objectType) => objectType.id))\n case \"types\":\n return new Set(selection.objectTypeIds)\n case \"selected\":\n return new Set(selection.scope.objects.map((object) => object.objectTypeId))\n }\n}\n\nfunction collectSelectedSchema(scope: CompiledSelectedObjectReadScope): SelectedSchema {\n const propertyIdsByObjectType = new Map<string, Set<string>>()\n for (const object of scope.objects) {\n const properties = propertyIdsByObjectType.get(object.objectTypeId) ?? new Set<string>()\n for (const propertyId of object.propertyIds) properties.add(propertyId)\n propertyIdsByObjectType.set(object.objectTypeId, properties)\n }\n\n const linksBySourceType = new Map<string, Map<string, LinkSelection>>()\n for (const step of scope.steps) {\n const links = linksBySourceType.get(step.sourceObjectTypeId) ?? new Map()\n const selected = links.get(step.linkId) ?? {\n targetObjectTypeIds: new Set<string>(),\n propertyIds: new Set<string>(),\n }\n selected.targetObjectTypeIds.add(step.targetObjectTypeId)\n for (const propertyId of step.propertyIds) selected.propertyIds.add(propertyId)\n links.set(step.linkId, selected)\n linksBySourceType.set(step.sourceObjectTypeId, links)\n }\n\n return { propertyIdsByObjectType, linksBySourceType }\n}\n\nfunction allDeclaredLinks(\n objectType: ObjectTypeWithPropertyTokens\n): ReadonlyMap<string, LinkSelection> {\n return new Map(\n objectType.links.map((link) => [\n link.id,\n {\n targetObjectTypeIds: new Set(\n typeof link.targetObjectTypeId === \"string\"\n ? [link.targetObjectTypeId]\n : link.targetObjectTypeId\n ),\n propertyIds: new Set(link.properties?.map((property) => property.id) ?? []),\n },\n ])\n )\n}\n\nfunction allVisibleLinks(\n ontology: OntologyDefinitionCatalog,\n objectType: ObjectTypeWithPropertyTokens,\n visibleObjectTypeIds: ReadonlySet<string>\n): ReadonlyMap<string, LinkSelection> {\n const links = new Map<string, LinkSelection>()\n for (const link of objectType.links) {\n const targetObjectTypeIds = new Set(\n [...visibleObjectTypeIds].filter((targetObjectTypeId) =>\n ontology.isValidLinkTarget(link.targetObjectTypeId, targetObjectTypeId)\n )\n )\n if (targetObjectTypeIds.size === 0) continue\n links.set(link.id, {\n targetObjectTypeIds,\n propertyIds: new Set(link.properties?.map((property) => property.id) ?? []),\n })\n }\n return links\n}\n\nfunction projectObjectType(input: {\n readonly ontology: OntologyDefinitionCatalog\n readonly objectType: ObjectTypeWithPropertyTokens\n readonly propertyIds: ReadonlySet<string>\n readonly links: ReadonlyMap<string, LinkSelection>\n readonly visibleObjectTypeIds: ReadonlySet<string>\n readonly targetMode: \"original\" | \"principal\" | \"exact\"\n readonly exposeContracts: boolean\n}): ObjectTypeWithPropertyTokens {\n const properties = input.objectType.properties\n .filter((property) => input.propertyIds.has(property.id))\n .map(snapshotProperty)\n const visiblePropertyIds = new Set(properties.map((property) => property.id))\n const links = input.objectType.links.flatMap((link): ObjectLink[] => {\n const selected = input.links.get(link.id)\n if (!selected) return []\n if (input.targetMode === \"original\") {\n return [snapshotLink(link, snapshotLinkTarget(link.targetObjectTypeId), selected.propertyIds)]\n }\n const targetObjectTypeIds = new Set(\n [...selected.targetObjectTypeIds].filter(\n (targetObjectTypeId) =>\n input.visibleObjectTypeIds.has(targetObjectTypeId) &&\n input.ontology.isValidLinkTarget(link.targetObjectTypeId, targetObjectTypeId)\n )\n )\n if (targetObjectTypeIds.size === 0) return []\n const target =\n input.targetMode === \"principal\"\n ? principalLinkTargets(link, targetObjectTypeIds, input.visibleObjectTypeIds)\n : exactLinkTargets(targetObjectTypeIds)\n return [snapshotLink(link, target, selected.propertyIds, { omitEmptyProperties: true })]\n })\n\n // Whitelist top-level metadata so future cross-ontology fields remain closed until reviewed.\n const projected: ObjectType = {\n id: input.objectType.id,\n name: input.objectType.name,\n description: input.objectType.description,\n quantityKind: input.objectType.quantityKind,\n seeAlso: input.objectType.seeAlso ? [...input.objectType.seeAlso] : undefined,\n extends:\n input.objectType.extends && input.visibleObjectTypeIds.has(input.objectType.extends)\n ? input.objectType.extends\n : undefined,\n parents: projectOptionalIds(\n input.objectType.parents,\n input.visibleObjectTypeIds,\n input.targetMode === \"original\"\n ),\n implements:\n input.exposeContracts && input.objectType.implements\n ? [...input.objectType.implements]\n : undefined,\n properties,\n links,\n search: projectSearch(input.objectType.search, visiblePropertyIds, {\n preserveEmpty: input.targetMode !== \"exact\",\n }),\n }\n const withTokens = {\n ...projected,\n p: createPropertyTokenMap(projected),\n l: createLinkTokenMap(projected),\n }\n return deepFreeze(withTokens) as ObjectTypeWithPropertyTokens\n}\n\nfunction principalLinkTargets(\n link: ObjectLink,\n allowedTargetObjectTypeIds: ReadonlySet<string>,\n visibleObjectTypeIds: ReadonlySet<string>\n): string | string[] {\n if (link.targetObjectTypeId === \"*\") return exactLinkTargets(allowedTargetObjectTypeIds)\n const declared = Array.isArray(link.targetObjectTypeId)\n ? link.targetObjectTypeId\n : [link.targetObjectTypeId]\n if (declared.every((objectTypeId) => visibleObjectTypeIds.has(objectTypeId))) {\n return snapshotLinkTarget(link.targetObjectTypeId)\n }\n return exactLinkTargets(allowedTargetObjectTypeIds)\n}\n\nfunction exactLinkTargets(targetObjectTypeIds: ReadonlySet<string>): string | string[] {\n const targets = [...targetObjectTypeIds].sort()\n return targets.length === 1 ? targets[0]! : targets\n}\n\nfunction projectOptionalIds(\n ids: readonly string[] | undefined,\n visibleObjectTypeIds: ReadonlySet<string>,\n preserveOriginal: boolean\n): string[] | undefined {\n if (!ids) return undefined\n if (preserveOriginal) return [...ids]\n const visible = ids.filter((id) => visibleObjectTypeIds.has(id))\n return visible.length > 0 ? visible : undefined\n}\n\nfunction snapshotLink(\n link: ObjectLink,\n targetObjectTypeId: string | string[],\n propertyIds: ReadonlySet<string>,\n options: { readonly omitEmptyProperties?: boolean } = {}\n): ObjectLink {\n const properties = link.properties\n ?.filter((property) => propertyIds.has(property.id))\n .map(snapshotProperty)\n return {\n id: link.id,\n name: link.name,\n description: link.description,\n targetObjectTypeId,\n cardinality: link.cardinality,\n properties: options.omitEmptyProperties && properties?.length === 0 ? undefined : properties,\n }\n}\n\nfunction snapshotLinkTarget(target: string | readonly string[]): string | string[] {\n return typeof target === \"string\" ? target : [...target]\n}\n\nfunction snapshotProperty(property: Property): Property {\n return {\n id: property.id,\n name: property.name,\n schema: snapshotSchema(property.schema),\n description: property.description,\n required: property.required,\n nullable: property.nullable,\n primary: property.primary,\n mode: property.mode,\n semanticType: property.semanticType,\n query: snapshotPropertyQuery(property.query),\n }\n}\n\nfunction snapshotPropertyQuery(\n query: PropertyQueryMetadata | undefined\n): PropertyQueryMetadata | undefined {\n if (!query) return undefined\n return {\n searchable: query.searchable,\n filterable: query.filterable,\n sortable: query.sortable,\n text: query.text,\n exact: query.exact,\n facet: query.facet,\n weight: query.weight,\n }\n}\n\nfunction projectSearch(\n search: ObjectTypeSearchMetadata | undefined,\n visiblePropertyIds: ReadonlySet<string>,\n options: { readonly preserveEmpty: boolean }\n): ObjectTypeSearchMetadata | undefined {\n if (!search) return undefined\n const title = search.title && visiblePropertyIds.has(search.title) ? search.title : undefined\n const selectedDefaultText = search.defaultText?.filter((propertyId) =>\n visiblePropertyIds.has(propertyId)\n )\n const selectedExact = search.exact?.filter((propertyId) => visiblePropertyIds.has(propertyId))\n const defaultText =\n options.preserveEmpty || selectedDefaultText?.length ? selectedDefaultText : undefined\n const exact = options.preserveEmpty || selectedExact?.length ? selectedExact : undefined\n const vectors =\n search.vectors === undefined\n ? undefined\n : snapshotVectorProfiles(\n Object.fromEntries(\n Object.entries(search.vectors).filter(([, profile]) =>\n profile.source.every((id) => visiblePropertyIds.has(id))\n )\n )\n )\n const projected: ObjectTypeSearchMetadata = {\n ...(vectors === undefined || Object.keys(vectors).length === 0 ? {} : { vectors }),\n ...(title === undefined ? {} : { title }),\n ...(defaultText === undefined ? {} : { defaultText }),\n ...(exact === undefined ? {} : { exact }),\n }\n return Object.keys(projected).length > 0 || options.preserveEmpty ? projected : undefined\n}\n\nfunction snapshotAllValueTypes(\n registered: ReadonlyMap<string, ValueType>\n): ReadonlyMap<string, ValueType> {\n return new Map(\n [...registered.values()].map((valueType) => {\n const snapshot = snapshotValueType(valueType)\n return [snapshot.id, snapshot] as const\n })\n )\n}\n\nfunction collectVisibleValueTypes(\n registered: ReadonlyMap<string, ValueType>,\n objectTypes: readonly ObjectTypeWithPropertyTokens[]\n): ReadonlyMap<string, ValueType> {\n const referencedIds = new Set<string>()\n const pendingSchemas: Schema[] = []\n const visitedSchemas = new Set<object>()\n for (const objectType of objectTypes) {\n for (const property of objectType.properties) pendingSchemas.push(property.schema)\n for (const link of objectType.links) {\n for (const property of link.properties ?? []) pendingSchemas.push(property.schema)\n }\n }\n\n while (pendingSchemas.length > 0) {\n const schema = pendingSchemas.pop()!\n if (typeof schema === \"string\" || visitedSchemas.has(schema)) continue\n visitedSchemas.add(schema)\n if (schema.type === \"valueTypeRef\") {\n if (!referencedIds.has(schema.valueTypeId)) {\n referencedIds.add(schema.valueTypeId)\n const valueType = registered.get(schema.valueTypeId)\n if (valueType) pendingSchemas.push(valueType.schema)\n }\n if (schema._resolved) pendingSchemas.push(schema._resolved)\n } else if (schema.type === \"object\") {\n for (const field of Object.values(schema.properties)) pendingSchemas.push(field.schema)\n } else if (schema.type === \"array\") {\n pendingSchemas.push(schema.items)\n } else if (schema.type === \"map\") {\n pendingSchemas.push(schema.valueSchema)\n }\n }\n\n return new Map(\n [...referencedIds]\n .map((valueTypeId) => registered.get(valueTypeId))\n .filter((valueType): valueType is ValueType => valueType !== undefined)\n .map((valueType) => {\n const snapshot = snapshotValueType(valueType)\n return [snapshot.id, snapshot] as const\n })\n )\n}\n\nfunction snapshotValueType(valueType: ValueType): ValueType {\n return deepFreeze({\n id: valueType.id,\n name: valueType.name,\n description: valueType.description,\n schema: snapshotSchema(valueType.schema),\n semanticType: valueType.semanticType,\n })\n}\n\nfunction snapshotSchema(schema: Schema): Schema {\n return deepFreeze(structuredClone(schema))\n}\n\nfunction deepFreeze<T>(value: T, seen: Set<object> = new Set()): T {\n if (typeof value !== \"object\" || value === null || seen.has(value)) return value\n seen.add(value)\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (descriptor && \"value\" in descriptor) deepFreeze(descriptor.value, seen)\n }\n return Object.freeze(value)\n}\n\nfunction unknownObjectType(objectTypeId: string): never {\n throw new OntologyNotFoundError(formatUnknownObjectTypeMessage(objectTypeId))\n}\n",
|
|
8
|
+
"import { AuthorizationError } from \"../../authorization/errors\"\nimport type {\n CompiledObjectReadObjectSelection,\n CompiledObjectReadStep,\n CompiledSelectedObjectReadScope,\n} from \"../../storage/objects/types\"\nimport type {\n ObjectQueryAdmissionState,\n ObjectQueryAdmissionTransition,\n ObjectQueryEdgeUse,\n ObjectQueryPropertyUse,\n ObjectQuerySemanticAdmission,\n} from \"./validate\"\n\nconst selectedStateBrand = Symbol(\"sixb.selected-object-query-admission-state\")\n\ninterface SelectedObjectQueryState extends ObjectQueryAdmissionState {\n readonly [selectedStateBrand]: true\n readonly selections: readonly CompiledObjectReadObjectSelection[]\n}\n\nexport interface SelectedObjectQueryAdmission extends ObjectQuerySemanticAdmission {\n /** Terminal hook for property-bearing operations outside the query IR, such as facets. */\n assertPropertySelected(input: {\n readonly state: ObjectQueryAdmissionState\n readonly propertyId: string\n readonly objectTypeId?: string\n readonly use: ObjectQueryPropertyUse\n readonly path: string\n }): void\n /** Terminal hook for the physical-link selector that sits outside `queryLinks.query`. */\n assertIncidentEdgeSelected(input: {\n readonly state: ObjectQueryAdmissionState\n readonly linkId?: string\n readonly direction: \"outgoing\" | \"incoming\" | \"both\"\n readonly path: string\n }): void\n}\n\n/**\n * Build an immutable semantic admission over one already-compiled selected reader scope.\n *\n * Object identities remain provider-owned: query admission follows exact path occurrences while\n * the selected storage relation decides which live roots and linked instances exist.\n */\nexport function createSelectedObjectQueryAdmission(\n scope: CompiledSelectedObjectReadScope\n): SelectedObjectQueryAdmission {\n const selectionByKey = new Map<string, CompiledObjectReadObjectSelection>()\n const selectionsByType = new Map<string, CompiledObjectReadObjectSelection[]>()\n const propertiesBySelection = new Map<string, ReadonlySet<string>>()\n\n for (const selection of scope.objects) {\n const key = selectionKey(selection.nodeId, selection.objectTypeId)\n selectionByKey.set(key, selection)\n propertiesBySelection.set(key, new Set(selection.propertyIds))\n const byType = selectionsByType.get(selection.objectTypeId) ?? []\n byType.push(selection)\n selectionsByType.set(selection.objectTypeId, byType)\n }\n\n const outgoing = indexSteps(scope.steps, \"outgoing\", selectionByKey)\n const incoming = indexSteps(scope.steps, \"incoming\", selectionByKey)\n const emptyState = selectedState([])\n\n const admission: SelectedObjectQueryAdmission = {\n empty: () => emptyState,\n source: (input) => {\n const selections = input.result.objectTypeIds.flatMap(\n (objectTypeId) => selectionsByType.get(objectTypeId) ?? []\n )\n const state = selectedState(selections)\n\n if (input.kind === \"refs\") {\n const missingType = [...new Set(input.refs?.map((ref) => ref.objectTypeId) ?? [])]\n .sort()\n .find((objectTypeId) => !selectionsByType.has(objectTypeId))\n if (missingType) {\n return denied(\n state,\n new AuthorizationError(\n `view:object:${missingType}`,\n `[Sixb] Delegated query cannot reference object type '${missingType}' at '${input.path}': the selected object scope does not contain that type.`\n )\n )\n }\n }\n\n if (state.selections.length > 0) return { state }\n const objectTypeId = input.objectTypeId ?? input.result.objectTypeIds[0] ?? \"unknown\"\n return denied(\n state,\n new AuthorizationError(\n `view:object:${objectTypeId}`,\n `[Sixb] Delegated query cannot start from object type '${objectTypeId}' at '${input.path}': the selected object scope does not contain that type.`\n )\n )\n },\n property: (input) =>\n propertyDenial(\n asSelectedState(input.state),\n input.propertyId,\n input.objectTypeId,\n input.use,\n input.path,\n propertiesBySelection\n ),\n edge: (input) => {\n const state = asSelectedState(input.state)\n const next = followEdge(\n state,\n input.linkId,\n input.direction,\n input.sourceObjectTypeId,\n outgoing,\n incoming,\n input.result.objectTypeIds\n )\n if (next.selections.length > 0 || state.selections.length === 0) return { state: next }\n return denied(\n next,\n edgeDenial(\n state,\n input.linkId,\n input.direction,\n input.sourceObjectTypeId,\n input.use,\n input.path\n )\n )\n },\n set: ({ op, states }) => {\n if (op === \"subtract\") return asSelectedState(states[0] ?? emptyState)\n return selectedState(states.flatMap((state) => asSelectedState(state).selections))\n },\n assertPropertySelected: (input) => {\n const denial = propertyDenial(\n asSelectedState(input.state),\n input.propertyId,\n input.objectTypeId,\n input.use,\n input.path,\n propertiesBySelection\n )\n if (denial) throw denial\n },\n assertIncidentEdgeSelected: (input) => {\n if (input.linkId === undefined) return\n const state = asSelectedState(input.state)\n const directions: readonly (\"outgoing\" | \"incoming\")[] =\n input.direction === \"both\" ? [\"outgoing\", \"incoming\"] : [input.direction]\n const next = selectedState(\n directions.flatMap(\n (direction) =>\n followEdge(state, input.linkId!, direction, undefined, outgoing, incoming).selections\n )\n )\n if (next.selections.length > 0 || state.selections.length === 0) return\n throw edgeDenial(state, input.linkId, input.direction, undefined, \"queryLinks\", input.path)\n },\n }\n\n return Object.freeze(admission)\n}\n\nfunction indexSteps(\n steps: readonly CompiledObjectReadStep[],\n direction: \"outgoing\" | \"incoming\",\n selectionByKey: ReadonlyMap<string, CompiledObjectReadObjectSelection>\n): ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]> {\n const index = new Map<string, CompiledObjectReadObjectSelection[]>()\n for (const step of steps) {\n const fromKey =\n direction === \"outgoing\"\n ? selectionKey(step.parentNodeId, step.sourceObjectTypeId)\n : selectionKey(step.nodeId, step.targetObjectTypeId)\n const toKey =\n direction === \"outgoing\"\n ? selectionKey(step.nodeId, step.targetObjectTypeId)\n : selectionKey(step.parentNodeId, step.sourceObjectTypeId)\n const target = selectionByKey.get(toKey)\n if (!selectionByKey.has(fromKey) || !target) {\n throw new Error(\"[Sixb] Compiled selected object scope contains an invalid query path step.\")\n }\n const key = edgeKey(\n direction === \"outgoing\" ? step.parentNodeId : step.nodeId,\n direction === \"outgoing\" ? step.sourceObjectTypeId : step.targetObjectTypeId,\n step.linkId\n )\n const targets = index.get(key) ?? []\n targets.push(target)\n index.set(key, targets)\n }\n return index\n}\n\nfunction followEdge(\n state: SelectedObjectQueryState,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n outgoing: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,\n incoming: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,\n resultObjectTypeIds?: readonly string[]\n): SelectedObjectQueryState {\n const index = direction === \"outgoing\" ? outgoing : incoming\n const resultTypes = resultObjectTypeIds ? new Set(resultObjectTypeIds) : undefined\n const selections = state.selections.flatMap((selection) => {\n const candidates = index.get(edgeKey(selection.nodeId, selection.objectTypeId, linkId)) ?? []\n return candidates.filter(\n (candidate) =>\n (resultTypes === undefined || resultTypes.has(candidate.objectTypeId)) &&\n (direction === \"outgoing\" ||\n sourceObjectTypeId === undefined ||\n candidate.objectTypeId === sourceObjectTypeId)\n )\n })\n return selectedState(selections)\n}\n\nfunction propertyDenial(\n state: SelectedObjectQueryState,\n propertyId: string,\n objectTypeId: string | undefined,\n use: ObjectQueryPropertyUse,\n path: string,\n propertiesBySelection: ReadonlyMap<string, ReadonlySet<string>>\n): AuthorizationError | undefined {\n const candidates = objectTypeId\n ? state.selections.filter((selection) => selection.objectTypeId === objectTypeId)\n : state.selections\n // A selected reader has no rows for result types absent from this provenance. Those empty\n // branches cannot observe a property and must not make includeSubtypes queries fail closed.\n if (candidates.length === 0) return undefined\n\n const missing = candidates.find(\n (selection) =>\n !propertiesBySelection\n .get(selectionKey(selection.nodeId, selection.objectTypeId))\n ?.has(propertyId)\n )\n if (!missing) return undefined\n\n const objectTypeIds = [...new Set(candidates.map((selection) => selection.objectTypeId))].sort()\n return new AuthorizationError(\n `view:object:${objectTypeIds.join(\",\")}:property:${propertyId}`,\n `[Sixb] Delegated query cannot use property '${propertyId}' for ${use} at '${path}': it is not selected on every matching read-scope path (missing on ${formatSelection(missing)}).`\n )\n}\n\nfunction edgeDenial(\n state: SelectedObjectQueryState,\n linkId: string,\n direction: \"outgoing\" | \"incoming\" | \"both\",\n sourceObjectTypeId: string | undefined,\n use: ObjectQueryEdgeUse,\n path: string\n): AuthorizationError {\n const source = sourceObjectTypeId ? `:${sourceObjectTypeId}` : \"\"\n return new AuthorizationError(\n `view:link:${direction}${source}:${linkId}`,\n `[Sixb] Delegated query cannot use ${direction} link '${linkId}' for ${use} from ${formatState(state)} at '${path}': that exact read-scope path is not selected.`\n )\n}\n\nfunction formatState(state: SelectedObjectQueryState): string {\n if (state.selections.length === 0) return \"an empty read-scope provenance\"\n return `read-scope provenance ${state.selections.map(formatSelection).join(\", \")}`\n}\n\nfunction formatSelection(selection: CompiledObjectReadObjectSelection): string {\n return `'${selection.objectTypeId}'@node ${selection.nodeId}`\n}\n\nfunction selectedState(\n selections: readonly CompiledObjectReadObjectSelection[]\n): SelectedObjectQueryState {\n const unique = new Map<string, CompiledObjectReadObjectSelection>()\n for (const selection of selections) {\n unique.set(selectionKey(selection.nodeId, selection.objectTypeId), selection)\n }\n return Object.freeze({\n [selectedStateBrand]: true as const,\n selections: Object.freeze(\n [...unique.values()].sort(\n (left, right) =>\n left.nodeId - right.nodeId || left.objectTypeId.localeCompare(right.objectTypeId)\n )\n ),\n })\n}\n\nfunction asSelectedState(state: ObjectQueryAdmissionState): SelectedObjectQueryState {\n if ((state as Partial<SelectedObjectQueryState>)[selectedStateBrand] !== true) {\n throw new Error(\"[Sixb] Object query admission state belongs to another semantic admission.\")\n }\n return state as SelectedObjectQueryState\n}\n\nfunction denied(state: SelectedObjectQueryState, denial: Error): ObjectQueryAdmissionTransition {\n return { state, denial }\n}\n\nfunction selectionKey(nodeId: number, objectTypeId: string): string {\n return JSON.stringify([nodeId, objectTypeId])\n}\n\nfunction edgeKey(nodeId: number, objectTypeId: string, linkId: string): string {\n return JSON.stringify([nodeId, objectTypeId, linkId])\n}\n",
|
|
9
|
+
"const MAX_DELEGATED_TELEMETRY_HISTORY_SERIES = 100\nconst MAX_DELEGATED_TELEMETRY_HISTORY_POINTS = 10_000\nconst DEFAULT_DELEGATED_TELEMETRY_HISTORY_LIMIT_PER_SERIES = 100\n\nexport interface TelemetryHistoryReadWorkloadInput {\n readonly seriesCount: number\n readonly limitPerSeries?: number\n}\n\nexport interface TelemetryHistoryReadAdmission {\n readonly limitPerSeries?: number\n readonly maxPointOccurrences?: number\n}\n\ntype TelemetryHistoryWorkloadMetric = \"series\" | \"points\"\n\nclass TelemetryHistoryWorkloadExceededError extends Error {\n readonly name = \"TelemetryHistoryWorkloadExceededError\"\n readonly code = \"telemetry_history_workload_exceeded\"\n\n constructor(\n readonly metric: TelemetryHistoryWorkloadMetric,\n readonly limit: number\n ) {\n super(`[Sixb] Delegated telemetry history exceeded its ${metric} limit (${limit}).`)\n }\n}\n\n/** Resolve one history request without exposing the authority that selected its policy. */\nexport function admitTelemetryHistoryReadWorkload(\n input: TelemetryHistoryReadWorkloadInput,\n delegated: boolean\n): TelemetryHistoryReadAdmission {\n const seriesCount = input.seriesCount\n const limitPerSeries = input.limitPerSeries\n if (!Number.isSafeInteger(seriesCount) || seriesCount < 0) {\n throw new Error(\"[Sixb] Telemetry history series must have a non-negative safe integer length.\")\n }\n if (\n limitPerSeries !== undefined &&\n (!Number.isSafeInteger(limitPerSeries) || limitPerSeries < 0)\n ) {\n throw new Error(\"[Sixb] Telemetry history limit must be a non-negative safe integer.\")\n }\n\n if (!delegated) {\n const admission: TelemetryHistoryReadAdmission =\n limitPerSeries === undefined ? {} : { limitPerSeries }\n return Object.freeze(admission)\n }\n if (seriesCount > MAX_DELEGATED_TELEMETRY_HISTORY_SERIES) {\n throw new TelemetryHistoryWorkloadExceededError(\n \"series\",\n MAX_DELEGATED_TELEMETRY_HISTORY_SERIES\n )\n }\n if (seriesCount === 0) {\n return Object.freeze({\n ...(limitPerSeries === undefined ? {} : { limitPerSeries }),\n maxPointOccurrences: MAX_DELEGATED_TELEMETRY_HISTORY_POINTS,\n })\n }\n\n const maxLimitPerSeries = Math.floor(MAX_DELEGATED_TELEMETRY_HISTORY_POINTS / seriesCount)\n const effectiveLimitPerSeries =\n limitPerSeries ??\n Math.min(DEFAULT_DELEGATED_TELEMETRY_HISTORY_LIMIT_PER_SERIES, maxLimitPerSeries)\n if (effectiveLimitPerSeries > maxLimitPerSeries) {\n throw new TelemetryHistoryWorkloadExceededError(\n \"points\",\n MAX_DELEGATED_TELEMETRY_HISTORY_POINTS\n )\n }\n\n return Object.freeze({\n limitPerSeries: effectiveLimitPerSeries,\n maxPointOccurrences: MAX_DELEGATED_TELEMETRY_HISTORY_POINTS,\n })\n}\n",
|
|
10
|
+
"import { assertNever } from \"../assert-never\"\nimport { assertAuthorized, isAllowed } from \"../authorization\"\nimport { AuthorizationError } from \"../authorization/errors\"\nimport type { AuthorizationContext } from \"../authorization/types\"\nimport type { EmbeddingModelCatalog, RerankingModelCatalog } from \"../models/catalog\"\nimport {\n type AuthorizedOntologySelection,\n type AuthorizedOntologyView,\n createAuthorizedOntologyView,\n} from \"../objects/authorized-ontology-view\"\nimport {\n createClearanceQueryAdmission,\n type PropertyClearance,\n redactObjectRow,\n resolvePropertyClearance,\n} from \"../objects/property-clearance\"\nimport {\n countObjects,\n type ExecuteObjectCountInput,\n type ExecuteObjectCountResult,\n type ExecuteObjectExistsInput,\n type ExecuteObjectExistsResult,\n type ExecuteObjectFacetsInput,\n type ExecuteObjectFacetsResult,\n type ExecuteObjectQueryInput,\n type ExecuteObjectQueryLinksInput,\n type ExecuteObjectQueryLinksResult,\n type ExecuteObjectQueryResult,\n executeObjectQuery,\n executeObjectQueryLinks,\n existsObjects,\n facetObjects,\n} from \"../objects/query\"\nimport { ObjectQueryValidationError } from \"../objects/query/errors\"\nimport { validateObjectFacetRequests } from \"../objects/query/executor\"\nimport type { ObjectQuery } from \"../objects/query/ir\"\nimport { preflightObjectQueryLinks } from \"../objects/query/links\"\nimport {\n createSelectedObjectQueryAdmission,\n type SelectedObjectQueryAdmission,\n} from \"../objects/query/selected-read-admission\"\nimport {\n type AdmittedObjectQuery,\n composeObjectQueryAdmissions,\n type ObjectQuerySemanticAdmission,\n validateObjectQuery,\n validateObjectQueryWithAdmission,\n} from \"../objects/query/validate\"\nimport {\n admitTelemetryHistoryReadWorkload,\n type TelemetryHistoryReadAdmission,\n type TelemetryHistoryReadWorkloadInput,\n} from \"../objects/telemetry/workload\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport type {\n CompiledObjectReadStep,\n LinkBatchKey,\n ObjectFacetRequest,\n ObjectLinkRow,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n} from \"../storage\"\nimport { assertObjectReadOutputWithinLimit, MAX_OBJECT_READ_FACETS } from \"../storage\"\nimport { captureExecutionScope, resolveExecutionScopeAuthorization } from \"./authorization\"\nimport type { ExecutionScope, RuntimeAuthorization } from \"./types\"\n\ntype RuntimeReadAuthorization = {\n readonly projectId: string\n readonly runtimeAuthorization: RuntimeAuthorization\n readonly authorization?: AuthorizationContext\n}\n\ntype ResolvedExecutionAuthority = ReturnType<typeof resolveExecutionScopeAuthorization>\ntype GetObjectInput = Omit<Parameters<ObjectReadStorage[\"getByPrimaryId\"]>[0], \"projectId\">\ntype GetObjectsInput = Omit<Parameters<ObjectReadStorage[\"getByPrimaryIdBatch\"]>[0], \"projectId\">\ntype SelectObjectPropertiesInput = Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\ntype CanReadObjectPropertyInput = SelectObjectPropertiesInput[\"items\"][number]\ntype CanReadObjectPropertiesBatchInput = Omit<SelectObjectPropertiesInput, \"projectId\">\ntype ListObjectsInput = Omit<Parameters<ObjectReadStorage[\"list\"]>[0], \"projectId\">\ntype ListLinksInput = Omit<Parameters<ObjectReadStorage[\"listLinks\"]>[0], \"projectId\">\ntype ListLinksBatchInput = Omit<Parameters<ObjectReadStorage[\"listLinksBatch\"]>[0], \"projectId\">\n\nconst readerConstructionKey = Object.freeze({})\n\n/**\n * Core-owned object read boundary for one exact execution authority.\n *\n * The implementation class is intentionally private to this module. Its private fields make the\n * exported instance type nominal, while the construction key prevents code that discovers the\n * JavaScript constructor through an instance from manufacturing another reader.\n */\nclass AuthorizedObjectReaderImpl {\n readonly #authorization: RuntimeAuthorization\n readonly #authority: ResolvedExecutionAuthority\n readonly #runtime: RuntimeReadAuthorization\n readonly #ontology: OntologyRegistry\n readonly #embeddingModels?: EmbeddingModelCatalog\n readonly #rerankingModels?: RerankingModelCatalog\n #ontologyView?: AuthorizedOntologyView\n readonly #storage: ObjectReadStorage\n readonly #delegatedObjectTypeIds?: ReadonlySet<string>\n readonly #delegatedLinkDefinitions?: ReadonlySet<string>\n readonly #delegatedQueryAdmission?: SelectedObjectQueryAdmission\n /** Marked properties this authority cannot read; absent when it reads every property. */\n readonly #clearance?: PropertyClearance\n\n constructor(\n key: typeof readerConstructionKey,\n input: {\n readonly scope: ExecutionScope\n readonly ontology: OntologyRegistry\n readonly embeddingModels?: EmbeddingModelCatalog\n readonly rerankingModels?: RerankingModelCatalog\n readonly storage: ObjectReadStorage\n readonly authority: ResolvedExecutionAuthority\n }\n ) {\n if (key !== readerConstructionKey) {\n throw new Error(\"[Sixb] AuthorizedObjectReader can only be created by Core.\")\n }\n\n this.#authorization = input.scope.authorization\n this.#authority = input.authority\n this.#ontology = input.ontology\n this.#embeddingModels = input.embeddingModels\n this.#rerankingModels = input.rerankingModels\n this.#storage = input.storage\n this.#delegatedObjectTypeIds =\n input.authority.type === \"delegated\"\n ? new Set(input.authority.objectRead.scope.objects.map((object) => object.objectTypeId))\n : undefined\n this.#delegatedLinkDefinitions =\n input.authority.type === \"delegated\"\n ? new Set(input.authority.objectRead.scope.steps.map(delegatedLinkDefinitionKey))\n : undefined\n this.#delegatedQueryAdmission =\n input.authority.type === \"delegated\"\n ? createSelectedObjectQueryAdmission(input.authority.objectRead.scope)\n : undefined\n this.#clearance = clearanceForAuthority(input.authority, input.ontology)\n this.#runtime = Object.freeze({\n projectId: input.scope.execution.projectId,\n runtimeAuthorization: input.scope.authorization,\n ...(input.authority.type === \"principal\" ? { authorization: input.authority.context } : {}),\n })\n }\n\n static assertBound(reader: AuthorizedObjectReaderImpl, scope: ExecutionScope): void {\n const capturedScope = captureExecutionScope(scope)\n resolveExecutionScopeAuthorization(reader.#runtime.projectId, capturedScope)\n if (capturedScope.authorization !== reader.#authorization) {\n throw new Error(\n \"[Sixb] AuthorizedObjectReader is not bound to this exact execution authority.\"\n )\n }\n }\n\n static ontologyView(reader: AuthorizedObjectReaderImpl): AuthorizedOntologyView {\n const authority = reader.#authority\n reader.#ontologyView ??= createAuthorizedOntologyView({\n ontology: reader.#ontology,\n selection: ontologySelectionForAuthority(authority, reader.#ontology),\n ...(authority.type === \"delegated\"\n ? {\n assertOutputWithinLimit: (value: unknown) =>\n assertObjectReadOutputWithinLimit(value, authority.objectRead.limits),\n }\n : {}),\n })\n return reader.#ontologyView\n }\n\n /** Project identity carried by this nominal reader capability. */\n get projectId(): string {\n return this.#runtime.projectId\n }\n\n async getByPrimaryId(input: GetObjectInput): ReturnType<ObjectReadStorage[\"getByPrimaryId\"]> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n primaryId: input.primaryId,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n const row = await this.#storage.getByPrimaryId({\n ...request,\n projectId: this.#runtime.projectId,\n })\n return detachReadResult(row && this.#redact(row))\n }\n\n async getByPrimaryIdBatch(\n input: GetObjectsInput\n ): ReturnType<ObjectReadStorage[\"getByPrimaryIdBatch\"]> {\n const request = snapshotReadValue({\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n const rows = await this.#storage.getByPrimaryIdBatch({\n ...request,\n projectId: this.#runtime.projectId,\n })\n return detachReadResult(\n new Map([...rows].map(([key, row]) => [key, this.#redact(row)] as const))\n )\n }\n\n async canReadObjectProperty(input: CanReadObjectPropertyInput): Promise<boolean> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n primaryId: input.primaryId,\n propertyId: input.propertyId,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n if (this.#hidesProperty(request)) return false\n if (this.#authority.type !== \"delegated\") return true\n const [readable] = await this.#storage.selectsObjectProperties({\n projectId: this.#runtime.projectId,\n items: [request],\n })\n return readable ?? false\n }\n\n async canReadObjectPropertiesBatch(\n input: CanReadObjectPropertiesBatchInput\n ): Promise<readonly boolean[]> {\n const request = snapshotReadValue({\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n propertyId: item.propertyId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n const selected =\n this.#authority.type === \"delegated\"\n ? await this.#storage.selectsObjectProperties({\n ...request,\n projectId: this.#runtime.projectId,\n })\n : request.items.map(() => true)\n return request.items.map(\n (item, index) => !this.#hidesProperty(item) && selected[index] === true\n )\n }\n\n async list(input: ListObjectsInput): ReturnType<ObjectReadStorage[\"list\"]> {\n const request = snapshotReadValue({\n objectTypeId:\n typeof input.objectTypeId === \"string\"\n ? input.objectTypeId\n : input.objectTypeId === undefined\n ? undefined\n : [...input.objectTypeId],\n primaryIdPrefix: input.primaryIdPrefix,\n primaryIdSuffix: input.primaryIdSuffix,\n updatedAfter: input.updatedAfter,\n updatedBefore: input.updatedBefore,\n createdAfter: input.createdAfter,\n createdBefore: input.createdBefore,\n limit: input.limit,\n offset: input.offset,\n orderBy: input.orderBy,\n order: input.order,\n })\n const objectTypeId = this.#resolveListObjectTypes(request.objectTypeId)\n\n // An empty type selection means \"none\", never \"all\". Short-circuiting here prevents a\n // provider with different empty-array semantics from turning a principal read into a broad one.\n if (Array.isArray(objectTypeId) && objectTypeId.length === 0) {\n return { objects: [], hasMore: false, total: 0 }\n }\n\n const page = await this.#storage.list({\n ...request,\n ...(objectTypeId === undefined ? {} : { objectTypeId }),\n projectId: this.#runtime.projectId,\n })\n return detachReadResult({ ...page, objects: page.objects.map((row) => this.#redact(row)) })\n }\n\n async listLinks(input: ListLinksInput): ReturnType<ObjectReadStorage[\"listLinks\"]> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n objectId: input.objectId,\n linkId: input.linkId,\n direction: input.direction,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n const links = detachReadResult(\n await this.#storage.listLinks({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n return links.filter((link) => this.#isLinkViewable(link))\n }\n\n async listLinksBatch(\n input: ListLinksBatchInput\n ): ReturnType<ObjectReadStorage[\"listLinksBatch\"]> {\n const request = snapshotReadValue({\n direction: input.direction,\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n objectId: item.objectId,\n linkId: item.linkId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n const pages = detachReadResult(\n await this.#storage.listLinksBatch({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n const filtered = new Map<LinkBatchKey, ObjectLinkRow[]>()\n for (const [key, links] of pages) {\n filtered.set(\n key,\n links.filter((link) => this.#isLinkViewable(link))\n )\n }\n return filtered\n }\n\n async executeQuery(\n input: Omit<ExecuteObjectQueryInput, \"projectId\">\n ): Promise<ExecuteObjectQueryResult> {\n const query = snapshotAuthoredQuery(input.query)\n const includeTotal = snapshotReadValue(input.includeTotal)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n const result = await executeObjectQuery(\n {\n query: executionQuery,\n ...(includeTotal === undefined ? {} : { includeTotal }),\n projectId: this.#runtime.projectId,\n signal: input.signal,\n },\n this.#queryExecutorOptions()\n )\n return detachReadResult({ ...result, objects: result.objects.map((row) => this.#redact(row)) })\n }\n\n async queryLinks(\n input: Omit<ExecuteObjectQueryLinksInput, \"projectId\">\n ): Promise<ExecuteObjectQueryLinksResult> {\n const query = snapshotAuthoredQuery(input.query)\n const request = snapshotReadValue({\n direction: input.direction,\n linkId: input.linkId,\n includeObjects: input.includeObjects,\n pageSize: input.pageSize,\n pageToken: input.pageToken,\n })\n let executionQuery = query\n const admission = this.#delegatedQueryAdmission\n if (admission) {\n const preflight = preflightObjectQueryLinks(\n { query, ...request, projectId: this.#runtime.projectId },\n { ontology: this.#ontology }\n )\n const admitted = validateObjectQueryWithAdmission(\n preflight.validated.query,\n { ontology: this.#ontology, normalize: false },\n admission\n )\n admission.assertIncidentEdgeSelected({\n state: admitted.admissionState,\n ...(preflight.linkId === undefined ? {} : { linkId: preflight.linkId }),\n direction: preflight.direction,\n path: \"$.linkId\",\n })\n executionQuery = admitted.query\n }\n const result = detachReadResult(\n await executeObjectQueryLinks(\n { query: executionQuery, ...request, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n\n // Link pagination is computed by the provider-facing executor. Filtering afterward would make\n // its cursor and hasMore metadata describe hidden rows, so a provider contract violation must\n // fail closed instead of returning a partially filtered page.\n if (\n result.objects.some((row) => !this.#isObjectTypeViewable(row.objectTypeId)) ||\n result.links.some((link) => !this.#isLinkViewable(link))\n ) {\n throw new Error(\"[Sixb] Object storage returned a link page outside its authorized scope.\")\n }\n return { ...result, objects: result.objects.map((row) => this.#redact(row)) }\n }\n\n async count(\n input: Omit<ExecuteObjectCountInput, \"projectId\">\n ): Promise<ExecuteObjectCountResult> {\n const query = snapshotAuthoredQuery(input.query)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n return detachReadResult(\n await countObjects(\n { query: executionQuery, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n }\n\n async exists(\n input: Omit<ExecuteObjectExistsInput, \"projectId\">\n ): Promise<ExecuteObjectExistsResult> {\n const query = snapshotAuthoredQuery(input.query)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n return detachReadResult(\n await existsObjects(\n { query: executionQuery, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n }\n\n async facet(\n input: Omit<ExecuteObjectFacetsInput, \"projectId\">\n ): Promise<ExecuteObjectFacetsResult> {\n const query = snapshotAuthoredQuery(input.query)\n const facets = snapshotFacetRequests(input.facets)\n let executionQuery = query\n let executionFacets = facets\n const admission = this.#delegatedQueryAdmission\n if (admission) {\n // Terminal arguments are ordinary validation errors, not an authorization oracle. Validate\n // them against the canonical result shape before raising any delegated-scope denial.\n const validated = validateObjectQuery(query, { ontology: this.#ontology })\n const normalizedFacets = validateObjectFacetRequests(facets, validated.result.objectTypeIds, {\n ontology: this.#ontology,\n })\n const admitted = validateObjectQueryWithAdmission(\n validated.query,\n { ontology: this.#ontology, normalize: false },\n admission\n )\n normalizedFacets.forEach((facet, index) => {\n admission.assertPropertySelected({\n state: admitted.admissionState,\n propertyId: facet.propertyId,\n use: \"facet\",\n path: `$.facets[${index}].propertyId`,\n })\n })\n executionQuery = admitted.query\n executionFacets = normalizedFacets\n }\n return detachReadResult(\n await facetObjects(\n {\n query: executionQuery,\n facets: executionFacets,\n projectId: this.#runtime.projectId,\n },\n this.#queryExecutorOptions()\n )\n )\n }\n\n /**\n * Redact a row returned by a write. An upsert returns the merged effective row, which may hold\n * marked values the writer never sent and cannot read.\n */\n redactWrittenRow<TRow extends ObjectRow>(row: TRow): TRow {\n return this.#redact(row)\n }\n\n /** Enforce the delegated response budget without exposing or recombining its limits. */\n assertVisibleOutputWithinLimit(value: unknown): void {\n if (this.#authority.type !== \"delegated\") return\n assertObjectReadOutputWithinLimit(value, this.#authority.objectRead.limits)\n }\n\n /** Admit adjacent telemetry work without exposing which authority policy was selected. */\n admitTelemetryHistoryRead(\n input: TelemetryHistoryReadWorkloadInput\n ): TelemetryHistoryReadAdmission {\n return admitTelemetryHistoryReadWorkload(input, this.#authority.type === \"delegated\")\n }\n\n #queryExecutorOptions() {\n const admission = this.#executorAdmission()\n if (this.#authority.type === \"delegated\") {\n // The selected storage instance is the private execution capability. Passing the delegated\n // runtime token into the generic executor would either reject this admitted query or tempt a\n // forgeable bypass flag; neither is needed at this nominal boundary.\n return {\n ontology: this.#ontology,\n storage: this.#storage,\n embeddingModels: this.#embeddingModels,\n rerankingModels: this.#rerankingModels,\n ...(admission === undefined ? {} : { admission }),\n }\n }\n return {\n ontology: this.#ontology,\n embeddingModels: this.#embeddingModels,\n rerankingModels: this.#rerankingModels,\n storage: this.#storage,\n runtimeAuthorization: this.#runtime.runtimeAuthorization,\n ...(this.#runtime.authorization === undefined\n ? {}\n : { authorization: this.#runtime.authorization }),\n ...(admission === undefined ? {} : { admission }),\n }\n }\n\n /**\n * The executor validates the query it runs, and that validation resolves default text fields.\n * Every admission that narrows those fields must therefore apply there, not only beforehand.\n */\n #executorAdmission(): ObjectQuerySemanticAdmission | undefined {\n const clearance = this.#clearance && createClearanceQueryAdmission(this.#clearance)\n const selected = this.#delegatedQueryAdmission\n if (selected && clearance) return composeObjectQueryAdmissions(selected, clearance)\n return selected ?? clearance\n }\n\n #redact<TRow extends ObjectRow>(row: TRow): TRow {\n return this.#clearance ? redactObjectRow(row, this.#clearance) : row\n }\n\n #hidesProperty(item: { readonly objectTypeId: string; readonly propertyId: string }): boolean {\n return this.#clearance?.hiddenPropertyIds(item.objectTypeId).has(item.propertyId) ?? false\n }\n\n #admitDelegatedQuery(query: ObjectQuery): AdmittedObjectQuery | undefined {\n if (!this.#delegatedQueryAdmission) return undefined\n return validateObjectQueryWithAdmission(\n query,\n { ontology: this.#ontology },\n this.#delegatedQueryAdmission\n )\n }\n\n #assertObjectTypesViewable(objectTypeIds: readonly string[]): void {\n if (this.#authority.type === \"delegated\") {\n for (const objectTypeId of new Set(objectTypeIds)) {\n if (this.#delegatedObjectTypeIds?.has(objectTypeId)) continue\n throw new AuthorizationError(\n `delegated:object.view:${objectTypeId}`,\n `[Sixb] Delegated authorization does not select object type '${objectTypeId}'.`\n )\n }\n return\n }\n\n for (const objectTypeId of new Set(objectTypeIds)) {\n assertAuthorized(this.#runtime, { kind: \"object.view\", objectTypeId })\n }\n }\n\n #resolveListObjectTypes(\n requested: ListObjectsInput[\"objectTypeId\"]\n ): ListObjectsInput[\"objectTypeId\"] {\n if (requested !== undefined) {\n const objectTypeIds = typeof requested === \"string\" ? [requested] : [...new Set(requested)]\n for (const objectTypeId of objectTypeIds) {\n this.#ontology.resolveObjectType(objectTypeId)\n }\n this.#assertObjectTypesViewable(objectTypeIds)\n return typeof requested === \"string\" ? requested : objectTypeIds\n }\n\n if (this.#authority.type === \"unrestricted\") return undefined\n return this.#ontology\n .listObjectTypes()\n .map((objectType) => objectType.id)\n .filter((objectTypeId) => this.#isObjectTypeViewable(objectTypeId))\n }\n\n #isObjectTypeViewable(objectTypeId: string): boolean {\n if (this.#authority.type === \"delegated\") {\n return this.#delegatedObjectTypeIds?.has(objectTypeId) ?? false\n }\n return isAllowed(this.#runtime.authorization, { kind: \"object.view\", objectTypeId })\n }\n\n #isLinkViewable(link: ObjectLinkRow): boolean {\n if (\n !this.#isObjectTypeViewable(link.sourceTypeId) ||\n !this.#isObjectTypeViewable(link.targetTypeId)\n ) {\n return false\n }\n return (\n this.#delegatedLinkDefinitions?.has(delegatedLinkDefinitionKey(link)) ??\n this.#authority.type !== \"delegated\"\n )\n }\n}\n\nObject.freeze(AuthorizedObjectReaderImpl.prototype)\nObject.freeze(AuthorizedObjectReaderImpl)\n\nexport type AuthorizedObjectReader = AuthorizedObjectReaderImpl\n\n/** Build the sole application-facing object reader for one registered execution scope. */\nexport function createAuthorizedObjectReader(input: {\n readonly scope: ExecutionScope\n readonly ontology: OntologyRegistry\n readonly embeddingModels?: EmbeddingModelCatalog\n readonly rerankingModels?: RerankingModelCatalog\n readonly objectStorage: ObjectStorage\n}): AuthorizedObjectReader {\n const scope = captureExecutionScope(input.scope)\n const projectId = scope.execution.projectId\n const authority = resolveExecutionScopeAuthorization(projectId, scope)\n const storage = objectStorageForAuthority(authority, input.objectStorage)\n const reader = new AuthorizedObjectReaderImpl(readerConstructionKey, {\n scope,\n ontology: input.ontology,\n embeddingModels: input.embeddingModels,\n rerankingModels: input.rerankingModels,\n storage,\n authority,\n })\n Object.freeze(reader)\n return reader\n}\n\n/** Reject recombining an authorized reader with any other execution authority. */\nexport function assertAuthorizedObjectReaderBinding(input: {\n readonly reader: AuthorizedObjectReader\n readonly scope: ExecutionScope\n}): void {\n AuthorizedObjectReaderImpl.assertBound(input.reader, input.scope)\n}\n\n/** Return inert metadata projected from the exact authority already owned by the reader. */\nexport function getAuthorizedOntologyView(reader: AuthorizedObjectReader): AuthorizedOntologyView {\n return AuthorizedObjectReaderImpl.ontologyView(reader)\n}\n\n/**\n * Unrestricted authority reads every property. A principal reads what its roles clear; delegated\n * shared access carries no clearance, so no share can expose a marked property.\n */\nfunction clearanceForAuthority(\n authority: ResolvedExecutionAuthority,\n ontology: OntologyRegistry\n): PropertyClearance | undefined {\n switch (authority.type) {\n case \"unrestricted\":\n return undefined\n case \"principal\":\n return resolvePropertyClearance(ontology, authority.context.clearances ?? new Set())\n case \"delegated\":\n return resolvePropertyClearance(ontology, new Set())\n }\n}\n\nfunction objectStorageForAuthority(\n authority: ResolvedExecutionAuthority,\n objectStorage: ObjectStorage\n): ObjectReadStorage {\n switch (authority.type) {\n case \"principal\":\n case \"unrestricted\":\n return objectStorage\n case \"delegated\":\n return objectStorage.createSelectedReadScope({\n projectId: authority.projectId,\n scope: authority.objectRead.scope,\n limits: authority.objectRead.limits,\n })\n default:\n return assertNever(\n authority,\n `[Sixb] Unsupported object reader authority '${String((authority as { type?: unknown }).type)}'.`\n )\n }\n}\n\nfunction ontologySelectionForAuthority(\n authority: ResolvedExecutionAuthority,\n ontology: OntologyRegistry\n): AuthorizedOntologySelection {\n switch (authority.type) {\n case \"unrestricted\":\n return { kind: \"all\" }\n case \"principal\":\n return {\n kind: \"types\",\n objectTypeIds: ontology\n .listObjectTypes()\n .filter((objectType) =>\n isAllowed(authority.context, {\n kind: \"object.view\",\n objectTypeId: objectType.id,\n })\n )\n .map((objectType) => objectType.id),\n }\n case \"delegated\":\n return { kind: \"selected\", scope: authority.objectRead.scope }\n }\n}\n\nfunction delegatedLinkDefinitionKey(\n input:\n | Pick<CompiledObjectReadStep, \"sourceObjectTypeId\" | \"linkId\" | \"targetObjectTypeId\">\n | Pick<ObjectLinkRow, \"sourceTypeId\" | \"linkId\" | \"targetTypeId\">\n): string {\n return \"sourceObjectTypeId\" in input\n ? JSON.stringify([input.sourceObjectTypeId, input.linkId, input.targetObjectTypeId])\n : JSON.stringify([input.sourceTypeId, input.linkId, input.targetTypeId])\n}\n\n/**\n * Storage providers may optimize trusted reads with live references. Values crossing the\n * application-facing authorization boundary must not retain them.\n */\nfunction detachReadResult<T>(value: T): T {\n return structuredClone(value)\n}\n\n/** Capture caller-owned values before authorization and execution. */\nfunction snapshotReadValue<T>(value: T): T {\n return structuredClone(value)\n}\n\n/** Bound and capture facet arguments before reading any caller-owned element. */\nfunction snapshotFacetRequests(facets: readonly ObjectFacetRequest[]): ObjectFacetRequest[] {\n if (!Array.isArray(facets)) {\n throw new ObjectQueryValidationError([\n {\n path: \"$.facets\",\n code: \"invalid_facets\",\n message: \"facets must be an array\",\n },\n ])\n }\n const length = facets.length\n if (!Number.isSafeInteger(length) || length > MAX_OBJECT_READ_FACETS) {\n throw new ObjectQueryValidationError([\n {\n path: \"$.facets\",\n code: \"too_many_facets\",\n message: `facets must include at most ${MAX_OBJECT_READ_FACETS} facet requests`,\n },\n ])\n }\n\n const snapshot: ObjectFacetRequest[] = []\n for (let index = 0; index < length; index += 1) {\n const facet = facets[index]\n snapshot.push({ propertyId: facet.propertyId, limit: facet.limit })\n }\n return snapshot\n}\n\n/** Capture one serializable query before either authorization or execution sees it. */\nfunction snapshotAuthoredQuery(query: ObjectQuery): ObjectQuery {\n try {\n const snapshot = structuredClone(query)\n const pending = [snapshot]\n const seen = new Set<ObjectQuery>()\n for (const node of pending) {\n if (seen.has(node)) continue\n seen.add(node)\n if (\n node.kind === \"vector\" &&\n (typeof node.vector !== \"string\" ||\n typeof node.profile !== \"string\" ||\n \"propertyId\" in node)\n ) {\n throw new ObjectQueryValidationError([\n {\n path: \"$\",\n code: \"invalid_vector_search_input\",\n message: \"Vector search requires a named profile and search text\",\n },\n ])\n }\n if (\"input\" in node) pending.push(node.input)\n if (node.kind === \"set\") pending.push(...node.inputs)\n }\n return snapshot\n } catch (error) {\n if (error instanceof ObjectQueryValidationError) throw error\n throw new ObjectQueryValidationError([\n {\n path: \"$\",\n code: \"query_not_cloneable\",\n message: \"Object query must contain only structured-cloneable data\",\n },\n ])\n }\n}\n",
|
|
11
|
+
"import { AuthorizationError } from \"../authorization\"\nimport type { ResolvedRuntimeAuthorization } from \"../execution/authorization\"\nimport {\n type AuthorizedObjectReader,\n assertAuthorizedObjectReaderBinding,\n} from \"../execution/authorized-object-reader\"\nimport type { ExecutionContext, RuntimeAuthorization } from \"../execution/types\"\nimport type { ActionDefinition, ActionObjectSubject, ActionSubject } from \"./types\"\n\ntype DelegatedAuthorization = Extract<ResolvedRuntimeAuthorization, { readonly type: \"delegated\" }>\n\n/** Reject ungranted tuples before Action lookup can become a metadata oracle. */\nexport function assertDelegatedActionTarget(input: {\n readonly authorization: DelegatedAuthorization\n readonly actionId: string\n readonly subject: ActionSubject\n}): ActionObjectSubject {\n const { actionId, authorization, subject } = input\n if (\n subject.kind !== \"object\" ||\n !authorization.actionApply.some(\n (target) =>\n target.actionId === actionId &&\n target.subject.objectTypeId === subject.objectTypeId &&\n target.subject.primaryId === subject.primaryId\n )\n ) {\n throw denied(actionId, subject)\n }\n return subject\n}\n\n/** Admit an exact tuple against its definition and current selected-read visibility. */\nexport async function admitDelegatedObjectAction(input: {\n readonly objectReader: AuthorizedObjectReader\n readonly runtimeAuthorization: RuntimeAuthorization\n readonly execution: ExecutionContext\n readonly authorization: DelegatedAuthorization\n readonly action: ActionDefinition\n readonly subject: ActionObjectSubject\n}): Promise<void> {\n const { action, authorization, execution, objectReader, runtimeAuthorization, subject } = input\n assertDelegatedActionTarget({ authorization, actionId: action.id, subject })\n if (action.binding.kind !== \"object\" || action.binding.objectType.id !== subject.objectTypeId) {\n throw denied(action.id, subject)\n }\n\n assertAuthorizedObjectReaderBinding({\n reader: objectReader,\n scope: { execution, authorization: runtimeAuthorization },\n })\n\n try {\n const visible = await objectReader.getByPrimaryId({\n objectTypeId: subject.objectTypeId,\n primaryId: subject.primaryId,\n })\n if (!visible) throw denied(action.id, subject)\n } catch (error) {\n if (error instanceof AuthorizationError) throw denied(action.id, subject)\n throw error\n }\n}\n\nfunction denied(actionId: string, subject: ActionSubject): AuthorizationError {\n const target =\n subject.kind === \"object\" ? `${subject.objectTypeId}:${subject.primaryId}` : \"global\"\n return new AuthorizationError(\n `apply:action:${actionId}:${target}`,\n `[Sixb] Delegated authority cannot apply Action '${actionId}' to '${target}'.`\n )\n}\n",
|
|
12
|
+
"import type { ResolvedRuntimeAuthorization } from \"../execution/authorization\"\nimport type { Storage } from \"../storage\"\nimport type { ActionRunRecord } from \"../storage/action-runs\"\nimport { findPrimitiveParentRequestExecution } from \"../storage/executions/run-link\"\n\n/** Check both current grant scope and immutable request provenance for a delegated Action run. */\nexport async function canDelegationAccessActionRun(input: {\n readonly storage: Storage\n readonly projectId: string\n readonly authority: Extract<ResolvedRuntimeAuthorization, { readonly type: \"delegated\" }>\n readonly run: ActionRunRecord\n}): Promise<boolean> {\n const subject = input.run.subject\n if (\n !input.authority.delegation ||\n subject.kind !== \"object\" ||\n !input.authority.actionApply.some(\n (target) =>\n target.actionId === input.run.actionId &&\n target.subject.objectTypeId === subject.objectTypeId &&\n target.subject.primaryId === subject.primaryId\n )\n ) {\n return false\n }\n return actionRunBelongsToShareGrant({\n storage: input.storage,\n projectId: input.projectId,\n run: input.run,\n grantId: input.authority.delegation.grantId,\n })\n}\n\n/** Session ids remain audit provenance; the issued grant is the durable capability identity. */\nexport async function actionRunBelongsToShareGrant(input: {\n readonly storage: Storage\n readonly projectId: string\n readonly run: ActionRunRecord\n readonly grantId: string\n}): Promise<boolean> {\n const parent = await findPrimitiveParentRequestExecution({\n executions: input.storage.executions,\n projectId: input.projectId,\n executionId: input.run.executionId,\n primitive: { kind: \"action\", id: input.run.actionId, runId: input.run.id },\n })\n const authorization = parent?.authorizationRef\n return (\n authorization?.type === \"delegated\" &&\n authorization.delegation.kind === \"share\" &&\n authorization.delegation.grantId === input.grantId\n )\n}\n",
|
|
13
|
+
"import { randomUUID } from \"node:crypto\"\nimport { reportRunFailure } from \"../error-reporting/capability\"\nimport { createSixbError, toSixbFailure } from \"../errors/internal\"\nimport type { DomainEventLog } from \"../events\"\nimport type { Queues } from \"../queues\"\nimport type {\n ActionRunFailure,\n ActionRunParams,\n ActionRunRecord,\n CreateExecutionInput,\n Storage,\n} from \"../storage\"\nimport { ACTION_RUN_FAILURE_CODES, ActionRunError } from \"../storage\"\nimport { parseActionRunFailure } from \"../storage/action-runs/failure\"\nimport { actionRunParamsEqual, actionSubjectsEqual } from \"../storage/action-runs/idempotency\"\nimport type { RequestActionResult } from \"./request\"\nimport { createActionRunId, createActionRunIdempotencyKey } from \"./run-id\"\nimport type { ActionSubject } from \"./types\"\n\ninterface DispatchActionRunInput {\n readonly errorReporterHost: object\n readonly projectId: string\n readonly storage: Storage\n readonly queue: Queues[\"actions\"]\n readonly events: DomainEventLog\n readonly actionId: string\n readonly subject: ActionSubject\n readonly params: ActionRunParams\n readonly runId?: string\n readonly createExecution: (executionId: string, runId: string) => Promise<CreateExecutionInput>\n /** Runs before payload comparison or retry so an existing run cannot cross authority owners. */\n readonly assertCanReuseExisting?: (storage: Storage, run: ActionRunRecord) => void | Promise<void>\n /** Checks that hold only for a run this call creates; a replayed run keeps its accepted params. */\n readonly assertNewRun?: () => Promise<void>\n}\n\ninterface PreparedActionRun {\n readonly runId: string\n readonly idempotencyKey: string\n}\n\ntype PersistedActionRun =\n | { readonly publish: false; readonly run: ActionRunRecord }\n | {\n readonly publish: true\n readonly run: ActionRunRecord\n readonly execution: CreateExecutionInput\n readonly queuedAt: Date\n readonly created: boolean\n }\n\n/** Persist an Action execution and run before publishing its queue job. */\nexport async function dispatchActionRun(\n input: DispatchActionRunInput\n): Promise<RequestActionResult> {\n const request = prepareActionRun(input)\n const persisted = await persistActionRun(input, request)\n if (!persisted.publish) return existingActionRunResult(persisted.run)\n return publishActionRun(input, persisted)\n}\n\nfunction prepareActionRun(input: DispatchActionRunInput): PreparedActionRun {\n const runId = createActionRunId(input.runId)\n return {\n runId,\n idempotencyKey: createActionRunIdempotencyKey(input.projectId, runId),\n }\n}\n\nasync function persistActionRun(\n input: DispatchActionRunInput,\n request: PreparedActionRun\n): Promise<PersistedActionRun> {\n const actionRuns = requireActionRunStorage(input.storage)\n const existing = await actionRuns.getById({ projectId: input.projectId, id: request.runId })\n if (existing) {\n await input.assertCanReuseExisting?.(input.storage, existing)\n return reuseActionRun(input, existing)\n }\n\n await input.assertNewRun?.()\n const execution = await input.createExecution(`exec_${randomUUID()}`, request.runId)\n const queuedAt = new Date()\n try {\n return await input.storage.transaction(\n async (tx): Promise<PersistedActionRun> => {\n const transactionalRuns = requireActionRunStorage(tx)\n const raced = await transactionalRuns.getById({\n projectId: input.projectId,\n id: request.runId,\n })\n if (raced) {\n await input.assertCanReuseExisting?.(tx, raced)\n assertExistingRunMatchesRequest(raced, input)\n return { publish: false, run: raced }\n }\n\n await tx.executions.create(execution)\n const run = await transactionalRuns.queue({\n projectId: input.projectId,\n id: request.runId,\n executionId: execution.id,\n actionId: input.actionId,\n subject: input.subject,\n params: input.params,\n idempotencyKey: request.idempotencyKey,\n queuedAt,\n })\n return { publish: true, run, execution, queuedAt, created: true }\n },\n { isolation: \"serializable\" }\n )\n } catch (error) {\n if (!(error instanceof ActionRunError)) throw error\n const raced = await actionRuns.getById({ projectId: input.projectId, id: request.runId })\n if (!raced) throw error\n await input.assertCanReuseExisting?.(input.storage, raced)\n assertExistingRunMatchesRequest(raced, input)\n return { publish: false, run: raced }\n }\n}\n\nasync function reuseActionRun(\n input: DispatchActionRunInput,\n existing: ActionRunRecord\n): Promise<PersistedActionRun> {\n assertExistingRunMatchesRequest(existing, input)\n if (!isRetryableEnqueueFailure(existing)) return { publish: false, run: existing }\n\n const execution = await input.storage.executions.getById({\n projectId: input.projectId,\n id: existing.executionId,\n })\n if (!execution) {\n throw new ActionRunError(\n `[Sixb] Execution '${existing.executionId}' for Action run '${existing.id}' was not found.`\n )\n }\n\n const queuedAt = new Date()\n const run = await requireActionRunStorage(input.storage).queue({\n projectId: input.projectId,\n id: existing.id,\n executionId: existing.executionId,\n actionId: existing.actionId,\n subject: existing.subject,\n params: existing.params,\n idempotencyKey: existing.idempotencyKey,\n queuedAt,\n })\n return { publish: true, run, execution, queuedAt, created: false }\n}\n\nasync function publishActionRun(\n input: DispatchActionRunInput,\n persisted: Extract<PersistedActionRun, { readonly publish: true }>\n): Promise<RequestActionResult> {\n let job: Awaited<ReturnType<Queues[\"actions\"][\"enqueue\"]>>[number] | undefined\n try {\n const jobs = await input.queue.enqueue({\n projectId: input.projectId,\n jobs: [\n {\n id: persisted.run.id,\n type: \"action.run.requested\",\n payload: {\n runId: persisted.run.id,\n },\n },\n ],\n })\n job = jobs[0]\n } catch (error) {\n await failActionRunPublication(input, persisted.run, error)\n throw error\n }\n\n await input.events.emit(\n {\n events: [\n {\n type: \"action.requested\",\n payload: {\n actionId: persisted.run.actionId,\n subject: persisted.run.subject,\n params: persisted.run.params,\n runId: persisted.run.id,\n },\n },\n ],\n correlationId: persisted.execution.correlationId,\n },\n { source: \"Sixb\" }\n )\n\n return {\n runId: persisted.run.id,\n queuedAt: persisted.queuedAt.toISOString(),\n ...(job?.id ? { jobId: job.id } : {}),\n created: persisted.created,\n }\n}\n\nasync function failActionRunPublication(\n input: DispatchActionRunInput,\n run: ActionRunRecord,\n error: unknown\n): Promise<void> {\n const failedAt = new Date()\n const failure = toActionRunFailure(error, run, failedAt)\n await requireActionRunStorage(input.storage).finish({\n projectId: input.projectId,\n id: run.id,\n status: \"failed\",\n finishedAt: failedAt,\n error: failure,\n })\n reportRunFailure(input.errorReporterHost, error, {\n projectId: input.projectId,\n runKind: \"action\",\n run: { runId: run.id, actionId: run.actionId },\n failure,\n })\n}\n\nfunction requireActionRunStorage(storage: Storage): NonNullable<Storage[\"actionRuns\"]> {\n if (!storage.actionRuns) {\n throw new ActionRunError(\"[Sixb] Action run storage is not configured.\")\n }\n return storage.actionRuns\n}\n\nfunction assertExistingRunMatchesRequest(\n existing: ActionRunRecord,\n request: Pick<DispatchActionRunInput, \"actionId\" | \"subject\" | \"params\">\n): void {\n if (\n existing.actionId !== request.actionId ||\n !actionSubjectsEqual(existing.subject, request.subject) ||\n !actionRunParamsEqual(existing.params, request.params)\n ) {\n throw new ActionRunError(\n `[Sixb] Action run '${existing.id}' already exists with a different request payload.`\n )\n }\n}\n\nfunction isRetryableEnqueueFailure(record: ActionRunRecord): boolean {\n return (\n record.status === \"failed\" && record.phase === \"enqueue\" && record.error?.retryable === true\n )\n}\n\nfunction existingActionRunResult(existing: ActionRunRecord): RequestActionResult {\n return {\n runId: existing.id,\n queuedAt: existing.queuedAt.toISOString(),\n created: false,\n }\n}\n\nfunction toActionRunFailure(\n error: unknown,\n run: ActionRunRecord,\n at: Date\n): ActionRunFailure<\"enqueue\"> {\n const enqueueError = createSixbError(\n \"queue.enqueue_failed\",\n `[Sixb] Could not enqueue Action run '${run.id}'.`,\n {\n cause: error,\n details: { actionId: run.actionId, runId: run.id, phase: \"enqueue\" },\n }\n )\n return parseActionRunFailure(\n toSixbFailure(enqueueError, {\n allowedCodes: ACTION_RUN_FAILURE_CODES,\n at,\n }),\n \"enqueue\"\n )\n}\n",
|
|
14
|
+
"import { randomUUID } from \"node:crypto\"\nimport { OntologyValidationError } from \"../ontology/errors\"\n\nexport function createActionRunId(runId: string | undefined): string {\n if (runId !== undefined) {\n if (!runId.trim()) {\n throw new OntologyValidationError(\"[Sixb] Action run id must not be empty\")\n }\n return runId\n }\n\n return `act_${randomUUID()}`\n}\n\nexport function createActionRunIdempotencyKey(projectId: string, runId: string): string {\n return `action:${projectId}:${runId}`\n}\n",
|
|
15
|
+
"import { AuthorizationError, assertAuthorized, canViewActionRun } from \"../authorization\"\nimport {\n getAuthorizationRef,\n resolveExecutionScopeAuthorization,\n resolveRuntimeAuthorizationForProject,\n} from \"../execution/authorization\"\nimport {\n createPrimitiveExecutionRecord,\n ensureExecutionRecord,\n executionRecordInputFromRuntime,\n} from \"../execution/durable\"\nimport type { ExecutionContext } from \"../execution/types\"\nimport { ActionRunTimeoutError } from \"../objects/action/errors\"\nimport { OntologyValidationError } from \"../ontology/errors\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport type { SixbRuntimeContext } from \"../runtime/types\"\nimport { assertParamUsersActive } from \"../shared/params/user-refs\"\nimport {\n ActionRunError,\n type ActionRunRecord,\n type ActionRunStorage,\n isTerminalActionRun,\n} from \"../storage\"\nimport { assertObjectReadOutputWithinLimit } from \"../storage/objects/execution-limits\"\nimport { admitDelegatedObjectAction, assertDelegatedActionTarget } from \"./delegated-admission\"\nimport { actionRunBelongsToShareGrant, canDelegationAccessActionRun } from \"./run-authorization\"\nimport { dispatchActionRun } from \"./run-dispatch\"\nimport { createActionRunId } from \"./run-id\"\nimport type { ActionDefinition, ActionSubject } from \"./types\"\nimport {\n isObjectActionDefinition,\n normalizeActionParams,\n resolveObjectActionSubject,\n validateActionSubject,\n} from \"./validation\"\n\nexport interface RequestActionResult {\n readonly runId: string\n readonly queuedAt: string\n readonly jobId?: string\n readonly created: boolean\n}\n\nexport interface RequestActionOptions {\n readonly runId?: string\n readonly signal?: AbortSignal\n}\n\nexport interface RequestActionAndWaitOptions extends RequestActionOptions {\n readonly timeoutMs?: number\n readonly onRequested?: (runId: string) => void | Promise<void>\n}\n\nexport interface RequestActionInput {\n readonly actionId: string\n readonly subject?: ActionSubject\n readonly params?: Record<string, unknown>\n readonly runId?: string\n readonly signal?: AbortSignal\n}\n\nexport interface RequestActionAndWaitInput extends RequestActionInput {\n readonly timeoutMs?: number\n readonly onRequested?: (runId: string) => void | Promise<void>\n}\n\nexport interface WaitForActionRunInput {\n readonly runId: string\n readonly timeoutMs?: number\n readonly signal?: AbortSignal\n}\n\nconst DEFAULT_ACTION_WAIT_TIMEOUT_MS = 60_000\nconst DEFAULT_ACTION_WAIT_POLL_MS = 1_000\n\nfunction clearTimer(timer: ReturnType<typeof setTimeout> | undefined): void {\n if (timer) {\n clearTimeout(timer)\n }\n}\n\nfunction getActionDefinition(runtime: SixbRuntimeContext, actionId: string): ActionDefinition {\n const action = runtime.actionRegistry.getById(actionId)\n if (!action) {\n throw new OntologyValidationError(`Unknown action '${actionId}'`)\n }\n return action\n}\n\nexport async function requestAction(\n runtime: SixbRuntimeContext,\n execution: ExecutionContext,\n input: RequestActionInput\n): Promise<RequestActionResult> {\n // Capture the three process-local capabilities before caller-owned request getters can run.\n const projectId = runtime.projectId\n const runtimeAuthorization = runtime.runtimeAuthorization\n const objectReader = runtime.objectReader\n const request = snapshotActionRequest(input)\n const authorization = resolveExecutionScopeAuthorization(projectId, {\n execution,\n authorization: runtimeAuthorization,\n })\n const subject = request.subject\n const delegatedSubject =\n authorization.type === \"delegated\"\n ? assertDelegatedActionTarget({\n authorization,\n actionId: request.actionId,\n subject,\n })\n : undefined\n const action = getActionDefinition(runtime, request.actionId)\n const actionId = action.id\n const rawParams = request.params\n\n if (authorization.type === \"delegated\") {\n await admitDelegatedObjectAction({\n objectReader,\n runtimeAuthorization,\n execution,\n authorization,\n action,\n subject: delegatedSubject!,\n })\n } else {\n assertAuthorized({ projectId, runtimeAuthorization }, { kind: \"action.apply\", actionId })\n }\n if (authorization.type !== \"delegated\" && action.binding.kind === \"object\") {\n // Object actions also require visibility of the subject's object type.\n assertAuthorized(\n { projectId, runtimeAuthorization },\n { kind: \"object.view\", objectTypeId: action.binding.objectType.id }\n )\n }\n\n validateActionSubject(action, subject)\n\n let pathPrefix = action.id\n let objectType: ObjectTypeWithPropertyTokens | null = null\n\n if (isObjectActionDefinition(action)) {\n objectType = resolveObjectActionSubject({ runtime, action, subject })\n pathPrefix = `${objectType.id}.${action.id}`\n }\n\n const actionParams = normalizeActionParams(runtime, action.params, rawParams, pathPrefix)\n\n // `dispatchActionRun` checks an existing run id before creating its durable execution. Keep\n // process-local delegation outside that oracle unless it carries durable grant provenance.\n void getAuthorizationRef(runtimeAuthorization)\n\n return dispatchActionRun({\n errorReporterHost: runtime,\n projectId,\n storage: runtime.storage,\n queue: runtime.queues.actions,\n events: runtime.events,\n actionId,\n subject,\n params: actionParams,\n runId: request.runId,\n assertNewRun: () =>\n assertParamUsersActive({\n auth: runtime.storage.auth,\n projectId,\n schemas: Object.fromEntries(\n Object.entries(action.params).map(([paramId, param]) => [paramId, param.schema])\n ),\n values: actionParams,\n valueTypesById: runtime.ontology.getValueTypesById(),\n describe: (paramId) => `Action param '${pathPrefix}.${paramId}'`,\n invalid: (message) => new OntologyValidationError(message),\n }),\n ...(authorization.type === \"delegated\"\n ? {\n assertCanReuseExisting: async (\n storage: SixbRuntimeContext[\"storage\"],\n existing: ActionRunRecord\n ) => {\n if (\n !authorization.delegation ||\n !(await actionRunBelongsToShareGrant({\n storage,\n projectId,\n run: existing,\n grantId: authorization.delegation.grantId,\n }))\n ) {\n throw new AuthorizationError(\n `apply:action:${actionId}`,\n \"[Sixb] Delegated authority cannot reuse this Action run.\"\n )\n }\n },\n }\n : {}),\n createExecution: async (executionId, runId) => {\n const caller = await ensureExecutionRecord(\n runtime.storage.executions,\n executionRecordInputFromRuntime({\n execution,\n runtimeAuthorization,\n })\n )\n return createPrimitiveExecutionRecord({\n id: executionId,\n primitive: { kind: \"action\", id: actionId, runId },\n origin: { type: \"execution\", parent: caller },\n })\n },\n })\n}\n\nfunction snapshotActionRequest(input: RequestActionInput): {\n readonly actionId: string\n readonly subject: ActionSubject\n readonly params: Record<string, unknown>\n readonly runId?: string\n} {\n const actionId = input.actionId\n const subject = input.subject\n const params = input.params\n const runId = input.runId\n return structuredClone({\n actionId,\n subject: subject ?? { kind: \"none\" },\n params: params ?? {},\n ...(runId === undefined ? {} : { runId }),\n })\n}\n\nexport async function requestActionAndWait(\n runtime: SixbRuntimeContext,\n execution: ExecutionContext,\n input: RequestActionAndWaitInput\n): Promise<ActionRunRecord> {\n const runId = createActionRunId(input.runId)\n\n await requestAction(runtime, execution, {\n ...input,\n runId,\n })\n await input.onRequested?.(runId)\n\n return waitForActionRun(runtime, {\n runId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n })\n}\n\nexport async function waitForActionRun(\n runtime: SixbRuntimeContext,\n input: WaitForActionRunInput\n): Promise<ActionRunRecord> {\n const projectId = runtime.projectId\n const runtimeAuthorization = runtime.runtimeAuthorization\n const request = {\n runId: input.runId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n }\n const authorization = resolveRuntimeAuthorizationForProject({\n projectId,\n runtimeAuthorization,\n })\n if (authorization.type === \"denied\") {\n throw new AuthorizationError(\n \"runtime:unbound\",\n \"[Sixb] Protected operations require registered runtime authorization for this project.\"\n )\n }\n // Process-local delegation cannot poll durable runs without originating grant provenance.\n if (authorization.type === \"delegated\") void getAuthorizationRef(runtimeAuthorization)\n const actionRuns = requireActionRunStorage(runtime)\n const timeoutMs = request.timeoutMs ?? DEFAULT_ACTION_WAIT_TIMEOUT_MS\n const signal = request.signal\n const startedAt = Date.now()\n\n if (signal?.aborted) {\n throw signal.reason ?? new Error(\"aborted\")\n }\n\n return new Promise<ActionRunRecord>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined\n let pollTimer: ReturnType<typeof setTimeout> | undefined\n let unsubscribe: (() => void) | undefined\n let settled = false\n let checking = false\n\n const releaseSubscription = (release: (() => void) | undefined) => {\n if (!release) return\n try {\n release()\n } catch (error) {\n console.error(\"[Sixb] Failed to release action run wait subscription:\", error)\n }\n }\n\n const cleanup = () => {\n if (settled) return\n settled = true\n clearTimer(timer)\n clearTimer(pollTimer)\n signal?.removeEventListener(\"abort\", onAbort)\n releaseSubscription(unsubscribe)\n }\n\n const rejectWith = (error: unknown) => {\n cleanup()\n reject(error)\n }\n\n const schedulePoll = () => {\n if (!settled && !pollTimer) {\n pollTimer = setTimeout(() => {\n pollTimer = undefined\n void check()\n }, DEFAULT_ACTION_WAIT_POLL_MS)\n }\n }\n\n const check = async () => {\n if (settled || checking) {\n return\n }\n checking = true\n try {\n const record = await actionRuns.getById({\n projectId,\n id: request.runId,\n })\n const visible =\n record &&\n (authorization.type === \"unrestricted\" ||\n (authorization.type === \"principal\" &&\n canViewActionRun(authorization.context, record)) ||\n (authorization.type === \"delegated\" &&\n (await canDelegationAccessActionRun({\n storage: runtime.storage,\n projectId,\n authority: authorization,\n run: record,\n }))))\n if (visible && isTerminalActionRun(record)) {\n if (authorization.type === \"delegated\") {\n assertObjectReadOutputWithinLimit(record, authorization.objectRead.limits)\n }\n cleanup()\n resolve(record)\n return\n }\n schedulePoll()\n } catch (error) {\n rejectWith(error)\n } finally {\n checking = false\n }\n }\n\n const onAbort = () => {\n rejectWith(signal?.reason ?? new Error(\"aborted\"))\n }\n\n timer = setTimeout(\n () => {\n rejectWith(new ActionRunTimeoutError({ runId: request.runId, timeoutMs }))\n },\n Math.max(0, timeoutMs - (Date.now() - startedAt))\n )\n\n if (signal) {\n signal.addEventListener(\"abort\", onAbort, { once: true })\n }\n\n runtime.events\n .subscribe({ types: [\"action.completed\", \"action.failed\"] }, (events) => {\n if (\n events.some(\n (event) =>\n (event.type === \"action.completed\" || event.type === \"action.failed\") &&\n event.payload.runId === request.runId\n )\n ) {\n void check()\n }\n })\n .then((unsubscribeEvents) => {\n // Timeout or abort can settle the wait before the asynchronous subscription resolves.\n // `cleanup()` had no handle to release in that case, so release the late handle here.\n if (settled) {\n releaseSubscription(unsubscribeEvents)\n return\n }\n unsubscribe = unsubscribeEvents\n void check()\n })\n .catch((error: unknown) => {\n if (settled) {\n console.error(\"[Sixb] Action run wait subscription failed after the wait settled:\", error)\n return\n }\n rejectWith(error)\n })\n })\n}\n\nfunction requireActionRunStorage(runtime: SixbRuntimeContext): ActionRunStorage {\n const actionRuns = runtime.storage.actionRuns\n if (!actionRuns) {\n throw new ActionRunError(\"[Sixb] Action run storage is not configured.\")\n }\n return actionRuns\n}\n"
|
|
16
|
+
],
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "17E16217ECB6D51064756E2164756E21",
|
|
19
|
+
"names": []
|
|
20
|
+
}
|