@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
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import type { ObjectRef } from "../ontology"
|
|
2
|
+
import {
|
|
3
|
+
captureSelectedObjectReadScope,
|
|
4
|
+
compileSelectedObjectReadScope,
|
|
5
|
+
} from "../storage/objects/read-scope"
|
|
6
|
+
import type { ObjectReadRoot, SelectedObjectReadScope } from "../storage/objects/types"
|
|
7
|
+
|
|
8
|
+
const MAX_SCOPED_GRANTS = 1_024
|
|
9
|
+
const MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION = 1_024
|
|
10
|
+
const MAX_SCOPED_ACTION_SUBJECTS = 4_096
|
|
11
|
+
const MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS = 1_000_000
|
|
12
|
+
|
|
13
|
+
/** One capability paired with the exact resources it authorizes. */
|
|
14
|
+
export type ShareScopedGrant = ShareScopedViewGrant | ShareScopedActionGrant
|
|
15
|
+
|
|
16
|
+
export interface ShareScopedViewGrant {
|
|
17
|
+
readonly kind: "object.view"
|
|
18
|
+
readonly selection: SelectedObjectReadScope
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ShareScopedActionGrant {
|
|
22
|
+
readonly kind: "action.apply"
|
|
23
|
+
readonly actionId: string
|
|
24
|
+
readonly subjects: readonly ObjectRef[]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Internal authority compiled from a delegation such as a shared-access grant. */
|
|
28
|
+
export interface ShareAccessPlan {
|
|
29
|
+
readonly grants: readonly ShareScopedGrant[]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface CapturedViewGrant {
|
|
33
|
+
readonly kind: "object.view"
|
|
34
|
+
readonly rootStart: number
|
|
35
|
+
readonly rootCount: number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type CapturedGrant = CapturedViewGrant | ShareScopedActionGrant
|
|
39
|
+
|
|
40
|
+
interface ActionCaptureBudget {
|
|
41
|
+
subjectCount: number
|
|
42
|
+
identifierCharacters: number
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Validate and detach an access plan before registering process-local authority. */
|
|
46
|
+
export function snapshotShareAccessPlan(input: ShareAccessPlan): ShareAccessPlan {
|
|
47
|
+
const captured = captureAccessPlanGrants(input)
|
|
48
|
+
const selection = validateMergedViewSelection(captured.viewRoots)
|
|
49
|
+
return assembleAccessPlanSnapshot(captured.grants, selection)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function captureAccessPlanGrants(input: ShareAccessPlan): {
|
|
53
|
+
readonly grants: readonly CapturedGrant[]
|
|
54
|
+
readonly viewRoots: readonly ObjectReadRoot[]
|
|
55
|
+
} {
|
|
56
|
+
if (!isRecord(input)) {
|
|
57
|
+
throw new Error("[Sixb] Share access plan must contain scoped grants.")
|
|
58
|
+
}
|
|
59
|
+
const authoredGrants = input.grants
|
|
60
|
+
if (!Array.isArray(authoredGrants)) {
|
|
61
|
+
throw new Error("[Sixb] Share access plan must contain scoped grants.")
|
|
62
|
+
}
|
|
63
|
+
const grantCount = authoredGrants.length
|
|
64
|
+
if (grantCount > MAX_SCOPED_GRANTS) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_GRANTS} scoped grants.`
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Share budgets across grants and capture caller-controlled fields exactly once.
|
|
71
|
+
const budget: ActionCaptureBudget = { subjectCount: 0, identifierCharacters: 0 }
|
|
72
|
+
const viewRoots: ObjectReadRoot[] = []
|
|
73
|
+
const grants: CapturedGrant[] = []
|
|
74
|
+
for (let index = 0; index < grantCount; index += 1) {
|
|
75
|
+
const grant = authoredGrants[index]
|
|
76
|
+
if (!isRecord(grant)) {
|
|
77
|
+
throw new Error(`[Sixb] Scoped grant ${index} must be an object.`)
|
|
78
|
+
}
|
|
79
|
+
const kind = grant.kind
|
|
80
|
+
switch (kind) {
|
|
81
|
+
case "object.view":
|
|
82
|
+
grants.push(captureViewGrant(grant, index, viewRoots))
|
|
83
|
+
break
|
|
84
|
+
case "action.apply":
|
|
85
|
+
grants.push(captureActionGrant(grant, index, budget))
|
|
86
|
+
break
|
|
87
|
+
default:
|
|
88
|
+
throw new Error(`[Sixb] Unknown scoped grant kind '${String(kind)}'.`)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { grants, viewRoots }
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function captureViewGrant(
|
|
95
|
+
grant: Record<string, unknown>,
|
|
96
|
+
index: number,
|
|
97
|
+
viewRoots: ObjectReadRoot[]
|
|
98
|
+
): CapturedViewGrant {
|
|
99
|
+
const selection = grant.selection
|
|
100
|
+
if (!isRecord(selection)) {
|
|
101
|
+
throw new Error(`[Sixb] Scoped grant ${index} requires a selected object read scope.`)
|
|
102
|
+
}
|
|
103
|
+
const selectionKind = selection.kind
|
|
104
|
+
const roots = selection.roots
|
|
105
|
+
if (selectionKind !== "selected" || !Array.isArray(roots)) {
|
|
106
|
+
throw new Error(`[Sixb] Scoped grant ${index} requires a selected object read scope.`)
|
|
107
|
+
}
|
|
108
|
+
const rootCount = roots.length
|
|
109
|
+
if (rootCount > MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION - viewRoots.length) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
`[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION} raw scoped view roots.`
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
const rootStart = viewRoots.length
|
|
115
|
+
for (let rootIndex = 0; rootIndex < rootCount; rootIndex += 1) {
|
|
116
|
+
viewRoots.push(roots[rootIndex] as ObjectReadRoot)
|
|
117
|
+
}
|
|
118
|
+
return { kind: "object.view", rootStart, rootCount }
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function captureActionGrant(
|
|
122
|
+
grant: Record<string, unknown>,
|
|
123
|
+
index: number,
|
|
124
|
+
budget: ActionCaptureBudget
|
|
125
|
+
): ShareScopedActionGrant {
|
|
126
|
+
const authoredActionId = grant.actionId
|
|
127
|
+
const authoredSubjects = grant.subjects
|
|
128
|
+
const actionId = nonEmpty(authoredActionId, `Scoped grant ${index} action id`)
|
|
129
|
+
addActionIdentifierCharacters(budget, actionId.length)
|
|
130
|
+
if (!Array.isArray(authoredSubjects)) {
|
|
131
|
+
throw new Error(`[Sixb] Scoped grant ${index} action subjects must be an array.`)
|
|
132
|
+
}
|
|
133
|
+
const subjectCount = authoredSubjects.length
|
|
134
|
+
budget.subjectCount += subjectCount
|
|
135
|
+
if (budget.subjectCount > MAX_SCOPED_ACTION_SUBJECTS) {
|
|
136
|
+
throw new Error(
|
|
137
|
+
`[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_ACTION_SUBJECTS} scoped action subjects.`
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
const subjects: ObjectRef[] = []
|
|
141
|
+
for (let subjectIndex = 0; subjectIndex < subjectCount; subjectIndex += 1) {
|
|
142
|
+
const subject = captureActionSubject(authoredSubjects[subjectIndex], index, subjectIndex)
|
|
143
|
+
addActionIdentifierCharacters(budget, subject.objectTypeId.length + subject.primaryId.length)
|
|
144
|
+
subjects.push(subject)
|
|
145
|
+
}
|
|
146
|
+
return Object.freeze({ kind: "action.apply", actionId, subjects: Object.freeze(subjects) })
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function captureActionSubject(
|
|
150
|
+
subject: unknown,
|
|
151
|
+
grantIndex: number,
|
|
152
|
+
subjectIndex: number
|
|
153
|
+
): ObjectRef {
|
|
154
|
+
if (!isRecord(subject)) {
|
|
155
|
+
throw new Error(`[Sixb] Scoped grant ${grantIndex} subject ${subjectIndex} must be an object.`)
|
|
156
|
+
}
|
|
157
|
+
const authoredObjectTypeId = subject.objectTypeId
|
|
158
|
+
const authoredPrimaryId = subject.primaryId
|
|
159
|
+
const objectTypeId = nonEmpty(
|
|
160
|
+
authoredObjectTypeId,
|
|
161
|
+
`Scoped grant ${grantIndex} subject ${subjectIndex} object type id`
|
|
162
|
+
)
|
|
163
|
+
const primaryId = nonEmpty(
|
|
164
|
+
authoredPrimaryId,
|
|
165
|
+
`Scoped grant ${grantIndex} subject ${subjectIndex} primary id`
|
|
166
|
+
)
|
|
167
|
+
return Object.freeze({ objectTypeId, primaryId })
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function addActionIdentifierCharacters(budget: ActionCaptureBudget, count: number): void {
|
|
171
|
+
budget.identifierCharacters += count
|
|
172
|
+
if (budget.identifierCharacters > MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS) {
|
|
173
|
+
throw new Error(
|
|
174
|
+
`[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS} scoped action identifier characters.`
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function validateMergedViewSelection(roots: readonly ObjectReadRoot[]): SelectedObjectReadScope {
|
|
180
|
+
// Snapshot all roots together so the provider's limits apply globally across view grants.
|
|
181
|
+
const selection = captureSelectedObjectReadScope({ kind: "selected", roots })
|
|
182
|
+
// Compile the exact immutable snapshot, without rereading caller-controlled data.
|
|
183
|
+
compileSelectedObjectReadScope(selection)
|
|
184
|
+
return selection
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function assembleAccessPlanSnapshot(
|
|
188
|
+
capturedGrants: readonly CapturedGrant[],
|
|
189
|
+
selection: SelectedObjectReadScope
|
|
190
|
+
): ShareAccessPlan {
|
|
191
|
+
const grants = capturedGrants.map((grant): ShareScopedGrant => {
|
|
192
|
+
if (grant.kind === "action.apply") return grant
|
|
193
|
+
const roots = Object.freeze(
|
|
194
|
+
selection.roots.slice(grant.rootStart, grant.rootStart + grant.rootCount)
|
|
195
|
+
)
|
|
196
|
+
return Object.freeze({
|
|
197
|
+
kind: "object.view",
|
|
198
|
+
selection: Object.freeze({ kind: "selected", roots }),
|
|
199
|
+
})
|
|
200
|
+
})
|
|
201
|
+
return Object.freeze({ grants: Object.freeze(grants) })
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Merge view grants only; capability/resource pairing remains intact for every other grant. */
|
|
205
|
+
export function objectReadScopeForAccessPlan(plan: ShareAccessPlan): SelectedObjectReadScope {
|
|
206
|
+
return Object.freeze({
|
|
207
|
+
kind: "selected",
|
|
208
|
+
roots: Object.freeze(
|
|
209
|
+
plan.grants.flatMap((grant) =>
|
|
210
|
+
grant.kind === "object.view" ? [...grant.selection.roots] : []
|
|
211
|
+
)
|
|
212
|
+
),
|
|
213
|
+
})
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function nonEmpty(value: unknown, label: string): string {
|
|
217
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
218
|
+
throw new Error(`[Sixb] ${label} must not be empty.`)
|
|
219
|
+
}
|
|
220
|
+
return value
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
224
|
+
return typeof value === "object" && value !== null
|
|
225
|
+
}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import type { ObjectActionDefinition } from "../actions"
|
|
2
|
+
import type { ObjectTypeWithPropertyTokens } from "../ontology"
|
|
3
|
+
import {
|
|
4
|
+
type LinkPathSelection,
|
|
5
|
+
type LinkPathSelectionInput,
|
|
6
|
+
type LinkPathSelectionMode,
|
|
7
|
+
snapshotLinkPathSelection,
|
|
8
|
+
} from "../ontology/link-path-selection"
|
|
9
|
+
import { ShareDefinitionError } from "./errors"
|
|
10
|
+
import type {
|
|
11
|
+
DefineShareOptions,
|
|
12
|
+
ShareActionGrant,
|
|
13
|
+
ShareDefinition,
|
|
14
|
+
ShareScopeGrant,
|
|
15
|
+
ShareTarget,
|
|
16
|
+
ShareViewGrant,
|
|
17
|
+
ShareViewGrantBuilder,
|
|
18
|
+
} from "./types"
|
|
19
|
+
|
|
20
|
+
const shareTargets = new WeakSet<object>()
|
|
21
|
+
|
|
22
|
+
export function defineShare<
|
|
23
|
+
const TId extends string,
|
|
24
|
+
const TTarget extends ObjectTypeWithPropertyTokens,
|
|
25
|
+
const TGrants extends readonly ShareScopeGrant[],
|
|
26
|
+
>(id: TId, options: DefineShareOptions<TTarget, TGrants>): ShareDefinition<TId, TTarget["id"]> {
|
|
27
|
+
assertNonEmpty(id, "Share id")
|
|
28
|
+
if (!isObjectType(options.target)) {
|
|
29
|
+
throw invalid(`Share '${id}' target must be an object type.`)
|
|
30
|
+
}
|
|
31
|
+
if (typeof options.grants !== "function") {
|
|
32
|
+
throw invalid(`Share '${id}' grants must be a function.`)
|
|
33
|
+
}
|
|
34
|
+
if (options.description !== undefined && typeof options.description !== "string") {
|
|
35
|
+
throw invalid(`Share '${id}' description must be a string.`)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const target = createShareTarget(options.target.id)
|
|
39
|
+
let authoredGrants: readonly unknown[]
|
|
40
|
+
try {
|
|
41
|
+
authoredGrants = options.grants({ target })
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (error instanceof ShareDefinitionError) throw error
|
|
44
|
+
const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
|
|
45
|
+
throw invalid(`Share '${id}' grants are invalid: ${reason}`)
|
|
46
|
+
}
|
|
47
|
+
if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {
|
|
48
|
+
throw invalid(`Share '${id}' must declare at least one grant.`)
|
|
49
|
+
}
|
|
50
|
+
const grants = snapshotShareGrants(id, options.target.id, authoredGrants)
|
|
51
|
+
|
|
52
|
+
return Object.freeze({
|
|
53
|
+
kind: "share" as const,
|
|
54
|
+
id,
|
|
55
|
+
target: Object.freeze({ kind: "object" as const, objectTypeId: options.target.id }),
|
|
56
|
+
grants,
|
|
57
|
+
...(options.description === undefined ? {} : { description: options.description }),
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function isShareDefinition(value: unknown): value is ShareDefinition {
|
|
62
|
+
if (!isRecord(value) || value.kind !== "share" || !isNonEmpty(value.id)) return false
|
|
63
|
+
if (
|
|
64
|
+
!isRecord(value.target) ||
|
|
65
|
+
value.target.kind !== "object" ||
|
|
66
|
+
!isNonEmpty(value.target.objectTypeId)
|
|
67
|
+
) {
|
|
68
|
+
return false
|
|
69
|
+
}
|
|
70
|
+
return Array.isArray(value.grants)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** @internal Validate, canonicalize, and detach a definition before runtime registration/use. */
|
|
74
|
+
export function snapshotShareDefinition(value: unknown): ShareDefinition {
|
|
75
|
+
try {
|
|
76
|
+
if (!isRecord(value)) {
|
|
77
|
+
throw invalid("Share definition kind must be 'share'.")
|
|
78
|
+
}
|
|
79
|
+
const kind = value.kind
|
|
80
|
+
const authoredId = value.id
|
|
81
|
+
const target = value.target
|
|
82
|
+
const authoredGrants = value.grants
|
|
83
|
+
const description = value.description
|
|
84
|
+
if (kind !== "share") {
|
|
85
|
+
throw invalid("Share definition kind must be 'share'.")
|
|
86
|
+
}
|
|
87
|
+
const id = nonEmpty(authoredId, "Share id")
|
|
88
|
+
if (!isRecord(target)) {
|
|
89
|
+
throw invalid(`Share '${id}' target must be an object type.`)
|
|
90
|
+
}
|
|
91
|
+
const targetKind = target.kind
|
|
92
|
+
const authoredObjectTypeId = target.objectTypeId
|
|
93
|
+
if (targetKind !== "object" || !isNonEmpty(authoredObjectTypeId)) {
|
|
94
|
+
throw invalid(`Share '${id}' target must be an object type.`)
|
|
95
|
+
}
|
|
96
|
+
if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {
|
|
97
|
+
throw invalid(`Share '${id}' must declare grants.`)
|
|
98
|
+
}
|
|
99
|
+
if (description !== undefined && typeof description !== "string") {
|
|
100
|
+
throw invalid(`Share '${id}' description must be a string.`)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const objectTypeId = authoredObjectTypeId
|
|
104
|
+
return Object.freeze({
|
|
105
|
+
kind: "share" as const,
|
|
106
|
+
id,
|
|
107
|
+
target: Object.freeze({ kind: "object" as const, objectTypeId }),
|
|
108
|
+
grants: snapshotShareGrants(id, objectTypeId, authoredGrants),
|
|
109
|
+
...(description === undefined ? {} : { description }),
|
|
110
|
+
})
|
|
111
|
+
} catch (error) {
|
|
112
|
+
if (error instanceof ShareDefinitionError) throw error
|
|
113
|
+
const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
|
|
114
|
+
throw invalid(`Share definition is invalid: ${reason}`)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** @internal Contextual overload used by `can.view(target)`. */
|
|
119
|
+
export function isShareTarget(value: unknown): value is ShareTarget {
|
|
120
|
+
return typeof value === "object" && value !== null && shareTargets.has(value)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** @internal Contextual overload used by `can.view(target)`. */
|
|
124
|
+
export function createShareViewGrant<TObjectTypeId extends string>(
|
|
125
|
+
target: ShareTarget<TObjectTypeId>
|
|
126
|
+
): ShareViewGrantBuilder<TObjectTypeId> {
|
|
127
|
+
assertShareTarget(target)
|
|
128
|
+
return createShareViewGrantWithLinks(target.objectTypeId, Object.freeze({ kind: "none" }))
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** @internal Contextual overload used by `can.apply(action).on(target)`. */
|
|
132
|
+
export function createShareActionGrant<TAction extends ObjectActionDefinition>(
|
|
133
|
+
action: TAction,
|
|
134
|
+
target: ShareTarget<TAction["binding"]["objectType"]["id"]>
|
|
135
|
+
): ShareActionGrant<TAction["id"], TAction["binding"]["objectType"]["id"]> {
|
|
136
|
+
assertShareTarget(target)
|
|
137
|
+
const objectTypeId = action.binding.objectType.id
|
|
138
|
+
if (target.objectTypeId !== objectTypeId) {
|
|
139
|
+
throw invalid(
|
|
140
|
+
`Action '${action.id}' is defined on '${objectTypeId}', not Share target '${target.objectTypeId}'. Shared Actions are exact-type only in V1.`
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
return Object.freeze({
|
|
144
|
+
kind: "action.apply" as const,
|
|
145
|
+
actionId: action.id,
|
|
146
|
+
subjectObjectTypeId: target.objectTypeId,
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function createShareTarget<TObjectTypeId extends string>(
|
|
151
|
+
objectTypeId: TObjectTypeId
|
|
152
|
+
): ShareTarget<TObjectTypeId> {
|
|
153
|
+
const target = { objectTypeId } as ShareTarget<TObjectTypeId>
|
|
154
|
+
shareTargets.add(target)
|
|
155
|
+
return Object.freeze(target)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function createShareViewGrantWithLinks<TObjectTypeId extends string>(
|
|
159
|
+
targetObjectTypeId: TObjectTypeId,
|
|
160
|
+
links: LinkPathSelectionMode
|
|
161
|
+
): ShareViewGrantBuilder<TObjectTypeId> {
|
|
162
|
+
const grant = {
|
|
163
|
+
kind: "object.view" as const,
|
|
164
|
+
targetObjectTypeId,
|
|
165
|
+
links,
|
|
166
|
+
} as ShareViewGrantBuilder<TObjectTypeId>
|
|
167
|
+
Object.defineProperty(grant, "withLinks", {
|
|
168
|
+
configurable: false,
|
|
169
|
+
enumerable: false,
|
|
170
|
+
writable: false,
|
|
171
|
+
value: (...args: [links?: readonly LinkPathSelectionInput<TObjectTypeId>[]]) => {
|
|
172
|
+
if (args.length === 0) {
|
|
173
|
+
return freezeViewGrant(targetObjectTypeId, Object.freeze({ kind: "all" }))
|
|
174
|
+
}
|
|
175
|
+
const selected = args[0]
|
|
176
|
+
if (!Array.isArray(selected)) {
|
|
177
|
+
throw invalid("withLinks(...) expects an array, or no argument for every direct link.")
|
|
178
|
+
}
|
|
179
|
+
return freezeViewGrant(
|
|
180
|
+
targetObjectTypeId,
|
|
181
|
+
Object.freeze({
|
|
182
|
+
kind: "selected" as const,
|
|
183
|
+
links: Object.freeze(selected.map(snapshotLinkPathSelection)),
|
|
184
|
+
})
|
|
185
|
+
)
|
|
186
|
+
},
|
|
187
|
+
})
|
|
188
|
+
return Object.freeze(grant)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function freezeViewGrant<TObjectTypeId extends string>(
|
|
192
|
+
targetObjectTypeId: TObjectTypeId,
|
|
193
|
+
links: LinkPathSelectionMode
|
|
194
|
+
): ShareViewGrant<TObjectTypeId> {
|
|
195
|
+
return Object.freeze({ kind: "object.view" as const, targetObjectTypeId, links })
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function snapshotShareGrants(
|
|
199
|
+
shareId: string,
|
|
200
|
+
targetObjectTypeId: string,
|
|
201
|
+
authored: readonly unknown[]
|
|
202
|
+
): readonly ShareScopeGrant[] {
|
|
203
|
+
const grants: ShareScopeGrant[] = []
|
|
204
|
+
const actionIds = new Set<string>()
|
|
205
|
+
let viewCount = 0
|
|
206
|
+
|
|
207
|
+
for (let index = 0; index < authored.length; index += 1) {
|
|
208
|
+
const grant = authored[index]
|
|
209
|
+
if (!isRecord(grant)) {
|
|
210
|
+
throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)
|
|
211
|
+
}
|
|
212
|
+
const kind = grant.kind
|
|
213
|
+
if (kind === "object.view") {
|
|
214
|
+
const authoredTargetObjectTypeId = grant.targetObjectTypeId
|
|
215
|
+
const links = grant.links
|
|
216
|
+
if (authoredTargetObjectTypeId !== targetObjectTypeId) {
|
|
217
|
+
throw invalid(`Share '${shareId}' view grant must use its contextual target.`)
|
|
218
|
+
}
|
|
219
|
+
viewCount += 1
|
|
220
|
+
if (viewCount > 1) {
|
|
221
|
+
throw invalid(`Share '${shareId}' must declare exactly one view grant.`)
|
|
222
|
+
}
|
|
223
|
+
grants.push(
|
|
224
|
+
Object.freeze({
|
|
225
|
+
kind: "object.view" as const,
|
|
226
|
+
targetObjectTypeId,
|
|
227
|
+
links: snapshotLinkMode(links),
|
|
228
|
+
})
|
|
229
|
+
)
|
|
230
|
+
continue
|
|
231
|
+
}
|
|
232
|
+
if (kind === "action.apply") {
|
|
233
|
+
const actionId = grant.actionId
|
|
234
|
+
const subjectObjectTypeId = grant.subjectObjectTypeId
|
|
235
|
+
if (!isNonEmpty(actionId) || subjectObjectTypeId !== targetObjectTypeId) {
|
|
236
|
+
throw invalid(`Share '${shareId}' action grant must apply to its contextual target.`)
|
|
237
|
+
}
|
|
238
|
+
if (actionIds.has(actionId)) {
|
|
239
|
+
throw invalid(`Share '${shareId}' contains duplicate action '${actionId}'.`)
|
|
240
|
+
}
|
|
241
|
+
actionIds.add(actionId)
|
|
242
|
+
grants.push(
|
|
243
|
+
Object.freeze({
|
|
244
|
+
kind: "action.apply" as const,
|
|
245
|
+
actionId,
|
|
246
|
+
subjectObjectTypeId: targetObjectTypeId,
|
|
247
|
+
})
|
|
248
|
+
)
|
|
249
|
+
continue
|
|
250
|
+
}
|
|
251
|
+
throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if (viewCount !== 1) {
|
|
255
|
+
throw invalid(`Share '${shareId}' must declare exactly one can.view(target) grant.`)
|
|
256
|
+
}
|
|
257
|
+
return Object.freeze(grants)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function snapshotLinkMode(value: unknown): LinkPathSelectionMode {
|
|
261
|
+
if (!isRecord(value)) throw invalid("Share link selection must be an object.")
|
|
262
|
+
const kind = value.kind
|
|
263
|
+
const links = value.links
|
|
264
|
+
if (kind === "none" || kind === "all") {
|
|
265
|
+
return Object.freeze({ kind })
|
|
266
|
+
}
|
|
267
|
+
if (kind !== "selected" || !Array.isArray(links)) {
|
|
268
|
+
throw invalid("Share link selection must be none, all, or selected links.")
|
|
269
|
+
}
|
|
270
|
+
if (links.length === 0) {
|
|
271
|
+
throw invalid("withLinks([]) is empty; omit withLinks() when no links should be shared.")
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
return Object.freeze({
|
|
275
|
+
kind: "selected" as const,
|
|
276
|
+
links: snapshotLinkPaths(links),
|
|
277
|
+
})
|
|
278
|
+
} catch (error) {
|
|
279
|
+
if (error instanceof ShareDefinitionError) throw error
|
|
280
|
+
const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
|
|
281
|
+
throw invalid(`Share link selection is invalid: ${reason}`)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function snapshotLinkPaths(values: readonly unknown[]): readonly LinkPathSelection[] {
|
|
286
|
+
const byKey = new Map<string, LinkPathSelection>()
|
|
287
|
+
for (const value of values) {
|
|
288
|
+
const captured = canonicalizeLinkPath(
|
|
289
|
+
snapshotLinkPathSelection(value as LinkPathSelectionInput)
|
|
290
|
+
)
|
|
291
|
+
const key = JSON.stringify([captured.sourceObjectTypeId, captured.linkId])
|
|
292
|
+
const current = byKey.get(key)
|
|
293
|
+
if (!current) {
|
|
294
|
+
byKey.set(key, captured)
|
|
295
|
+
continue
|
|
296
|
+
}
|
|
297
|
+
if (!sameLinkTargets(current.targetObjectTypeId, captured.targetObjectTypeId)) {
|
|
298
|
+
throw invalid(
|
|
299
|
+
`Link '${captured.sourceObjectTypeId}.${captured.linkId}' declares inconsistent targets.`
|
|
300
|
+
)
|
|
301
|
+
}
|
|
302
|
+
byKey.set(
|
|
303
|
+
key,
|
|
304
|
+
Object.freeze({
|
|
305
|
+
...current,
|
|
306
|
+
selection: mergeLinkModes(current.selection, captured.selection),
|
|
307
|
+
})
|
|
308
|
+
)
|
|
309
|
+
}
|
|
310
|
+
return Object.freeze([...byKey.values()])
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function canonicalizeLinkPath(value: LinkPathSelection): LinkPathSelection {
|
|
314
|
+
return Object.freeze({
|
|
315
|
+
...value,
|
|
316
|
+
selection:
|
|
317
|
+
value.selection.kind === "selected"
|
|
318
|
+
? Object.freeze({
|
|
319
|
+
kind: "selected" as const,
|
|
320
|
+
links: snapshotLinkPaths(value.selection.links),
|
|
321
|
+
})
|
|
322
|
+
: value.selection,
|
|
323
|
+
})
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function mergeLinkModes(
|
|
327
|
+
left: LinkPathSelectionMode,
|
|
328
|
+
right: LinkPathSelectionMode
|
|
329
|
+
): LinkPathSelectionMode {
|
|
330
|
+
if (left.kind === "all" || right.kind === "all") return Object.freeze({ kind: "all" })
|
|
331
|
+
if (left.kind === "none") return right
|
|
332
|
+
if (right.kind === "none") return left
|
|
333
|
+
return Object.freeze({
|
|
334
|
+
kind: "selected" as const,
|
|
335
|
+
links: snapshotLinkPaths([...left.links, ...right.links]),
|
|
336
|
+
})
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
function sameLinkTargets(
|
|
340
|
+
left: string | readonly string[],
|
|
341
|
+
right: string | readonly string[]
|
|
342
|
+
): boolean {
|
|
343
|
+
if (typeof left === "string" || typeof right === "string") return left === right
|
|
344
|
+
return left.length === right.length && left.every((value, index) => value === right[index])
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function assertShareTarget(value: unknown): asserts value is ShareTarget {
|
|
348
|
+
if (!isShareTarget(value)) {
|
|
349
|
+
throw invalid("Shared grants must use the target provided by defineShare(...).")
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function isObjectType(value: unknown): value is ObjectTypeWithPropertyTokens {
|
|
354
|
+
return (
|
|
355
|
+
isRecord(value) &&
|
|
356
|
+
isNonEmpty(value.id) &&
|
|
357
|
+
Array.isArray(value.properties) &&
|
|
358
|
+
Array.isArray(value.links)
|
|
359
|
+
)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
363
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
function isNonEmpty(value: unknown): value is string {
|
|
367
|
+
return typeof value === "string" && value.trim().length > 0
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function assertNonEmpty(value: unknown, field: string): asserts value is string {
|
|
371
|
+
if (!isNonEmpty(value)) throw invalid(`${field} must not be empty.`)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
function nonEmpty(value: unknown, field: string): string {
|
|
375
|
+
assertNonEmpty(value, field)
|
|
376
|
+
return value
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
function invalid(message: string): ShareDefinitionError {
|
|
380
|
+
return new ShareDefinitionError(`[Sixb] ${message}`)
|
|
381
|
+
}
|