@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,394 @@
|
|
|
1
|
+
import { createHash, randomBytes, randomUUID } from "node:crypto"
|
|
2
|
+
import { assertAuthorized, isRuntimeAllowed } from "../authorization"
|
|
3
|
+
import type { AuthorizablePrincipal, ExecutionContext } from "../execution"
|
|
4
|
+
import { resolveExecutionScopeAuthorization } from "../execution/authorization"
|
|
5
|
+
import type { ObjectRef } from "../ontology"
|
|
6
|
+
import type { DefinitionCatalog } from "../runtime/definitions"
|
|
7
|
+
import type { SixbRuntimeContext } from "../runtime/types"
|
|
8
|
+
import { ObjectNotFoundError, type ShareGrantRecord, ShareGrantStorageError } from "../storage"
|
|
9
|
+
import { compileShareAccessPlan } from "./compiler"
|
|
10
|
+
import type { ShareDefinition } from "./types"
|
|
11
|
+
|
|
12
|
+
const MAX_CREATE_ATTEMPTS = 5
|
|
13
|
+
|
|
14
|
+
export type ShareErrorReason =
|
|
15
|
+
| "invalid_input"
|
|
16
|
+
| "not_found"
|
|
17
|
+
| "unauthenticated"
|
|
18
|
+
| "storage_unavailable"
|
|
19
|
+
| "storage_failure"
|
|
20
|
+
|
|
21
|
+
export class ShareError extends Error {
|
|
22
|
+
readonly name = "ShareError"
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
readonly reason: ShareErrorReason,
|
|
26
|
+
message: string,
|
|
27
|
+
options?: ErrorOptions
|
|
28
|
+
) {
|
|
29
|
+
super(message, options)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type ShareTargetObjectTypeId<TDefinition extends ShareDefinition> =
|
|
34
|
+
TDefinition["target"]["objectTypeId"]
|
|
35
|
+
|
|
36
|
+
/** Public lifecycle view. Durable secrets and authority internals never cross this boundary. */
|
|
37
|
+
export type SharedAccessGrant = Omit<
|
|
38
|
+
ShareGrantRecord,
|
|
39
|
+
"projectId" | "authoritySnapshot" | "authorityDigest" | "tokenHash"
|
|
40
|
+
>
|
|
41
|
+
|
|
42
|
+
export interface SharedAccessInvitation {
|
|
43
|
+
readonly grant: SharedAccessGrant
|
|
44
|
+
/** Returned once. Storage retains only its SHA-256 digest. */
|
|
45
|
+
readonly secret: string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface IssueSharedAccessInput<TDefinition extends ShareDefinition = ShareDefinition> {
|
|
49
|
+
readonly target: ObjectRef<NoInfer<ShareTargetObjectTypeId<TDefinition>>>
|
|
50
|
+
readonly destinationPath: string
|
|
51
|
+
readonly expiresAt: Date
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface IssueSharedAccessByIdInput extends IssueSharedAccessInput {
|
|
55
|
+
readonly definitionId: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ListSharedAccessInput<TDefinition extends ShareDefinition = ShareDefinition> {
|
|
59
|
+
readonly target?: ObjectRef<NoInfer<ShareTargetObjectTypeId<TDefinition>>>
|
|
60
|
+
readonly includeRevoked?: boolean
|
|
61
|
+
readonly includeExpired?: boolean
|
|
62
|
+
readonly limit?: number
|
|
63
|
+
readonly offset?: number
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface ListSharedAccessByIdInput extends Omit<ListSharedAccessInput, "target"> {
|
|
67
|
+
readonly definitionId: string
|
|
68
|
+
/** Filter within the definition's target Object Type. */
|
|
69
|
+
readonly primaryId?: string
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface SharedAccessGrantListResult {
|
|
73
|
+
readonly grants: readonly SharedAccessGrant[]
|
|
74
|
+
readonly total: number
|
|
75
|
+
readonly hasMore: boolean
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface SharesRuntime {
|
|
79
|
+
listDefinitions(): readonly ShareDefinition[]
|
|
80
|
+
getDefinitionById(definitionId: string): ShareDefinition | null
|
|
81
|
+
issue<const TDefinition extends ShareDefinition>(
|
|
82
|
+
definition: TDefinition,
|
|
83
|
+
input: IssueSharedAccessInput<TDefinition>
|
|
84
|
+
): Promise<SharedAccessInvitation>
|
|
85
|
+
issueById(input: IssueSharedAccessByIdInput): Promise<SharedAccessInvitation>
|
|
86
|
+
list<const TDefinition extends ShareDefinition>(
|
|
87
|
+
definition: TDefinition,
|
|
88
|
+
input?: ListSharedAccessInput<TDefinition>
|
|
89
|
+
): Promise<SharedAccessGrantListResult>
|
|
90
|
+
listById(input: ListSharedAccessByIdInput): Promise<SharedAccessGrantListResult>
|
|
91
|
+
revoke(grantId: string): Promise<SharedAccessGrant | null>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function createSharesRuntime(
|
|
95
|
+
runtime: SixbRuntimeContext,
|
|
96
|
+
execution: ExecutionContext,
|
|
97
|
+
definitions: DefinitionCatalog<ShareDefinition>
|
|
98
|
+
): SharesRuntime {
|
|
99
|
+
const managementPrincipal = (): AuthorizablePrincipal => {
|
|
100
|
+
const authority = resolveExecutionScopeAuthorization(runtime.projectId, {
|
|
101
|
+
execution,
|
|
102
|
+
authorization: runtime.runtimeAuthorization,
|
|
103
|
+
})
|
|
104
|
+
if (authority.type !== "principal" || authority.context.principal.type === "system") {
|
|
105
|
+
throw new ShareError(
|
|
106
|
+
"unauthenticated",
|
|
107
|
+
"[Sixb] Shared access grants require user or service-account authority."
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
type: authority.context.principal.type,
|
|
112
|
+
id: authority.context.principal.id,
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const canManage = (shareId: string): boolean => {
|
|
117
|
+
try {
|
|
118
|
+
managementPrincipal()
|
|
119
|
+
return isRuntimeAllowed(runtime, { kind: "share.manage", shareId })
|
|
120
|
+
} catch {
|
|
121
|
+
return false
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const resolveManageableDefinition = (definitionId: unknown): ShareDefinition => {
|
|
126
|
+
const id = validDefinitionId(definitionId)
|
|
127
|
+
managementPrincipal()
|
|
128
|
+
// Authorize the opaque id before resolving it so callers without `can.share` cannot use the
|
|
129
|
+
// 403/404 distinction as a Share-definition existence oracle.
|
|
130
|
+
assertCanManage(runtime, id)
|
|
131
|
+
return resolveDefinition(definitions, id)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const issueByDefinition = async (
|
|
135
|
+
definition: ShareDefinition,
|
|
136
|
+
input: IssueSharedAccessInput
|
|
137
|
+
): Promise<SharedAccessInvitation> => {
|
|
138
|
+
assertInputObject(input, "Shared access issue input")
|
|
139
|
+
const issuer = managementPrincipal()
|
|
140
|
+
assertCanManage(runtime, definition.id)
|
|
141
|
+
const storage = requireShareStorage(runtime)
|
|
142
|
+
const createdAt = new Date()
|
|
143
|
+
const expiresAt = validFutureDate(input.expiresAt, createdAt)
|
|
144
|
+
const target = exactTarget(definition, input.target)
|
|
145
|
+
|
|
146
|
+
// This canonical read checks both the caller's current object authority and target existence.
|
|
147
|
+
const object = await runtime.objectReader.getByPrimaryId({
|
|
148
|
+
objectTypeId: target.objectTypeId,
|
|
149
|
+
primaryId: target.primaryId,
|
|
150
|
+
})
|
|
151
|
+
if (!object) {
|
|
152
|
+
throw new ObjectNotFoundError(target.objectTypeId, target.primaryId, "Share target not found")
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const authoritySnapshot = {
|
|
156
|
+
version: 1 as const,
|
|
157
|
+
access: compileShareAccessPlan({
|
|
158
|
+
share: definition,
|
|
159
|
+
target,
|
|
160
|
+
ontology: runtime.ontology,
|
|
161
|
+
actions: runtime.actionRegistry,
|
|
162
|
+
}),
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
for (let attempt = 0; attempt < MAX_CREATE_ATTEMPTS; attempt += 1) {
|
|
166
|
+
const secret = randomBytes(32).toString("base64url")
|
|
167
|
+
try {
|
|
168
|
+
const grant = await storage.create({
|
|
169
|
+
id: `shr_${randomUUID()}`,
|
|
170
|
+
projectId: runtime.projectId,
|
|
171
|
+
definitionId: definition.id,
|
|
172
|
+
target,
|
|
173
|
+
issuedBy: issuer,
|
|
174
|
+
authoritySnapshot,
|
|
175
|
+
tokenHash: sha256(secret),
|
|
176
|
+
destinationPath: input.destinationPath,
|
|
177
|
+
createdAt,
|
|
178
|
+
expiresAt,
|
|
179
|
+
})
|
|
180
|
+
return { grant: publicGrant(grant), secret }
|
|
181
|
+
} catch (error) {
|
|
182
|
+
if (error instanceof ShareGrantStorageError && error.code === "invalid_input") {
|
|
183
|
+
throw new ShareError("invalid_input", error.message, { cause: error })
|
|
184
|
+
}
|
|
185
|
+
if (
|
|
186
|
+
!(error instanceof ShareGrantStorageError) ||
|
|
187
|
+
error.code !== "duplicate" ||
|
|
188
|
+
attempt === MAX_CREATE_ATTEMPTS - 1
|
|
189
|
+
) {
|
|
190
|
+
throw storageFailure("issue", error)
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
throw storageFailure("issue")
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const listByDefinition = async (
|
|
199
|
+
definition: ShareDefinition,
|
|
200
|
+
input: ListSharedAccessInput = {}
|
|
201
|
+
): Promise<SharedAccessGrantListResult> => {
|
|
202
|
+
assertInputObject(input, "Shared access list input")
|
|
203
|
+
managementPrincipal()
|
|
204
|
+
assertCanManage(runtime, definition.id)
|
|
205
|
+
const storage = requireShareStorage(runtime)
|
|
206
|
+
const target = input.target === undefined ? undefined : exactTarget(definition, input.target)
|
|
207
|
+
try {
|
|
208
|
+
const result = await storage.list({
|
|
209
|
+
projectId: runtime.projectId,
|
|
210
|
+
definitionId: definition.id,
|
|
211
|
+
...(target === undefined ? {} : { target }),
|
|
212
|
+
includeRevoked: input.includeRevoked,
|
|
213
|
+
includeExpired: input.includeExpired,
|
|
214
|
+
now: new Date(),
|
|
215
|
+
limit: input.limit,
|
|
216
|
+
offset: input.offset,
|
|
217
|
+
})
|
|
218
|
+
return { ...result, grants: result.grants.map(publicGrant) }
|
|
219
|
+
} catch (error) {
|
|
220
|
+
if (error instanceof ShareGrantStorageError && error.code === "invalid_input") {
|
|
221
|
+
throw new ShareError("invalid_input", error.message, { cause: error })
|
|
222
|
+
}
|
|
223
|
+
throw storageFailure("list", error)
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return {
|
|
228
|
+
listDefinitions: () => definitions.list().filter((definition) => canManage(definition.id)),
|
|
229
|
+
getDefinitionById: (definitionId) => {
|
|
230
|
+
const definition = definitions.getById(definitionId)
|
|
231
|
+
return definition && canManage(definition.id) ? definition : null
|
|
232
|
+
},
|
|
233
|
+
async issue(definition, input) {
|
|
234
|
+
return issueByDefinition(
|
|
235
|
+
resolveManageableDefinition(definitionIdFromReference(definition)),
|
|
236
|
+
input
|
|
237
|
+
)
|
|
238
|
+
},
|
|
239
|
+
async issueById(input) {
|
|
240
|
+
assertInputObject(input, "Shared access issue input")
|
|
241
|
+
return issueByDefinition(resolveManageableDefinition(input.definitionId), input)
|
|
242
|
+
},
|
|
243
|
+
async list(definition, input) {
|
|
244
|
+
return listByDefinition(
|
|
245
|
+
resolveManageableDefinition(definitionIdFromReference(definition)),
|
|
246
|
+
input
|
|
247
|
+
)
|
|
248
|
+
},
|
|
249
|
+
async listById(input) {
|
|
250
|
+
assertInputObject(input, "Shared access list input")
|
|
251
|
+
const definition = resolveManageableDefinition(input.definitionId)
|
|
252
|
+
const { primaryId, includeRevoked, includeExpired, limit, offset } = input
|
|
253
|
+
return listByDefinition(definition, {
|
|
254
|
+
...(primaryId === undefined
|
|
255
|
+
? {}
|
|
256
|
+
: {
|
|
257
|
+
target: {
|
|
258
|
+
objectTypeId: definition.target.objectTypeId,
|
|
259
|
+
primaryId,
|
|
260
|
+
},
|
|
261
|
+
}),
|
|
262
|
+
includeRevoked,
|
|
263
|
+
includeExpired,
|
|
264
|
+
limit,
|
|
265
|
+
offset,
|
|
266
|
+
})
|
|
267
|
+
},
|
|
268
|
+
revoke: async (grantId) => {
|
|
269
|
+
const actor = managementPrincipal()
|
|
270
|
+
const storage = requireShareStorage(runtime)
|
|
271
|
+
if (typeof grantId !== "string" || !grantId.trim()) {
|
|
272
|
+
throw new ShareError("invalid_input", "[Sixb] Shared access grant id must not be empty.")
|
|
273
|
+
}
|
|
274
|
+
let current: ShareGrantRecord | null
|
|
275
|
+
try {
|
|
276
|
+
current = await storage.getById({ projectId: runtime.projectId, id: grantId })
|
|
277
|
+
} catch (error) {
|
|
278
|
+
throw storageFailure("load for revocation", error)
|
|
279
|
+
}
|
|
280
|
+
if (!current) return null
|
|
281
|
+
// Do not turn grant ids into an existence oracle. Missing definitions and grants outside the
|
|
282
|
+
// caller's management authority are indistinguishable from missing grants.
|
|
283
|
+
if (!definitions.getById(current.definitionId) || !canManage(current.definitionId)) {
|
|
284
|
+
return null
|
|
285
|
+
}
|
|
286
|
+
try {
|
|
287
|
+
const revoked = await storage.revoke({
|
|
288
|
+
projectId: runtime.projectId,
|
|
289
|
+
id: grantId,
|
|
290
|
+
revokedAt: new Date(),
|
|
291
|
+
revokedBy: actor,
|
|
292
|
+
})
|
|
293
|
+
return revoked ? publicGrant(revoked) : null
|
|
294
|
+
} catch (error) {
|
|
295
|
+
throw storageFailure("revoke", error)
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function definitionIdFromReference(value: unknown): unknown {
|
|
302
|
+
return typeof value === "object" && value !== null
|
|
303
|
+
? (value as { readonly id?: unknown }).id
|
|
304
|
+
: undefined
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
function assertInputObject(value: unknown, label: string): asserts value is object {
|
|
308
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
309
|
+
throw new ShareError("invalid_input", `[Sixb] ${label} must be an object.`)
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function resolveDefinition(
|
|
314
|
+
definitions: DefinitionCatalog<ShareDefinition>,
|
|
315
|
+
definitionId: unknown
|
|
316
|
+
): ShareDefinition {
|
|
317
|
+
const id = validDefinitionId(definitionId)
|
|
318
|
+
const definition = definitions.getById(id)
|
|
319
|
+
if (!definition) {
|
|
320
|
+
throw new ShareError("not_found", `[Sixb] Unknown Share definition '${id}'.`)
|
|
321
|
+
}
|
|
322
|
+
return definition
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function validDefinitionId(value: unknown): string {
|
|
326
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
327
|
+
throw new ShareError("invalid_input", "[Sixb] Share definition id must not be empty.")
|
|
328
|
+
}
|
|
329
|
+
return value
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
function assertCanManage(runtime: SixbRuntimeContext, shareId: string): void {
|
|
333
|
+
assertAuthorized(runtime, { kind: "share.manage", shareId })
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function requireShareStorage(runtime: SixbRuntimeContext) {
|
|
337
|
+
const storage = runtime.storage.shareGrants
|
|
338
|
+
if (!storage) {
|
|
339
|
+
throw new ShareError(
|
|
340
|
+
"storage_unavailable",
|
|
341
|
+
"[Sixb] Share grant storage is not configured on this runtime."
|
|
342
|
+
)
|
|
343
|
+
}
|
|
344
|
+
return storage
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function exactTarget(definition: ShareDefinition, value: unknown): ObjectRef {
|
|
348
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
349
|
+
throw new ShareError("invalid_input", "[Sixb] Share target must be an exact object reference.")
|
|
350
|
+
}
|
|
351
|
+
const objectTypeId = (value as { readonly objectTypeId?: unknown }).objectTypeId
|
|
352
|
+
const primaryId = (value as { readonly primaryId?: unknown }).primaryId
|
|
353
|
+
if (typeof objectTypeId !== "string" || typeof primaryId !== "string" || !primaryId.trim()) {
|
|
354
|
+
throw new ShareError("invalid_input", "[Sixb] Share target must be an exact object reference.")
|
|
355
|
+
}
|
|
356
|
+
if (objectTypeId !== definition.target.objectTypeId) {
|
|
357
|
+
throw new ShareError(
|
|
358
|
+
"invalid_input",
|
|
359
|
+
`[Sixb] Share '${definition.id}' targets '${definition.target.objectTypeId}', not '${objectTypeId}'.`
|
|
360
|
+
)
|
|
361
|
+
}
|
|
362
|
+
return Object.freeze({ objectTypeId, primaryId })
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
function validFutureDate(value: unknown, now: Date): Date {
|
|
366
|
+
if (!(value instanceof Date) || !Number.isFinite(value.getTime()) || value <= now) {
|
|
367
|
+
throw new ShareError(
|
|
368
|
+
"invalid_input",
|
|
369
|
+
"[Sixb] Shared access expiry must be a valid future date."
|
|
370
|
+
)
|
|
371
|
+
}
|
|
372
|
+
return new Date(value)
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
function sha256(value: string): string {
|
|
376
|
+
return createHash("sha256").update(value).digest("hex")
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
function publicGrant(record: ShareGrantRecord): SharedAccessGrant {
|
|
380
|
+
const {
|
|
381
|
+
projectId: _projectId,
|
|
382
|
+
authoritySnapshot: _authoritySnapshot,
|
|
383
|
+
authorityDigest: _authorityDigest,
|
|
384
|
+
tokenHash: _tokenHash,
|
|
385
|
+
...grant
|
|
386
|
+
} = record
|
|
387
|
+
return structuredClone(grant)
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
function storageFailure(operation: string, cause?: unknown): ShareError {
|
|
391
|
+
return new ShareError("storage_failure", `[Sixb] Share grant storage failed to ${operation}.`, {
|
|
392
|
+
cause,
|
|
393
|
+
})
|
|
394
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { defineShare, isShareDefinition } from "./builders"
|
|
2
|
+
export type { CompileShareAccessPlanInput } from "./compiler"
|
|
3
|
+
export { compileShareAccessPlan } from "./compiler"
|
|
4
|
+
export { ShareDefinitionError } from "./errors"
|
|
5
|
+
export type {
|
|
6
|
+
IssueSharedAccessByIdInput,
|
|
7
|
+
IssueSharedAccessInput,
|
|
8
|
+
ListSharedAccessByIdInput,
|
|
9
|
+
ListSharedAccessInput,
|
|
10
|
+
SharedAccessGrant,
|
|
11
|
+
SharedAccessGrantListResult,
|
|
12
|
+
SharedAccessInvitation,
|
|
13
|
+
ShareErrorReason,
|
|
14
|
+
SharesRuntime,
|
|
15
|
+
} from "./execution"
|
|
16
|
+
export { ShareError } from "./execution"
|
|
17
|
+
export { intersectShareAccessPlans } from "./intersection"
|
|
18
|
+
export type {
|
|
19
|
+
DefineShareOptions,
|
|
20
|
+
ShareActionGrant,
|
|
21
|
+
ShareActionGrantBuilder,
|
|
22
|
+
ShareDefinition,
|
|
23
|
+
ShareScopeGrant,
|
|
24
|
+
ShareTarget,
|
|
25
|
+
ShareViewGrant,
|
|
26
|
+
ShareViewGrantBuilder,
|
|
27
|
+
} from "./types"
|
|
28
|
+
export { assertShareDefinitionEnvelope, validateSharesAtStartup } from "./validation"
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import type { ObjectRef } from "../ontology"
|
|
2
|
+
import type {
|
|
3
|
+
ObjectReadLinkDefinitionSelection,
|
|
4
|
+
ObjectReadLinkSelection,
|
|
5
|
+
ObjectReadNode,
|
|
6
|
+
ObjectReadObjectSelection,
|
|
7
|
+
ObjectReadRoot,
|
|
8
|
+
} from "../storage/objects/types"
|
|
9
|
+
import { type ShareAccessPlan, snapshotShareAccessPlan } from "./access-plan"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Narrow an issued snapshot by the Share definition registered now.
|
|
13
|
+
*
|
|
14
|
+
* Intersection is recursive and id-based. Anything added to the definition or ontology after
|
|
15
|
+
* issuance is absent from `issued` and therefore cannot appear in the effective plan.
|
|
16
|
+
*/
|
|
17
|
+
export function intersectShareAccessPlans(
|
|
18
|
+
issued: ShareAccessPlan,
|
|
19
|
+
current: ShareAccessPlan
|
|
20
|
+
): ShareAccessPlan {
|
|
21
|
+
const issuedSnapshot = snapshotShareAccessPlan(issued)
|
|
22
|
+
const currentSnapshot = snapshotShareAccessPlan(current)
|
|
23
|
+
const grants: ShareAccessPlan["grants"][number][] = []
|
|
24
|
+
|
|
25
|
+
const issuedRoots = viewRoots(issuedSnapshot)
|
|
26
|
+
const currentRoots = viewRoots(currentSnapshot)
|
|
27
|
+
const roots: ObjectReadRoot[] = []
|
|
28
|
+
for (const issuedRoot of issuedRoots) {
|
|
29
|
+
for (const currentRoot of currentRoots) {
|
|
30
|
+
if (!refsEqual(issuedRoot.anchor, currentRoot.anchor)) continue
|
|
31
|
+
const node = intersectNodes(issuedRoot.node, currentRoot.node)
|
|
32
|
+
if (node.objects.length === 0) continue
|
|
33
|
+
roots.push({ anchor: { ...issuedRoot.anchor }, node })
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (roots.length > 0) {
|
|
37
|
+
grants.push({ kind: "object.view", selection: { kind: "selected", roots } })
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for (const issuedGrant of issuedSnapshot.grants) {
|
|
41
|
+
if (issuedGrant.kind !== "action.apply") continue
|
|
42
|
+
const subjects = issuedGrant.subjects.filter((subject) =>
|
|
43
|
+
currentSnapshot.grants.some(
|
|
44
|
+
(currentGrant) =>
|
|
45
|
+
currentGrant.kind === "action.apply" &&
|
|
46
|
+
currentGrant.actionId === issuedGrant.actionId &&
|
|
47
|
+
currentGrant.subjects.some((currentSubject) => refsEqual(subject, currentSubject))
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
if (subjects.length > 0) {
|
|
51
|
+
grants.push({
|
|
52
|
+
kind: "action.apply",
|
|
53
|
+
actionId: issuedGrant.actionId,
|
|
54
|
+
subjects: subjects.map((subject) => ({ ...subject })),
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return snapshotShareAccessPlan({ grants })
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function viewRoots(plan: ShareAccessPlan): readonly ObjectReadRoot[] {
|
|
63
|
+
return plan.grants.flatMap((grant) =>
|
|
64
|
+
grant.kind === "object.view" ? [...grant.selection.roots] : []
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function intersectNodes(issued: ObjectReadNode, current: ObjectReadNode): ObjectReadNode {
|
|
69
|
+
const objects: ObjectReadObjectSelection[] = []
|
|
70
|
+
for (const issuedObject of issued.objects) {
|
|
71
|
+
const currentObject = current.objects.find(
|
|
72
|
+
(candidate) => candidate.objectTypeId === issuedObject.objectTypeId
|
|
73
|
+
)
|
|
74
|
+
if (!currentObject) continue
|
|
75
|
+
objects.push({
|
|
76
|
+
objectTypeId: issuedObject.objectTypeId,
|
|
77
|
+
propertyIds: intersectStrings(issuedObject.propertyIds, currentObject.propertyIds),
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
const allowedSourceIds = new Set(objects.map((object) => object.objectTypeId))
|
|
81
|
+
const links: ObjectReadLinkSelection[] = []
|
|
82
|
+
for (const issuedLink of issued.links) {
|
|
83
|
+
for (const currentLink of current.links) {
|
|
84
|
+
const link = intersectLinkSelections(issuedLink, currentLink, allowedSourceIds)
|
|
85
|
+
if (link) links.push(link)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
objects: objects.sort((a, b) => a.objectTypeId.localeCompare(b.objectTypeId)),
|
|
90
|
+
links,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function intersectLinkSelections(
|
|
95
|
+
issued: ObjectReadLinkSelection,
|
|
96
|
+
current: ObjectReadLinkSelection,
|
|
97
|
+
allowedSourceIds: ReadonlySet<string>
|
|
98
|
+
): ObjectReadLinkSelection | null {
|
|
99
|
+
const definitions: ObjectReadLinkDefinitionSelection[] = []
|
|
100
|
+
const allowedTargetIds = new Set<string>()
|
|
101
|
+
for (const issuedDefinition of issued.definitions) {
|
|
102
|
+
if (!allowedSourceIds.has(issuedDefinition.sourceObjectTypeId)) continue
|
|
103
|
+
for (const currentDefinition of current.definitions) {
|
|
104
|
+
if (
|
|
105
|
+
currentDefinition.sourceObjectTypeId !== issuedDefinition.sourceObjectTypeId ||
|
|
106
|
+
currentDefinition.linkId !== issuedDefinition.linkId
|
|
107
|
+
) {
|
|
108
|
+
continue
|
|
109
|
+
}
|
|
110
|
+
const targetObjectTypeIds = intersectStrings(
|
|
111
|
+
issuedDefinition.targetObjectTypeIds,
|
|
112
|
+
currentDefinition.targetObjectTypeIds
|
|
113
|
+
)
|
|
114
|
+
if (targetObjectTypeIds.length === 0) continue
|
|
115
|
+
for (const id of targetObjectTypeIds) allowedTargetIds.add(id)
|
|
116
|
+
definitions.push({
|
|
117
|
+
sourceObjectTypeId: issuedDefinition.sourceObjectTypeId,
|
|
118
|
+
linkId: issuedDefinition.linkId,
|
|
119
|
+
targetObjectTypeIds,
|
|
120
|
+
propertyIds: intersectStrings(issuedDefinition.propertyIds, currentDefinition.propertyIds),
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (definitions.length === 0) return null
|
|
125
|
+
|
|
126
|
+
const intersectedTarget = intersectNodes(issued.target, current.target)
|
|
127
|
+
const target = restrictNodeToTypes(intersectedTarget, allowedTargetIds)
|
|
128
|
+
if (target.objects.length === 0) return null
|
|
129
|
+
const visibleTargetIds = new Set(target.objects.map((object) => object.objectTypeId))
|
|
130
|
+
const visibleDefinitions = definitions
|
|
131
|
+
.map((definition) => ({
|
|
132
|
+
...definition,
|
|
133
|
+
targetObjectTypeIds: definition.targetObjectTypeIds.filter((id) => visibleTargetIds.has(id)),
|
|
134
|
+
}))
|
|
135
|
+
.filter((definition) => definition.targetObjectTypeIds.length > 0)
|
|
136
|
+
if (visibleDefinitions.length === 0) return null
|
|
137
|
+
return { definitions: visibleDefinitions, target }
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function restrictNodeToTypes(
|
|
141
|
+
node: ObjectReadNode,
|
|
142
|
+
allowedIds: ReadonlySet<string>
|
|
143
|
+
): ObjectReadNode {
|
|
144
|
+
const objects = node.objects.filter((object) => allowedIds.has(object.objectTypeId))
|
|
145
|
+
const sourceIds = new Set(objects.map((object) => object.objectTypeId))
|
|
146
|
+
const links: ObjectReadLinkSelection[] = []
|
|
147
|
+
for (const link of node.links) {
|
|
148
|
+
const definitions = link.definitions.filter((definition) =>
|
|
149
|
+
sourceIds.has(definition.sourceObjectTypeId)
|
|
150
|
+
)
|
|
151
|
+
if (definitions.length === 0) continue
|
|
152
|
+
const targetIds = new Set(definitions.flatMap((definition) => definition.targetObjectTypeIds))
|
|
153
|
+
const target = restrictNodeToTypes(link.target, targetIds)
|
|
154
|
+
if (target.objects.length === 0) continue
|
|
155
|
+
const visibleTargetIds = new Set(target.objects.map((object) => object.objectTypeId))
|
|
156
|
+
const visibleDefinitions = definitions
|
|
157
|
+
.map((definition) => ({
|
|
158
|
+
...definition,
|
|
159
|
+
targetObjectTypeIds: definition.targetObjectTypeIds.filter((id) =>
|
|
160
|
+
visibleTargetIds.has(id)
|
|
161
|
+
),
|
|
162
|
+
}))
|
|
163
|
+
.filter((definition) => definition.targetObjectTypeIds.length > 0)
|
|
164
|
+
if (visibleDefinitions.length > 0) links.push({ definitions: visibleDefinitions, target })
|
|
165
|
+
}
|
|
166
|
+
return { objects, links }
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function intersectStrings(left: readonly string[], right: readonly string[]): string[] {
|
|
170
|
+
const rightSet = new Set(right)
|
|
171
|
+
return [...new Set(left.filter((value) => rightSet.has(value)))].sort((a, b) =>
|
|
172
|
+
a.localeCompare(b)
|
|
173
|
+
)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function refsEqual(left: ObjectRef, right: ObjectRef): boolean {
|
|
177
|
+
return left.objectTypeId === right.objectTypeId && left.primaryId === right.primaryId
|
|
178
|
+
}
|