@stigmer/server 3.40.0 → 3.41.0
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/authorization/authorizer.d.ts +16 -10
- package/dist/authorization/authorizer.d.ts.map +1 -1
- package/dist/authorization/authorizer.js +17 -9
- package/dist/authorization/authorizer.js.map +1 -1
- package/dist/authorization/derived-tuples.d.ts +7 -3
- package/dist/authorization/derived-tuples.d.ts.map +1 -1
- package/dist/authorization/derived-tuples.js +62 -6
- package/dist/authorization/derived-tuples.js.map +1 -1
- package/dist/authorization/evaluator.d.ts +11 -7
- package/dist/authorization/evaluator.d.ts.map +1 -1
- package/dist/authorization/evaluator.js +16 -10
- package/dist/authorization/evaluator.js.map +1 -1
- package/dist/authorization/list-read-scope.d.ts +4 -0
- package/dist/authorization/list-read-scope.d.ts.map +1 -1
- package/dist/authorization/list-read-scope.js +1 -0
- package/dist/authorization/list-read-scope.js.map +1 -1
- package/dist/authorization/model/data/authorization-model.json +830 -67
- package/dist/authorization/model/execution-viewer.d.ts.map +1 -1
- package/dist/authorization/model/execution-viewer.js +26 -24
- package/dist/authorization/model/execution-viewer.js.map +1 -1
- package/dist/authorization/model/index.d.ts +4 -1
- package/dist/authorization/model/index.d.ts.map +1 -1
- package/dist/authorization/model/index.js +4 -1
- package/dist/authorization/model/index.js.map +1 -1
- package/dist/authorization/model/rewrite.d.ts +5 -3
- package/dist/authorization/model/rewrite.d.ts.map +1 -1
- package/dist/authorization/organization-directory.d.ts +44 -0
- package/dist/authorization/organization-directory.d.ts.map +1 -1
- package/dist/authorization/organization-directory.js +1 -0
- package/dist/authorization/organization-directory.js.map +1 -1
- package/dist/authorization/person.d.ts +14 -1
- package/dist/authorization/person.d.ts.map +1 -1
- package/dist/authorization/person.js +16 -0
- package/dist/authorization/person.js.map +1 -1
- package/dist/authorization/policy-check.d.ts +52 -0
- package/dist/authorization/policy-check.d.ts.map +1 -0
- package/dist/authorization/policy-check.js +35 -0
- package/dist/authorization/policy-check.js.map +1 -0
- package/dist/authorization/posture.d.ts +30 -4
- package/dist/authorization/posture.d.ts.map +1 -1
- package/dist/authorization/posture.js +58 -0
- package/dist/authorization/posture.js.map +1 -1
- package/dist/authorization/resource-creators.d.ts +4 -0
- package/dist/authorization/resource-creators.d.ts.map +1 -0
- package/dist/authorization/resource-creators.js +44 -0
- package/dist/authorization/resource-creators.js.map +1 -0
- package/dist/authorization/trusted-local-authorizer.d.ts +9 -0
- package/dist/authorization/trusted-local-authorizer.d.ts.map +1 -0
- package/dist/authorization/trusted-local-authorizer.js +70 -0
- package/dist/authorization/trusted-local-authorizer.js.map +1 -0
- package/dist/authorization/tuples.d.ts +12 -0
- package/dist/authorization/tuples.d.ts.map +1 -1
- package/dist/authorization/tuples.js +3 -0
- package/dist/authorization/tuples.js.map +1 -1
- package/dist/boot/compose.d.ts.map +1 -1
- package/dist/boot/compose.js +133 -43
- package/dist/boot/compose.js.map +1 -1
- package/dist/boot/config.d.ts +22 -7
- package/dist/boot/config.d.ts.map +1 -1
- package/dist/boot/config.js +2 -1
- package/dist/boot/config.js.map +1 -1
- package/dist/boot/inprocess.d.ts.map +1 -1
- package/dist/boot/inprocess.js +10 -4
- package/dist/boot/inprocess.js.map +1 -1
- package/dist/boot/list-indexes.d.ts.map +1 -1
- package/dist/boot/list-indexes.js +6 -1
- package/dist/boot/list-indexes.js.map +1 -1
- package/dist/boot/logger.d.ts +3 -1
- package/dist/boot/logger.d.ts.map +1 -1
- package/dist/boot/logger.js +3 -1
- package/dist/boot/logger.js.map +1 -1
- package/dist/boot/oauth-redirect-uri.d.ts +33 -12
- package/dist/boot/oauth-redirect-uri.d.ts.map +1 -1
- package/dist/boot/oauth-redirect-uri.js +43 -14
- package/dist/boot/oauth-redirect-uri.js.map +1 -1
- package/dist/boot/skill-transfer-origin.d.ts +46 -14
- package/dist/boot/skill-transfer-origin.d.ts.map +1 -1
- package/dist/boot/skill-transfer-origin.js +53 -13
- package/dist/boot/skill-transfer-origin.js.map +1 -1
- package/dist/domain/agentchannel/steps.d.ts +8 -6
- package/dist/domain/agentchannel/steps.d.ts.map +1 -1
- package/dist/domain/agentchannel/steps.js +9 -7
- package/dist/domain/agentchannel/steps.js.map +1 -1
- package/dist/domain/agentexecution/controller.d.ts +7 -0
- package/dist/domain/agentexecution/controller.d.ts.map +1 -1
- package/dist/domain/agentexecution/controller.js +1 -1
- package/dist/domain/agentexecution/controller.js.map +1 -1
- package/dist/domain/agentexecution/create-steps.d.ts +26 -12
- package/dist/domain/agentexecution/create-steps.d.ts.map +1 -1
- package/dist/domain/agentexecution/create-steps.js +61 -43
- package/dist/domain/agentexecution/create-steps.js.map +1 -1
- package/dist/domain/agentexecution/submit-approval.d.ts.map +1 -1
- package/dist/domain/agentexecution/submit-approval.js +9 -6
- package/dist/domain/agentexecution/submit-approval.js.map +1 -1
- package/dist/domain/agentexecution/submit-file-decision.d.ts.map +1 -1
- package/dist/domain/agentexecution/submit-file-decision.js +5 -4
- package/dist/domain/agentexecution/submit-file-decision.js.map +1 -1
- package/dist/domain/agentshare/steps.d.ts +5 -3
- package/dist/domain/agentshare/steps.d.ts.map +1 -1
- package/dist/domain/agentshare/steps.js +6 -4
- package/dist/domain/agentshare/steps.js.map +1 -1
- package/dist/domain/apikey/verifier.d.ts +7 -0
- package/dist/domain/apikey/verifier.d.ts.map +1 -1
- package/dist/domain/apikey/verifier.js +34 -1
- package/dist/domain/apikey/verifier.js.map +1 -1
- package/dist/domain/channelapp/controller.d.ts +9 -4
- package/dist/domain/channelapp/controller.d.ts.map +1 -1
- package/dist/domain/channelapp/controller.js +19 -9
- package/dist/domain/channelapp/controller.js.map +1 -1
- package/dist/domain/executioncontext/steps.d.ts +2 -1
- package/dist/domain/executioncontext/steps.d.ts.map +1 -1
- package/dist/domain/executioncontext/steps.js +2 -1
- package/dist/domain/executioncontext/steps.js.map +1 -1
- package/dist/domain/iampolicy/access-lists.d.ts.map +1 -1
- package/dist/domain/iampolicy/access-lists.js +57 -2
- package/dist/domain/iampolicy/access-lists.js.map +1 -1
- package/dist/domain/iampolicy/change.d.ts +53 -0
- package/dist/domain/iampolicy/change.d.ts.map +1 -0
- package/dist/domain/iampolicy/change.js +44 -0
- package/dist/domain/iampolicy/change.js.map +1 -0
- package/dist/domain/iampolicy/constants.d.ts +6 -0
- package/dist/domain/iampolicy/constants.d.ts.map +1 -1
- package/dist/domain/iampolicy/constants.js +6 -0
- package/dist/domain/iampolicy/constants.js.map +1 -1
- package/dist/domain/iampolicy/controller.d.ts.map +1 -1
- package/dist/domain/iampolicy/controller.js +9 -5
- package/dist/domain/iampolicy/controller.js.map +1 -1
- package/dist/domain/iampolicy/grant-path.d.ts +31 -13
- package/dist/domain/iampolicy/grant-path.d.ts.map +1 -1
- package/dist/domain/iampolicy/grant-path.js +216 -19
- package/dist/domain/iampolicy/grant-path.js.map +1 -1
- package/dist/domain/iampolicy/membership.d.ts +11 -3
- package/dist/domain/iampolicy/membership.d.ts.map +1 -1
- package/dist/domain/iampolicy/membership.js +18 -13
- package/dist/domain/iampolicy/membership.js.map +1 -1
- package/dist/domain/iampolicy/resource-store.d.ts.map +1 -1
- package/dist/domain/iampolicy/resource-store.js +4 -0
- package/dist/domain/iampolicy/resource-store.js.map +1 -1
- package/dist/domain/iampolicy/role-lifecycle.d.ts.map +1 -1
- package/dist/domain/iampolicy/role-lifecycle.js +2 -2
- package/dist/domain/iampolicy/role-lifecycle.js.map +1 -1
- package/dist/domain/iampolicy/roles.d.ts.map +1 -1
- package/dist/domain/iampolicy/roles.js +7 -0
- package/dist/domain/iampolicy/roles.js.map +1 -1
- package/dist/domain/iampolicy/steps.d.ts +4 -3
- package/dist/domain/iampolicy/steps.d.ts.map +1 -1
- package/dist/domain/iampolicy/steps.js +7 -7
- package/dist/domain/iampolicy/steps.js.map +1 -1
- package/dist/domain/iampolicy/store-contract.d.ts.map +1 -1
- package/dist/domain/iampolicy/store-contract.js +22 -1
- package/dist/domain/iampolicy/store-contract.js.map +1 -1
- package/dist/domain/iampolicy/store.d.ts +18 -5
- package/dist/domain/iampolicy/store.d.ts.map +1 -1
- package/dist/domain/iampolicy/store.js.map +1 -1
- package/dist/domain/identityaccount/constants.d.ts +15 -0
- package/dist/domain/identityaccount/constants.d.ts.map +1 -1
- package/dist/domain/identityaccount/constants.js +17 -0
- package/dist/domain/identityaccount/constants.js.map +1 -1
- package/dist/domain/identityaccount/controller.d.ts.map +1 -1
- package/dist/domain/identityaccount/controller.js +17 -6
- package/dist/domain/identityaccount/controller.js.map +1 -1
- package/dist/domain/identityaccount/resolve.d.ts +47 -0
- package/dist/domain/identityaccount/resolve.d.ts.map +1 -1
- package/dist/domain/identityaccount/resolve.js +38 -1
- package/dist/domain/identityaccount/resolve.js.map +1 -1
- package/dist/domain/identityaccount/resource-store.d.ts.map +1 -1
- package/dist/domain/identityaccount/resource-store.js +11 -1
- package/dist/domain/identityaccount/resource-store.js.map +1 -1
- package/dist/domain/identityaccount/steps.d.ts +2 -1
- package/dist/domain/identityaccount/steps.d.ts.map +1 -1
- package/dist/domain/identityaccount/steps.js +4 -3
- package/dist/domain/identityaccount/steps.js.map +1 -1
- package/dist/domain/identityaccount/store-contract.js +2 -2
- package/dist/domain/identityaccount/store-contract.js.map +1 -1
- package/dist/domain/identityaccount/store.d.ts +6 -1
- package/dist/domain/identityaccount/store.d.ts.map +1 -1
- package/dist/domain/mcpserver/connect-sandbox.d.ts +67 -0
- package/dist/domain/mcpserver/connect-sandbox.d.ts.map +1 -0
- package/dist/domain/mcpserver/connect-sandbox.js +64 -0
- package/dist/domain/mcpserver/connect-sandbox.js.map +1 -0
- package/dist/domain/mcpserver/connect.d.ts +42 -10
- package/dist/domain/mcpserver/connect.d.ts.map +1 -1
- package/dist/domain/mcpserver/connect.js +147 -40
- package/dist/domain/mcpserver/connect.js.map +1 -1
- package/dist/domain/mcpserver/controller.js +4 -2
- package/dist/domain/mcpserver/controller.js.map +1 -1
- package/dist/domain/mcpserver/engine.d.ts +26 -7
- package/dist/domain/mcpserver/engine.d.ts.map +1 -1
- package/dist/domain/mcpserver/engine.js.map +1 -1
- package/dist/domain/mcpserver/start-connect.d.ts +5 -0
- package/dist/domain/mcpserver/start-connect.d.ts.map +1 -1
- package/dist/domain/mcpserver/start-connect.js +38 -15
- package/dist/domain/mcpserver/start-connect.js.map +1 -1
- package/dist/domain/memory/controller.js +2 -1
- package/dist/domain/memory/controller.js.map +1 -1
- package/dist/domain/memory/list-index.d.ts +2 -0
- package/dist/domain/memory/list-index.d.ts.map +1 -0
- package/dist/domain/memory/list-index.js +31 -0
- package/dist/domain/memory/list-index.js.map +1 -0
- package/dist/domain/memory/queries.d.ts +10 -0
- package/dist/domain/memory/queries.d.ts.map +1 -0
- package/dist/domain/memory/queries.js +54 -0
- package/dist/domain/memory/queries.js.map +1 -0
- package/dist/domain/memory/steps.d.ts +13 -11
- package/dist/domain/memory/steps.d.ts.map +1 -1
- package/dist/domain/memory/steps.js +26 -57
- package/dist/domain/memory/steps.js.map +1 -1
- package/dist/domain/organization/steps.d.ts.map +1 -1
- package/dist/domain/organization/steps.js +1 -1
- package/dist/domain/organization/steps.js.map +1 -1
- package/dist/domain/platformclient/mint.d.ts.map +1 -1
- package/dist/domain/platformclient/mint.js +2 -2
- package/dist/domain/platformclient/mint.js.map +1 -1
- package/dist/domain/platformclient/verifier.d.ts.map +1 -1
- package/dist/domain/platformclient/verifier.js +6 -3
- package/dist/domain/platformclient/verifier.js.map +1 -1
- package/dist/domain/plugin/push.d.ts.map +1 -1
- package/dist/domain/plugin/push.js +1 -0
- package/dist/domain/plugin/push.js.map +1 -1
- package/dist/domain/schedule/steps.d.ts +3 -1
- package/dist/domain/schedule/steps.d.ts.map +1 -1
- package/dist/domain/schedule/steps.js +3 -1
- package/dist/domain/schedule/steps.js.map +1 -1
- package/dist/domain/skill/push.d.ts.map +1 -1
- package/dist/domain/skill/push.js +1 -0
- package/dist/domain/skill/push.js.map +1 -1
- package/dist/domain/workflow/registry/data/task-kind-registry.json +27 -1
- package/dist/domain/workflowexecution/submit-approval.d.ts +5 -2
- package/dist/domain/workflowexecution/submit-approval.d.ts.map +1 -1
- package/dist/domain/workflowexecution/submit-approval.js +1 -1
- package/dist/domain/workflowexecution/submit-approval.js.map +1 -1
- package/dist/domain/workflowexecution/submit-file-decision.d.ts +5 -2
- package/dist/domain/workflowexecution/submit-file-decision.d.ts.map +1 -1
- package/dist/domain/workflowexecution/submit-file-decision.js +1 -1
- package/dist/domain/workflowexecution/submit-file-decision.js.map +1 -1
- package/dist/domain/workflowexecution/submit-workflow-task-approval.d.ts.map +1 -1
- package/dist/domain/workflowexecution/submit-workflow-task-approval.js +12 -1
- package/dist/domain/workflowexecution/submit-workflow-task-approval.js.map +1 -1
- package/dist/domain/workflowinstance/controller.d.ts +6 -3
- package/dist/domain/workflowinstance/controller.d.ts.map +1 -1
- package/dist/domain/workflowinstance/controller.js +12 -7
- package/dist/domain/workflowinstance/controller.js.map +1 -1
- package/dist/domain/workflowinstance/steps.d.ts +31 -0
- package/dist/domain/workflowinstance/steps.d.ts.map +1 -1
- package/dist/domain/workflowinstance/steps.js +88 -1
- package/dist/domain/workflowinstance/steps.js.map +1 -1
- package/dist/extensions/composed-services.d.ts +56 -0
- package/dist/extensions/composed-services.d.ts.map +1 -0
- package/dist/extensions/composed-services.js +2 -0
- package/dist/extensions/composed-services.js.map +1 -0
- package/dist/extensions/drivers.d.ts +32 -1
- package/dist/extensions/drivers.d.ts.map +1 -1
- package/dist/extensions/identity.d.ts +4 -1
- package/dist/extensions/identity.d.ts.map +1 -1
- package/dist/extensions/identity.js +4 -1
- package/dist/extensions/identity.js.map +1 -1
- package/dist/extensions/registry.d.ts +37 -0
- package/dist/extensions/registry.d.ts.map +1 -1
- package/dist/extensions/registry.js +50 -0
- package/dist/extensions/registry.js.map +1 -1
- package/dist/extensions/resource-authorization.d.ts +78 -0
- package/dist/extensions/resource-authorization.d.ts.map +1 -1
- package/dist/extensions/resource-row-reader.d.ts +43 -0
- package/dist/extensions/resource-row-reader.d.ts.map +1 -0
- package/dist/extensions/resource-row-reader.js +2 -0
- package/dist/extensions/resource-row-reader.js.map +1 -0
- package/dist/extensions/visitor-classifier.d.ts +41 -0
- package/dist/extensions/visitor-classifier.d.ts.map +1 -0
- package/dist/extensions/visitor-classifier.js +2 -0
- package/dist/extensions/visitor-classifier.js.map +1 -0
- package/dist/identity/oidc-userinfo.d.ts +6 -1
- package/dist/identity/oidc-userinfo.d.ts.map +1 -1
- package/dist/identity/oidc-userinfo.js.map +1 -1
- package/dist/identity/oidc-verifier.d.ts.map +1 -1
- package/dist/identity/oidc-verifier.js +37 -8
- package/dist/identity/oidc-verifier.js.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/pipeline/errors.d.ts +8 -0
- package/dist/pipeline/errors.d.ts.map +1 -1
- package/dist/pipeline/errors.js +25 -16
- package/dist/pipeline/errors.js.map +1 -1
- package/dist/pipeline/interceptors/auth.d.ts +17 -9
- package/dist/pipeline/interceptors/auth.d.ts.map +1 -1
- package/dist/pipeline/interceptors/auth.js +17 -9
- package/dist/pipeline/interceptors/auth.js.map +1 -1
- package/dist/pipeline/steps/authorization-tuples.d.ts +23 -1
- package/dist/pipeline/steps/authorization-tuples.d.ts.map +1 -1
- package/dist/pipeline/steps/authorization-tuples.js +42 -0
- package/dist/pipeline/steps/authorization-tuples.js.map +1 -1
- package/dist/pipeline/steps/authorize.d.ts +6 -5
- package/dist/pipeline/steps/authorize.d.ts.map +1 -1
- package/dist/pipeline/steps/authorize.js +6 -5
- package/dist/pipeline/steps/authorize.js.map +1 -1
- package/dist/pipeline/steps/defaults.d.ts +12 -0
- package/dist/pipeline/steps/defaults.d.ts.map +1 -1
- package/dist/pipeline/steps/defaults.js +42 -7
- package/dist/pipeline/steps/defaults.js.map +1 -1
- package/dist/pipeline/steps/guard-memory-capture.d.ts +13 -15
- package/dist/pipeline/steps/guard-memory-capture.d.ts.map +1 -1
- package/dist/pipeline/steps/guard-memory-capture.js +2 -3
- package/dist/pipeline/steps/guard-memory-capture.js.map +1 -1
- package/dist/runnerauth/built-in-runner-credential-provider.d.ts +0 -2
- package/dist/runnerauth/built-in-runner-credential-provider.d.ts.map +1 -1
- package/dist/runnerauth/built-in-runner-credential-provider.js +8 -17
- package/dist/runnerauth/built-in-runner-credential-provider.js.map +1 -1
- package/dist/runnerauth/runner-credential-provider.d.ts +17 -7
- package/dist/runnerauth/runner-credential-provider.d.ts.map +1 -1
- package/dist/runnerauth/runner-credential-provider.js.map +1 -1
- package/dist/sandbox/docker.d.ts.map +1 -1
- package/dist/sandbox/docker.js +3 -0
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/kubernetes.d.ts.map +1 -1
- package/dist/sandbox/kubernetes.js +3 -0
- package/dist/sandbox/kubernetes.js.map +1 -1
- package/dist/sandbox/local-process.d.ts.map +1 -1
- package/dist/sandbox/local-process.js +4 -0
- package/dist/sandbox/local-process.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +18 -6
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/temporal/manager.d.ts +5 -0
- package/dist/temporal/manager.d.ts.map +1 -1
- package/dist/temporal/manager.js +9 -0
- package/dist/temporal/manager.js.map +1 -1
- package/dist/temporal/mcpserver/engine-client.d.ts +2 -2
- package/dist/temporal/mcpserver/engine-client.d.ts.map +1 -1
- package/dist/temporal/mcpserver/engine-client.js +6 -4
- package/dist/temporal/mcpserver/engine-client.js.map +1 -1
- package/dist/temporal/mcpserver/names.d.ts +13 -2
- package/dist/temporal/mcpserver/names.d.ts.map +1 -1
- package/dist/temporal/mcpserver/names.js +15 -2
- package/dist/temporal/mcpserver/names.js.map +1 -1
- package/dist/temporal/sdk-logger.d.ts +74 -0
- package/dist/temporal/sdk-logger.d.ts.map +1 -0
- package/dist/temporal/sdk-logger.js +143 -0
- package/dist/temporal/sdk-logger.js.map +1 -0
- package/package.json +6 -6
- package/src/authorization/README.md +18 -6
- package/src/authorization/__tests__/authorizer.test.ts +5 -1
- package/src/authorization/__tests__/derived-tuples.test.ts +26 -0
- package/src/authorization/__tests__/evaluator.test.ts +4 -0
- package/src/authorization/__tests__/list-read-scope.test.ts +11 -5
- package/src/authorization/__tests__/store-tests.test.ts +3 -1
- package/src/authorization/__tests__/trusted-local-authorizer.test.ts +155 -0
- package/src/authorization/__tests__/unit-owned-kinds.test.ts +420 -0
- package/src/authorization/__tests__/wire-permissions.test.ts +31 -2
- package/src/authorization/authorizer.ts +21 -10
- package/src/authorization/derived-tuples.ts +92 -18
- package/src/authorization/evaluator.ts +30 -15
- package/src/authorization/list-read-scope.ts +4 -0
- package/src/authorization/model/__tests__/registry.test.ts +23 -0
- package/src/authorization/model/data/authorization-model.json +830 -67
- package/src/authorization/model/execution-viewer.ts +32 -27
- package/src/authorization/model/index.ts +4 -1
- package/src/authorization/model/rewrite.ts +5 -3
- package/src/authorization/organization-directory.ts +4 -0
- package/src/authorization/person.ts +32 -1
- package/src/authorization/policy-check.ts +105 -0
- package/src/authorization/posture.ts +45 -4
- package/src/authorization/resource-creators.ts +48 -0
- package/src/authorization/trusted-local-authorizer.ts +91 -0
- package/src/authorization/tuples.ts +17 -0
- package/src/boot/__tests__/compose.test.ts +120 -4
- package/src/boot/__tests__/list-indexes.test.ts +4 -0
- package/src/boot/__tests__/oauth-redirect-uri.test.ts +121 -10
- package/src/boot/__tests__/skill-transfer-origin.test.ts +96 -25
- package/src/boot/compose.ts +154 -61
- package/src/boot/config.ts +28 -12
- package/src/boot/inprocess.ts +18 -4
- package/src/boot/list-indexes.ts +6 -1
- package/src/boot/logger.ts +3 -1
- package/src/boot/oauth-redirect-uri.ts +62 -17
- package/src/boot/skill-transfer-origin.ts +71 -16
- package/src/domain/agent/__tests__/agent.test.ts +42 -1
- package/src/domain/agentchannel/__tests__/agentchannel.test.ts +9 -0
- package/src/domain/agentchannel/__tests__/channel-runtime.test.ts +2 -0
- package/src/domain/agentchannel/__tests__/create-authorization.test.ts +7 -6
- package/src/domain/agentchannel/steps.ts +9 -7
- package/src/domain/agentexecution/__tests__/agentexecution.test.ts +148 -56
- package/src/domain/agentexecution/__tests__/create-steps.test.ts +175 -12
- package/src/domain/agentexecution/__tests__/file-review-seed.ts +91 -0
- package/src/domain/agentexecution/controller.ts +8 -0
- package/src/domain/agentexecution/create-steps.ts +74 -44
- package/src/domain/agentexecution/submit-approval.ts +9 -6
- package/src/domain/agentexecution/submit-file-decision.ts +5 -4
- package/src/domain/agentinstance/__tests__/agentinstance.test.ts +2 -0
- package/src/domain/agentshare/__tests__/agentshare.test.ts +17 -0
- package/src/domain/agentshare/__tests__/create-authorization.test.ts +5 -4
- package/src/domain/agentshare/steps.ts +6 -4
- package/src/domain/apikey/__tests__/verifier.test.ts +73 -1
- package/src/domain/apikey/verifier.ts +45 -1
- package/src/domain/artifact/__tests__/artifact.test.ts +13 -24
- package/src/domain/channelapp/__tests__/channelapp.test.ts +7 -0
- package/src/domain/channelapp/controller.ts +35 -12
- package/src/domain/environment/__tests__/environment.test.ts +13 -0
- package/src/domain/executioncontext/__tests__/executioncontext.test.ts +2 -0
- package/src/domain/executioncontext/steps.ts +2 -1
- package/src/domain/iampolicy/__tests__/access-lists.test.ts +79 -0
- package/src/domain/iampolicy/__tests__/change.test.ts +63 -0
- package/src/domain/iampolicy/__tests__/controller.test.ts +39 -3
- package/src/domain/iampolicy/__tests__/grant-path.test.ts +595 -27
- package/src/domain/iampolicy/__tests__/iampolicy.test.ts +33 -2
- package/src/domain/iampolicy/__tests__/membership.test.ts +47 -5
- package/src/domain/iampolicy/__tests__/resource-store.test.ts +1 -0
- package/src/domain/iampolicy/__tests__/role-lifecycle.test.ts +41 -8
- package/src/domain/iampolicy/__tests__/roles.test.ts +3 -2
- package/src/domain/iampolicy/__tests__/steps.test.ts +75 -6
- package/src/domain/iampolicy/__tests__/support.ts +68 -4
- package/src/domain/iampolicy/access-lists.ts +70 -2
- package/src/domain/iampolicy/change.ts +109 -0
- package/src/domain/iampolicy/constants.ts +8 -0
- package/src/domain/iampolicy/controller.ts +17 -3
- package/src/domain/iampolicy/grant-path.ts +349 -31
- package/src/domain/iampolicy/membership.ts +32 -12
- package/src/domain/iampolicy/resource-store.ts +4 -0
- package/src/domain/iampolicy/role-lifecycle.ts +2 -0
- package/src/domain/iampolicy/roles.ts +8 -0
- package/src/domain/iampolicy/steps.ts +15 -5
- package/src/domain/iampolicy/store-contract.ts +37 -1
- package/src/domain/iampolicy/store.ts +19 -5
- package/src/domain/identityaccount/__tests__/resolve.test.ts +246 -2
- package/src/domain/identityaccount/__tests__/resource-store.test.ts +1 -1
- package/src/domain/identityaccount/constants.ts +20 -0
- package/src/domain/identityaccount/controller.ts +20 -5
- package/src/domain/identityaccount/resolve.ts +80 -1
- package/src/domain/identityaccount/resource-store.ts +14 -1
- package/src/domain/identityaccount/steps.ts +4 -3
- package/src/domain/identityaccount/store-contract.ts +4 -4
- package/src/domain/identityaccount/store.ts +6 -1
- package/src/domain/mcpserver/__tests__/connect-authorization.test.ts +1 -0
- package/src/domain/mcpserver/__tests__/connect.test.ts +358 -15
- package/src/domain/mcpserver/__tests__/mcpserver.test.ts +2 -0
- package/src/domain/mcpserver/__tests__/oauth-handshake.test.ts +2 -0
- package/src/domain/mcpserver/__tests__/store-faults.test.ts +2 -0
- package/src/domain/mcpserver/connect-sandbox.ts +135 -0
- package/src/domain/mcpserver/connect.ts +226 -56
- package/src/domain/mcpserver/controller.ts +8 -2
- package/src/domain/mcpserver/engine.ts +24 -6
- package/src/domain/mcpserver/start-connect.ts +49 -10
- package/src/domain/memory/__tests__/memory.test.ts +92 -22
- package/src/domain/memory/__tests__/queries.test.ts +173 -0
- package/src/domain/memory/controller.ts +2 -1
- package/src/domain/memory/list-index.ts +32 -0
- package/src/domain/memory/queries.ts +72 -0
- package/src/domain/memory/steps.ts +26 -63
- package/src/domain/oauthapp/__tests__/oauthapp.test.ts +14 -0
- package/src/domain/organization/__tests__/support.ts +41 -0
- package/src/domain/organization/steps.ts +1 -0
- package/src/domain/platformclient/mint.ts +6 -2
- package/src/domain/platformclient/verifier.ts +6 -3
- package/src/domain/plugin/__tests__/plugin.test.ts +11 -24
- package/src/domain/plugin/push.ts +1 -0
- package/src/domain/schedule/__tests__/schedule.composed.test.ts +2 -0
- package/src/domain/schedule/steps.ts +3 -1
- package/src/domain/session/__tests__/session.test.ts +2 -0
- package/src/domain/skill/__tests__/skill.test.ts +7 -25
- package/src/domain/skill/push.ts +1 -0
- package/src/domain/workflow/__tests__/workflow.test.ts +2 -0
- package/src/domain/workflow/registry/data/task-kind-registry.json +27 -1
- package/src/domain/workflowexecution/__tests__/forward-attribution-composed.test.ts +270 -0
- package/src/domain/workflowexecution/__tests__/submit-workflow-task-approval.test.ts +196 -0
- package/src/domain/workflowexecution/__tests__/workflowexecution.test.ts +3 -57
- package/src/domain/workflowexecution/submit-approval.ts +9 -2
- package/src/domain/workflowexecution/submit-file-decision.ts +6 -1
- package/src/domain/workflowexecution/submit-workflow-task-approval.ts +23 -5
- package/src/domain/workflowinstance/controller.ts +27 -9
- package/src/domain/workflowinstance/steps.ts +123 -1
- package/src/extensions/__tests__/apikey-before-sign-in-composed.test.ts +172 -0
- package/src/extensions/__tests__/built-in-authorization-composed.test.ts +80 -1
- package/src/extensions/__tests__/composed-services-composed.test.ts +236 -0
- package/src/extensions/__tests__/extension-composition.test.ts +229 -16
- package/src/extensions/__tests__/identity-account-composed.test.ts +84 -4
- package/src/extensions/__tests__/list-read-scope-composed.test.ts +41 -1
- package/src/extensions/__tests__/registry.test.ts +147 -1
- package/src/extensions/__tests__/secret-cleanup-composed.test.ts +2 -0
- package/src/extensions/__tests__/visitor-classifier-points.test.ts +42 -0
- package/src/extensions/composed-services.ts +61 -0
- package/src/extensions/drivers.ts +33 -1
- package/src/extensions/identity.ts +4 -1
- package/src/extensions/registry.ts +105 -0
- package/src/extensions/resource-authorization.ts +87 -0
- package/src/extensions/resource-row-reader.ts +43 -0
- package/src/extensions/visitor-classifier.ts +41 -0
- package/src/identity/__tests__/oidc-verifier.test.ts +38 -12
- package/src/identity/oidc-userinfo.ts +6 -1
- package/src/identity/oidc-verifier.ts +42 -8
- package/src/index.ts +61 -6
- package/src/pipeline/__tests__/steps.test.ts +31 -4
- package/src/pipeline/errors.ts +30 -16
- package/src/pipeline/interceptors/auth.ts +17 -9
- package/src/pipeline/steps/__tests__/authorization-tuples.test.ts +20 -0
- package/src/pipeline/steps/__tests__/guard-memory-capture.test.ts +72 -15
- package/src/pipeline/steps/authorization-tuples.ts +54 -0
- package/src/pipeline/steps/authorize.ts +6 -5
- package/src/pipeline/steps/defaults.ts +52 -7
- package/src/pipeline/steps/guard-memory-capture.ts +15 -20
- package/src/runnerauth/__tests__/built-in-runner-credential-provider.test.ts +1 -1
- package/src/runnerauth/__tests__/runner-subject-composed.test.ts +13 -0
- package/src/runnerauth/bound-execution.ts +2 -2
- package/src/runnerauth/built-in-runner-credential-provider.ts +8 -21
- package/src/runnerauth/runner-credential-provider.ts +17 -7
- package/src/sandbox/__tests__/docker.integration.test.ts +4 -0
- package/src/sandbox/__tests__/kubernetes.test.ts +18 -1
- package/src/sandbox/__tests__/local-process.integration.test.ts +4 -0
- package/src/sandbox/__tests__/provisioner.test.ts +1 -0
- package/src/sandbox/docker.ts +3 -0
- package/src/sandbox/kubernetes.ts +3 -0
- package/src/sandbox/local-process.ts +4 -0
- package/src/sandbox/provisioner.ts +18 -6
- package/src/store/postgres/__tests__/support.ts +11 -2
- package/src/temporal/README.md +1 -0
- package/src/temporal/__tests__/manager.test.ts +56 -4
- package/src/temporal/__tests__/sdk-log-workflows.ts +26 -0
- package/src/temporal/__tests__/sdk-logger.e2e.test.ts +150 -0
- package/src/temporal/__tests__/sdk-logger.test.ts +238 -0
- package/src/temporal/manager.ts +9 -0
- package/src/temporal/mcpserver/engine-client.ts +8 -3
- package/src/temporal/mcpserver/names.ts +16 -2
- package/src/temporal/sdk-logger.ts +173 -0
- package/dist/authorization/lane-admission.d.ts +0 -50
- package/dist/authorization/lane-admission.d.ts.map +0 -1
- package/dist/authorization/lane-admission.js +0 -13
- package/dist/authorization/lane-admission.js.map +0 -1
- package/src/authorization/__tests__/lane-admission.test.ts +0 -115
- package/src/authorization/lane-admission.ts +0 -73
package/src/index.ts
CHANGED
|
@@ -66,8 +66,13 @@ export type {
|
|
|
66
66
|
ExtensionServiceRegistration,
|
|
67
67
|
ResolvedExtensions,
|
|
68
68
|
ResolvedServiceRegistration,
|
|
69
|
+
ResolvedUnitHook,
|
|
69
70
|
ServerExtension,
|
|
70
71
|
} from "./extensions/registry.js";
|
|
72
|
+
// What the composition hands a unit (ServerExtension.onComposed): its one
|
|
73
|
+
// Authorizer, list read scope, policy check, tuple lifecycle and
|
|
74
|
+
// in-process transport, whichever posture built them.
|
|
75
|
+
export type { ComposedServices } from "./extensions/composed-services.js";
|
|
71
76
|
export type {
|
|
72
77
|
CallerClass,
|
|
73
78
|
CallerIdentity,
|
|
@@ -107,6 +112,9 @@ export type { ResolvedExtensionDrivers } from "./extensions/registry.js";
|
|
|
107
112
|
// tests pin against.
|
|
108
113
|
export type {
|
|
109
114
|
DefaultInstanceLinkedEvent,
|
|
115
|
+
ExecutionAudienceShape,
|
|
116
|
+
ExecutionVisibilityChangedEvent,
|
|
117
|
+
OrganizationAffiliationEvent,
|
|
110
118
|
PolicyGrantedEvent,
|
|
111
119
|
PolicyRevokedEvent,
|
|
112
120
|
ResourceAuthorizationLifecycle,
|
|
@@ -156,6 +164,16 @@ export type {
|
|
|
156
164
|
IdentityAccountStoreContractFixture,
|
|
157
165
|
} from "./domain/identityaccount/store-contract.js";
|
|
158
166
|
export { identityAccountStoreContract } from "./domain/identityaccount/store-contract.js";
|
|
167
|
+
// The runner every kit is built on, for a composition whose own ports need
|
|
168
|
+
// kits of the same shape: a fresh fixture per case, the body over it, the
|
|
169
|
+
// cleanup after, and a failing body reported over a failing cleanup.
|
|
170
|
+
export type {
|
|
171
|
+
PortContractBody,
|
|
172
|
+
PortContractCase,
|
|
173
|
+
PortContractDeclaration,
|
|
174
|
+
PortContractFixture,
|
|
175
|
+
} from "./store/port-contract.js";
|
|
176
|
+
export { portContractCases } from "./store/port-contract.js";
|
|
159
177
|
// The 20260913.01 IamPolicy seams (Q-OR-1, Q-OR-10): the store PORT a
|
|
160
178
|
// composition drives the domain's grant path through (drivers.iamPolicyStore;
|
|
161
179
|
// a driver throws DuplicatePolicyError for a held id) and its vitest-free
|
|
@@ -167,6 +185,14 @@ export { identityAccountStoreContract } from "./domain/identityaccount/store-con
|
|
|
167
185
|
// composition reaches it as in-process RPCs, the doctrine.
|
|
168
186
|
export type { IamPolicyStore } from "./domain/iampolicy/store.js";
|
|
169
187
|
export { DuplicatePolicyError } from "./domain/iampolicy/store.js";
|
|
188
|
+
// What the grant path hands the store beside every access row it writes or
|
|
189
|
+
// deletes (who, through which door, in which organization), so an edition
|
|
190
|
+
// that keeps a permission history writes it atomically with the row.
|
|
191
|
+
export type {
|
|
192
|
+
PolicyActor,
|
|
193
|
+
PolicyChangeCause,
|
|
194
|
+
PolicyChangeRecord,
|
|
195
|
+
} from "./domain/iampolicy/change.js";
|
|
170
196
|
export type {
|
|
171
197
|
IamPolicyStoreContractCase,
|
|
172
198
|
IamPolicyStoreContractFixture,
|
|
@@ -182,9 +208,16 @@ export type { AuthorizationQueryEngine } from "./extensions/authorization-querie
|
|
|
182
208
|
// How an access list names a grantee that is not a person
|
|
183
209
|
// (drivers.principalDisplay): a team, in the editions that serve teams.
|
|
184
210
|
export type { PrincipalDisplay } from "./extensions/principal-display.js";
|
|
211
|
+
// Where the built-in authorizer reads the rows of a kind a unit keeps in a
|
|
212
|
+
// store of its own (drivers.resourceRowReaders).
|
|
213
|
+
export type { ResourceRowReader } from "./extensions/resource-row-reader.js";
|
|
185
214
|
export type { IdentityFederation } from "./extensions/identity-federation.js";
|
|
186
215
|
export type { AccountsBySubject } from "./domain/identityaccount/resolve.js";
|
|
187
216
|
export { identityIdForSubject } from "./domain/identityaccount/resolve.js";
|
|
217
|
+
// The derived id of the account under a subject. An edition's own per-org
|
|
218
|
+
// system accounts take the id of their own subject, so the primary key holds
|
|
219
|
+
// one row per subject there as it does for every account the library mints.
|
|
220
|
+
export { accountIdFor } from "./domain/identityaccount/constants.js";
|
|
188
221
|
// The PlatformClient seams: the store PORT a composition drives the domain
|
|
189
222
|
// through (drivers.platformClientStore; a driver throws
|
|
190
223
|
// DuplicatePlatformClientError for a held id, slug or client_id) and its
|
|
@@ -276,6 +309,10 @@ export { ScheduleFireCallerRefusedError } from "./extensions/schedule-fire-calle
|
|
|
276
309
|
// through the REAL boundary mechanism, never a re-derivation.
|
|
277
310
|
export type { VisitorErrorPolicy } from "./pipeline/interceptors/error-boundary.js";
|
|
278
311
|
export { createErrorBoundaryInterceptor } from "./pipeline/interceptors/error-boundary.js";
|
|
312
|
+
// Which callers are visitors (drivers.visitorClassifier): admitted to the
|
|
313
|
+
// organization's agents without belonging to it, so their runs never carry
|
|
314
|
+
// the organization's standing context (stigmer/stigmer#1401).
|
|
315
|
+
export type { VisitorClassifier } from "./extensions/visitor-classifier.js";
|
|
279
316
|
// The tuple lifecycle's resolution, for a kind a composition serves outside
|
|
280
317
|
// the generic chains (a cloud-served create): `resolveResourceCreatedEvent`
|
|
281
318
|
// derives the creation event from the kind's `kind_meta` exactly as the
|
|
@@ -283,6 +320,7 @@ export { createErrorBoundaryInterceptor } from "./pipeline/interceptors/error-bo
|
|
|
283
320
|
// whichever chain created the row.
|
|
284
321
|
export {
|
|
285
322
|
diffVisibilityShapes,
|
|
323
|
+
executionAudienceShapes,
|
|
286
324
|
resolveResourceCreatedEvent,
|
|
287
325
|
visibilityShapesFor,
|
|
288
326
|
} from "./pipeline/steps/authorization-tuples.js";
|
|
@@ -299,6 +337,7 @@ export {
|
|
|
299
337
|
internalError,
|
|
300
338
|
invalidArgumentError,
|
|
301
339
|
notFoundError,
|
|
340
|
+
unauthenticatedWithReasonError,
|
|
302
341
|
unavailableError,
|
|
303
342
|
} from "./pipeline/errors.js";
|
|
304
343
|
export type { RefusalReason } from "./pipeline/errors.js";
|
|
@@ -311,9 +350,14 @@ export { generateSlug } from "./pipeline/steps/slug.js";
|
|
|
311
350
|
// composing requests through the in-process transport AS a caller rides
|
|
312
351
|
// the same header the OSS asCaller adapters use. (callerIdentityOf and
|
|
313
352
|
// callerIdentityKey ride the request-idiom export block below.)
|
|
353
|
+
// serverActingFor is the one construction of "the server acting for" a
|
|
354
|
+
// principal: an extension that writes on a person's behalf (an invitation,
|
|
355
|
+
// a deleted team's cleanup) sends it so the write names that person while
|
|
356
|
+
// the server's own admission rules apply.
|
|
314
357
|
export {
|
|
315
358
|
encodeInProcessCaller,
|
|
316
359
|
IN_PROCESS_CALLER_HEADER,
|
|
360
|
+
serverActingFor,
|
|
317
361
|
} from "./pipeline/interceptors/auth.js";
|
|
318
362
|
|
|
319
363
|
// The request idiom for extension-REGISTERED services (C4 Stage 4): a
|
|
@@ -352,10 +396,10 @@ export {
|
|
|
352
396
|
} from "./pipeline/interceptors/auth.js";
|
|
353
397
|
export { newPipeline } from "./pipeline/pipeline.js";
|
|
354
398
|
export { newAuthorizeStep } from "./pipeline/steps/authorize.js";
|
|
355
|
-
// The run gate's check set
|
|
356
|
-
//
|
|
357
|
-
//
|
|
358
|
-
//
|
|
399
|
+
// The run gate's check set: an edition's Authorizer keys its lane
|
|
400
|
+
// admission on this predicate — the runtime lanes it mints (a guest
|
|
401
|
+
// share, a channel, a schedule fire) were admitted upstream by their own
|
|
402
|
+
// gate steps and are not re-asked here.
|
|
359
403
|
// OSS defines the gate, so OSS defines which checks are the gate; a
|
|
360
404
|
// composition never re-derives the set.
|
|
361
405
|
export { isRunGateCheck } from "./pipeline/steps/authorize-run-target.js";
|
|
@@ -370,8 +414,15 @@ export { newValidateProtoStep } from "./pipeline/steps/validation.js";
|
|
|
370
414
|
// constructor argument) for BuildNewState to pick the id prefix.
|
|
371
415
|
// CheckDuplicate is deliberately not here: it reads this server's Store,
|
|
372
416
|
// and a composition's own table answers that question in a step of the
|
|
373
|
-
// same name over its own repo.
|
|
374
|
-
|
|
417
|
+
// same name over its own repo. BuildNewState replaces any id a request
|
|
418
|
+
// carries (stigmer/stigmer#1266); a composition step that derives a
|
|
419
|
+
// create's id before it runs claims that id with assignServerId, the one
|
|
420
|
+
// way an id survives the step.
|
|
421
|
+
export {
|
|
422
|
+
assignServerId,
|
|
423
|
+
newBuildNewStateStep,
|
|
424
|
+
SERVER_ASSIGNED_ID_KEY,
|
|
425
|
+
} from "./pipeline/steps/defaults.js";
|
|
375
426
|
export { newResolveSlugStep } from "./pipeline/steps/slug.js";
|
|
376
427
|
// The update and reference-read steps for the same kinds, on the same
|
|
377
428
|
// terms. An update runs BuildUpdateState after the composition's own
|
|
@@ -409,6 +460,10 @@ export type {
|
|
|
409
460
|
OrganizationSlugStore,
|
|
410
461
|
} from "./store/interface.js";
|
|
411
462
|
export { ORGANIZATION_SLUG_RESERVED } from "./domain/organization/slug-ledger.js";
|
|
463
|
+
// The API-key verifier's refusal of a key created before sign-in was
|
|
464
|
+
// turned on (stigmer/stigmer#1169): a client branches on the reason, not
|
|
465
|
+
// the copy.
|
|
466
|
+
export { API_KEY_CREATED_BEFORE_SIGN_IN } from "./domain/apikey/verifier.js";
|
|
412
467
|
// The list index's read shapes, which `Store.queryResources` speaks
|
|
413
468
|
// (store/list-index.ts). Declaring an index stays internal: the list is
|
|
414
469
|
// the composition root's (boot/list-indexes.ts), one per server.
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Pins the shared steps against their Go references (steps/*_test.go,
|
|
3
3
|
* translated): slug generation (cloud-Java-identical, no truncation),
|
|
4
4
|
* duplicate checking with the byte-pinned AlreadyExists copy, create/update
|
|
5
|
-
* state building (status clearing, ULID minting
|
|
5
|
+
* state building (status clearing, ULID minting that replaces any id the
|
|
6
|
+
* request carried unless an earlier step claimed it #1266, audit slots #540,
|
|
6
7
|
* visibility default + oss#573 immutability), the loaders' error copy, the
|
|
7
8
|
* best-effort search indexing, visibility validation with cloud-identical
|
|
8
9
|
* copy, reference normalization/validation, operator identity (#400), and
|
|
@@ -31,8 +32,10 @@ import type { SearchIndexEntry } from "../../store/interface.js";
|
|
|
31
32
|
import { SqliteStore } from "../../store/sqlite/store.js";
|
|
32
33
|
import { RequestContext } from "../request-context.js";
|
|
33
34
|
import {
|
|
35
|
+
assignServerId,
|
|
34
36
|
newBuildNewStateStep,
|
|
35
37
|
generateId,
|
|
38
|
+
SERVER_ASSIGNED_ID_KEY,
|
|
36
39
|
setOperatorIdentity,
|
|
37
40
|
resetOperatorIdentityForTests,
|
|
38
41
|
auditActorFor,
|
|
@@ -213,15 +216,39 @@ describe("BuildNewState", () => {
|
|
|
213
216
|
);
|
|
214
217
|
});
|
|
215
218
|
|
|
216
|
-
it("
|
|
217
|
-
const ctx = orgCtx(org({ id: "
|
|
219
|
+
it("replaces a client-provided id and keeps an explicit visibility", async () => {
|
|
220
|
+
const ctx = orgCtx(org({ id: "org_chosen" }));
|
|
218
221
|
ctx.newState.metadata!.visibility = ApiResourceVisibility.visibility_org;
|
|
219
222
|
await newBuildNewStateStep<typeof OrganizationSchema>().execute(ctx);
|
|
220
|
-
expect(ctx.newState.metadata?.id).
|
|
223
|
+
expect(ctx.newState.metadata?.id).toMatch(/^org_[0-9a-hjkmnp-tv-z]{26}$/);
|
|
224
|
+
expect(ctx.newState.metadata?.id).not.toBe("org_chosen");
|
|
221
225
|
expect(ctx.newState.metadata?.visibility).toBe(
|
|
222
226
|
ApiResourceVisibility.visibility_org,
|
|
223
227
|
);
|
|
224
228
|
});
|
|
229
|
+
|
|
230
|
+
it("keeps an id an earlier step claimed through assignServerId", async () => {
|
|
231
|
+
const ctx = orgCtx(org({ id: "org_chosen" }));
|
|
232
|
+
assignServerId(ctx, "org_derived");
|
|
233
|
+
await newBuildNewStateStep<typeof OrganizationSchema>().execute(ctx);
|
|
234
|
+
expect(ctx.newState.metadata?.id).toBe("org_derived");
|
|
235
|
+
expect(ctx.get(SERVER_ASSIGNED_ID_KEY)).toBe("org_derived");
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it("re-mints a claimed id a later step rewrote: a claim names one value", async () => {
|
|
239
|
+
const ctx = orgCtx(org());
|
|
240
|
+
assignServerId(ctx, "org_derived");
|
|
241
|
+
ctx.newState.metadata!.id = "org_rewritten";
|
|
242
|
+
await newBuildNewStateStep<typeof OrganizationSchema>().execute(ctx);
|
|
243
|
+
expect(ctx.newState.metadata?.id).toMatch(/^org_[0-9a-hjkmnp-tv-z]{26}$/);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it("mints for an empty id even when the claim recorded an empty one", async () => {
|
|
247
|
+
const ctx = orgCtx(org());
|
|
248
|
+
assignServerId(ctx, "");
|
|
249
|
+
await newBuildNewStateStep<typeof OrganizationSchema>().execute(ctx);
|
|
250
|
+
expect(ctx.newState.metadata?.id).toMatch(/^org_[0-9a-hjkmnp-tv-z]{26}$/);
|
|
251
|
+
});
|
|
225
252
|
});
|
|
226
253
|
|
|
227
254
|
describe("generateId", () => {
|
package/src/pipeline/errors.ts
CHANGED
|
@@ -65,14 +65,7 @@ export function alreadyExistsWithReasonError(
|
|
|
65
65
|
reason: RefusalReason,
|
|
66
66
|
): ConnectError {
|
|
67
67
|
return new ConnectError(message, Code.AlreadyExists, undefined, [
|
|
68
|
-
|
|
69
|
-
desc: ErrorInfoSchema,
|
|
70
|
-
value: create(ErrorInfoSchema, {
|
|
71
|
-
reason: reason.reason,
|
|
72
|
-
domain: ERROR_REASON_DOMAIN,
|
|
73
|
-
metadata: { ...reason.metadata },
|
|
74
|
-
}),
|
|
75
|
-
},
|
|
68
|
+
reasonDetail(reason),
|
|
76
69
|
]);
|
|
77
70
|
}
|
|
78
71
|
|
|
@@ -89,17 +82,38 @@ export function failedPreconditionError(
|
|
|
89
82
|
return new ConnectError(message, Code.FailedPrecondition);
|
|
90
83
|
}
|
|
91
84
|
return new ConnectError(message, Code.FailedPrecondition, undefined, [
|
|
92
|
-
|
|
93
|
-
desc: ErrorInfoSchema,
|
|
94
|
-
value: create(ErrorInfoSchema, {
|
|
95
|
-
reason: reason.reason,
|
|
96
|
-
domain: ERROR_REASON_DOMAIN,
|
|
97
|
-
metadata: { ...reason.metadata },
|
|
98
|
-
}),
|
|
99
|
-
},
|
|
85
|
+
reasonDetail(reason),
|
|
100
86
|
]);
|
|
101
87
|
}
|
|
102
88
|
|
|
89
|
+
/**
|
|
90
|
+
* An Unauthenticated refusal a client acts on without parsing text: a
|
|
91
|
+
* credential that was recognised but authenticates nobody, for a reason
|
|
92
|
+
* the caller can fix (stigmer/stigmer#1169, a key created before sign-in
|
|
93
|
+
* was turned on). The code stays Unauthenticated, so a client that keys on
|
|
94
|
+
* the code alone still treats it as a sign-in problem.
|
|
95
|
+
*/
|
|
96
|
+
export function unauthenticatedWithReasonError(
|
|
97
|
+
message: string,
|
|
98
|
+
reason: RefusalReason,
|
|
99
|
+
): ConnectError {
|
|
100
|
+
return new ConnectError(message, Code.Unauthenticated, undefined, [
|
|
101
|
+
reasonDetail(reason),
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** The ErrorInfo detail every reasoned refusal carries beside its message. */
|
|
106
|
+
function reasonDetail(reason: RefusalReason) {
|
|
107
|
+
return {
|
|
108
|
+
desc: ErrorInfoSchema,
|
|
109
|
+
value: create(ErrorInfoSchema, {
|
|
110
|
+
reason: reason.reason,
|
|
111
|
+
domain: ERROR_REASON_DOMAIN,
|
|
112
|
+
metadata: { ...reason.metadata },
|
|
113
|
+
}),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
103
117
|
/** Go AbortedError — retryable conflict (e.g. an in-flight dedupe claim). */
|
|
104
118
|
export function abortedError(message: string): ConnectError {
|
|
105
119
|
return new ConnectError(message, Code.Aborted);
|
|
@@ -219,15 +219,23 @@ export function trustedLocalIdentityFor(operator: {
|
|
|
219
219
|
/**
|
|
220
220
|
* The server acting for a principal it has authenticated some other way —
|
|
221
221
|
* the one construction of an `internal` caller outside the in-process
|
|
222
|
-
* transport's own stamp.
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
222
|
+
* transport's own stamp. Two consumers:
|
|
223
|
+
*
|
|
224
|
+
* - The PlatformClient mint (domain/platformclient/mint.ts): the
|
|
225
|
+
* request is public and tokenless (so the chain stamped the
|
|
226
|
+
* trusted-local operator), the client proved itself with its secret,
|
|
227
|
+
* and the end-user account and role the mint creates must name the
|
|
228
|
+
* CLIENT as their actor, never the operator.
|
|
229
|
+
* - The workflow HITL forwarding edges (boot/inprocess.ts): the
|
|
230
|
+
* workflow chain authorized the person deciding, and the child
|
|
231
|
+
* agent execution records them as its decider or reviewer
|
|
232
|
+
* (stigmer/stigmer#1385) without authorizing them a second time
|
|
233
|
+
* against a session they need not own.
|
|
234
|
+
*
|
|
235
|
+
* `internal` because the server is the one acting — Authorize skips it,
|
|
236
|
+
* as for every server-composed request — and never reachable from the
|
|
237
|
+
* wire: no verifier produces it, and the serving chassis overwrites
|
|
238
|
+
* position 1 on every request.
|
|
231
239
|
*/
|
|
232
240
|
export function serverActingFor(principalId: string): CallerIdentity {
|
|
233
241
|
if (principalId === "") {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Pins the edition-neutral half of the C2 tuple-lifecycle seam
|
|
3
3
|
* (20260827.10, ruling Q2): the visibility shape policy and its set-diff
|
|
4
4
|
* (re-pinning the Java VisibilityTupleReconcilerTest transition matrix),
|
|
5
|
+
* the run-audience policy of a workflow instance's execution visibility,
|
|
5
6
|
* and the config-driven creation-event resolution
|
|
6
7
|
* (CreateAuthorizationTuplesStepV2's scope/owner/parent semantics,
|
|
7
8
|
* including every failure arm). The driver-facing behavior of the steps
|
|
@@ -16,6 +17,7 @@ import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentex
|
|
|
16
17
|
import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
|
|
17
18
|
import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
18
19
|
import { MemorySchema } from "@stigmer/protos/ai/stigmer/agentic/memory/v1/api_pb";
|
|
20
|
+
import { WorkflowExecutionVisibility } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/spec_pb";
|
|
19
21
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
20
22
|
import { OwnerAttributionType } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/authorization_config_pb";
|
|
21
23
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
@@ -25,6 +27,7 @@ import { createLogger } from "../../../boot/logger.js";
|
|
|
25
27
|
import type { CallerIdentity } from "../../../extensions/identity.js";
|
|
26
28
|
import {
|
|
27
29
|
diffVisibilityShapes,
|
|
30
|
+
executionAudienceShapes,
|
|
28
31
|
resolveResourceCreatedEvent,
|
|
29
32
|
visibilityShapesFor,
|
|
30
33
|
} from "../authorization-tuples.js";
|
|
@@ -85,6 +88,23 @@ describe("visibilityShapesFor (the reconciler's level→shape policy)", () => {
|
|
|
85
88
|
});
|
|
86
89
|
});
|
|
87
90
|
|
|
91
|
+
describe("executionAudienceShapes (a workflow instance's run audience)", () => {
|
|
92
|
+
it("ORGANIZATION names the organization's viewers", () => {
|
|
93
|
+
expect([
|
|
94
|
+
...executionAudienceShapes(WorkflowExecutionVisibility.organization),
|
|
95
|
+
]).toEqual(["org-viewer"]);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("PRIVATE and the unset level name nobody, so each run stays its triggerer's", () => {
|
|
99
|
+
expect([
|
|
100
|
+
...executionAudienceShapes(WorkflowExecutionVisibility.private),
|
|
101
|
+
]).toEqual([]);
|
|
102
|
+
expect([
|
|
103
|
+
...executionAudienceShapes(WorkflowExecutionVisibility.unspecified),
|
|
104
|
+
]).toEqual([]);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
88
108
|
describe("diffVisibilityShapes (the reconciler's transition matrix, re-pinned)", () => {
|
|
89
109
|
const agent = ApiResourceKind.agent;
|
|
90
110
|
|
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
* stigmer-cloud#564): the authorizeMemoryCapture capability's three
|
|
4
4
|
* verdicts (admit stashes the proved claims, refuse answers the
|
|
5
5
|
* byte-pinned PERMISSION_DENIED copy, no-opinion falls through to the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
6
|
+
* first-party allow-list), the capture org handed to the capability, the
|
|
7
|
+
* org-mismatch throw propagating untouched, and the allow-list itself
|
|
8
|
+
* (stigmer#1406): trusted-local and OIDC callers admit; machine,
|
|
9
|
+
* PlatformClient-token and every other caller class — runner, the hosted
|
|
10
|
+
* edition's guest / channel / schedule lanes, a class no edition has
|
|
11
|
+
* named yet — refuse, with the capability absent or answering
|
|
12
|
+
* no-opinion. The claim counts only on a platform token (stigmer#1312):
|
|
13
|
+
* the refusing cases carry tokens signed by the envelope every Stigmer
|
|
14
|
+
* lane mints through, and another issuer's token carrying the same claim
|
|
15
|
+
* is admitted.
|
|
14
16
|
*/
|
|
15
17
|
import { generateKeyPairSync } from "node:crypto";
|
|
16
18
|
|
|
@@ -43,6 +45,20 @@ const LOCAL_USER: CallerIdentity = {
|
|
|
43
45
|
rawToken: "",
|
|
44
46
|
};
|
|
45
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Every caller class that is not a person at the console, CLI or SDK:
|
|
50
|
+
* the OSS runner and machine classes, the hosted edition's minted lanes
|
|
51
|
+
* (their class is their token_type), and a class no edition names yet.
|
|
52
|
+
*/
|
|
53
|
+
const NON_PERSON_CLASSES = [
|
|
54
|
+
"machine",
|
|
55
|
+
"runner",
|
|
56
|
+
"guest",
|
|
57
|
+
"channel",
|
|
58
|
+
"schedule",
|
|
59
|
+
"a_lane_added_later",
|
|
60
|
+
];
|
|
61
|
+
|
|
46
62
|
/** A cloud-shaped caller whose class is its token_type (sandbox lane). */
|
|
47
63
|
const SANDBOX_CALLER: CallerIdentity = {
|
|
48
64
|
identityId: "ida_human",
|
|
@@ -182,7 +198,11 @@ describe("GuardMemoryCapture with the capability composed", () => {
|
|
|
182
198
|
return { verdict: "no-opinion" };
|
|
183
199
|
}),
|
|
184
200
|
);
|
|
185
|
-
|
|
201
|
+
// No opinion on a caller that is not a person: the allow-list refuses
|
|
202
|
+
// it after the capability has seen the request.
|
|
203
|
+
await expect(
|
|
204
|
+
step.execute(memoryCtx(SANDBOX_CALLER, "org_zeta")),
|
|
205
|
+
).rejects.toThrowError(MEMORY_CAPTURE_CALLER_MESSAGE);
|
|
186
206
|
expect(observed).toEqual([{ caller: SANDBOX_CALLER, org: "org_zeta" }]);
|
|
187
207
|
});
|
|
188
208
|
|
|
@@ -216,6 +236,23 @@ describe("GuardMemoryCapture with the capability composed", () => {
|
|
|
216
236
|
);
|
|
217
237
|
});
|
|
218
238
|
|
|
239
|
+
it.each(NON_PERSON_CLASSES)(
|
|
240
|
+
"no-opinion falls through: a %s caller is refused, with or without the claim",
|
|
241
|
+
async (callerClass) => {
|
|
242
|
+
const step = newGuardMemoryCaptureStep<typeof MemorySchema>(
|
|
243
|
+
providerWith(() => ({ verdict: "no-opinion" })),
|
|
244
|
+
);
|
|
245
|
+
for (const rawToken of [
|
|
246
|
+
"",
|
|
247
|
+
mintedToken({ platform_client_id: "pc_1" }),
|
|
248
|
+
]) {
|
|
249
|
+
await expect(
|
|
250
|
+
step.execute(memoryCtx({ ...LOCAL_USER, callerClass, rawToken })),
|
|
251
|
+
).rejects.toThrowError(MEMORY_CAPTURE_CALLER_MESSAGE);
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
);
|
|
255
|
+
|
|
219
256
|
it("no-opinion falls through: another issuer's platform_client_id claim is admitted", async () => {
|
|
220
257
|
// Both editions' capabilities answer no-opinion for a person, so this
|
|
221
258
|
// is the path an OIDC login takes in production.
|
|
@@ -243,7 +280,7 @@ describe("GuardMemoryCapture with the capability composed", () => {
|
|
|
243
280
|
});
|
|
244
281
|
});
|
|
245
282
|
|
|
246
|
-
describe("GuardMemoryCapture without the capability (the
|
|
283
|
+
describe("GuardMemoryCapture without the capability (the allow-list alone)", () => {
|
|
247
284
|
it("admits trusted-local and OIDC callers", async () => {
|
|
248
285
|
const step = newGuardMemoryCaptureStep<typeof MemorySchema>(providerWith());
|
|
249
286
|
await step.execute(memoryCtx(LOCAL_USER));
|
|
@@ -288,11 +325,31 @@ describe("GuardMemoryCapture without the capability (the pre-seam gate)", () =>
|
|
|
288
325
|
);
|
|
289
326
|
});
|
|
290
327
|
|
|
291
|
-
it("
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
//
|
|
328
|
+
it("refuses a runner-shaped caller no capability classifies", async () => {
|
|
329
|
+
// A runner acting for a person captures only through a provider that
|
|
330
|
+
// proves whose run it is (the capability's admit). Unclassified, it is
|
|
331
|
+
// not the person, so the allow-list refuses it (stigmer#1406) — the
|
|
332
|
+
// trusted-local laptop's runner is not this caller: no verifier claims
|
|
333
|
+
// its token there, so it arrives as the operator (pipeline/interceptors/auth.ts).
|
|
295
334
|
const step = newGuardMemoryCaptureStep<typeof MemorySchema>(providerWith());
|
|
296
|
-
await step.execute(memoryCtx(SANDBOX_CALLER))
|
|
335
|
+
await expect(step.execute(memoryCtx(SANDBOX_CALLER))).rejects.toThrowError(
|
|
336
|
+
MEMORY_CAPTURE_CALLER_MESSAGE,
|
|
337
|
+
);
|
|
297
338
|
});
|
|
339
|
+
|
|
340
|
+
it.each(NON_PERSON_CLASSES)(
|
|
341
|
+
"refuses a %s caller, with or without the claim",
|
|
342
|
+
async (callerClass) => {
|
|
343
|
+
const step =
|
|
344
|
+
newGuardMemoryCaptureStep<typeof MemorySchema>(providerWith());
|
|
345
|
+
for (const rawToken of [
|
|
346
|
+
"",
|
|
347
|
+
mintedToken({ platform_client_id: "pc_1" }),
|
|
348
|
+
]) {
|
|
349
|
+
await expect(
|
|
350
|
+
step.execute(memoryCtx({ ...LOCAL_USER, callerClass, rawToken })),
|
|
351
|
+
).rejects.toThrowError(MEMORY_CAPTURE_CALLER_MESSAGE);
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
);
|
|
298
355
|
});
|
|
@@ -27,12 +27,16 @@
|
|
|
27
27
|
* - visibility: a driver throw fails the request as Internal — after
|
|
28
28
|
* persist; retrying the same transition converges (set-diff
|
|
29
29
|
* idempotency).
|
|
30
|
+
* - execution visibility (a workflow instance's run audience): the same,
|
|
31
|
+
* through `notifyExecutionVisibilityChanged`; the event is the target
|
|
32
|
+
* audience, so a retry converges without the old level.
|
|
30
33
|
* - the PLATFORM scope arm is dead config in BOTH editions (no kind
|
|
31
34
|
* uses it; Java's switch falls through to a warn) — ported as the
|
|
32
35
|
* same conscious warn, never an implementation.
|
|
33
36
|
*/
|
|
34
37
|
import type { DescMessage, Message } from "@bufbuild/protobuf";
|
|
35
38
|
|
|
39
|
+
import { WorkflowExecutionVisibility } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/spec_pb";
|
|
36
40
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
37
41
|
import type { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
38
42
|
import {
|
|
@@ -48,6 +52,8 @@ import type { Logger } from "../../boot/logger.js";
|
|
|
48
52
|
import type { CallerIdentity } from "../../extensions/identity.js";
|
|
49
53
|
import type {
|
|
50
54
|
DefaultInstanceLinkedEvent,
|
|
55
|
+
ExecutionAudienceShape,
|
|
56
|
+
ExecutionVisibilityChangedEvent,
|
|
51
57
|
ResolvedParentLink,
|
|
52
58
|
ResourceAuthorizationLifecycle,
|
|
53
59
|
ResourceCreatedEvent,
|
|
@@ -72,6 +78,29 @@ export async function notifyDefaultInstanceLinked(
|
|
|
72
78
|
}
|
|
73
79
|
await lifecycle.onDefaultInstanceLinked(event);
|
|
74
80
|
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Fires the driver's run-audience event for a workflow instance whose
|
|
84
|
+
* `spec.execution_visibility` just persisted. No driver (or a driver
|
|
85
|
+
* without the optional method) = no-op — the OSS posture, where the
|
|
86
|
+
* relation is derived from the row at check time. A driver throw fails
|
|
87
|
+
* the request as Internal with `failureMessage`, after persist; the event
|
|
88
|
+
* is the whole target audience, so the retry converges.
|
|
89
|
+
*/
|
|
90
|
+
export async function notifyExecutionVisibilityChanged(
|
|
91
|
+
lifecycle: ResourceAuthorizationLifecycle | undefined,
|
|
92
|
+
event: ExecutionVisibilityChangedEvent,
|
|
93
|
+
failureMessage: string,
|
|
94
|
+
): Promise<void> {
|
|
95
|
+
if (lifecycle?.onExecutionVisibilityChanged === undefined) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
await lifecycle.onExecutionVisibilityChanged(event);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
throw internalError(error, failureMessage);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
75
104
|
import { getKindEnum, getKindMeta, getKindName } from "../apiresource-meta.js";
|
|
76
105
|
import { internalError } from "../errors.js";
|
|
77
106
|
import type { PipelineStep } from "../pipeline.js";
|
|
@@ -153,6 +182,30 @@ export function diffVisibilityShapes(
|
|
|
153
182
|
};
|
|
154
183
|
}
|
|
155
184
|
|
|
185
|
+
/**
|
|
186
|
+
* The run audience a workflow instance's execution visibility names — the
|
|
187
|
+
* one mapping both editions read: open source's check-time derivation
|
|
188
|
+
* (authorization/model/execution-viewer.ts) turns it into the tuple the
|
|
189
|
+
* check walks, and the lifecycle event hands it to an edition that stores
|
|
190
|
+
* tuples. ORGANIZATION names the organization's viewers; PRIVATE and the
|
|
191
|
+
* unset level name nobody, so each run stays its triggerer's.
|
|
192
|
+
*/
|
|
193
|
+
export function executionAudienceShapes(
|
|
194
|
+
level: WorkflowExecutionVisibility,
|
|
195
|
+
): ReadonlySet<ExecutionAudienceShape> {
|
|
196
|
+
switch (level) {
|
|
197
|
+
case WorkflowExecutionVisibility.organization:
|
|
198
|
+
return new Set<ExecutionAudienceShape>(["org-viewer"]);
|
|
199
|
+
case WorkflowExecutionVisibility.private:
|
|
200
|
+
case WorkflowExecutionVisibility.unspecified:
|
|
201
|
+
return new Set<ExecutionAudienceShape>();
|
|
202
|
+
default: {
|
|
203
|
+
const exhaustive: never = level;
|
|
204
|
+
throw new Error(`unknown execution visibility: ${String(exhaustive)}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
156
209
|
// ---------------------------------------------------------------------------
|
|
157
210
|
// Parent-id resolution — the ParentIdExtractorRegistry port. The spec-field
|
|
158
211
|
// read itself is shapes.ts's `parentIdOf`, shared with the list read scope
|
|
@@ -437,6 +490,7 @@ export function newUpdateVisibilityTuplesStep<Desc extends DescMessage>(
|
|
|
437
490
|
kind: ctx.apiResourceKind,
|
|
438
491
|
resourceId: metadata.id,
|
|
439
492
|
orgId: metadata.org,
|
|
493
|
+
caller: ctx.callerIdentity,
|
|
440
494
|
shapesToCreate,
|
|
441
495
|
shapesToDelete,
|
|
442
496
|
});
|
|
@@ -100,11 +100,12 @@ export const AUTHORIZATION_UNAVAILABLE_MESSAGE =
|
|
|
100
100
|
export const AUTHORIZATION_DENIED_FALLBACK_MESSAGE = "permission denied";
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
|
-
* The
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
103
|
+
* The permissive single-team Authorizer (DD-007 §3): one trust domain,
|
|
104
|
+
* every check allowed, exactly the pre-O2 behavior. Kept for the suites
|
|
105
|
+
* that need an Authorizer with no opinion at all; no posture composes it.
|
|
106
|
+
* A server without sign-in composes the trusted-local driver
|
|
107
|
+
* (authorization/trusted-local-authorizer.ts), which is this plus the
|
|
108
|
+
* not-found arm for an Organization that does not exist (stigmer#1163).
|
|
108
109
|
*/
|
|
109
110
|
export function newPermissiveSingleTeamAuthorizer(): Authorizer {
|
|
110
111
|
return {
|