@sixb/core 0.1.7 → 0.1.8
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/delegated-admission.d.ts +24 -0
- package/dist/actions/delegated-admission.d.ts.map +1 -0
- package/dist/actions/descriptor.d.ts +29 -0
- package/dist/actions/descriptor.d.ts.map +1 -0
- package/dist/actions/execution.d.ts +5 -5
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +36 -30
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +20 -0
- package/dist/actions/run-authorization.d.ts.map +1 -0
- package/dist/actions/run-dispatch.d.ts +3 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -3
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +5 -122
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +1 -1
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/context.js +1 -1
- package/dist/agents/errors.d.ts +0 -9
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/identity.d.ts +3 -0
- package/dist/agents/identity.d.ts.map +1 -0
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +43 -43
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +4 -5
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +2 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/tool-definition.d.ts +0 -1
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +0 -4
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/ai-usage/execution.d.ts.map +1 -1
- package/dist/auth/index.js +8 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/decision.d.ts +10 -2
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -1
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +7 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/discovery.d.ts +7 -1
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +46 -39
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/chunk-19jp6g9d.js +131 -0
- package/dist/chunk-19jp6g9d.js.map +11 -0
- package/dist/{chunk-x0qhkqje.js → chunk-2dw777qw.js} +50 -5
- package/dist/{chunk-x0qhkqje.js.map → chunk-2dw777qw.js.map} +4 -3
- package/dist/chunk-359jm1jw.js +147 -0
- package/dist/chunk-359jm1jw.js.map +10 -0
- package/dist/{chunk-2b5qtban.js → chunk-3xep5cjx.js} +56 -21
- package/dist/chunk-3xep5cjx.js.map +15 -0
- package/dist/{chunk-qjycjdj6.js → chunk-3z1qec12.js} +6 -8
- package/dist/{chunk-qjycjdj6.js.map → chunk-3z1qec12.js.map} +2 -2
- package/dist/{chunk-5jcdmjam.js → chunk-4jjp5k14.js} +1 -1
- package/dist/{chunk-n2arzn6e.js → chunk-4qfkag59.js} +44 -221
- package/dist/chunk-4qfkag59.js.map +20 -0
- package/dist/{chunk-rre42skh.js → chunk-4sm0aznx.js} +515 -80
- package/dist/{chunk-rre42skh.js.map → chunk-4sm0aznx.js.map} +11 -7
- package/dist/chunk-4yqmp43v.js +159 -0
- package/dist/chunk-4yqmp43v.js.map +11 -0
- package/dist/{chunk-atmkaf60.js → chunk-5e3pq99w.js} +2 -6
- package/dist/{chunk-atmkaf60.js.map → chunk-5e3pq99w.js.map} +3 -3
- package/dist/{chunk-agsvg9ar.js → chunk-5ntny1qx.js} +1 -1
- package/dist/{chunk-z2sery1b.js → chunk-9nbmsvn5.js} +60 -20
- package/dist/chunk-9nbmsvn5.js.map +11 -0
- package/dist/{chunk-e4rvtvpw.js → chunk-aa2pen2v.js} +250 -78
- package/dist/chunk-aa2pen2v.js.map +34 -0
- package/dist/{chunk-64sr682n.js → chunk-ajnan18g.js} +11 -8
- package/dist/chunk-ajnan18g.js.map +12 -0
- package/dist/{chunk-9aehf39w.js → chunk-f26bck4t.js} +4 -4
- package/dist/{chunk-7ds9620f.js → chunk-fvt9rjsa.js} +23 -7
- package/dist/chunk-fvt9rjsa.js.map +10 -0
- package/dist/{chunk-kt81c11h.js → chunk-gbejpkex.js} +5 -5
- package/dist/{chunk-kt81c11h.js.map → chunk-gbejpkex.js.map} +1 -1
- package/dist/{chunk-vjjv9mrb.js → chunk-gzasd5b6.js} +5 -5
- package/dist/{chunk-vjjv9mrb.js.map → chunk-gzasd5b6.js.map} +3 -3
- package/dist/{chunk-d63tybny.js → chunk-h0k55pc7.js} +4 -4
- package/dist/{chunk-d63tybny.js.map → chunk-h0k55pc7.js.map} +1 -1
- package/dist/chunk-h5vqbfmd.js +1537 -0
- package/dist/chunk-h5vqbfmd.js.map +19 -0
- package/dist/{chunk-3kv70xwp.js → chunk-j1sbhm7p.js} +18 -2
- package/dist/chunk-j1sbhm7p.js.map +10 -0
- package/dist/{chunk-hdz94br2.js → chunk-k522z7v6.js} +10 -5
- package/dist/chunk-k522z7v6.js.map +10 -0
- package/dist/{chunk-wjgm6jjt.js → chunk-mth82m8t.js} +128 -94
- package/dist/chunk-mth82m8t.js.map +14 -0
- package/dist/{chunk-qv38twt8.js → chunk-mwsxn98e.js} +46 -25
- package/dist/{chunk-qv38twt8.js.map → chunk-mwsxn98e.js.map} +6 -6
- package/dist/chunk-n4khvw9n.js +111 -0
- package/dist/chunk-n4khvw9n.js.map +11 -0
- package/dist/{chunk-qjzp9xyb.js → chunk-nn0tekr1.js} +6 -8
- package/dist/chunk-nn0tekr1.js.map +12 -0
- package/dist/chunk-nx7k8tpr.js +436 -0
- package/dist/chunk-nx7k8tpr.js.map +12 -0
- package/dist/{chunk-08twe8m6.js → chunk-p1rzczbt.js} +1 -1
- package/dist/{chunk-37wk412q.js → chunk-p1x242ad.js} +587 -70
- package/dist/chunk-p1x242ad.js.map +25 -0
- package/dist/{chunk-tn7xcs2n.js → chunk-pc7ys28c.js} +68 -5
- package/dist/chunk-pc7ys28c.js.map +14 -0
- package/dist/{chunk-3fqt22c4.js → chunk-q0k9nc5a.js} +280 -88
- package/dist/chunk-q0k9nc5a.js.map +14 -0
- package/dist/chunk-r8jrnexe.js +403 -0
- package/dist/chunk-r8jrnexe.js.map +10 -0
- package/dist/{chunk-gbrpsx4m.js → chunk-rafagrwr.js} +30 -2
- package/dist/chunk-rafagrwr.js.map +11 -0
- package/dist/{chunk-xdpwpkha.js → chunk-rv2hkwwa.js} +1 -1
- package/dist/{chunk-6ed5bwnd.js → chunk-sbzzr4kx.js} +1203 -691
- package/dist/{chunk-6ed5bwnd.js.map → chunk-sbzzr4kx.js.map} +15 -9
- package/dist/{chunk-d2ndstdf.js → chunk-v1xppd0y.js} +13 -11
- package/dist/{chunk-d2ndstdf.js.map → chunk-v1xppd0y.js.map} +2 -2
- package/dist/chunk-v4en4jc2.js +252 -0
- package/dist/chunk-v4en4jc2.js.map +10 -0
- package/dist/{chunk-1kamz6j0.js → chunk-w1tvjszy.js} +1 -1
- package/dist/{chunk-rp1mvzb4.js → chunk-w9tg6yyb.js} +11 -6
- package/dist/{chunk-rp1mvzb4.js.map → chunk-w9tg6yyb.js.map} +3 -3
- package/dist/{chunk-4nxeacx7.js → chunk-wdage1eb.js} +1 -1
- package/dist/{chunk-ha58tjtt.js → chunk-wtf06et8.js} +9 -5
- package/dist/{chunk-ha58tjtt.js.map → chunk-wtf06et8.js.map} +3 -3
- package/dist/{chunk-h0knpbz5.js → chunk-xajtptbw.js} +782 -211
- package/dist/chunk-xajtptbw.js.map +40 -0
- package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
- package/dist/chunk-yp8ee62z.js.map +11 -0
- package/dist/chunk-z4ccwbkz.js +139 -0
- package/dist/chunk-z4ccwbkz.js.map +10 -0
- package/dist/datasets/builders.d.ts +11 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/changes.d.ts +14 -4
- package/dist/datasets/changes.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +15 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -0
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/sequence.d.ts +7 -0
- package/dist/datasets/sequence.d.ts.map +1 -0
- package/dist/datasets/types.d.ts +1 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +37 -0
- package/dist/datasets/write.d.ts.map +1 -0
- package/dist/datasets/write.js +17 -0
- package/dist/datasets/write.js.map +9 -0
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/datasets.d.ts +2 -6
- package/dist/events/types/datasets.d.ts.map +1 -1
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -32
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +58 -20
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +69 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/primitive.js +39 -32
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +11 -0
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +76 -40
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/scopes.d.ts +16 -0
- package/dist/execution/scopes.d.ts.map +1 -1
- package/dist/execution/types.d.ts +9 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts +2 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -78
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/definition-updates.d.ts.map +1 -1
- package/dist/lake-storage/errors.d.ts +5 -1
- package/dist/lake-storage/errors.d.ts.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +1 -0
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +6 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +24 -7
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/merge-validation.d.ts.map +1 -1
- package/dist/lake-storage/merge.d.ts +13 -2
- package/dist/lake-storage/merge.d.ts.map +1 -1
- package/dist/lake-storage/source-ordering.d.ts +19 -0
- package/dist/lake-storage/source-ordering.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +2 -1
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +10 -5
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +4 -0
- package/dist/lake-storage/version-inputs.d.ts.map +1 -0
- package/dist/materializer/index.js +25 -22
- package/dist/materializer/index.js.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts +25 -0
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +1 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -26
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +2 -7
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +4 -2
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +24 -21
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/links.d.ts +22 -1
- package/dist/objects/query/links.d.ts.map +1 -1
- package/dist/objects/query/selected-read-admission.d.ts +27 -0
- package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +60 -2
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/service/list-service.d.ts +2 -3
- package/dist/objects/service/list-service.d.ts.map +1 -1
- package/dist/objects/telemetry/history.d.ts +8 -6
- package/dist/objects/telemetry/history.d.ts.map +1 -1
- package/dist/objects/telemetry/index.d.ts +2 -2
- package/dist/objects/telemetry/index.d.ts.map +1 -1
- package/dist/objects/telemetry/workload.d.ts +11 -0
- package/dist/objects/telemetry/workload.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +13 -12
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +2 -1
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +0 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +5 -10
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts +10 -6
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/link-path-selection.d.ts +35 -0
- package/dist/ontology/link-path-selection.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +2 -0
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +2 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/pipelines/execution.d.ts.map +1 -1
- package/dist/pipelines/index.js +27 -24
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/request.d.ts.map +1 -1
- package/dist/projections/execution.d.ts.map +1 -1
- package/dist/projections/internal.js +25 -22
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +2 -0
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -0
- package/dist/runtime/host.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/resolve-definitions.d.ts +2 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +4 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +3 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schedules/execution.d.ts +2 -1
- package/dist/schedules/execution.d.ts.map +1 -1
- package/dist/security/every.d.ts +4 -1
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +7 -2
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +1 -0
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +7 -1
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +2 -0
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/access-plan.d.ts +22 -0
- package/dist/shares/access-plan.d.ts.map +1 -0
- package/dist/shares/builders.d.ts +14 -0
- package/dist/shares/builders.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts +14 -0
- package/dist/shares/compiler.d.ts.map +1 -0
- package/dist/shares/errors.d.ts +4 -0
- package/dist/shares/errors.d.ts.map +1 -0
- package/dist/shares/execution.d.ts +57 -0
- package/dist/shares/execution.d.ts.map +1 -0
- package/dist/shares/index.d.ts +10 -0
- package/dist/shares/index.d.ts.map +1 -0
- package/dist/shares/internal.d.ts +3 -0
- package/dist/shares/internal.d.ts.map +1 -0
- package/dist/shares/internal.js +239 -0
- package/dist/shares/internal.js.map +10 -0
- package/dist/shares/intersection.d.ts +9 -0
- package/dist/shares/intersection.d.ts.map +1 -0
- package/dist/shares/session-protocol.d.ts +41 -0
- package/dist/shares/session-protocol.d.ts.map +1 -0
- package/dist/shares/types.d.ts +51 -0
- package/dist/shares/types.d.ts.map +1 -0
- package/dist/shares/validation.d.ts +11 -0
- package/dist/shares/validation.d.ts.map +1 -0
- package/dist/storage/action-runs/provider.js +2 -2
- package/dist/storage/agents/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +3 -0
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +4 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +23 -3
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/run-link.d.ts +7 -0
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +6 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +8 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +8 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +65 -36
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +25 -0
- package/dist/storage/objects/execution-limits.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +16 -0
- package/dist/storage/objects/guard.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/index.d.ts +3 -0
- package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/keys.d.ts +10 -0
- package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts +31 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
- package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
- package/dist/storage/objects/index.d.ts +4 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +1 -1
- package/dist/storage/objects/keys.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +25 -0
- package/dist/storage/objects/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +114 -22
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts +3 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +4 -2
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/share-grants/errors.d.ts +8 -0
- package/dist/storage/share-grants/errors.d.ts.map +1 -0
- package/dist/storage/share-grants/in-memory.d.ts +11 -0
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/share-grants/index.d.ts +5 -0
- package/dist/storage/share-grants/index.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.d.ts +4 -0
- package/dist/storage/share-grants/provider.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.js +24 -0
- package/dist/storage/share-grants/provider.js.map +9 -0
- package/dist/storage/share-grants/record.d.ts +11 -0
- package/dist/storage/share-grants/record.d.ts.map +1 -0
- package/dist/storage/share-grants/types.d.ts +97 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -0
- package/dist/storage/share-sessions/errors.d.ts +8 -0
- package/dist/storage/share-sessions/errors.d.ts.map +1 -0
- package/dist/storage/share-sessions/in-memory.d.ts +14 -0
- package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
- package/dist/storage/share-sessions/index.d.ts +5 -0
- package/dist/storage/share-sessions/index.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.d.ts +3 -0
- package/dist/storage/share-sessions/provider.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.js +20 -0
- package/dist/storage/share-sessions/provider.js.map +9 -0
- package/dist/storage/share-sessions/record.d.ts +8 -0
- package/dist/storage/share-sessions/record.d.ts.map +1 -0
- package/dist/storage/share-sessions/types.d.ts +50 -0
- package/dist/storage/share-sessions/types.d.ts.map +1 -0
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/transaction.d.ts +2 -1
- package/dist/storage/transaction.d.ts.map +1 -1
- package/dist/storage/types.d.ts +8 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.js +2 -2
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/execution.d.ts.map +1 -1
- package/dist/syncs/index.js +27 -24
- package/dist/syncs/index.js.map +1 -1
- package/dist/syncs/request.d.ts.map +1 -1
- package/dist/testing/dataset-sequence-contract.d.ts +4 -0
- package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts +4 -0
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2555 -908
- package/dist/testing/index.js.map +11 -7
- package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts +22 -0
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/share-grant-storage-contract.d.ts +10 -0
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/share-session-storage-contract.d.ts +9 -0
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +24 -21
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/index.js +42 -35
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/package.json +25 -1
- package/src/actions/delegated-admission.ts +72 -0
- package/src/actions/descriptor.ts +58 -0
- package/src/actions/execution.ts +99 -24
- package/src/actions/request.ts +136 -19
- package/src/actions/run-authorization.ts +53 -0
- package/src/actions/run-dispatch.ts +8 -1
- package/src/agents/adapters.ts +30 -420
- package/src/agents/authority.ts +3 -4
- package/src/agents/context-resolution.ts +1 -4
- package/src/agents/errors.ts +0 -10
- package/src/agents/execution.ts +13 -5
- package/src/agents/identity.ts +4 -0
- package/src/agents/index.ts +1 -20
- package/src/agents/message.ts +4 -5
- package/src/agents/model-loop.ts +54 -6
- package/src/agents/request.ts +16 -3
- package/src/agents/tool-definition.ts +0 -19
- package/src/agents/validation.ts +6 -65
- package/src/ai-usage/execution.ts +4 -11
- package/src/authorization/decision.ts +29 -14
- package/src/authorization/grant-kinds.ts +10 -0
- package/src/authorization/index.ts +1 -0
- package/src/bootstrap/discovery.ts +3 -0
- package/src/bootstrap/ontology-type-manifest.ts +12 -6
- package/src/datasets/builders.ts +23 -2
- package/src/datasets/changes.ts +16 -4
- package/src/datasets/execution.ts +76 -5
- package/src/datasets/index.ts +1 -0
- package/src/datasets/sequence.ts +77 -0
- package/src/datasets/types.ts +1 -0
- package/src/datasets/validation.ts +26 -0
- package/src/datasets/write.ts +240 -0
- package/src/events/execution.ts +57 -7
- package/src/events/types/datasets.ts +2 -6
- package/src/execution/agent.ts +1 -4
- package/src/execution/authorization.ts +470 -90
- package/src/execution/authorized-object-reader.ts +695 -0
- package/src/execution/durable.ts +10 -2
- package/src/execution/index.ts +1 -0
- package/src/execution/request.ts +63 -13
- package/src/execution/scopes.ts +36 -6
- package/src/execution/types.ts +8 -0
- package/src/http/api-routes.ts +45 -0
- package/src/index.ts +36 -15
- package/src/lake-storage/definition-updates.ts +9 -0
- package/src/lake-storage/errors.ts +6 -1
- package/src/lake-storage/in-memory.ts +53 -17
- package/src/lake-storage/index.ts +10 -1
- package/src/lake-storage/merge-validation.ts +12 -2
- package/src/lake-storage/merge.ts +40 -2
- package/src/lake-storage/source-ordering.ts +95 -0
- package/src/lake-storage/sql-transforms.ts +2 -1
- package/src/lake-storage/types.ts +10 -5
- package/src/lake-storage/version-inputs.ts +14 -0
- package/src/objects/authorized-ontology-view.ts +512 -0
- package/src/objects/execution.ts +98 -143
- package/src/objects/link/authorization.ts +3 -2
- package/src/objects/query/executor.ts +45 -34
- package/src/objects/query/links.ts +84 -25
- package/src/objects/query/selected-read-admission.ts +310 -0
- package/src/objects/query/validate.ts +353 -36
- package/src/objects/sdk/object-handle.ts +2 -8
- package/src/objects/sdk/object-set.ts +10 -11
- package/src/objects/sdk/runtime-query-executor.ts +8 -28
- package/src/objects/sdk/telemetry-channel.ts +11 -7
- package/src/objects/service/list-service.ts +15 -29
- package/src/objects/telemetry/history.ts +297 -17
- package/src/objects/telemetry/index.ts +2 -2
- package/src/objects/telemetry/workload.ts +79 -0
- package/src/ontology/index.ts +7 -1
- package/src/ontology/inference/index.ts +4 -1
- package/src/ontology/internal.ts +0 -1
- package/src/ontology/json-schema.ts +13 -12
- package/src/ontology/link-path-selection.ts +193 -0
- package/src/ontology/refs.ts +19 -0
- package/src/ontology/tokens.ts +15 -8
- package/src/pipelines/execution.ts +30 -7
- package/src/pipelines/request.ts +5 -0
- package/src/projections/execution.ts +72 -11
- package/src/projections/run-dispatch.ts +6 -12
- package/src/rules/execution.ts +20 -8
- package/src/runtime/create.ts +5 -1
- package/src/runtime/definitions.ts +2 -0
- package/src/runtime/host.ts +25 -6
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/resolve-definitions.ts +9 -0
- package/src/runtime/sixb.ts +23 -2
- package/src/runtime/types.ts +3 -0
- package/src/schedules/execution.ts +24 -2
- package/src/security/every.ts +4 -0
- package/src/security/grants.ts +45 -3
- package/src/security/index.ts +1 -0
- package/src/security/registry.ts +3 -0
- package/src/security/types.ts +8 -0
- package/src/security/validation.ts +3 -0
- package/src/shares/access-plan.ts +225 -0
- package/src/shares/builders.ts +381 -0
- package/src/shares/compiler.ts +359 -0
- package/src/shares/errors.ts +3 -0
- package/src/shares/execution.ts +394 -0
- package/src/shares/index.ts +28 -0
- package/src/shares/internal.ts +9 -0
- package/src/shares/intersection.ts +178 -0
- package/src/shares/session-protocol.ts +258 -0
- package/src/shares/types.ts +76 -0
- package/src/shares/validation.ts +40 -0
- package/src/storage/executions/in-memory.ts +9 -1
- package/src/storage/executions/provider.ts +30 -1
- package/src/storage/executions/run-link.ts +29 -0
- package/src/storage/executions/validation.ts +46 -1
- package/src/storage/in-memory/index.ts +21 -2
- package/src/storage/index.ts +51 -0
- package/src/storage/objects/execution-limits.ts +283 -0
- package/src/storage/objects/guard.ts +55 -0
- package/src/storage/objects/in-memory/index.ts +2 -0
- package/src/storage/objects/in-memory/keys.ts +46 -0
- package/src/storage/objects/in-memory/query.ts +754 -0
- package/src/storage/objects/in-memory/read-scope.ts +211 -0
- package/src/storage/objects/in-memory/read-source.ts +10 -0
- package/src/storage/objects/in-memory/selected-reader.ts +252 -0
- package/src/storage/objects/in-memory/storage.ts +589 -0
- package/src/storage/objects/index.ts +21 -0
- package/src/storage/objects/keys.ts +1 -1
- package/src/storage/objects/read-scope.ts +672 -0
- package/src/storage/objects/types.ts +123 -19
- package/src/storage/operation-scope.ts +16 -0
- package/src/storage/share-grants/errors.ts +14 -0
- package/src/storage/share-grants/in-memory.ts +107 -0
- package/src/storage/share-grants/index.ts +14 -0
- package/src/storage/share-grants/provider.ts +11 -0
- package/src/storage/share-grants/record.ts +347 -0
- package/src/storage/share-grants/types.ts +112 -0
- package/src/storage/share-sessions/errors.ts +14 -0
- package/src/storage/share-sessions/in-memory.ts +105 -0
- package/src/storage/share-sessions/index.ts +11 -0
- package/src/storage/share-sessions/provider.ts +9 -0
- package/src/storage/share-sessions/record.ts +176 -0
- package/src/storage/share-sessions/types.ts +57 -0
- package/src/storage/transaction.ts +14 -2
- package/src/storage/types.ts +27 -0
- package/src/syncs/execution.ts +25 -5
- package/src/syncs/request.ts +5 -0
- package/src/testing/dataset-sequence-contract.ts +373 -0
- package/src/testing/effective-storage-contract.ts +34 -0
- package/src/testing/execution-storage-contract.ts +79 -0
- package/src/testing/index.ts +16 -0
- package/src/testing/lake-merge-storage-contract.ts +3 -0
- package/src/testing/lake-storage-contract.ts +58 -0
- package/src/testing/object-read-scope-contract.ts +939 -0
- package/src/testing/share-grant-storage-contract.ts +325 -0
- package/src/testing/share-session-storage-contract.ts +235 -0
- package/src/workflows/execution.ts +53 -14
- package/src/workflows/request.ts +5 -0
- package/dist/chunk-2b5qtban.js.map +0 -14
- package/dist/chunk-37wk412q.js.map +0 -23
- package/dist/chunk-3fqt22c4.js.map +0 -14
- package/dist/chunk-3kv70xwp.js.map +0 -10
- package/dist/chunk-64sr682n.js.map +0 -12
- package/dist/chunk-7ds9620f.js.map +0 -10
- package/dist/chunk-dqn23610.js +0 -72
- package/dist/chunk-dqn23610.js.map +0 -11
- package/dist/chunk-e4rvtvpw.js.map +0 -34
- package/dist/chunk-gbrpsx4m.js.map +0 -11
- package/dist/chunk-h0knpbz5.js.map +0 -38
- package/dist/chunk-hdz94br2.js.map +0 -10
- package/dist/chunk-n2arzn6e.js.map +0 -20
- package/dist/chunk-qjzp9xyb.js.map +0 -12
- package/dist/chunk-tn7xcs2n.js.map +0 -13
- package/dist/chunk-wjgm6jjt.js.map +0 -13
- package/dist/chunk-xc7hq65b.js.map +0 -10
- package/dist/chunk-y35ma3mj.js +0 -551
- package/dist/chunk-y35ma3mj.js.map +0 -15
- package/dist/chunk-z2sery1b.js.map +0 -11
- package/dist/storage/objects/in-memory.d.ts.map +0 -1
- package/src/storage/objects/in-memory.ts +0 -1241
- /package/dist/{chunk-5jcdmjam.js.map → chunk-4jjp5k14.js.map} +0 -0
- /package/dist/{chunk-agsvg9ar.js.map → chunk-5ntny1qx.js.map} +0 -0
- /package/dist/{chunk-9aehf39w.js.map → chunk-f26bck4t.js.map} +0 -0
- /package/dist/{chunk-08twe8m6.js.map → chunk-p1rzczbt.js.map} +0 -0
- /package/dist/{chunk-xdpwpkha.js.map → chunk-rv2hkwwa.js.map} +0 -0
- /package/dist/{chunk-1kamz6j0.js.map → chunk-w1tvjszy.js.map} +0 -0
- /package/dist/{chunk-4nxeacx7.js.map → chunk-wdage1eb.js.map} +0 -0
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
type ObjectBatchKey,
|
|
7
7
|
type ObjectLinkCursor,
|
|
8
8
|
type ObjectLinkRow,
|
|
9
|
+
type ObjectReadStorage,
|
|
9
10
|
type ObjectRow,
|
|
10
|
-
type ObjectStorage,
|
|
11
11
|
objectBatchKey,
|
|
12
12
|
objectLinkCursor,
|
|
13
13
|
} from "../../storage"
|
|
@@ -15,7 +15,7 @@ import { ObjectQueryExecutionError } from "./errors"
|
|
|
15
15
|
import { executeObjectQuery, type QueryExecutorOptions } from "./executor"
|
|
16
16
|
import type { ObjectQuery } from "./ir"
|
|
17
17
|
import { normalizeObjectQuery } from "./normalize"
|
|
18
|
-
import { validateObjectQuery } from "./validate"
|
|
18
|
+
import { type ValidatedObjectQuery, validateObjectQuery } from "./validate"
|
|
19
19
|
|
|
20
20
|
export interface ExecuteObjectQueryLinksInput {
|
|
21
21
|
projectId: string
|
|
@@ -34,21 +34,46 @@ export interface ExecuteObjectQueryLinksResult {
|
|
|
34
34
|
nextPageToken?: string
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
export interface PreflightObjectQueryLinksResult {
|
|
38
|
+
projectId: string
|
|
39
|
+
validated: ValidatedObjectQuery
|
|
40
|
+
direction: LinkDirection
|
|
41
|
+
linkId?: string
|
|
42
|
+
includeObjects: boolean
|
|
43
|
+
pageSize: number
|
|
44
|
+
cursor?: ObjectLinkCursor
|
|
45
|
+
pageScope: string
|
|
46
|
+
}
|
|
47
|
+
|
|
37
48
|
const MAX_LINK_QUERY_OBJECTS = 1_000
|
|
38
49
|
const MAX_LINK_PAGE_SIZE = 1_000
|
|
39
50
|
const DEFAULT_LINK_PAGE_SIZE = 100
|
|
40
51
|
const LINK_PAGE_TOKEN_PREFIX = "link:v1:"
|
|
41
52
|
|
|
42
53
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
54
|
+
* Canonicalize and validate a physical-link query without reading storage.
|
|
55
|
+
*
|
|
56
|
+
* This direct-file-only boundary lets higher-level readers complete ordinary request validation
|
|
57
|
+
* before applying terminal-specific authorization, while the executor consumes the exact same
|
|
58
|
+
* preflight contract.
|
|
59
|
+
*
|
|
60
|
+
* @internal Intentionally absent from query barrels.
|
|
46
61
|
*/
|
|
47
|
-
export
|
|
62
|
+
export function preflightObjectQueryLinks(
|
|
48
63
|
input: ExecuteObjectQueryLinksInput,
|
|
49
|
-
options: QueryExecutorOptions
|
|
50
|
-
):
|
|
51
|
-
|
|
64
|
+
options: Pick<QueryExecutorOptions, "ontology" | "maxLimit" | "maxPageSize" | "maxRefs">
|
|
65
|
+
): PreflightObjectQueryLinksResult {
|
|
66
|
+
// Capture caller-owned scalar fields once so validation, token scoping, and execution agree on
|
|
67
|
+
// one request even when this internal API is reached without an AuthorizedObjectReader snapshot.
|
|
68
|
+
const projectId = input.projectId
|
|
69
|
+
const query = input.query
|
|
70
|
+
const requestedDirection = input.direction
|
|
71
|
+
const linkId = input.linkId
|
|
72
|
+
const requestedIncludeObjects = input.includeObjects
|
|
73
|
+
const requestedPageSize = input.pageSize
|
|
74
|
+
const pageToken = input.pageToken
|
|
75
|
+
|
|
76
|
+
const direction = requestedDirection ?? "both"
|
|
52
77
|
if (direction !== "outgoing" && direction !== "incoming" && direction !== "both") {
|
|
53
78
|
throw new ObjectQueryExecutionError(
|
|
54
79
|
"invalid_link_direction",
|
|
@@ -56,11 +81,21 @@ export async function executeObjectQueryLinks(
|
|
|
56
81
|
"$.direction"
|
|
57
82
|
)
|
|
58
83
|
}
|
|
59
|
-
if (
|
|
84
|
+
if (linkId !== undefined && typeof linkId !== "string") {
|
|
85
|
+
throw new ObjectQueryExecutionError("invalid_link_id", "linkId must be a string", "$.linkId")
|
|
86
|
+
}
|
|
87
|
+
if (linkId !== undefined && linkId.length === 0) {
|
|
60
88
|
throw new ObjectQueryExecutionError("invalid_link_id", "linkId must not be empty", "$.linkId")
|
|
61
89
|
}
|
|
90
|
+
if (requestedIncludeObjects !== undefined && typeof requestedIncludeObjects !== "boolean") {
|
|
91
|
+
throw new ObjectQueryExecutionError(
|
|
92
|
+
"invalid_link_include_objects",
|
|
93
|
+
"includeObjects must be a boolean",
|
|
94
|
+
"$.includeObjects"
|
|
95
|
+
)
|
|
96
|
+
}
|
|
62
97
|
|
|
63
|
-
const pageSize =
|
|
98
|
+
const pageSize = requestedPageSize ?? DEFAULT_LINK_PAGE_SIZE
|
|
64
99
|
if (!Number.isInteger(pageSize) || pageSize <= 0 || pageSize > MAX_LINK_PAGE_SIZE) {
|
|
65
100
|
throw new ObjectQueryExecutionError(
|
|
66
101
|
"invalid_link_page_size",
|
|
@@ -68,7 +103,8 @@ export async function executeObjectQueryLinks(
|
|
|
68
103
|
"$.pageSize"
|
|
69
104
|
)
|
|
70
105
|
}
|
|
71
|
-
|
|
106
|
+
|
|
107
|
+
const validated = validateObjectQuery(normalizeObjectQuery(query), {
|
|
72
108
|
ontology: options.ontology,
|
|
73
109
|
maxLimit: options.maxLimit,
|
|
74
110
|
maxPageSize: options.maxPageSize,
|
|
@@ -76,9 +112,32 @@ export async function executeObjectQueryLinks(
|
|
|
76
112
|
normalize: false,
|
|
77
113
|
})
|
|
78
114
|
assertLinkSelectorShape(validated.query)
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
115
|
+
const pageScope = linkPageScope(projectId, validated.query, direction, linkId)
|
|
116
|
+
const cursor = decodeLinkPageToken(pageToken, pageScope)
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
projectId,
|
|
120
|
+
validated,
|
|
121
|
+
direction,
|
|
122
|
+
...(linkId === undefined ? {} : { linkId }),
|
|
123
|
+
includeObjects: requestedIncludeObjects ?? false,
|
|
124
|
+
pageSize,
|
|
125
|
+
...(cursor === undefined ? {} : { cursor }),
|
|
126
|
+
pageScope,
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Select a bounded object set with the query IR, then return physical links
|
|
132
|
+
* incident to that set. This is a separate terminal because edge rows and edge
|
|
133
|
+
* pagination are a different response contract from object-set queries.
|
|
134
|
+
*/
|
|
135
|
+
export async function executeObjectQueryLinks(
|
|
136
|
+
input: ExecuteObjectQueryLinksInput,
|
|
137
|
+
options: QueryExecutorOptions
|
|
138
|
+
): Promise<ExecuteObjectQueryLinksResult> {
|
|
139
|
+
const preflight = preflightObjectQueryLinks(input, options)
|
|
140
|
+
const selectorQuery = preflight.validated.query
|
|
82
141
|
|
|
83
142
|
// A root page already has an explicit result bound and must execute directly: nesting it under a
|
|
84
143
|
// probe limit would expose the provider's internal pageSize+1 row. All other selector shapes are
|
|
@@ -89,7 +148,7 @@ export async function executeObjectQueryLinks(
|
|
|
89
148
|
: { kind: "limit" as const, limit: MAX_LINK_QUERY_OBJECTS + 1, input: selectorQuery }
|
|
90
149
|
const selection = await executeObjectQuery(
|
|
91
150
|
{
|
|
92
|
-
projectId:
|
|
151
|
+
projectId: preflight.projectId,
|
|
93
152
|
query: boundedSelector,
|
|
94
153
|
includeTotal: false,
|
|
95
154
|
},
|
|
@@ -113,16 +172,16 @@ export async function executeObjectQueryLinks(
|
|
|
113
172
|
|
|
114
173
|
const endpointObjectTypeIds = visibleEndpointTypeIds(options)
|
|
115
174
|
const page = await options.storage.queryLinks({
|
|
116
|
-
projectId:
|
|
175
|
+
projectId: preflight.projectId,
|
|
117
176
|
objectRefs: selected.map((row) => ({
|
|
118
177
|
objectTypeId: row.objectTypeId,
|
|
119
178
|
primaryId: row.primaryId,
|
|
120
179
|
})),
|
|
121
|
-
direction,
|
|
122
|
-
...(
|
|
180
|
+
direction: preflight.direction,
|
|
181
|
+
...(preflight.linkId === undefined ? {} : { linkId: preflight.linkId }),
|
|
123
182
|
...(endpointObjectTypeIds === undefined ? {} : { endpointObjectTypeIds }),
|
|
124
|
-
...(cursor === undefined ? {} : { after: cursor }),
|
|
125
|
-
limit: pageSize,
|
|
183
|
+
...(preflight.cursor === undefined ? {} : { after: preflight.cursor }),
|
|
184
|
+
limit: preflight.pageSize,
|
|
126
185
|
})
|
|
127
186
|
const lastLink = page.links.at(-1)
|
|
128
187
|
let nextPageToken: string | undefined
|
|
@@ -130,10 +189,10 @@ export async function executeObjectQueryLinks(
|
|
|
130
189
|
if (!lastLink) {
|
|
131
190
|
throw new Error("[Sixb] Object storage returned hasMore for an empty link page.")
|
|
132
191
|
}
|
|
133
|
-
nextPageToken = encodeLinkPageToken(objectLinkCursor(lastLink), pageScope)
|
|
192
|
+
nextPageToken = encodeLinkPageToken(objectLinkCursor(lastLink), preflight.pageScope)
|
|
134
193
|
}
|
|
135
|
-
const objects =
|
|
136
|
-
? await hydrateLinkQueryObjects(
|
|
194
|
+
const objects = preflight.includeObjects
|
|
195
|
+
? await hydrateLinkQueryObjects(preflight.projectId, selected, page.links, options.storage)
|
|
137
196
|
: []
|
|
138
197
|
|
|
139
198
|
return {
|
|
@@ -271,7 +330,7 @@ async function hydrateLinkQueryObjects(
|
|
|
271
330
|
projectId: string,
|
|
272
331
|
selected: readonly ObjectRow[],
|
|
273
332
|
links: readonly ObjectLinkRow[],
|
|
274
|
-
storage:
|
|
333
|
+
storage: ObjectReadStorage
|
|
275
334
|
): Promise<ObjectRow[]> {
|
|
276
335
|
const byIdentity = new Map(
|
|
277
336
|
selected.map((row) => [objectIdentity(row.objectTypeId, row.primaryId), row])
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { AuthorizationError } from "../../authorization/errors"
|
|
2
|
+
import type {
|
|
3
|
+
CompiledObjectReadObjectSelection,
|
|
4
|
+
CompiledObjectReadStep,
|
|
5
|
+
CompiledSelectedObjectReadScope,
|
|
6
|
+
} from "../../storage/objects/types"
|
|
7
|
+
import type {
|
|
8
|
+
ObjectQueryAdmissionState,
|
|
9
|
+
ObjectQueryAdmissionTransition,
|
|
10
|
+
ObjectQueryEdgeUse,
|
|
11
|
+
ObjectQueryPropertyUse,
|
|
12
|
+
ObjectQuerySemanticAdmission,
|
|
13
|
+
} from "./validate"
|
|
14
|
+
|
|
15
|
+
const selectedStateBrand = Symbol("sixb.selected-object-query-admission-state")
|
|
16
|
+
|
|
17
|
+
interface SelectedObjectQueryState extends ObjectQueryAdmissionState {
|
|
18
|
+
readonly [selectedStateBrand]: true
|
|
19
|
+
readonly selections: readonly CompiledObjectReadObjectSelection[]
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface SelectedObjectQueryAdmission extends ObjectQuerySemanticAdmission {
|
|
23
|
+
/** Terminal hook for property-bearing operations outside the query IR, such as facets. */
|
|
24
|
+
assertPropertySelected(input: {
|
|
25
|
+
readonly state: ObjectQueryAdmissionState
|
|
26
|
+
readonly propertyId: string
|
|
27
|
+
readonly objectTypeId?: string
|
|
28
|
+
readonly use: ObjectQueryPropertyUse
|
|
29
|
+
readonly path: string
|
|
30
|
+
}): void
|
|
31
|
+
/** Terminal hook for the physical-link selector that sits outside `queryLinks.query`. */
|
|
32
|
+
assertIncidentEdgeSelected(input: {
|
|
33
|
+
readonly state: ObjectQueryAdmissionState
|
|
34
|
+
readonly linkId?: string
|
|
35
|
+
readonly direction: "outgoing" | "incoming" | "both"
|
|
36
|
+
readonly path: string
|
|
37
|
+
}): void
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Build an immutable semantic admission over one already-compiled selected reader scope.
|
|
42
|
+
*
|
|
43
|
+
* Object identities remain provider-owned: query admission follows exact path occurrences while
|
|
44
|
+
* the selected storage relation decides which live roots and linked instances exist.
|
|
45
|
+
*/
|
|
46
|
+
export function createSelectedObjectQueryAdmission(
|
|
47
|
+
scope: CompiledSelectedObjectReadScope
|
|
48
|
+
): SelectedObjectQueryAdmission {
|
|
49
|
+
const selectionByKey = new Map<string, CompiledObjectReadObjectSelection>()
|
|
50
|
+
const selectionsByType = new Map<string, CompiledObjectReadObjectSelection[]>()
|
|
51
|
+
const propertiesBySelection = new Map<string, ReadonlySet<string>>()
|
|
52
|
+
|
|
53
|
+
for (const selection of scope.objects) {
|
|
54
|
+
const key = selectionKey(selection.nodeId, selection.objectTypeId)
|
|
55
|
+
selectionByKey.set(key, selection)
|
|
56
|
+
propertiesBySelection.set(key, new Set(selection.propertyIds))
|
|
57
|
+
const byType = selectionsByType.get(selection.objectTypeId) ?? []
|
|
58
|
+
byType.push(selection)
|
|
59
|
+
selectionsByType.set(selection.objectTypeId, byType)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const outgoing = indexSteps(scope.steps, "outgoing", selectionByKey)
|
|
63
|
+
const incoming = indexSteps(scope.steps, "incoming", selectionByKey)
|
|
64
|
+
const emptyState = selectedState([])
|
|
65
|
+
|
|
66
|
+
const admission: SelectedObjectQueryAdmission = {
|
|
67
|
+
empty: () => emptyState,
|
|
68
|
+
source: (input) => {
|
|
69
|
+
const selections = input.result.objectTypeIds.flatMap(
|
|
70
|
+
(objectTypeId) => selectionsByType.get(objectTypeId) ?? []
|
|
71
|
+
)
|
|
72
|
+
const state = selectedState(selections)
|
|
73
|
+
|
|
74
|
+
if (input.kind === "refs") {
|
|
75
|
+
const missingType = [...new Set(input.refs?.map((ref) => ref.objectTypeId) ?? [])]
|
|
76
|
+
.sort()
|
|
77
|
+
.find((objectTypeId) => !selectionsByType.has(objectTypeId))
|
|
78
|
+
if (missingType) {
|
|
79
|
+
return denied(
|
|
80
|
+
state,
|
|
81
|
+
new AuthorizationError(
|
|
82
|
+
`view:object:${missingType}`,
|
|
83
|
+
`[Sixb] Delegated query cannot reference object type '${missingType}' at '${input.path}': the selected object scope does not contain that type.`
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (state.selections.length > 0) return { state }
|
|
90
|
+
const objectTypeId = input.objectTypeId ?? input.result.objectTypeIds[0] ?? "unknown"
|
|
91
|
+
return denied(
|
|
92
|
+
state,
|
|
93
|
+
new AuthorizationError(
|
|
94
|
+
`view:object:${objectTypeId}`,
|
|
95
|
+
`[Sixb] Delegated query cannot start from object type '${objectTypeId}' at '${input.path}': the selected object scope does not contain that type.`
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
},
|
|
99
|
+
property: (input) =>
|
|
100
|
+
propertyDenial(
|
|
101
|
+
asSelectedState(input.state),
|
|
102
|
+
input.propertyId,
|
|
103
|
+
input.objectTypeId,
|
|
104
|
+
input.use,
|
|
105
|
+
input.path,
|
|
106
|
+
propertiesBySelection
|
|
107
|
+
),
|
|
108
|
+
edge: (input) => {
|
|
109
|
+
const state = asSelectedState(input.state)
|
|
110
|
+
const next = followEdge(
|
|
111
|
+
state,
|
|
112
|
+
input.linkId,
|
|
113
|
+
input.direction,
|
|
114
|
+
input.sourceObjectTypeId,
|
|
115
|
+
outgoing,
|
|
116
|
+
incoming,
|
|
117
|
+
input.result.objectTypeIds
|
|
118
|
+
)
|
|
119
|
+
if (next.selections.length > 0 || state.selections.length === 0) return { state: next }
|
|
120
|
+
return denied(
|
|
121
|
+
next,
|
|
122
|
+
edgeDenial(
|
|
123
|
+
state,
|
|
124
|
+
input.linkId,
|
|
125
|
+
input.direction,
|
|
126
|
+
input.sourceObjectTypeId,
|
|
127
|
+
input.use,
|
|
128
|
+
input.path
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
},
|
|
132
|
+
set: ({ op, states }) => {
|
|
133
|
+
if (op === "subtract") return asSelectedState(states[0] ?? emptyState)
|
|
134
|
+
return selectedState(states.flatMap((state) => asSelectedState(state).selections))
|
|
135
|
+
},
|
|
136
|
+
assertPropertySelected: (input) => {
|
|
137
|
+
const denial = propertyDenial(
|
|
138
|
+
asSelectedState(input.state),
|
|
139
|
+
input.propertyId,
|
|
140
|
+
input.objectTypeId,
|
|
141
|
+
input.use,
|
|
142
|
+
input.path,
|
|
143
|
+
propertiesBySelection
|
|
144
|
+
)
|
|
145
|
+
if (denial) throw denial
|
|
146
|
+
},
|
|
147
|
+
assertIncidentEdgeSelected: (input) => {
|
|
148
|
+
if (input.linkId === undefined) return
|
|
149
|
+
const state = asSelectedState(input.state)
|
|
150
|
+
const directions: readonly ("outgoing" | "incoming")[] =
|
|
151
|
+
input.direction === "both" ? ["outgoing", "incoming"] : [input.direction]
|
|
152
|
+
const next = selectedState(
|
|
153
|
+
directions.flatMap(
|
|
154
|
+
(direction) =>
|
|
155
|
+
followEdge(state, input.linkId!, direction, undefined, outgoing, incoming).selections
|
|
156
|
+
)
|
|
157
|
+
)
|
|
158
|
+
if (next.selections.length > 0 || state.selections.length === 0) return
|
|
159
|
+
throw edgeDenial(state, input.linkId, input.direction, undefined, "queryLinks", input.path)
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return Object.freeze(admission)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function indexSteps(
|
|
167
|
+
steps: readonly CompiledObjectReadStep[],
|
|
168
|
+
direction: "outgoing" | "incoming",
|
|
169
|
+
selectionByKey: ReadonlyMap<string, CompiledObjectReadObjectSelection>
|
|
170
|
+
): ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]> {
|
|
171
|
+
const index = new Map<string, CompiledObjectReadObjectSelection[]>()
|
|
172
|
+
for (const step of steps) {
|
|
173
|
+
const fromKey =
|
|
174
|
+
direction === "outgoing"
|
|
175
|
+
? selectionKey(step.parentNodeId, step.sourceObjectTypeId)
|
|
176
|
+
: selectionKey(step.nodeId, step.targetObjectTypeId)
|
|
177
|
+
const toKey =
|
|
178
|
+
direction === "outgoing"
|
|
179
|
+
? selectionKey(step.nodeId, step.targetObjectTypeId)
|
|
180
|
+
: selectionKey(step.parentNodeId, step.sourceObjectTypeId)
|
|
181
|
+
const target = selectionByKey.get(toKey)
|
|
182
|
+
if (!selectionByKey.has(fromKey) || !target) {
|
|
183
|
+
throw new Error("[Sixb] Compiled selected object scope contains an invalid query path step.")
|
|
184
|
+
}
|
|
185
|
+
const key = edgeKey(
|
|
186
|
+
direction === "outgoing" ? step.parentNodeId : step.nodeId,
|
|
187
|
+
direction === "outgoing" ? step.sourceObjectTypeId : step.targetObjectTypeId,
|
|
188
|
+
step.linkId
|
|
189
|
+
)
|
|
190
|
+
const targets = index.get(key) ?? []
|
|
191
|
+
targets.push(target)
|
|
192
|
+
index.set(key, targets)
|
|
193
|
+
}
|
|
194
|
+
return index
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function followEdge(
|
|
198
|
+
state: SelectedObjectQueryState,
|
|
199
|
+
linkId: string,
|
|
200
|
+
direction: "outgoing" | "incoming",
|
|
201
|
+
sourceObjectTypeId: string | undefined,
|
|
202
|
+
outgoing: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,
|
|
203
|
+
incoming: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,
|
|
204
|
+
resultObjectTypeIds?: readonly string[]
|
|
205
|
+
): SelectedObjectQueryState {
|
|
206
|
+
const index = direction === "outgoing" ? outgoing : incoming
|
|
207
|
+
const resultTypes = resultObjectTypeIds ? new Set(resultObjectTypeIds) : undefined
|
|
208
|
+
const selections = state.selections.flatMap((selection) => {
|
|
209
|
+
const candidates = index.get(edgeKey(selection.nodeId, selection.objectTypeId, linkId)) ?? []
|
|
210
|
+
return candidates.filter(
|
|
211
|
+
(candidate) =>
|
|
212
|
+
(resultTypes === undefined || resultTypes.has(candidate.objectTypeId)) &&
|
|
213
|
+
(direction === "outgoing" ||
|
|
214
|
+
sourceObjectTypeId === undefined ||
|
|
215
|
+
candidate.objectTypeId === sourceObjectTypeId)
|
|
216
|
+
)
|
|
217
|
+
})
|
|
218
|
+
return selectedState(selections)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function propertyDenial(
|
|
222
|
+
state: SelectedObjectQueryState,
|
|
223
|
+
propertyId: string,
|
|
224
|
+
objectTypeId: string | undefined,
|
|
225
|
+
use: ObjectQueryPropertyUse,
|
|
226
|
+
path: string,
|
|
227
|
+
propertiesBySelection: ReadonlyMap<string, ReadonlySet<string>>
|
|
228
|
+
): AuthorizationError | undefined {
|
|
229
|
+
const candidates = objectTypeId
|
|
230
|
+
? state.selections.filter((selection) => selection.objectTypeId === objectTypeId)
|
|
231
|
+
: state.selections
|
|
232
|
+
// A selected reader has no rows for result types absent from this provenance. Those empty
|
|
233
|
+
// branches cannot observe a property and must not make includeSubtypes queries fail closed.
|
|
234
|
+
if (candidates.length === 0) return undefined
|
|
235
|
+
|
|
236
|
+
const missing = candidates.find(
|
|
237
|
+
(selection) =>
|
|
238
|
+
!propertiesBySelection
|
|
239
|
+
.get(selectionKey(selection.nodeId, selection.objectTypeId))
|
|
240
|
+
?.has(propertyId)
|
|
241
|
+
)
|
|
242
|
+
if (!missing) return undefined
|
|
243
|
+
|
|
244
|
+
const objectTypeIds = [...new Set(candidates.map((selection) => selection.objectTypeId))].sort()
|
|
245
|
+
return new AuthorizationError(
|
|
246
|
+
`view:object:${objectTypeIds.join(",")}:property:${propertyId}`,
|
|
247
|
+
`[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)}).`
|
|
248
|
+
)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function edgeDenial(
|
|
252
|
+
state: SelectedObjectQueryState,
|
|
253
|
+
linkId: string,
|
|
254
|
+
direction: "outgoing" | "incoming" | "both",
|
|
255
|
+
sourceObjectTypeId: string | undefined,
|
|
256
|
+
use: ObjectQueryEdgeUse,
|
|
257
|
+
path: string
|
|
258
|
+
): AuthorizationError {
|
|
259
|
+
const source = sourceObjectTypeId ? `:${sourceObjectTypeId}` : ""
|
|
260
|
+
return new AuthorizationError(
|
|
261
|
+
`view:link:${direction}${source}:${linkId}`,
|
|
262
|
+
`[Sixb] Delegated query cannot use ${direction} link '${linkId}' for ${use} from ${formatState(state)} at '${path}': that exact read-scope path is not selected.`
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function formatState(state: SelectedObjectQueryState): string {
|
|
267
|
+
if (state.selections.length === 0) return "an empty read-scope provenance"
|
|
268
|
+
return `read-scope provenance ${state.selections.map(formatSelection).join(", ")}`
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function formatSelection(selection: CompiledObjectReadObjectSelection): string {
|
|
272
|
+
return `'${selection.objectTypeId}'@node ${selection.nodeId}`
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function selectedState(
|
|
276
|
+
selections: readonly CompiledObjectReadObjectSelection[]
|
|
277
|
+
): SelectedObjectQueryState {
|
|
278
|
+
const unique = new Map<string, CompiledObjectReadObjectSelection>()
|
|
279
|
+
for (const selection of selections) {
|
|
280
|
+
unique.set(selectionKey(selection.nodeId, selection.objectTypeId), selection)
|
|
281
|
+
}
|
|
282
|
+
return Object.freeze({
|
|
283
|
+
[selectedStateBrand]: true as const,
|
|
284
|
+
selections: Object.freeze(
|
|
285
|
+
[...unique.values()].sort(
|
|
286
|
+
(left, right) =>
|
|
287
|
+
left.nodeId - right.nodeId || left.objectTypeId.localeCompare(right.objectTypeId)
|
|
288
|
+
)
|
|
289
|
+
),
|
|
290
|
+
})
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function asSelectedState(state: ObjectQueryAdmissionState): SelectedObjectQueryState {
|
|
294
|
+
if ((state as Partial<SelectedObjectQueryState>)[selectedStateBrand] !== true) {
|
|
295
|
+
throw new Error("[Sixb] Object query admission state belongs to another semantic admission.")
|
|
296
|
+
}
|
|
297
|
+
return state as SelectedObjectQueryState
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function denied(state: SelectedObjectQueryState, denial: Error): ObjectQueryAdmissionTransition {
|
|
301
|
+
return { state, denial }
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function selectionKey(nodeId: number, objectTypeId: string): string {
|
|
305
|
+
return JSON.stringify([nodeId, objectTypeId])
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function edgeKey(nodeId: number, objectTypeId: string, linkId: string): string {
|
|
309
|
+
return JSON.stringify([nodeId, objectTypeId, linkId])
|
|
310
|
+
}
|