@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,258 @@
|
|
|
1
|
+
import { createHash, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"
|
|
2
|
+
import { formatSessionCookieValue, parseSessionCookieValue } from "../auth/sessions"
|
|
3
|
+
import type { SixbHostView } from "../runtime"
|
|
4
|
+
import type { ShareGrantRecord, ShareSessionRecord, Storage } from "../storage"
|
|
5
|
+
import { ShareSessionStorageError } from "../storage"
|
|
6
|
+
import { type ShareAccessPlan, snapshotShareAccessPlan } from "./access-plan"
|
|
7
|
+
import { compileShareAccessPlan } from "./compiler"
|
|
8
|
+
import { intersectShareAccessPlans } from "./intersection"
|
|
9
|
+
|
|
10
|
+
export const DEFAULT_SHARED_SESSION_INACTIVITY_TTL_MS = 15 * 60_000
|
|
11
|
+
|
|
12
|
+
const MAX_CREATE_ATTEMPTS = 5
|
|
13
|
+
const SECRET_PATTERN = /^[A-Za-z0-9_-]{43}$/
|
|
14
|
+
|
|
15
|
+
export interface SharedSessionContext {
|
|
16
|
+
readonly grantId: string
|
|
17
|
+
readonly sessionId: string
|
|
18
|
+
readonly destinationPath: string
|
|
19
|
+
readonly access: ShareAccessPlan
|
|
20
|
+
readonly expiresAt: Date
|
|
21
|
+
readonly absoluteExpiresAt: Date
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface SharedSessionCredential {
|
|
25
|
+
readonly context: SharedSessionContext
|
|
26
|
+
/** Opaque value for the HttpOnly shared-session cookie. */
|
|
27
|
+
readonly cookieValue: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface SharedSessionProtocolOptions {
|
|
31
|
+
readonly host: SixbHostView
|
|
32
|
+
readonly inactivityTtlMs?: number
|
|
33
|
+
readonly now?: () => Date
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Framework-owned shared-session lifecycle.
|
|
38
|
+
*
|
|
39
|
+
* Link and session secrets are verified here. Callers receive only an effective access plan built
|
|
40
|
+
* from the issued snapshot intersected with the Share definition registered now.
|
|
41
|
+
*/
|
|
42
|
+
export class SharedSessionProtocol {
|
|
43
|
+
private readonly host: SixbHostView
|
|
44
|
+
private readonly inactivityTtlMs: number
|
|
45
|
+
private readonly now: () => Date
|
|
46
|
+
|
|
47
|
+
constructor(options: SharedSessionProtocolOptions) {
|
|
48
|
+
if (!options.host.storage.shareGrants || !options.host.storage.shareSessions) {
|
|
49
|
+
throw new Error("[Sixb] Shared sessions require share grant and session storage.")
|
|
50
|
+
}
|
|
51
|
+
const inactivityTtlMs = options.inactivityTtlMs ?? DEFAULT_SHARED_SESSION_INACTIVITY_TTL_MS
|
|
52
|
+
if (!Number.isSafeInteger(inactivityTtlMs) || inactivityTtlMs <= 0) {
|
|
53
|
+
throw new Error("[Sixb] Shared session inactivity TTL must be a positive integer.")
|
|
54
|
+
}
|
|
55
|
+
this.host = options.host
|
|
56
|
+
this.inactivityTtlMs = inactivityTtlMs
|
|
57
|
+
this.now = options.now ?? (() => new Date())
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async exchange(grantId: string, secret: string): Promise<SharedSessionCredential | null> {
|
|
61
|
+
if (!validIdentifier(grantId) || !validSecret(secret)) return null
|
|
62
|
+
const now = this.currentTime()
|
|
63
|
+
|
|
64
|
+
for (let attempt = 0; attempt < MAX_CREATE_ATTEMPTS; attempt += 1) {
|
|
65
|
+
const sessionSecret = randomBytes(32).toString("base64url")
|
|
66
|
+
const sessionId = `shs_${randomUUID()}`
|
|
67
|
+
try {
|
|
68
|
+
const result = await this.host.storage.transaction(async (tx) => {
|
|
69
|
+
const grant = await activeGrant(tx, this.host.projectId, grantId, now)
|
|
70
|
+
const secretMatches = secretMatchesHash(secret, grant?.tokenHash ?? "")
|
|
71
|
+
if (!grant || !secretMatches) return null
|
|
72
|
+
const sessions = requireSessions(tx)
|
|
73
|
+
const absoluteExpiresAt = new Date(grant.expiresAt)
|
|
74
|
+
const session = await sessions.create({
|
|
75
|
+
id: sessionId,
|
|
76
|
+
projectId: this.host.projectId,
|
|
77
|
+
grantId: grant.id,
|
|
78
|
+
tokenHash: sha256(sessionSecret),
|
|
79
|
+
createdAt: now,
|
|
80
|
+
expiresAt: inactivityDeadline(now, absoluteExpiresAt, this.inactivityTtlMs),
|
|
81
|
+
absoluteExpiresAt,
|
|
82
|
+
})
|
|
83
|
+
return { grant, session }
|
|
84
|
+
})
|
|
85
|
+
if (!result) return null
|
|
86
|
+
return {
|
|
87
|
+
context: this.context(result.grant, result.session),
|
|
88
|
+
cookieValue: formatSessionCookieValue(sessionId, sessionSecret),
|
|
89
|
+
}
|
|
90
|
+
} catch (error) {
|
|
91
|
+
if (
|
|
92
|
+
error instanceof ShareSessionStorageError &&
|
|
93
|
+
error.code === "duplicate" &&
|
|
94
|
+
attempt < MAX_CREATE_ATTEMPTS - 1
|
|
95
|
+
) {
|
|
96
|
+
continue
|
|
97
|
+
}
|
|
98
|
+
throw error
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return null
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async resolve(
|
|
106
|
+
grantId: string,
|
|
107
|
+
cookieValue: string | undefined,
|
|
108
|
+
options: { readonly activity?: "background" | "foreground" } = {}
|
|
109
|
+
): Promise<SharedSessionContext | null> {
|
|
110
|
+
if (!validIdentifier(grantId) || !validCookieValue(cookieValue)) return null
|
|
111
|
+
const credential = parseSessionCookieValue(cookieValue)
|
|
112
|
+
if (
|
|
113
|
+
!credential ||
|
|
114
|
+
!validIdentifier(credential.sessionId) ||
|
|
115
|
+
!validSecret(credential.sessionSecret)
|
|
116
|
+
) {
|
|
117
|
+
return null
|
|
118
|
+
}
|
|
119
|
+
const now = this.currentTime()
|
|
120
|
+
const tokenHash = sha256(credential.sessionSecret)
|
|
121
|
+
|
|
122
|
+
const result = await this.host.storage.transaction(async (tx) => {
|
|
123
|
+
const sessions = requireSessions(tx)
|
|
124
|
+
const current = await sessions.getById({
|
|
125
|
+
projectId: this.host.projectId,
|
|
126
|
+
id: credential.sessionId,
|
|
127
|
+
})
|
|
128
|
+
const secretMatches = secretMatchesHash(credential.sessionSecret, current?.tokenHash ?? "")
|
|
129
|
+
if (
|
|
130
|
+
!current ||
|
|
131
|
+
current.grantId !== grantId ||
|
|
132
|
+
current.revokedAt !== undefined ||
|
|
133
|
+
current.expiresAt.getTime() <= now.getTime() ||
|
|
134
|
+
current.absoluteExpiresAt.getTime() <= now.getTime() ||
|
|
135
|
+
!secretMatches
|
|
136
|
+
) {
|
|
137
|
+
return null
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const grant = await activeGrant(tx, this.host.projectId, grantId, now)
|
|
141
|
+
if (!grant || current.absoluteExpiresAt.getTime() !== grant.expiresAt.getTime()) {
|
|
142
|
+
return null
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (options.activity !== "foreground") return { grant, session: current }
|
|
146
|
+
|
|
147
|
+
const renewed = await sessions.renewIfValid({
|
|
148
|
+
projectId: this.host.projectId,
|
|
149
|
+
id: current.id,
|
|
150
|
+
grantId,
|
|
151
|
+
tokenHash,
|
|
152
|
+
now,
|
|
153
|
+
expiresAt: inactivityDeadline(now, current.absoluteExpiresAt, this.inactivityTtlMs),
|
|
154
|
+
})
|
|
155
|
+
return renewed ? { grant, session: renewed } : null
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
return result ? this.context(result.grant, result.session) : null
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async revoke(context: Pick<SharedSessionContext, "grantId" | "sessionId">): Promise<void> {
|
|
162
|
+
const revokedAt = this.currentTime()
|
|
163
|
+
await this.host.storage.transaction(async (tx) => {
|
|
164
|
+
const session = await requireSessions(tx).getById({
|
|
165
|
+
projectId: this.host.projectId,
|
|
166
|
+
id: context.sessionId,
|
|
167
|
+
})
|
|
168
|
+
if (!session || session.grantId !== context.grantId) return
|
|
169
|
+
await requireSessions(tx).revoke({
|
|
170
|
+
projectId: this.host.projectId,
|
|
171
|
+
id: context.sessionId,
|
|
172
|
+
revokedAt,
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private context(grant: ShareGrantRecord, session: ShareSessionRecord): SharedSessionContext {
|
|
178
|
+
return {
|
|
179
|
+
grantId: grant.id,
|
|
180
|
+
sessionId: session.id,
|
|
181
|
+
destinationPath: grant.destinationPath,
|
|
182
|
+
access: effectiveAccess(this.host, grant),
|
|
183
|
+
expiresAt: new Date(session.expiresAt),
|
|
184
|
+
absoluteExpiresAt: new Date(session.absoluteExpiresAt),
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private currentTime(): Date {
|
|
189
|
+
const now = this.now()
|
|
190
|
+
if (!(now instanceof Date) || !Number.isFinite(now.getTime())) {
|
|
191
|
+
throw new Error("[Sixb] Shared session clock returned an invalid date.")
|
|
192
|
+
}
|
|
193
|
+
return new Date(now)
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function effectiveAccess(host: SixbHostView, grant: ShareGrantRecord): ShareAccessPlan {
|
|
198
|
+
const definition = host.definitions.shares.getById(grant.definitionId)
|
|
199
|
+
if (!definition || definition.target.objectTypeId !== grant.target.objectTypeId) {
|
|
200
|
+
return snapshotShareAccessPlan({ grants: [] })
|
|
201
|
+
}
|
|
202
|
+
const current = compileShareAccessPlan({
|
|
203
|
+
share: definition,
|
|
204
|
+
target: grant.target,
|
|
205
|
+
ontology: host.definitions.ontology,
|
|
206
|
+
actions: host.definitions.actions,
|
|
207
|
+
})
|
|
208
|
+
return intersectShareAccessPlans(grant.authoritySnapshot.access, current)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
async function activeGrant(
|
|
212
|
+
storage: Storage,
|
|
213
|
+
projectId: string,
|
|
214
|
+
grantId: string,
|
|
215
|
+
now: Date
|
|
216
|
+
): Promise<ShareGrantRecord | null> {
|
|
217
|
+
const grant = await storage.shareGrants?.getById({ projectId, id: grantId })
|
|
218
|
+
return !grant || grant.revokedAt !== undefined || grant.expiresAt.getTime() <= now.getTime()
|
|
219
|
+
? null
|
|
220
|
+
: grant
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function requireSessions(storage: Storage): NonNullable<Storage["shareSessions"]> {
|
|
224
|
+
if (!storage.shareSessions) {
|
|
225
|
+
throw new Error("[Sixb] Shared session storage is not configured.")
|
|
226
|
+
}
|
|
227
|
+
return storage.shareSessions
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function inactivityDeadline(now: Date, absolute: Date, ttlMs: number): Date {
|
|
231
|
+
return new Date(Math.min(absolute.getTime(), now.getTime() + ttlMs))
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function secretMatchesHash(secret: string, expectedHash: string): boolean {
|
|
235
|
+
const actual = createHash("sha256").update(secret).digest()
|
|
236
|
+
const expected = /^[0-9a-f]{64}$/.test(expectedHash)
|
|
237
|
+
? Buffer.from(expectedHash, "hex")
|
|
238
|
+
: Buffer.alloc(actual.length)
|
|
239
|
+
return timingSafeEqual(actual, expected)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function sha256(value: string): string {
|
|
243
|
+
return createHash("sha256").update(value).digest("hex")
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function validIdentifier(value: unknown): value is string {
|
|
247
|
+
return (
|
|
248
|
+
typeof value === "string" && value.length > 0 && value.length <= 128 && value.trim() === value
|
|
249
|
+
)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function validSecret(value: unknown): value is string {
|
|
253
|
+
return typeof value === "string" && SECRET_PATTERN.test(value)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function validCookieValue(value: unknown): value is string {
|
|
257
|
+
return typeof value === "string" && value.length <= 256
|
|
258
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { ObjectActionDefinition } from "../actions"
|
|
2
|
+
import type {
|
|
3
|
+
LinkPathSelectionInput,
|
|
4
|
+
LinkPathSelectionMode,
|
|
5
|
+
ObjectTypeWithPropertyTokens,
|
|
6
|
+
} from "../ontology"
|
|
7
|
+
|
|
8
|
+
declare const shareTargetBrand: unique symbol
|
|
9
|
+
|
|
10
|
+
/** Contextual placeholder for the one exact object supplied when a Share is issued. */
|
|
11
|
+
export interface ShareTarget<TObjectTypeId extends string = string> {
|
|
12
|
+
readonly [shareTargetBrand]: true
|
|
13
|
+
readonly objectTypeId: TObjectTypeId
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ShareViewGrant<TObjectTypeId extends string = string> {
|
|
17
|
+
readonly kind: "object.view"
|
|
18
|
+
readonly targetObjectTypeId: TObjectTypeId
|
|
19
|
+
readonly links: LinkPathSelectionMode
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ShareViewGrantBuilder<TObjectTypeId extends string = string>
|
|
23
|
+
extends ShareViewGrant<TObjectTypeId> {
|
|
24
|
+
/** Include every direct link present when a grant is issued. Nested links remain excluded. */
|
|
25
|
+
withLinks(): ShareViewGrant<TObjectTypeId>
|
|
26
|
+
/** Include only these link paths. Use a bare link token when it has no nested links. */
|
|
27
|
+
withLinks<const TLinks extends readonly LinkPathSelectionInput<TObjectTypeId>[]>(
|
|
28
|
+
links: TLinks
|
|
29
|
+
): ShareViewGrant<TObjectTypeId>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface ShareActionGrant<
|
|
33
|
+
TActionId extends string = string,
|
|
34
|
+
TObjectTypeId extends string = string,
|
|
35
|
+
> {
|
|
36
|
+
readonly kind: "action.apply"
|
|
37
|
+
readonly actionId: TActionId
|
|
38
|
+
readonly subjectObjectTypeId: TObjectTypeId
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ShareActionGrantBuilder<
|
|
42
|
+
TAction extends ObjectActionDefinition = ObjectActionDefinition,
|
|
43
|
+
> {
|
|
44
|
+
on(
|
|
45
|
+
target: ShareTarget<TAction["binding"]["objectType"]["id"]>
|
|
46
|
+
): ShareActionGrant<TAction["id"], TAction["binding"]["objectType"]["id"]>
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type ShareScopeGrant = ShareViewGrant | ShareActionGrant
|
|
50
|
+
|
|
51
|
+
export interface ShareDefinition<
|
|
52
|
+
TId extends string = string,
|
|
53
|
+
TTargetObjectTypeId extends string = string,
|
|
54
|
+
> {
|
|
55
|
+
readonly kind: "share"
|
|
56
|
+
/**
|
|
57
|
+
* Durable authority identity. Removing a definition suspends its grants; reusing the id can make
|
|
58
|
+
* unexpired grants effective again after intersection. Revoke them before permanent removal.
|
|
59
|
+
*/
|
|
60
|
+
readonly id: TId
|
|
61
|
+
readonly target: {
|
|
62
|
+
readonly kind: "object"
|
|
63
|
+
readonly objectTypeId: TTargetObjectTypeId
|
|
64
|
+
}
|
|
65
|
+
readonly grants: readonly ShareScopeGrant[]
|
|
66
|
+
readonly description?: string
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface DefineShareOptions<
|
|
70
|
+
TTarget extends ObjectTypeWithPropertyTokens,
|
|
71
|
+
TGrants extends readonly ShareScopeGrant[],
|
|
72
|
+
> {
|
|
73
|
+
readonly target: TTarget
|
|
74
|
+
readonly grants: (context: { readonly target: ShareTarget<TTarget["id"]> }) => TGrants
|
|
75
|
+
readonly description?: string
|
|
76
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ActionDefinitionCatalog } from "../actions"
|
|
2
|
+
import type { OntologyDefinitionCatalog } from "../ontology"
|
|
3
|
+
import { snapshotShareDefinition } from "./builders"
|
|
4
|
+
import { compileShareAccessPlan } from "./compiler"
|
|
5
|
+
import { ShareDefinitionError } from "./errors"
|
|
6
|
+
import type { ShareDefinition } from "./types"
|
|
7
|
+
|
|
8
|
+
/** Cross-validate discovered Share definitions after ontology and Actions are registered. */
|
|
9
|
+
export function validateSharesAtStartup(input: {
|
|
10
|
+
readonly shares: readonly ShareDefinition[]
|
|
11
|
+
readonly ontology: OntologyDefinitionCatalog
|
|
12
|
+
readonly actions: ActionDefinitionCatalog
|
|
13
|
+
}): ReadonlyMap<string, ShareDefinition> {
|
|
14
|
+
const byId = new Map<string, ShareDefinition>()
|
|
15
|
+
for (const authoredShare of input.shares) {
|
|
16
|
+
const share = snapshotShareDefinition(authoredShare)
|
|
17
|
+
if (byId.has(share.id)) {
|
|
18
|
+
throw invalid(`Duplicate Share id: ${share.id}`)
|
|
19
|
+
}
|
|
20
|
+
compileShareAccessPlan({
|
|
21
|
+
share,
|
|
22
|
+
target: {
|
|
23
|
+
objectTypeId: share.target.objectTypeId,
|
|
24
|
+
primaryId: "__sixb_share_definition_validation__",
|
|
25
|
+
},
|
|
26
|
+
ontology: input.ontology,
|
|
27
|
+
actions: input.actions,
|
|
28
|
+
})
|
|
29
|
+
byId.set(share.id, share)
|
|
30
|
+
}
|
|
31
|
+
return byId
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function assertShareDefinitionEnvelope(value: unknown): asserts value is ShareDefinition {
|
|
35
|
+
snapshotShareDefinition(value)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function invalid(message: string): ShareDefinitionError {
|
|
39
|
+
return new ShareDefinitionError(`[Sixb] ${message}`)
|
|
40
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AuthStorage } from "../auth"
|
|
2
|
+
import type { ShareSessionStorage } from "../share-sessions"
|
|
2
3
|
import { ExecutionStorageError } from "./errors"
|
|
3
4
|
import type { CreateExecutionInput, ExecutionRecord, ExecutionStorage } from "./types"
|
|
4
5
|
import {
|
|
@@ -18,12 +19,17 @@ function executionKey(projectId: string, id: string): string {
|
|
|
18
19
|
export class InMemoryExecutionStorage implements ExecutionStorage {
|
|
19
20
|
private readonly rows = new Map<string, ExecutionRecord>()
|
|
20
21
|
private readonly runRootOperation: RunRootOperation
|
|
22
|
+
private readonly shareSessions?: Pick<ShareSessionStorage, "getById">
|
|
21
23
|
|
|
22
24
|
constructor(
|
|
23
25
|
private readonly auth: AuthStorage,
|
|
24
|
-
input: {
|
|
26
|
+
input: {
|
|
27
|
+
readonly runRootOperation?: RunRootOperation
|
|
28
|
+
readonly shareSessions?: Pick<ShareSessionStorage, "getById">
|
|
29
|
+
} = {}
|
|
25
30
|
) {
|
|
26
31
|
this.runRootOperation = input.runRootOperation ?? runDirectly
|
|
32
|
+
this.shareSessions = input.shareSessions
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
snapshot(): InMemoryExecutionStorageSnapshot {
|
|
@@ -54,6 +60,8 @@ export class InMemoryExecutionStorage implements ExecutionStorage {
|
|
|
54
60
|
const existing = this.rows.get(executionKey(projectId, id))
|
|
55
61
|
return existing ? cloneExecutionRecord(existing) : null
|
|
56
62
|
},
|
|
63
|
+
getShareSession: async ({ projectId, id }) =>
|
|
64
|
+
(await this.shareSessions?.getById({ projectId, id })) ?? null,
|
|
57
65
|
})
|
|
58
66
|
|
|
59
67
|
this.rows.set(key, cloneExecutionRecord(record))
|
|
@@ -22,7 +22,7 @@ export interface ExecutionStorageRow {
|
|
|
22
22
|
readonly correlationId: string
|
|
23
23
|
/** SQL-only projection of an execution source, used to enforce the parent foreign key. */
|
|
24
24
|
readonly parentExecutionId: string | null
|
|
25
|
-
readonly authorityKind: "disabled" | "kernel" | "principal" | "trustedPrimitive"
|
|
25
|
+
readonly authorityKind: "delegated" | "disabled" | "kernel" | "principal" | "trustedPrimitive"
|
|
26
26
|
readonly authorityUserId: string | null
|
|
27
27
|
readonly authorityServiceAccountId: string | null
|
|
28
28
|
readonly authoritySessionId: string | null
|
|
@@ -30,6 +30,9 @@ export interface ExecutionStorageRow {
|
|
|
30
30
|
readonly authorityPrimitiveKind: TrustedPrimitiveKind | null
|
|
31
31
|
readonly authorityPrimitiveId: string | null
|
|
32
32
|
readonly authorityKernelOperation: "ontology.recover" | null
|
|
33
|
+
readonly authorityDelegationKind: "share" | null
|
|
34
|
+
readonly authorityDelegationId: string | null
|
|
35
|
+
readonly authorityDelegationSessionId: string | null
|
|
33
36
|
readonly createdAt: Date
|
|
34
37
|
}
|
|
35
38
|
|
|
@@ -132,6 +135,9 @@ function flattenAuthority(
|
|
|
132
135
|
ExecutionStorageRow,
|
|
133
136
|
| "authorityAccessTokenId"
|
|
134
137
|
| "authorityKernelOperation"
|
|
138
|
+
| "authorityDelegationKind"
|
|
139
|
+
| "authorityDelegationId"
|
|
140
|
+
| "authorityDelegationSessionId"
|
|
135
141
|
| "authorityKind"
|
|
136
142
|
| "authorityPrimitiveId"
|
|
137
143
|
| "authorityPrimitiveKind"
|
|
@@ -147,6 +153,9 @@ function flattenAuthority(
|
|
|
147
153
|
authorityPrimitiveKind: null,
|
|
148
154
|
authorityPrimitiveId: null,
|
|
149
155
|
authorityKernelOperation: null,
|
|
156
|
+
authorityDelegationKind: null,
|
|
157
|
+
authorityDelegationId: null,
|
|
158
|
+
authorityDelegationSessionId: null,
|
|
150
159
|
}
|
|
151
160
|
|
|
152
161
|
switch (record.authorizationRef.type) {
|
|
@@ -178,6 +187,14 @@ function flattenAuthority(
|
|
|
178
187
|
authorityPrimitiveKind: record.authorizationRef.primitive.kind,
|
|
179
188
|
authorityPrimitiveId: record.authorizationRef.primitive.id,
|
|
180
189
|
}
|
|
190
|
+
case "delegated":
|
|
191
|
+
return {
|
|
192
|
+
...empty,
|
|
193
|
+
authorityKind: "delegated",
|
|
194
|
+
authorityDelegationKind: record.authorizationRef.delegation.kind,
|
|
195
|
+
authorityDelegationId: record.authorizationRef.delegation.grantId,
|
|
196
|
+
authorityDelegationSessionId: record.authorizationRef.delegation.sessionId,
|
|
197
|
+
}
|
|
181
198
|
case "kernel":
|
|
182
199
|
return {
|
|
183
200
|
...empty,
|
|
@@ -271,6 +288,18 @@ function inflateAuthority(row: ExecutionStorageRow): CreateExecutionInput["autho
|
|
|
271
288
|
runId: row.executorId,
|
|
272
289
|
},
|
|
273
290
|
}
|
|
291
|
+
case "delegated":
|
|
292
|
+
return {
|
|
293
|
+
type: "delegated",
|
|
294
|
+
delegation: {
|
|
295
|
+
kind: requireValue(row.authorityDelegationKind, "authority delegation kind"),
|
|
296
|
+
grantId: requireValue(row.authorityDelegationId, "authority delegation id"),
|
|
297
|
+
sessionId: requireValue(
|
|
298
|
+
row.authorityDelegationSessionId,
|
|
299
|
+
"authority delegation session id"
|
|
300
|
+
),
|
|
301
|
+
},
|
|
302
|
+
}
|
|
274
303
|
case "kernel":
|
|
275
304
|
return {
|
|
276
305
|
type: "kernel",
|
|
@@ -41,6 +41,35 @@ export async function findPrimitiveRunExecution(input: {
|
|
|
41
41
|
return execution
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/** Resolve the request execution that directly initiated one provider-validated primitive run. */
|
|
45
|
+
export async function findPrimitiveParentRequestExecution(input: {
|
|
46
|
+
readonly executions: ExecutionStorage
|
|
47
|
+
readonly projectId: string
|
|
48
|
+
readonly executionId: string
|
|
49
|
+
readonly primitive: TrustedPrimitiveRef
|
|
50
|
+
}): Promise<ExecutionRecord | null> {
|
|
51
|
+
const child = await findPrimitiveRunExecution({
|
|
52
|
+
...input,
|
|
53
|
+
sourceTypes: ["execution"],
|
|
54
|
+
})
|
|
55
|
+
if (!child || child.source.type !== "execution") return null
|
|
56
|
+
|
|
57
|
+
const parent = await input.executions.getById({
|
|
58
|
+
projectId: input.projectId,
|
|
59
|
+
id: child.source.executionId,
|
|
60
|
+
})
|
|
61
|
+
if (
|
|
62
|
+
!parent ||
|
|
63
|
+
parent.executor.type !== "request" ||
|
|
64
|
+
parent.source.type !== "http" ||
|
|
65
|
+
parent.executor.requestId !== parent.source.requestId ||
|
|
66
|
+
parent.correlationId !== child.correlationId
|
|
67
|
+
) {
|
|
68
|
+
return null
|
|
69
|
+
}
|
|
70
|
+
return parent
|
|
71
|
+
}
|
|
72
|
+
|
|
44
73
|
/** Find the immutable execution and authority owned by one Agent run. */
|
|
45
74
|
export async function findAgentRunExecution(input: {
|
|
46
75
|
readonly executions: ExecutionStorage
|
|
@@ -19,6 +19,10 @@ export interface ExecutionValidationLookup {
|
|
|
19
19
|
readonly projectId: string
|
|
20
20
|
readonly id: string
|
|
21
21
|
}): Promise<ExecutionRecord | null>
|
|
22
|
+
getShareSession(params: {
|
|
23
|
+
readonly projectId: string
|
|
24
|
+
readonly id: string
|
|
25
|
+
}): Promise<{ readonly grantId: string } | null>
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
export function normalizeExecutionRecord(
|
|
@@ -56,6 +60,9 @@ export async function validateExecutionRecordReferences(
|
|
|
56
60
|
)
|
|
57
61
|
await validateCredential(record, lookup)
|
|
58
62
|
}
|
|
63
|
+
if (record.authorizationRef.type === "delegated") {
|
|
64
|
+
await validateDelegation(record, lookup)
|
|
65
|
+
}
|
|
59
66
|
|
|
60
67
|
await validateParent(record, lookup)
|
|
61
68
|
}
|
|
@@ -145,6 +152,17 @@ function assertAuthorizationRef(ref: AuthorizationRef): void {
|
|
|
145
152
|
assertNonBlank(ref.primitive.id, "Authority primitive id")
|
|
146
153
|
assertNonBlank(ref.primitive.runId, "Authority primitive run id")
|
|
147
154
|
return
|
|
155
|
+
case "delegated":
|
|
156
|
+
if (ref.delegation.kind !== "share") {
|
|
157
|
+
invalid(
|
|
158
|
+
`Unknown authority delegation kind '${String(
|
|
159
|
+
(ref.delegation as { kind?: unknown }).kind
|
|
160
|
+
)}'.`
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
assertNonBlank(ref.delegation.grantId, "Authority delegation grant id")
|
|
164
|
+
assertNonBlank(ref.delegation.sessionId, "Authority delegation session id")
|
|
165
|
+
return
|
|
148
166
|
case "kernel":
|
|
149
167
|
assertKernelOperation(ref.operation, "Authority kernel operation")
|
|
150
168
|
return
|
|
@@ -175,7 +193,13 @@ function assertExecutorAuthority(record: ExecutionRecord): void {
|
|
|
175
193
|
}
|
|
176
194
|
return
|
|
177
195
|
}
|
|
178
|
-
|
|
196
|
+
if (authorizationRef.type === "delegated") {
|
|
197
|
+
if (requestedBy !== undefined) {
|
|
198
|
+
invalid("Delegated request executions cannot have a requested-by principal.")
|
|
199
|
+
}
|
|
200
|
+
return
|
|
201
|
+
}
|
|
202
|
+
invalid("Request executions require principal, delegated, or explicitly disabled authority.")
|
|
179
203
|
break
|
|
180
204
|
}
|
|
181
205
|
case "primitive": {
|
|
@@ -294,6 +318,27 @@ async function validateCredential(
|
|
|
294
318
|
}
|
|
295
319
|
}
|
|
296
320
|
|
|
321
|
+
async function validateDelegation(
|
|
322
|
+
record: ExecutionRecord,
|
|
323
|
+
lookup: ExecutionValidationLookup
|
|
324
|
+
): Promise<void> {
|
|
325
|
+
if (record.authorizationRef.type !== "delegated") return
|
|
326
|
+
const { grantId, sessionId } = record.authorizationRef.delegation
|
|
327
|
+
const session = await lookup.getShareSession({ projectId: record.projectId, id: sessionId })
|
|
328
|
+
if (!session) {
|
|
329
|
+
throw new ExecutionStorageError(
|
|
330
|
+
"missing_credential",
|
|
331
|
+
`[Sixb] Authority shared session '${sessionId}' does not exist in project '${record.projectId}'.`
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
if (session.grantId !== grantId) {
|
|
335
|
+
throw new ExecutionStorageError(
|
|
336
|
+
"invalid_credential",
|
|
337
|
+
`[Sixb] Authority shared session '${sessionId}' does not belong to grant '${grantId}'.`
|
|
338
|
+
)
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
297
342
|
async function validateParent(
|
|
298
343
|
record: ExecutionRecord,
|
|
299
344
|
lookup: ExecutionValidationLookup
|
|
@@ -21,6 +21,7 @@ import { ProviderMaterializationTransactionLifecycle } from "../ontology/provide
|
|
|
21
21
|
import {
|
|
22
22
|
createAgentOperationScope,
|
|
23
23
|
createAuthOperationScope,
|
|
24
|
+
createObjectOperationScope,
|
|
24
25
|
createOntologyOperationScope,
|
|
25
26
|
createOperationScopedFacade,
|
|
26
27
|
createStorageOperationScope,
|
|
@@ -29,6 +30,8 @@ import {
|
|
|
29
30
|
import { InMemoryPipelineRunStorage, type PipelineRunStorage } from "../pipeline-runs"
|
|
30
31
|
import { InMemoryProjectionRunStorage } from "../projection-runs"
|
|
31
32
|
import { InMemoryRulesStorage, type RulesStorage } from "../rules"
|
|
33
|
+
import { InMemoryShareGrantStorage, type ShareGrantStorage } from "../share-grants"
|
|
34
|
+
import { InMemoryShareSessionStorage, type ShareSessionStorage } from "../share-sessions"
|
|
32
35
|
import { InMemorySyncRunStorage, type SyncRunStorage } from "../sync-runs"
|
|
33
36
|
import type { TimeseriesStorage } from "../timeseries"
|
|
34
37
|
import { InMemoryTimeseriesStorage } from "../timeseries/store"
|
|
@@ -66,7 +69,11 @@ export class InMemoryStorage implements Storage {
|
|
|
66
69
|
private readonly timeseriesStorage = new InMemoryTimeseriesStorage()
|
|
67
70
|
private readonly ontologyStorage: InMemoryOntologyStorage
|
|
68
71
|
private readonly authStorage = new InMemoryAuthStorage()
|
|
69
|
-
private readonly
|
|
72
|
+
private readonly shareGrantStorage = new InMemoryShareGrantStorage()
|
|
73
|
+
private readonly shareSessionStorage = new InMemoryShareSessionStorage(this.shareGrantStorage)
|
|
74
|
+
private readonly executionStorage = new InMemoryExecutionStorage(this.authStorage, {
|
|
75
|
+
shareSessions: this.shareSessionStorage,
|
|
76
|
+
})
|
|
70
77
|
private readonly agentStorage = new InMemoryAgentStorage(this.executionStorage)
|
|
71
78
|
private readonly aiUsageStorage = new InMemoryAiUsageStorage(this.executionStorage)
|
|
72
79
|
private readonly aiCostStorage = new InMemoryAiCostStorage(this.aiUsageStorage, {
|
|
@@ -123,6 +130,8 @@ export class InMemoryStorage implements Storage {
|
|
|
123
130
|
readonly workflowInterventions: WorkflowInterventionStorage
|
|
124
131
|
readonly webhookRuns: WebhookRunStorage
|
|
125
132
|
readonly rules: RulesStorage
|
|
133
|
+
readonly shareGrants: ShareGrantStorage
|
|
134
|
+
readonly shareSessions: ShareSessionStorage
|
|
126
135
|
readonly fileUploadSessions: FileUploadSessionStore
|
|
127
136
|
readonly connectorConnections: ConnectorConnectionStorage
|
|
128
137
|
|
|
@@ -134,7 +143,7 @@ export class InMemoryStorage implements Storage {
|
|
|
134
143
|
(run) => this.withStorageOperation(run),
|
|
135
144
|
() => this.assertRootOperationAvailable()
|
|
136
145
|
)
|
|
137
|
-
this.objects =
|
|
146
|
+
this.objects = createObjectOperationScope(this.objectStorage, scope)
|
|
138
147
|
this.timeseries = createOperationScopedFacade(this.timeseriesStorage, scope)
|
|
139
148
|
this.auth = createAuthOperationScope(this.authStorage, scope)
|
|
140
149
|
this.executions = createOperationScopedFacade(this.executionStorage, scope)
|
|
@@ -153,6 +162,8 @@ export class InMemoryStorage implements Storage {
|
|
|
153
162
|
)
|
|
154
163
|
this.webhookRuns = createOperationScopedFacade(this.webhookRunStorage, scope)
|
|
155
164
|
this.rules = createOperationScopedFacade(this.rulesStorage, scope)
|
|
165
|
+
this.shareGrants = createOperationScopedFacade(this.shareGrantStorage, scope)
|
|
166
|
+
this.shareSessions = createOperationScopedFacade(this.shareSessionStorage, scope)
|
|
156
167
|
this.fileUploadSessions = createOperationScopedFacade(this.fileUploadSessionStorage, scope)
|
|
157
168
|
this.connectorConnections = createOperationScopedFacade(this.connectorConnectionStorage, scope)
|
|
158
169
|
this.ontologyStorage = new InMemoryOntologyStorage(this.objectStorage, this.timeseriesStorage, {
|
|
@@ -346,6 +357,8 @@ export class InMemoryStorage implements Storage {
|
|
|
346
357
|
workflowInterventions: this.workflowInterventionStorage,
|
|
347
358
|
webhookRuns: this.webhookRunStorage,
|
|
348
359
|
rules: this.rulesStorage,
|
|
360
|
+
shareGrants: this.shareGrantStorage,
|
|
361
|
+
shareSessions: this.shareSessionStorage,
|
|
349
362
|
fileUploadSessions: this.fileUploadSessionStorage,
|
|
350
363
|
connectorConnections: this.connectorConnectionStorage,
|
|
351
364
|
ping: async () => undefined,
|
|
@@ -374,6 +387,8 @@ export class InMemoryStorage implements Storage {
|
|
|
374
387
|
workflowInterventions: this.workflowInterventionStorage.snapshot(),
|
|
375
388
|
webhookRuns: this.webhookRunStorage.snapshot(),
|
|
376
389
|
rules: this.rulesStorage.snapshot(),
|
|
390
|
+
shareGrants: this.shareGrantStorage.snapshot(),
|
|
391
|
+
shareSessions: this.shareSessionStorage.snapshot(),
|
|
377
392
|
fileUploadSessions: this.fileUploadSessionStorage.snapshot(),
|
|
378
393
|
connectorConnections: this.connectorConnectionStorage.snapshot(),
|
|
379
394
|
}
|
|
@@ -397,6 +412,8 @@ export class InMemoryStorage implements Storage {
|
|
|
397
412
|
this.workflowInterventionStorage.restore(snapshot.workflowInterventions)
|
|
398
413
|
this.webhookRunStorage.restore(snapshot.webhookRuns)
|
|
399
414
|
this.rulesStorage.restore(snapshot.rules)
|
|
415
|
+
this.shareGrantStorage.restore(snapshot.shareGrants)
|
|
416
|
+
this.shareSessionStorage.restore(snapshot.shareSessions)
|
|
400
417
|
this.fileUploadSessionStorage.restore(snapshot.fileUploadSessions)
|
|
401
418
|
this.connectorConnectionStorage.restore(snapshot.connectorConnections)
|
|
402
419
|
}
|
|
@@ -420,6 +437,8 @@ export interface InMemoryStorageSnapshot {
|
|
|
420
437
|
readonly workflowInterventions: ReturnType<InMemoryWorkflowInterventionStorage["snapshot"]>
|
|
421
438
|
readonly webhookRuns: ReturnType<InMemoryWebhookRunStorage["snapshot"]>
|
|
422
439
|
readonly rules: ReturnType<InMemoryRulesStorage["snapshot"]>
|
|
440
|
+
readonly shareGrants: ReturnType<InMemoryShareGrantStorage["snapshot"]>
|
|
441
|
+
readonly shareSessions: ReturnType<InMemoryShareSessionStorage["snapshot"]>
|
|
423
442
|
readonly fileUploadSessions: ReturnType<InMemoryFileUploadSessions["snapshot"]>
|
|
424
443
|
readonly connectorConnections: ReturnType<InMemoryConnectorConnectionStorage["snapshot"]>
|
|
425
444
|
}
|