@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
|
@@ -1,11 +1,24 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util"
|
|
2
|
+
import { agentServiceAccountId } from "../agents/identity"
|
|
1
3
|
import type { Principal } from "../auth"
|
|
2
|
-
import {
|
|
4
|
+
import { TARGETED_GRANT_KIND_KEYS, type TargetedGrantKind } from "../authorization/grant-kinds"
|
|
3
5
|
import type { AuthorizationContext, GrantIndex } from "../authorization/types"
|
|
4
6
|
import { createSixbError } from "../errors/internal"
|
|
7
|
+
import type { ObjectRef } from "../ontology"
|
|
8
|
+
import {
|
|
9
|
+
type ObjectReadExecutionLimits,
|
|
10
|
+
snapshotObjectReadExecutionLimits,
|
|
11
|
+
} from "../storage/objects/execution-limits"
|
|
12
|
+
import { compileSelectedObjectReadScope } from "../storage/objects/read-scope"
|
|
13
|
+
import type {
|
|
14
|
+
CompiledSelectedObjectReadScope,
|
|
15
|
+
SelectedObjectReadScope,
|
|
16
|
+
} from "../storage/objects/types"
|
|
5
17
|
import {
|
|
6
18
|
type AuthorizablePrincipal,
|
|
7
19
|
type AuthorizationRef,
|
|
8
20
|
createRuntimeAuthorizationCapability,
|
|
21
|
+
type ExecutionContext,
|
|
9
22
|
type ExecutionScope,
|
|
10
23
|
isRuntimeAuthorizationCapability,
|
|
11
24
|
type KernelOperation,
|
|
@@ -20,18 +33,33 @@ export type ResolvedRuntimeAuthorization =
|
|
|
20
33
|
readonly projectId: string
|
|
21
34
|
readonly context: AuthorizationContext
|
|
22
35
|
readonly ref: Extract<AuthorizationRef, { readonly type: "principal" }>
|
|
23
|
-
/** Process-local binding used by provider façades that explicitly support agent runs. */
|
|
24
|
-
readonly executionBinding?: AgentExecutionBinding
|
|
25
36
|
}
|
|
26
37
|
| {
|
|
27
38
|
readonly type: "unrestricted"
|
|
28
39
|
readonly projectId: string
|
|
29
|
-
readonly ref: Exclude<AuthorizationRef, { readonly type: "principal" }>
|
|
30
|
-
|
|
31
|
-
|
|
40
|
+
readonly ref: Exclude<AuthorizationRef, { readonly type: "principal" | "delegated" }>
|
|
41
|
+
}
|
|
42
|
+
| {
|
|
43
|
+
readonly type: "delegated"
|
|
44
|
+
readonly projectId: string
|
|
45
|
+
readonly objectRead: DelegatedObjectReadAuthorization
|
|
46
|
+
readonly actionApply: readonly DelegatedActionApplyTarget[]
|
|
47
|
+
readonly delegation?: Extract<AuthorizationRef, { readonly type: "delegated" }>["delegation"]
|
|
32
48
|
}
|
|
33
49
|
| { readonly type: "denied" }
|
|
34
50
|
|
|
51
|
+
/** Immutable process-local object-read authority. It has no durable representation. */
|
|
52
|
+
export interface DelegatedObjectReadAuthorization {
|
|
53
|
+
readonly scope: CompiledSelectedObjectReadScope
|
|
54
|
+
readonly limits: ObjectReadExecutionLimits
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** One exact object-bound Action target carried by process-local delegated authority. */
|
|
58
|
+
export interface DelegatedActionApplyTarget {
|
|
59
|
+
readonly actionId: string
|
|
60
|
+
readonly subject: ObjectRef
|
|
61
|
+
}
|
|
62
|
+
|
|
35
63
|
type RegisteredRuntimeAuthorization = Exclude<
|
|
36
64
|
ResolvedRuntimeAuthorization,
|
|
37
65
|
{ readonly type: "denied" }
|
|
@@ -41,29 +69,33 @@ type PrincipalAuthorizationContext = Omit<AuthorizationContext, "principal"> & {
|
|
|
41
69
|
readonly principal: AuthorizablePrincipal
|
|
42
70
|
}
|
|
43
71
|
|
|
44
|
-
interface
|
|
45
|
-
readonly
|
|
46
|
-
readonly
|
|
47
|
-
readonly actorId?: string
|
|
48
|
-
readonly runId: string
|
|
72
|
+
interface RuntimeAuthorizationRegistration {
|
|
73
|
+
readonly resolved: RegisteredRuntimeAuthorization
|
|
74
|
+
readonly execution: ExecutionContext
|
|
49
75
|
}
|
|
50
76
|
|
|
51
|
-
const registeredAuthorizations = new WeakMap<
|
|
77
|
+
const registeredAuthorizations = new WeakMap<
|
|
78
|
+
RuntimeAuthorization,
|
|
79
|
+
RuntimeAuthorizationRegistration
|
|
80
|
+
>()
|
|
81
|
+
|
|
82
|
+
const MAX_DELEGATED_ACTION_APPLY_TARGETS = 4_096
|
|
83
|
+
const MAX_DELEGATED_ACTION_IDENTIFIER_CHARACTERS = 1_000_000
|
|
52
84
|
|
|
53
85
|
export function createPrincipalRuntimeAuthorization(input: {
|
|
54
|
-
readonly
|
|
86
|
+
readonly execution: ExecutionContext
|
|
55
87
|
readonly context: AuthorizationContext
|
|
56
88
|
readonly credential?: Extract<AuthorizationRef, { readonly type: "principal" }>["credential"]
|
|
57
89
|
}): RuntimeAuthorization {
|
|
90
|
+
if (input.execution.executor.type !== "request") {
|
|
91
|
+
throw new Error("[Sixb] Principal runtime authorization requires a request execution.")
|
|
92
|
+
}
|
|
58
93
|
return createRegisteredPrincipalAuthorization(input)
|
|
59
94
|
}
|
|
60
95
|
|
|
61
96
|
/** Register restored authority bound to one exact agent run. */
|
|
62
97
|
export function createAgentRuntimeAuthorization(input: {
|
|
63
|
-
readonly
|
|
64
|
-
readonly executionId: string
|
|
65
|
-
readonly actorId?: string
|
|
66
|
-
readonly runId: string
|
|
98
|
+
readonly execution: ExecutionContext
|
|
67
99
|
readonly authority:
|
|
68
100
|
| {
|
|
69
101
|
readonly type: "principal"
|
|
@@ -75,45 +107,32 @@ export function createAgentRuntimeAuthorization(input: {
|
|
|
75
107
|
}
|
|
76
108
|
| { readonly type: "disabled" }
|
|
77
109
|
}): RuntimeAuthorization {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
assertNonEmpty(input.runId, "Agent run id")
|
|
81
|
-
const executionBinding: AgentExecutionBinding = {
|
|
82
|
-
type: "agent",
|
|
83
|
-
executionId: input.executionId,
|
|
84
|
-
...(input.actorId === undefined ? {} : { actorId: input.actorId }),
|
|
85
|
-
runId: input.runId,
|
|
110
|
+
if (input.execution.executor.type !== "agent") {
|
|
111
|
+
throw new Error("[Sixb] Agent runtime authorization requires an Agent execution.")
|
|
86
112
|
}
|
|
87
113
|
|
|
88
114
|
if (input.authority.type === "principal") {
|
|
89
|
-
return createRegisteredPrincipalAuthorization(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
},
|
|
97
|
-
executionBinding
|
|
98
|
-
)
|
|
115
|
+
return createRegisteredPrincipalAuthorization({
|
|
116
|
+
execution: input.execution,
|
|
117
|
+
context: input.authority.context,
|
|
118
|
+
...(input.authority.credential === undefined
|
|
119
|
+
? {}
|
|
120
|
+
: { credential: input.authority.credential }),
|
|
121
|
+
})
|
|
99
122
|
}
|
|
100
123
|
|
|
101
|
-
return register({
|
|
124
|
+
return register(input.execution, {
|
|
102
125
|
type: "unrestricted",
|
|
103
|
-
projectId: input.projectId,
|
|
126
|
+
projectId: input.execution.projectId,
|
|
104
127
|
ref: Object.freeze({ type: "disabled" }),
|
|
105
|
-
executionBinding: Object.freeze(executionBinding),
|
|
106
128
|
})
|
|
107
129
|
}
|
|
108
130
|
|
|
109
|
-
function createRegisteredPrincipalAuthorization(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
},
|
|
115
|
-
executionBinding?: AgentExecutionBinding
|
|
116
|
-
): RuntimeAuthorization {
|
|
131
|
+
function createRegisteredPrincipalAuthorization(input: {
|
|
132
|
+
readonly execution: ExecutionContext
|
|
133
|
+
readonly context: AuthorizationContext
|
|
134
|
+
readonly credential?: Extract<AuthorizationRef, { readonly type: "principal" }>["credential"]
|
|
135
|
+
}): RuntimeAuthorization {
|
|
117
136
|
const context = snapshotAuthorizationContext(input.context)
|
|
118
137
|
const credential = input.credential ? snapshotCredential(input.credential) : undefined
|
|
119
138
|
assertCredentialMatchesContext(context, credential)
|
|
@@ -122,41 +141,79 @@ function createRegisteredPrincipalAuthorization(
|
|
|
122
141
|
principal: context.principal,
|
|
123
142
|
...(credential === undefined ? {} : { credential }),
|
|
124
143
|
})
|
|
125
|
-
return register({
|
|
144
|
+
return register(input.execution, {
|
|
126
145
|
type: "principal",
|
|
127
|
-
projectId: input.projectId,
|
|
146
|
+
projectId: input.execution.projectId,
|
|
128
147
|
context,
|
|
129
148
|
ref,
|
|
130
|
-
...(executionBinding === undefined
|
|
131
|
-
? {}
|
|
132
|
-
: { executionBinding: Object.freeze({ ...executionBinding }) }),
|
|
133
149
|
})
|
|
134
150
|
}
|
|
135
151
|
|
|
136
|
-
export function createDisabledRuntimeAuthorization(
|
|
137
|
-
|
|
152
|
+
export function createDisabledRuntimeAuthorization(
|
|
153
|
+
execution: ExecutionContext
|
|
154
|
+
): RuntimeAuthorization {
|
|
155
|
+
return register(execution, {
|
|
156
|
+
type: "unrestricted",
|
|
157
|
+
projectId: execution.projectId,
|
|
158
|
+
ref: Object.freeze({ type: "disabled" }),
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Register exact object-read authority without fabricating a principal identity. */
|
|
163
|
+
export function createDelegatedRuntimeAuthorization(input: {
|
|
164
|
+
readonly execution: ExecutionContext
|
|
165
|
+
readonly objectRead: {
|
|
166
|
+
readonly selection: SelectedObjectReadScope
|
|
167
|
+
readonly limits: ObjectReadExecutionLimits
|
|
168
|
+
}
|
|
169
|
+
readonly actionApply?: readonly DelegatedActionApplyTarget[]
|
|
170
|
+
readonly delegation?: Extract<AuthorizationRef, { readonly type: "delegated" }>["delegation"]
|
|
171
|
+
}): RuntimeAuthorization {
|
|
172
|
+
const execution = input.execution
|
|
173
|
+
const objectReadInput = input.objectRead
|
|
174
|
+
const actionApplyInput = input.actionApply
|
|
175
|
+
const delegationInput = input.delegation
|
|
176
|
+
const delegation =
|
|
177
|
+
delegationInput === undefined ? undefined : snapshotSharedDelegation(delegationInput)
|
|
178
|
+
if (execution.executor.type !== "request" || execution.requestedBy !== undefined) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
"[Sixb] Delegated runtime authorization requires a request execution without a principal."
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const objectRead = Object.freeze({
|
|
185
|
+
scope: compileSelectedObjectReadScope(objectReadInput.selection),
|
|
186
|
+
limits: snapshotObjectReadExecutionLimits(objectReadInput.limits),
|
|
187
|
+
})
|
|
188
|
+
return register(execution, {
|
|
189
|
+
type: "delegated",
|
|
190
|
+
projectId: execution.projectId,
|
|
191
|
+
objectRead,
|
|
192
|
+
actionApply: snapshotDelegatedActionApply(actionApplyInput ?? []),
|
|
193
|
+
...(delegation === undefined ? {} : { delegation }),
|
|
194
|
+
})
|
|
138
195
|
}
|
|
139
196
|
|
|
140
197
|
export function createTrustedPrimitiveRuntimeAuthorization(input: {
|
|
141
|
-
readonly
|
|
198
|
+
readonly execution: ExecutionContext
|
|
142
199
|
readonly primitive: TrustedPrimitiveRef
|
|
143
200
|
}): RuntimeAuthorization {
|
|
144
201
|
const primitive = snapshotTrustedPrimitive(input.primitive)
|
|
145
|
-
return register({
|
|
202
|
+
return register(input.execution, {
|
|
146
203
|
type: "unrestricted",
|
|
147
|
-
projectId: input.projectId,
|
|
204
|
+
projectId: input.execution.projectId,
|
|
148
205
|
ref: Object.freeze({ type: "trustedPrimitive", primitive }),
|
|
149
206
|
})
|
|
150
207
|
}
|
|
151
208
|
|
|
152
209
|
export function createKernelRuntimeAuthorization(input: {
|
|
153
|
-
readonly
|
|
210
|
+
readonly execution: ExecutionContext
|
|
154
211
|
readonly operation: KernelOperation
|
|
155
212
|
}): RuntimeAuthorization {
|
|
156
213
|
const operation = snapshotKernelOperation(input.operation)
|
|
157
|
-
return register({
|
|
214
|
+
return register(input.execution, {
|
|
158
215
|
type: "unrestricted",
|
|
159
|
-
projectId: input.projectId,
|
|
216
|
+
projectId: input.execution.projectId,
|
|
160
217
|
ref: Object.freeze({ type: "kernel", operation }),
|
|
161
218
|
})
|
|
162
219
|
}
|
|
@@ -165,7 +222,28 @@ export function resolveRuntimeAuthorization(authorization: unknown): ResolvedRun
|
|
|
165
222
|
if (!isRuntimeAuthorizationCapability(authorization)) {
|
|
166
223
|
return { type: "denied" }
|
|
167
224
|
}
|
|
168
|
-
return registeredAuthorizations.get(authorization) ?? { type: "denied" }
|
|
225
|
+
return registeredAuthorizations.get(authorization)?.resolved ?? { type: "denied" }
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Resolve authority from a runtime already admitted by `SixbHost.withScope`.
|
|
230
|
+
*
|
|
231
|
+
* Bound runtime facades carry no second execution value to recombine. Any lower-level boundary
|
|
232
|
+
* that receives an `ExecutionContext` separately must use `resolveExecutionScopeAuthorization`.
|
|
233
|
+
*/
|
|
234
|
+
export function resolveRuntimeAuthorizationForProject(input: {
|
|
235
|
+
readonly projectId: unknown
|
|
236
|
+
readonly runtimeAuthorization?: unknown
|
|
237
|
+
}): ResolvedRuntimeAuthorization {
|
|
238
|
+
const resolved = resolveRuntimeAuthorization(input.runtimeAuthorization)
|
|
239
|
+
if (
|
|
240
|
+
resolved.type === "denied" ||
|
|
241
|
+
typeof input.projectId !== "string" ||
|
|
242
|
+
resolved.projectId !== input.projectId
|
|
243
|
+
) {
|
|
244
|
+
return { type: "denied" }
|
|
245
|
+
}
|
|
246
|
+
return resolved
|
|
169
247
|
}
|
|
170
248
|
|
|
171
249
|
export function getAuthorizationRef(authorization: RuntimeAuthorization): AuthorizationRef {
|
|
@@ -173,9 +251,29 @@ export function getAuthorizationRef(authorization: RuntimeAuthorization): Author
|
|
|
173
251
|
if (resolved.type === "denied") {
|
|
174
252
|
throw new Error("[Sixb] Runtime authorization is not a registered Core capability.")
|
|
175
253
|
}
|
|
254
|
+
if (resolved.type === "delegated") {
|
|
255
|
+
if (resolved.delegation) {
|
|
256
|
+
return { type: "delegated", delegation: { ...resolved.delegation } }
|
|
257
|
+
}
|
|
258
|
+
throw new Error(
|
|
259
|
+
"[Sixb] Delegated runtime authorization cannot cross a durable execution boundary."
|
|
260
|
+
)
|
|
261
|
+
}
|
|
176
262
|
return cloneAuthorizationRef(resolved.ref)
|
|
177
263
|
}
|
|
178
264
|
|
|
265
|
+
function snapshotSharedDelegation(
|
|
266
|
+
input: Extract<AuthorizationRef, { readonly type: "delegated" }>["delegation"]
|
|
267
|
+
): Extract<AuthorizationRef, { readonly type: "delegated" }>["delegation"] {
|
|
268
|
+
const kind = input.kind
|
|
269
|
+
const grantId = input.grantId
|
|
270
|
+
const sessionId = input.sessionId
|
|
271
|
+
if (kind !== "share") throw new Error("[Sixb] Unknown delegated authority provenance.")
|
|
272
|
+
assertNonEmpty(grantId, "Share grant id")
|
|
273
|
+
assertNonEmpty(sessionId, "Share session id")
|
|
274
|
+
return Object.freeze({ kind, grantId, sessionId })
|
|
275
|
+
}
|
|
276
|
+
|
|
179
277
|
export function assertExecutionScopeProject(projectId: string, scope: ExecutionScope): void {
|
|
180
278
|
assertNonEmpty(projectId, "Project id")
|
|
181
279
|
if (scope.execution.projectId !== projectId) {
|
|
@@ -215,22 +313,51 @@ export function assertExecutionScopeProject(projectId: string, scope: ExecutionS
|
|
|
215
313
|
}
|
|
216
314
|
}
|
|
217
315
|
|
|
316
|
+
/**
|
|
317
|
+
* Capture the two opaque capabilities carried by a scope exactly once.
|
|
318
|
+
*
|
|
319
|
+
* Security-sensitive boundaries must not resolve a caller-owned wrapper and then read it again:
|
|
320
|
+
* accessor-backed inputs could otherwise substitute a different execution or authority between
|
|
321
|
+
* those operations.
|
|
322
|
+
*/
|
|
323
|
+
export function captureExecutionScope(scope: ExecutionScope): ExecutionScope {
|
|
324
|
+
const execution = scope.execution
|
|
325
|
+
const authorization = scope.authorization
|
|
326
|
+
return Object.freeze({ execution, authorization })
|
|
327
|
+
}
|
|
328
|
+
|
|
218
329
|
/** Validate that one registered authority belongs to the exact execution it accompanies. */
|
|
219
330
|
export function resolveExecutionScopeAuthorization(
|
|
220
331
|
projectId: string,
|
|
221
332
|
scope: ExecutionScope
|
|
222
333
|
): RegisteredRuntimeAuthorization {
|
|
223
|
-
|
|
224
|
-
|
|
334
|
+
const capturedScope = captureExecutionScope(scope)
|
|
335
|
+
assertExecutionScopeProject(projectId, capturedScope)
|
|
336
|
+
const resolved = resolveRuntimeAuthorization(capturedScope.authorization)
|
|
225
337
|
if (resolved.type === "denied") {
|
|
226
338
|
throw createSixbError(
|
|
227
339
|
"internal.unexpected",
|
|
228
340
|
"[Sixb] Execution scope carries unregistered runtime authorization.",
|
|
229
|
-
{ details: { executionId:
|
|
341
|
+
{ details: { executionId: capturedScope.execution.id, projectId } }
|
|
342
|
+
)
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const registration = registeredAuthorizations.get(capturedScope.authorization)
|
|
346
|
+
if (!registration || !executionMatchesBinding(registration.execution, capturedScope.execution)) {
|
|
347
|
+
throw invalidExecutionAuthority(
|
|
348
|
+
capturedScope.execution.id,
|
|
349
|
+
"authority is bound to different execution provenance"
|
|
230
350
|
)
|
|
231
351
|
}
|
|
232
352
|
|
|
233
|
-
|
|
353
|
+
assertResolvedAuthorizationMatchesExecution(resolved, capturedScope.execution)
|
|
354
|
+
return resolved
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
function assertResolvedAuthorizationMatchesExecution(
|
|
358
|
+
resolved: RegisteredRuntimeAuthorization,
|
|
359
|
+
execution: ExecutionContext
|
|
360
|
+
): void {
|
|
234
361
|
switch (execution.executor.type) {
|
|
235
362
|
case "request":
|
|
236
363
|
if (
|
|
@@ -239,27 +366,31 @@ export function resolveExecutionScopeAuthorization(
|
|
|
239
366
|
) {
|
|
240
367
|
throw invalidExecutionAuthority(execution.id, "request source does not match its executor")
|
|
241
368
|
}
|
|
242
|
-
if (resolved.
|
|
243
|
-
if (
|
|
244
|
-
resolved.type !== "principal" ||
|
|
245
|
-
resolved.executionBinding !== undefined ||
|
|
246
|
-
!principalsEqual(execution.requestedBy, resolved.ref.principal)
|
|
247
|
-
) {
|
|
369
|
+
if (resolved.type === "principal") {
|
|
370
|
+
if (!principalsEqual(execution.requestedBy, resolved.ref.principal)) {
|
|
248
371
|
throw invalidExecutionAuthority(
|
|
249
372
|
execution.id,
|
|
250
373
|
"request authority does not match its requested-by principal"
|
|
251
374
|
)
|
|
252
375
|
}
|
|
253
|
-
return
|
|
376
|
+
return
|
|
254
377
|
}
|
|
255
|
-
if (
|
|
378
|
+
if (
|
|
379
|
+
resolved.type === "unrestricted" &&
|
|
380
|
+
resolved.ref.type === "disabled" &&
|
|
381
|
+
execution.requestedBy === undefined
|
|
382
|
+
) {
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
if (resolved.type === "delegated" && execution.requestedBy === undefined) return
|
|
256
386
|
throw invalidExecutionAuthority(
|
|
257
387
|
execution.id,
|
|
258
|
-
"request execution requires principal or explicitly disabled authority"
|
|
388
|
+
"request execution requires principal, delegated, or explicitly disabled authority"
|
|
259
389
|
)
|
|
260
390
|
|
|
261
391
|
case "primitive":
|
|
262
392
|
if (
|
|
393
|
+
resolved.type !== "unrestricted" ||
|
|
263
394
|
resolved.ref.type !== "trustedPrimitive" ||
|
|
264
395
|
resolved.ref.primitive.kind !== execution.executor.kind ||
|
|
265
396
|
resolved.ref.primitive.id !== execution.executor.id ||
|
|
@@ -270,22 +401,37 @@ export function resolveExecutionScopeAuthorization(
|
|
|
270
401
|
"trusted primitive authority does not match its executor"
|
|
271
402
|
)
|
|
272
403
|
}
|
|
273
|
-
return
|
|
404
|
+
return
|
|
274
405
|
|
|
275
406
|
case "agent":
|
|
276
|
-
if (
|
|
277
|
-
resolved.executionBinding?.type !== "agent" ||
|
|
278
|
-
resolved.executionBinding.executionId !== execution.id ||
|
|
279
|
-
resolved.executionBinding.actorId !== execution.executor.actorId ||
|
|
280
|
-
resolved.executionBinding.runId !== execution.executor.runId
|
|
281
|
-
) {
|
|
407
|
+
if (execution.source.type !== "execution") {
|
|
282
408
|
throw invalidExecutionAuthority(
|
|
283
409
|
execution.id,
|
|
284
|
-
"agent
|
|
410
|
+
"agent execution requires an execution source"
|
|
285
411
|
)
|
|
286
412
|
}
|
|
287
|
-
if (resolved.type === "principal" && resolved.ref.type === "principal")
|
|
288
|
-
|
|
413
|
+
if (resolved.type === "principal" && resolved.ref.type === "principal") {
|
|
414
|
+
if (resolved.ref.principal.type === "serviceAccount") {
|
|
415
|
+
const actorId = execution.executor.actorId
|
|
416
|
+
if (
|
|
417
|
+
actorId === undefined ||
|
|
418
|
+
resolved.ref.principal.id !== agentServiceAccountId(actorId) ||
|
|
419
|
+
resolved.ref.credential !== undefined
|
|
420
|
+
) {
|
|
421
|
+
throw invalidExecutionAuthority(
|
|
422
|
+
execution.id,
|
|
423
|
+
"agent authority must reference its managed service account"
|
|
424
|
+
)
|
|
425
|
+
}
|
|
426
|
+
} else if (resolved.ref.credential === undefined) {
|
|
427
|
+
throw invalidExecutionAuthority(
|
|
428
|
+
execution.id,
|
|
429
|
+
"inherited user agent authority requires a credential"
|
|
430
|
+
)
|
|
431
|
+
}
|
|
432
|
+
return
|
|
433
|
+
}
|
|
434
|
+
if (resolved.type === "unrestricted" && resolved.ref.type === "disabled") return
|
|
289
435
|
throw invalidExecutionAuthority(
|
|
290
436
|
execution.id,
|
|
291
437
|
"agent authority must be principal or explicitly disabled"
|
|
@@ -293,6 +439,7 @@ export function resolveExecutionScopeAuthorization(
|
|
|
293
439
|
|
|
294
440
|
case "kernel":
|
|
295
441
|
if (
|
|
442
|
+
resolved.type !== "unrestricted" ||
|
|
296
443
|
resolved.ref.type !== "kernel" ||
|
|
297
444
|
execution.requestedBy !== undefined ||
|
|
298
445
|
resolved.ref.operation.type !== execution.executor.operation.type ||
|
|
@@ -303,7 +450,7 @@ export function resolveExecutionScopeAuthorization(
|
|
|
303
450
|
"kernel authority does not match its executor"
|
|
304
451
|
)
|
|
305
452
|
}
|
|
306
|
-
return
|
|
453
|
+
return
|
|
307
454
|
}
|
|
308
455
|
}
|
|
309
456
|
|
|
@@ -322,23 +469,122 @@ function invalidExecutionAuthority(executionId: string, reason: string): Error {
|
|
|
322
469
|
)
|
|
323
470
|
}
|
|
324
471
|
|
|
325
|
-
function register(
|
|
472
|
+
function register(
|
|
473
|
+
execution: ExecutionContext,
|
|
474
|
+
input: RegisteredRuntimeAuthorization
|
|
475
|
+
): RuntimeAuthorization {
|
|
326
476
|
assertNonEmpty(input.projectId, "Authorization project id")
|
|
477
|
+
const executionBinding = snapshotExecutionContext(execution)
|
|
478
|
+
if (input.projectId !== executionBinding.projectId) {
|
|
479
|
+
throw new Error(
|
|
480
|
+
`[Sixb] Runtime authorization belongs to project '${input.projectId}', not execution project '${executionBinding.projectId}'.`
|
|
481
|
+
)
|
|
482
|
+
}
|
|
483
|
+
assertResolvedAuthorizationMatchesExecution(input, executionBinding)
|
|
327
484
|
const authorization = createRuntimeAuthorizationCapability()
|
|
328
|
-
registeredAuthorizations.set(
|
|
485
|
+
registeredAuthorizations.set(
|
|
486
|
+
authorization,
|
|
487
|
+
Object.freeze({ resolved: Object.freeze(input), execution: executionBinding })
|
|
488
|
+
)
|
|
329
489
|
return authorization
|
|
330
490
|
}
|
|
331
491
|
|
|
492
|
+
function executionMatchesBinding(binding: ExecutionContext, execution: ExecutionContext): boolean {
|
|
493
|
+
try {
|
|
494
|
+
return isDeepStrictEqual(binding, snapshotExecutionContext(execution))
|
|
495
|
+
} catch {
|
|
496
|
+
return false
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function snapshotExecutionContext(execution: ExecutionContext): ExecutionContext {
|
|
501
|
+
assertNonEmpty(execution.id, "Execution id")
|
|
502
|
+
assertNonEmpty(execution.projectId, "Execution project id")
|
|
503
|
+
assertNonEmpty(execution.correlationId, "Execution correlation id")
|
|
504
|
+
return Object.freeze({
|
|
505
|
+
id: execution.id,
|
|
506
|
+
projectId: execution.projectId,
|
|
507
|
+
...(execution.requestedBy === undefined
|
|
508
|
+
? {}
|
|
509
|
+
: { requestedBy: snapshotAuthorizablePrincipal(execution.requestedBy) }),
|
|
510
|
+
executor: snapshotExecutionExecutor(execution.executor),
|
|
511
|
+
source: snapshotExecutionSource(execution.source),
|
|
512
|
+
correlationId: execution.correlationId,
|
|
513
|
+
})
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
function snapshotExecutionExecutor(
|
|
517
|
+
executor: ExecutionContext["executor"]
|
|
518
|
+
): ExecutionContext["executor"] {
|
|
519
|
+
switch (executor.type) {
|
|
520
|
+
case "request":
|
|
521
|
+
assertNonEmpty(executor.requestId, "Execution request id")
|
|
522
|
+
return Object.freeze({ type: "request", requestId: executor.requestId })
|
|
523
|
+
case "primitive": {
|
|
524
|
+
const primitive = snapshotTrustedPrimitive(executor)
|
|
525
|
+
return Object.freeze({ type: "primitive", ...primitive })
|
|
526
|
+
}
|
|
527
|
+
case "agent":
|
|
528
|
+
if (executor.actorId !== undefined)
|
|
529
|
+
assertNonEmpty(executor.actorId, "Execution Agent actor id")
|
|
530
|
+
assertNonEmpty(executor.runId, "Execution Agent run id")
|
|
531
|
+
return Object.freeze({
|
|
532
|
+
type: "agent",
|
|
533
|
+
...(executor.actorId === undefined ? {} : { actorId: executor.actorId }),
|
|
534
|
+
runId: executor.runId,
|
|
535
|
+
})
|
|
536
|
+
case "kernel":
|
|
537
|
+
return Object.freeze({
|
|
538
|
+
type: "kernel",
|
|
539
|
+
operation: snapshotKernelOperation(executor.operation),
|
|
540
|
+
})
|
|
541
|
+
}
|
|
542
|
+
throw new Error(
|
|
543
|
+
`[Sixb] Unknown execution executor type '${String((executor as { type?: unknown }).type)}'.`
|
|
544
|
+
)
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
function snapshotExecutionSource(source: ExecutionContext["source"]): ExecutionContext["source"] {
|
|
548
|
+
switch (source.type) {
|
|
549
|
+
case "http":
|
|
550
|
+
assertNonEmpty(source.requestId, "Execution source request id")
|
|
551
|
+
return Object.freeze({ type: "http", requestId: source.requestId })
|
|
552
|
+
case "webhook":
|
|
553
|
+
assertNonEmpty(source.deliveryId, "Execution source delivery id")
|
|
554
|
+
return Object.freeze({ type: "webhook", deliveryId: source.deliveryId })
|
|
555
|
+
case "schedule":
|
|
556
|
+
case "event":
|
|
557
|
+
assertNonEmpty(source.eventId, "Execution source event id")
|
|
558
|
+
return Object.freeze({ type: source.type, eventId: source.eventId })
|
|
559
|
+
case "datasetVersion":
|
|
560
|
+
assertNonEmpty(source.datasetId, "Execution source dataset id")
|
|
561
|
+
assertNonEmpty(source.versionId, "Execution source dataset version id")
|
|
562
|
+
return Object.freeze({
|
|
563
|
+
type: "datasetVersion",
|
|
564
|
+
datasetId: source.datasetId,
|
|
565
|
+
versionId: source.versionId,
|
|
566
|
+
})
|
|
567
|
+
case "execution":
|
|
568
|
+
assertNonEmpty(source.executionId, "Execution source execution id")
|
|
569
|
+
return Object.freeze({ type: "execution", executionId: source.executionId })
|
|
570
|
+
}
|
|
571
|
+
throw new Error(
|
|
572
|
+
`[Sixb] Unknown execution source type '${String((source as { type?: unknown }).type)}'.`
|
|
573
|
+
)
|
|
574
|
+
}
|
|
575
|
+
|
|
332
576
|
function snapshotAuthorizationContext(
|
|
333
577
|
context: AuthorizationContext
|
|
334
578
|
): PrincipalAuthorizationContext {
|
|
335
579
|
const principal = snapshotAuthorizablePrincipal(context.principal)
|
|
336
|
-
const grants =
|
|
337
|
-
grants["run:agent"] = context.grants["run:agent"]
|
|
580
|
+
const grants = {} as Record<TargetedGrantKind, ReadonlySet<string>>
|
|
338
581
|
for (const kind of TARGETED_GRANT_KIND_KEYS) {
|
|
339
|
-
grants[kind] = new
|
|
582
|
+
grants[kind] = new ImmutableGrantSet(context.grants[kind])
|
|
340
583
|
}
|
|
341
|
-
const frozenGrants: GrantIndex = Object.freeze(
|
|
584
|
+
const frozenGrants: GrantIndex = Object.freeze({
|
|
585
|
+
...grants,
|
|
586
|
+
"run:agent": context.grants["run:agent"],
|
|
587
|
+
})
|
|
342
588
|
return Object.freeze({
|
|
343
589
|
principal,
|
|
344
590
|
...(context.sessionId === undefined ? {} : { sessionId: context.sessionId }),
|
|
@@ -348,6 +594,68 @@ function snapshotAuthorizationContext(
|
|
|
348
594
|
})
|
|
349
595
|
}
|
|
350
596
|
|
|
597
|
+
/** Read-only Set semantics with no mutable handle hidden behind the TypeScript interface. */
|
|
598
|
+
class ImmutableGrantSet implements ReadonlySet<string> {
|
|
599
|
+
readonly #values: Set<string>
|
|
600
|
+
readonly [Symbol.toStringTag] = "Set"
|
|
601
|
+
|
|
602
|
+
constructor(values: Iterable<string>) {
|
|
603
|
+
this.#values = new Set(values)
|
|
604
|
+
Object.freeze(this)
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
get size(): number {
|
|
608
|
+
return this.#values.size
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
has(value: string): boolean {
|
|
612
|
+
return this.#values.has(value)
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
entries(): ReturnType<Set<string>["entries"]> {
|
|
616
|
+
return this.#values.entries()
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
keys(): ReturnType<Set<string>["keys"]> {
|
|
620
|
+
return this.#values.keys()
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
values(): ReturnType<Set<string>["values"]> {
|
|
624
|
+
return this.#values.values()
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
[Symbol.iterator](): ReturnType<Set<string>[typeof Symbol.iterator]> {
|
|
628
|
+
return this.#values[Symbol.iterator]()
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
forEach(
|
|
632
|
+
callback: (value: string, valueAgain: string, set: ReadonlySet<string>) => void,
|
|
633
|
+
thisArg?: unknown
|
|
634
|
+
): void {
|
|
635
|
+
for (const value of this.#values) {
|
|
636
|
+
callback.call(thisArg, value, value, this)
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
add(_value: string): never {
|
|
641
|
+
throw immutableGrantSetMutation()
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
delete(_value: string): never {
|
|
645
|
+
throw immutableGrantSetMutation()
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
clear(): never {
|
|
649
|
+
throw immutableGrantSetMutation()
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
Object.freeze(ImmutableGrantSet.prototype)
|
|
654
|
+
|
|
655
|
+
function immutableGrantSetMutation(): Error {
|
|
656
|
+
return new Error("[Sixb] Runtime authorization grants are immutable.")
|
|
657
|
+
}
|
|
658
|
+
|
|
351
659
|
function snapshotAuthorizablePrincipal(principal: Principal): AuthorizablePrincipal {
|
|
352
660
|
if (principal.type !== "user" && principal.type !== "serviceAccount") {
|
|
353
661
|
throw new Error(`[Sixb] Principal type '${principal.type}' cannot hold runtime authorization.`)
|
|
@@ -403,6 +711,76 @@ function snapshotKernelOperation(operation: KernelOperation): KernelOperation {
|
|
|
403
711
|
return Object.freeze({ type: operation.type, recoveryId: operation.recoveryId })
|
|
404
712
|
}
|
|
405
713
|
|
|
714
|
+
/** Validate, bound, and detach exact delegated Action targets before registering authority. */
|
|
715
|
+
function snapshotDelegatedActionApply(
|
|
716
|
+
input: readonly DelegatedActionApplyTarget[]
|
|
717
|
+
): readonly DelegatedActionApplyTarget[] {
|
|
718
|
+
if (!Array.isArray(input)) {
|
|
719
|
+
throw new Error("[Sixb] Delegated Action targets must be an array.")
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const targetCount = input.length
|
|
723
|
+
if (targetCount > MAX_DELEGATED_ACTION_APPLY_TARGETS) {
|
|
724
|
+
throw new Error(
|
|
725
|
+
`[Sixb] Delegated authority exceeds the maximum of ${MAX_DELEGATED_ACTION_APPLY_TARGETS} Action targets.`
|
|
726
|
+
)
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
let identifierCharacters = 0
|
|
730
|
+
const targets: DelegatedActionApplyTarget[] = []
|
|
731
|
+
for (let index = 0; index < targetCount; index += 1) {
|
|
732
|
+
const authoredTarget = input[index]
|
|
733
|
+
if (!isRecord(authoredTarget)) {
|
|
734
|
+
throw new Error(`[Sixb] Delegated Action target ${index} must be an object.`)
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
const authoredActionId = authoredTarget.actionId
|
|
738
|
+
const authoredSubject = authoredTarget.subject
|
|
739
|
+
if (!isRecord(authoredSubject)) {
|
|
740
|
+
throw new Error(`[Sixb] Delegated Action target ${index} subject must be an ObjectRef.`)
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
const actionId = delegatedActionIdentifier(
|
|
744
|
+
authoredActionId,
|
|
745
|
+
`Delegated Action target ${index} action id`
|
|
746
|
+
)
|
|
747
|
+
const objectTypeId = delegatedActionIdentifier(
|
|
748
|
+
authoredSubject.objectTypeId,
|
|
749
|
+
`Delegated Action target ${index} subject object type id`
|
|
750
|
+
)
|
|
751
|
+
const primaryId = delegatedActionIdentifier(
|
|
752
|
+
authoredSubject.primaryId,
|
|
753
|
+
`Delegated Action target ${index} subject primary id`
|
|
754
|
+
)
|
|
755
|
+
identifierCharacters += actionId.length + objectTypeId.length + primaryId.length
|
|
756
|
+
if (identifierCharacters > MAX_DELEGATED_ACTION_IDENTIFIER_CHARACTERS) {
|
|
757
|
+
throw new Error(
|
|
758
|
+
`[Sixb] Delegated authority exceeds the maximum of ${MAX_DELEGATED_ACTION_IDENTIFIER_CHARACTERS} Action identifier characters.`
|
|
759
|
+
)
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
targets.push(
|
|
763
|
+
Object.freeze({
|
|
764
|
+
actionId,
|
|
765
|
+
subject: Object.freeze({ objectTypeId, primaryId }),
|
|
766
|
+
})
|
|
767
|
+
)
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
return Object.freeze(targets)
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
function delegatedActionIdentifier(value: unknown, label: string): string {
|
|
774
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
775
|
+
throw new Error(`[Sixb] ${label} must not be empty.`)
|
|
776
|
+
}
|
|
777
|
+
return value
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
781
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
782
|
+
}
|
|
783
|
+
|
|
406
784
|
function cloneAuthorizationRef(ref: AuthorizationRef): AuthorizationRef {
|
|
407
785
|
switch (ref.type) {
|
|
408
786
|
case "principal":
|
|
@@ -413,6 +791,8 @@ function cloneAuthorizationRef(ref: AuthorizationRef): AuthorizationRef {
|
|
|
413
791
|
}
|
|
414
792
|
case "trustedPrimitive":
|
|
415
793
|
return { type: "trustedPrimitive", primitive: { ...ref.primitive } }
|
|
794
|
+
case "delegated":
|
|
795
|
+
return { type: "delegated", delegation: { ...ref.delegation } }
|
|
416
796
|
case "kernel":
|
|
417
797
|
return { type: "kernel", operation: { ...ref.operation } }
|
|
418
798
|
case "disabled":
|