@noodleseed/one 0.92.0 → 0.94.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/deploy.js +1 -1
- package/dist/deploy.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/platform-support.js +2 -2
- package/dist/platform-support.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +8 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +9 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +8 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js +24 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js +30 -22
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +15 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-platform-support.d.ts +13 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-platform-support.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-platform-support.js +13 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-platform-support.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-auth-ref.d.ts +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-auth-ref.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-auth-ref.js +171 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-auth-ref.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +3 -97
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/auth/dist/claims.d.ts +2 -0
- package/node_modules/@noodle-borg/auth/dist/claims.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/claims.js +15 -0
- package/node_modules/@noodle-borg/auth/dist/claims.js.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/index.js +1 -1
- package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts +10 -1
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.js +9 -2
- package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.js +4 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/customer-auth.d.ts +13 -0
- package/node_modules/@noodle-borg/authoring/dist/customer-auth.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/customer-auth.js +31 -2
- package/node_modules/@noodle-borg/authoring/dist/customer-auth.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/customer-endpoint.d.ts +10 -0
- package/node_modules/@noodle-borg/authoring/dist/customer-endpoint.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/customer-endpoint.js +18 -0
- package/node_modules/@noodle-borg/authoring/dist/customer-endpoint.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +1 -13
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts +27 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +73 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.d.ts +50 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +119 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +22 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +5 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts +8 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js +0 -9
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +1 -11
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +29 -163
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/context-compile.d.ts +2 -1
- package/node_modules/@noodle-borg/compiler/dist/context-compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/context-compile.js +3 -1
- package/node_modules/@noodle-borg/compiler/dist/context-compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/customer-endpoint.d.ts +34 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-endpoint.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-endpoint.js +240 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-endpoint.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-routing.d.ts +24 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-routing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-routing.js +136 -0
- package/node_modules/@noodle-borg/compiler/dist/customer-routing.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/fulfilment-emit.d.ts +7 -3
- package/node_modules/@noodle-borg/compiler/dist/fulfilment-emit.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/fulfilment-emit.js +7 -1
- package/node_modules/@noodle-borg/compiler/dist/fulfilment-emit.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -2
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.js +1 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/auth-schema.d.ts +110 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/auth-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/auth-schema.js +191 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/auth-schema.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +12 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +1 -73
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/package.json +1 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts +1 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compute/dist/code-connector.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/call-graph.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/call-graph.js +6 -6
- package/node_modules/@noodle-borg/connector-defs/dist/call-graph.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile-auth.d.ts +2 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-auth.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile-auth.js +12 -9
- package/node_modules/@noodle-borg/connector-defs/dist/compile-auth.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.d.ts +14 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +347 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +4 -2
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js +17 -333
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/customer-routing.d.ts +11 -0
- package/node_modules/@noodle-borg/connector-defs/dist/customer-routing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/customer-routing.js +124 -0
- package/node_modules/@noodle-borg/connector-defs/dist/customer-routing.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/http-headers.d.ts +4 -0
- package/node_modules/@noodle-borg/connector-defs/dist/http-headers.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/http-headers.js +52 -0
- package/node_modules/@noodle-borg/connector-defs/dist/http-headers.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/identity-key.d.ts +5 -0
- package/node_modules/@noodle-borg/connector-defs/dist/identity-key.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/identity-key.js +9 -0
- package/node_modules/@noodle-borg/connector-defs/dist/identity-key.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +33 -3
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +22 -3
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/customer-route.d.ts +17 -0
- package/node_modules/@noodle-borg/connector-http/dist/customer-route.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/customer-route.js +77 -0
- package/node_modules/@noodle-borg/connector-http/dist/customer-route.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -2
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +64 -67
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js +23 -21
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js +17 -2
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.d.ts +4 -0
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +31 -0
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js.map +1 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +14 -2
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +17 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +4 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +7 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +24 -3
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js +21 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/confirmation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/confirmation.js +10 -0
- package/node_modules/@noodle-borg/runtime/dist/confirmation.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/connector/failure-details.d.ts +8 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/failure-details.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/failure-details.js +53 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/failure-details.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +7 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js +15 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/customer-routing.d.ts +45 -0
- package/node_modules/@noodle-borg/runtime/dist/customer-routing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/customer-routing.js +135 -0
- package/node_modules/@noodle-borg/runtime/dist/customer-routing.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +10 -49
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/execute.js +14 -363
- package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +4 -2
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/index.js +4 -2
- package/node_modules/@noodle-borg/runtime/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/interactive.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/interactive.js +7 -0
- package/node_modules/@noodle-borg/runtime/dist/interactive.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.d.ts +16 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +58 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +48 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +328 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/prepared-action-match.d.ts +3 -0
- package/node_modules/@noodle-borg/runtime/dist/prepared-action-match.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/prepared-action-match.js +48 -0
- package/node_modules/@noodle-borg/runtime/dist/prepared-action-match.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts +1 -1
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/result.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/routed-output-guard.d.ts +15 -0
- package/node_modules/@noodle-borg/runtime/dist/routed-output-guard.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/routed-output-guard.js +163 -0
- package/node_modules/@noodle-borg/runtime/dist/routed-output-guard.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/assistant-customer-issuer.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/assistant-customer-issuer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/assistant-customer-issuer.js +13 -0
- package/node_modules/@noodle-borg/service/dist/assistant-customer-issuer.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/assistant-interactive.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/assistant-interactive.js +2 -1
- package/node_modules/@noodle-borg/service/dist/assistant-interactive.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.js +1 -1
- package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +5 -1
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-refresh.d.ts +47 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-refresh.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-refresh.js +165 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-refresh.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-token-exchange.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-token-exchange.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-token-exchange.js +112 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker-delegated-token-exchange.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-broker.d.ts +6 -24
- package/node_modules/@noodle-borg/service/dist/credential-broker.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-broker.js +23 -271
- package/node_modules/@noodle-borg/service/dist/credential-broker.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-probe-route.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/credential-probe-route.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-probe-route.js +28 -0
- package/node_modules/@noodle-borg/service/dist/credential-probe-route.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-probes.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/credential-probes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-probes.js +54 -13
- package/node_modules/@noodle-borg/service/dist/credential-probes.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-route-guard.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-guard.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-guard.js +34 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-guard.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-key.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-key.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-key.js +17 -0
- package/node_modules/@noodle-borg/service/dist/credential-route-key.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js +72 -21
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/delegated-token-exchange.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/delegated-token-exchange.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/delegated-token-exchange.js +24 -2
- package/node_modules/@noodle-borg/service/dist/delegated-token-exchange.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +6 -5
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +4 -3
- package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/google-workload-identity-probe.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/google-workload-identity-probe.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/google-workload-identity-probe.js +23 -7
- package/node_modules/@noodle-borg/service/dist/google-workload-identity-probe.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/google-workload-identity.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/google-workload-identity.js +6 -5
- package/node_modules/@noodle-borg/service/dist/google-workload-identity.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/managed-config-broker-options.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/managed-config-broker-options.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/managed-config-broker-options.js +2 -0
- package/node_modules/@noodle-borg/service/dist/managed-config-broker-options.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.js +6 -5
- package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +10 -8
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +5 -5
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-resolution.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-resolution.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-resolution.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +8 -7
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js +6 -3
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.js +18 -2
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts +2 -0
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.js +27 -9
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.js.map +1 -1
- package/node_modules/tldts/LICENSE +13 -0
- package/node_modules/tldts/README.md +368 -0
- package/node_modules/tldts/bin/cli.js +21 -0
- package/node_modules/tldts/dist/cjs/index.js +1170 -0
- package/node_modules/tldts/dist/cjs/index.js.map +1 -0
- package/node_modules/tldts/dist/cjs/src/data/trie.js +12 -0
- package/node_modules/tldts/dist/cjs/src/data/trie.js.map +1 -0
- package/node_modules/tldts/dist/cjs/src/suffix-trie.js +170 -0
- package/node_modules/tldts/dist/cjs/src/suffix-trie.js.map +1 -0
- package/node_modules/tldts/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/node_modules/tldts/dist/es6/index.js +41 -0
- package/node_modules/tldts/dist/es6/index.js.map +1 -0
- package/node_modules/tldts/dist/es6/src/data/trie.js +9 -0
- package/node_modules/tldts/dist/es6/src/data/trie.js.map +1 -0
- package/node_modules/tldts/dist/es6/src/suffix-trie.js +167 -0
- package/node_modules/tldts/dist/es6/src/suffix-trie.js.map +1 -0
- package/node_modules/tldts/dist/es6/tsconfig.bundle.tsbuildinfo +1 -0
- package/node_modules/tldts/dist/index.cjs.min.js +2 -0
- package/node_modules/tldts/dist/index.cjs.min.js.map +1 -0
- package/node_modules/tldts/dist/index.esm.min.js +2 -0
- package/node_modules/tldts/dist/index.esm.min.js.map +1 -0
- package/node_modules/tldts/dist/index.umd.min.js +2 -0
- package/node_modules/tldts/dist/index.umd.min.js.map +1 -0
- package/node_modules/tldts/dist/types/index.d.ts +8 -0
- package/node_modules/tldts/dist/types/src/data/trie.d.ts +7 -0
- package/node_modules/tldts/dist/types/src/suffix-trie.d.ts +5 -0
- package/node_modules/tldts/index.ts +74 -0
- package/node_modules/tldts/package.json +89 -0
- package/node_modules/tldts/src/data/trie.ts +8 -0
- package/node_modules/tldts/src/suffix-trie.ts +207 -0
- package/node_modules/tldts-core/LICENSE +13 -0
- package/node_modules/tldts-core/README.md +3 -0
- package/node_modules/tldts-core/dist/cjs/index.js +955 -0
- package/node_modules/tldts-core/dist/cjs/index.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/domain-without-suffix.js +15 -0
- package/node_modules/tldts-core/dist/cjs/src/domain-without-suffix.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/domain.js +83 -0
- package/node_modules/tldts-core/dist/cjs/src/domain.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/extract-hostname.js +439 -0
- package/node_modules/tldts-core/dist/cjs/src/extract-hostname.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/factory.js +128 -0
- package/node_modules/tldts-core/dist/cjs/src/factory.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/is-ip.js +72 -0
- package/node_modules/tldts-core/dist/cjs/src/is-ip.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/is-special-use.js +65 -0
- package/node_modules/tldts-core/dist/cjs/src/is-special-use.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/is-valid.js +80 -0
- package/node_modules/tldts-core/dist/cjs/src/is-valid.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/lookup/fast-path.js +69 -0
- package/node_modules/tldts-core/dist/cjs/src/lookup/fast-path.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/lookup/interface.js +3 -0
- package/node_modules/tldts-core/dist/cjs/src/lookup/interface.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/options.js +23 -0
- package/node_modules/tldts-core/dist/cjs/src/options.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/src/subdomain.js +14 -0
- package/node_modules/tldts-core/dist/cjs/src/subdomain.js.map +1 -0
- package/node_modules/tldts-core/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/node_modules/tldts-core/dist/es6/index.js +4 -0
- package/node_modules/tldts-core/dist/es6/index.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js +12 -0
- package/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/domain.js +80 -0
- package/node_modules/tldts-core/dist/es6/src/domain.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/extract-hostname.js +435 -0
- package/node_modules/tldts-core/dist/es6/src/extract-hostname.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/factory.js +123 -0
- package/node_modules/tldts-core/dist/es6/src/factory.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/is-ip.js +69 -0
- package/node_modules/tldts-core/dist/es6/src/is-ip.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/is-special-use.js +62 -0
- package/node_modules/tldts-core/dist/es6/src/is-special-use.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/is-valid.js +77 -0
- package/node_modules/tldts-core/dist/es6/src/is-valid.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js +66 -0
- package/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/lookup/interface.js +2 -0
- package/node_modules/tldts-core/dist/es6/src/lookup/interface.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/options.js +20 -0
- package/node_modules/tldts-core/dist/es6/src/options.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/src/subdomain.js +11 -0
- package/node_modules/tldts-core/dist/es6/src/subdomain.js.map +1 -0
- package/node_modules/tldts-core/dist/es6/tsconfig.bundle.tsbuildinfo +1 -0
- package/node_modules/tldts-core/dist/types/index.d.ts +4 -0
- package/node_modules/tldts-core/dist/types/src/domain-without-suffix.d.ts +6 -0
- package/node_modules/tldts-core/dist/types/src/domain.d.ts +5 -0
- package/node_modules/tldts-core/dist/types/src/extract-hostname.d.ts +17 -0
- package/node_modules/tldts-core/dist/types/src/factory.d.ts +29 -0
- package/node_modules/tldts-core/dist/types/src/is-ip.d.ts +6 -0
- package/node_modules/tldts-core/dist/types/src/is-special-use.d.ts +5 -0
- package/node_modules/tldts-core/dist/types/src/is-valid.d.ts +15 -0
- package/node_modules/tldts-core/dist/types/src/lookup/fast-path.d.ts +2 -0
- package/node_modules/tldts-core/dist/types/src/lookup/interface.d.ts +9 -0
- package/node_modules/tldts-core/dist/types/src/options.d.ts +11 -0
- package/node_modules/tldts-core/dist/types/src/subdomain.d.ts +4 -0
- package/node_modules/tldts-core/index.ts +10 -0
- package/node_modules/tldts-core/package.json +68 -0
- package/node_modules/tldts-core/src/domain-without-suffix.ts +14 -0
- package/node_modules/tldts-core/src/domain.ts +100 -0
- package/node_modules/tldts-core/src/extract-hostname.ts +480 -0
- package/node_modules/tldts-core/src/factory.ts +199 -0
- package/node_modules/tldts-core/src/is-ip.ts +87 -0
- package/node_modules/tldts-core/src/is-special-use.ts +65 -0
- package/node_modules/tldts-core/src/is-valid.ts +89 -0
- package/node_modules/tldts-core/src/lookup/fast-path.ts +80 -0
- package/node_modules/tldts-core/src/lookup/interface.ts +10 -0
- package/node_modules/tldts-core/src/options.ts +45 -0
- package/node_modules/tldts-core/src/subdomain.ts +11 -0
- package/package.json +3 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { normalizeCustomerEndpointPolicy, resolveCustomerEndpointBaseUrl, } from '@noodle-borg/compiler';
|
|
3
|
+
/**
|
|
4
|
+
* Validate and freeze only the endpoint claims declared by one runtime artifact.
|
|
5
|
+
*
|
|
6
|
+
* Invalid claims deliberately become an indistinguishable unavailable state. This function never throws
|
|
7
|
+
* and never retains the caller-owned raw claim map.
|
|
8
|
+
*/
|
|
9
|
+
export function freezeCustomerRoutes(declarations, raw) {
|
|
10
|
+
const endpoints = Object.create(null);
|
|
11
|
+
let keys;
|
|
12
|
+
try {
|
|
13
|
+
keys = Object.keys(declarations ?? {}).sort();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return frozenRoutes(endpoints);
|
|
17
|
+
}
|
|
18
|
+
for (const key of keys) {
|
|
19
|
+
let policy;
|
|
20
|
+
try {
|
|
21
|
+
policy = frozenPolicy(normalizeCustomerEndpointPolicy(declarations?.[key]));
|
|
22
|
+
const value = raw !== undefined && Object.hasOwn(raw, key) ? raw[key] : undefined;
|
|
23
|
+
const resolved = resolveCustomerEndpointBaseUrl(value, policy);
|
|
24
|
+
endpoints[key] = Object.freeze(resolved.ok
|
|
25
|
+
? { available: true, baseUrl: resolved.baseUrl, policy }
|
|
26
|
+
: { available: false, policy });
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
endpoints[key] = Object.freeze(policy === undefined ? { available: false } : { available: false, policy });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return frozenRoutes(endpoints);
|
|
33
|
+
}
|
|
34
|
+
function frozenRoutes(endpoints) {
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
endpoints: Object.freeze(endpoints),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the connector-specific safe route from an immutable request snapshot.
|
|
41
|
+
*
|
|
42
|
+
* `undefined` means the operation is static; `null` means its declared customer route is unavailable.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveCustomerConnectorRoute(routes, ref) {
|
|
45
|
+
const key = ref.customerEndpoint;
|
|
46
|
+
if (key === undefined)
|
|
47
|
+
return undefined;
|
|
48
|
+
const route = routes?.endpoints[key];
|
|
49
|
+
if (route?.available !== true)
|
|
50
|
+
return null;
|
|
51
|
+
const binding = resolveCustomerRouteBinding(routes, {
|
|
52
|
+
connectorId: ref.connectorId,
|
|
53
|
+
connectorVersion: ref.connectorVersion,
|
|
54
|
+
key,
|
|
55
|
+
});
|
|
56
|
+
if (binding === null)
|
|
57
|
+
return null;
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
...binding,
|
|
60
|
+
baseUrl: route.baseUrl,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Fail closed when any customer endpoint reachable from one fulfilment is unavailable. */
|
|
64
|
+
export function preflightFulfilmentCustomerRoutes(fulfilment, routes) {
|
|
65
|
+
const refs = fulfilment.kind === 'operation'
|
|
66
|
+
? [fulfilment.operationRef]
|
|
67
|
+
: fulfilment.steps.flatMap((step) => (step.kind === 'operation' ? [step.operationRef] : []));
|
|
68
|
+
for (const ref of refs) {
|
|
69
|
+
if (ref.resolved === true && !operationCustomerRoutesAvailable(ref, routes)) {
|
|
70
|
+
return unavailableCustomerRouteError();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/** Check one operation and every connector-declared nested endpoint before dispatch. */
|
|
76
|
+
export function preflightOperationCustomerRoutes(ref, routes) {
|
|
77
|
+
return operationCustomerRoutesAvailable(ref, routes) ? null : unavailableCustomerRouteError();
|
|
78
|
+
}
|
|
79
|
+
function operationCustomerRoutesAvailable(ref, routes) {
|
|
80
|
+
try {
|
|
81
|
+
const keys = new Set(ref.customerEndpointDependencies ?? []);
|
|
82
|
+
if (ref.customerEndpoint !== undefined)
|
|
83
|
+
keys.add(ref.customerEndpoint);
|
|
84
|
+
for (const key of keys) {
|
|
85
|
+
if (routes?.endpoints[key]?.available !== true)
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function unavailableCustomerRouteError() {
|
|
95
|
+
return {
|
|
96
|
+
code: 'connector_route_unavailable',
|
|
97
|
+
message: 'Customer connector route is unavailable.',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Resolve only the URL-blind route cache/probe binding for one connector and endpoint. */
|
|
101
|
+
export function resolveCustomerRouteBinding(routes, requirement) {
|
|
102
|
+
const route = routes?.endpoints[requirement.key];
|
|
103
|
+
if (route?.available !== true)
|
|
104
|
+
return null;
|
|
105
|
+
return Object.freeze({
|
|
106
|
+
key: requirement.key,
|
|
107
|
+
fingerprint: routeFingerprint(requirement, requirement.key, route.baseUrl, route.policy),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function frozenPolicy(policy) {
|
|
111
|
+
if ('allowedHttpsOrigins' in policy) {
|
|
112
|
+
return Object.freeze({
|
|
113
|
+
allowedHttpsOrigins: Object.freeze([...policy.allowedHttpsOrigins]),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return Object.freeze({
|
|
117
|
+
allowedHttpsHostSuffixes: Object.freeze([...policy.allowedHttpsHostSuffixes]),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function routeFingerprint(ref, key, baseUrl, policy) {
|
|
121
|
+
const policyKind = 'allowedHttpsOrigins' in policy ? 'allowedHttpsOrigins' : 'allowedHttpsHostSuffixes';
|
|
122
|
+
const values = 'allowedHttpsOrigins' in policy ? policy.allowedHttpsOrigins : policy.allowedHttpsHostSuffixes;
|
|
123
|
+
const payload = [
|
|
124
|
+
'customer-route',
|
|
125
|
+
1,
|
|
126
|
+
ref.connectorId,
|
|
127
|
+
ref.connectorVersion,
|
|
128
|
+
key,
|
|
129
|
+
baseUrl,
|
|
130
|
+
policyKind,
|
|
131
|
+
[...values].sort(),
|
|
132
|
+
];
|
|
133
|
+
return `sha256:${createHash('sha256').update(JSON.stringify(payload)).digest('hex')}`;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=customer-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-routing.js","sourceRoot":"","sources":["../src/customer-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { ArtifactFulfilment, RuntimeArtifact } from '@noodle-borg/compiler';
|
|
2
|
+
import type { CredentialBroker } from './broker/types.js';
|
|
3
|
+
import type { CallerIdentity, ConnectorRegistry, ExecutionTraceSink } from './connector/types.js';
|
|
4
|
+
import type { FrozenCustomerRoutes } from './customer-routing.js';
|
|
4
5
|
import { type EvalScope } from './eval/evaluate.js';
|
|
5
6
|
import type { InvocationContext } from './invocation-context.js';
|
|
6
7
|
import type { PolicyGate } from './policy/types.js';
|
|
7
|
-
import type {
|
|
8
|
+
import type { ExecutionResult } from './result.js';
|
|
8
9
|
import { type ToolDispatchHook } from './tool-dispatch.js';
|
|
10
|
+
export { createHost, evalExprMap, prepareOperationAction, runOperation, validateAgainstSchema, validateAgainstSchemaWithDefaults, } from './operation-execution.js';
|
|
9
11
|
/**
|
|
10
12
|
* The collaborators the runtime needs to fulfil a tool call. Note there is deliberately no inbound
|
|
11
13
|
* token here: the execution plane never sees or forwards an MCP/OAuth bearer token — downstream
|
|
@@ -18,6 +20,10 @@ export interface ExecuteDeps {
|
|
|
18
20
|
readonly policy?: PolicyGate;
|
|
19
21
|
readonly env?: Record<string, string> | (() => Promise<Record<string, string>>);
|
|
20
22
|
readonly caller?: CallerIdentity;
|
|
23
|
+
/** Verified customer IdP issuer, kept outside caller/expression scope for credential isolation. */
|
|
24
|
+
readonly customerIssuer?: string;
|
|
25
|
+
/** Request-local validated customer connector routes, kept separate from caller/expression scope. */
|
|
26
|
+
readonly customerRoutes?: FrozenCustomerRoutes;
|
|
21
27
|
readonly tenantId?: string;
|
|
22
28
|
readonly deploymentId?: string;
|
|
23
29
|
/** Immutable facts resolved once for this invocation and exposed only through `${context...}`. */
|
|
@@ -68,49 +74,4 @@ export declare function runFulfilment(fulfilment: ArtifactFulfilment, input: unk
|
|
|
68
74
|
export declare function scopeFor(input: unknown, steps: Record<string, unknown>, env: Record<string, string>, deps: ExecuteDeps): EvalScope;
|
|
69
75
|
/** @internal Shared with the suspension-aware flow executor. */
|
|
70
76
|
export declare function resolveEnv(deps: ExecuteDeps): Promise<Record<string, string>>;
|
|
71
|
-
/**
|
|
72
|
-
* Run one connector operation end to end: resolve the connector, verify the signature has not
|
|
73
|
-
* drifted, gate with policy, evaluate + validate arguments, mint a downstream credential, invoke,
|
|
74
|
-
* redact, and validate the output. Shared by single-operation fulfilment and flow operation steps.
|
|
75
|
-
*/
|
|
76
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
77
|
-
export declare function runOperation(ref: ResolvedOperationRef | {
|
|
78
|
-
resolved: false;
|
|
79
|
-
}, argsAst: ExprMap, scope: EvalScope, toolName: string, deps: ExecuteDeps, policy: PolicyGate, host: ConnectorCallHost, env: Record<string, string>, argsPath: string, outputPath: string, reviewedAction?: PreparedOperationAction, beforeDispatch?: ToolDispatchHook): Promise<ExecutionResult>;
|
|
80
|
-
type PreparedOperationActionResult = {
|
|
81
|
-
readonly ok: true;
|
|
82
|
-
readonly action: ConfirmationActionReview;
|
|
83
|
-
readonly signature: OperationSignature;
|
|
84
|
-
} | {
|
|
85
|
-
readonly ok: false;
|
|
86
|
-
readonly error: ExecutionError;
|
|
87
|
-
};
|
|
88
|
-
/** Resolve and validate an operation without policy, credentials, connector I/O, or side effects. */
|
|
89
|
-
export declare function prepareOperationAction(ref: ResolvedOperationRef | {
|
|
90
|
-
resolved: false;
|
|
91
|
-
}, argsAst: ExprMap, scope: EvalScope, deps: ExecuteDeps, argsPath: string, additionalOperationCount?: number): PreparedOperationActionResult;
|
|
92
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
93
|
-
export declare function createHost(toolName: string, deps: ExecuteDeps, policy: PolicyGate, env: Record<string, string>, callStack: string[], beforeDispatch?: ToolDispatchHook): ConnectorCallHost;
|
|
94
|
-
/** Internal control-flow error used to carry normalized runtime failures into host-call callbacks. */
|
|
95
|
-
export declare class HostCallError extends Error {
|
|
96
|
-
readonly code: ExecutionError['code'];
|
|
97
|
-
readonly path: string | undefined;
|
|
98
|
-
constructor(code: ExecutionError['code'], message: string, path?: string);
|
|
99
|
-
}
|
|
100
|
-
/** Evaluate every value in an expression map; omit any key that resolves to `undefined`. */
|
|
101
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
102
|
-
export declare function evalExprMap(map: ExprMap, scope: EvalScope, prefix: string): Record<string, unknown>;
|
|
103
|
-
/** Validate operation I/O with the same complete JSON Schema contract advertised to clients. */
|
|
104
|
-
/** @internal Shared with the ambient-context executor; not exported from the package barrel. */
|
|
105
|
-
export declare function validateAgainstSchema(value: unknown, schema: JsonSchema, pathPrefix: string, code: 'arg_invalid' | 'output_invalid', noun: string): ExecutionError | null;
|
|
106
|
-
/** Validate accepted interactive input and apply schema defaults on a defensive copy. */
|
|
107
|
-
/** @internal Shared by both confirmation and non-confirmation continuation kernels. */
|
|
108
|
-
export declare function validateAgainstSchemaWithDefaults(value: unknown, schema: JsonSchema, pathPrefix: string, code: 'arg_invalid' | 'output_invalid', noun: string): {
|
|
109
|
-
readonly ok: true;
|
|
110
|
-
readonly value: unknown;
|
|
111
|
-
} | {
|
|
112
|
-
readonly ok: false;
|
|
113
|
-
readonly error: ExecutionError;
|
|
114
|
-
};
|
|
115
|
-
export {};
|
|
116
77
|
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { preflightFulfilmentSignatures } from './connector-snapshot.js';
|
|
2
|
+
import { preflightFulfilmentCustomerRoutes } from './customer-routing.js';
|
|
3
|
+
import { ExpressionEvalError, evaluateCondition } from './eval/evaluate.js';
|
|
4
|
+
import { createHost, evalExprMap, fail, runOperation } from './operation-execution.js';
|
|
5
5
|
import { AllowAllPolicy } from './policy/allow-all.js';
|
|
6
6
|
import { attachResultMeta, splitResultMeta } from './result-meta.js';
|
|
7
|
-
import { admitSuccessfulToolResult,
|
|
7
|
+
import { admitSuccessfulToolResult, latchToolDispatchAdmission, } from './tool-dispatch.js';
|
|
8
|
+
export { createHost, evalExprMap, prepareOperationAction, runOperation, validateAgainstSchema, validateAgainstSchemaWithDefaults, } from './operation-execution.js';
|
|
8
9
|
/**
|
|
9
10
|
* Execute a tool call against a resolved runtime artifact.
|
|
10
11
|
*
|
|
@@ -61,6 +62,14 @@ export async function executePrompt(artifact, promptName, args, deps) {
|
|
|
61
62
|
*/
|
|
62
63
|
/** @internal Shared with the ambient-context executor; not exported from the package barrel. */
|
|
63
64
|
export async function runFulfilment(fulfilment, input, label, deps, beforeDispatch) {
|
|
65
|
+
if (fulfilment.kind === 'flow' && !fulfilment.steps.some((step) => step.kind === 'elicit')) {
|
|
66
|
+
const signatureError = preflightFulfilmentSignatures(fulfilment, deps.connectors);
|
|
67
|
+
if (signatureError !== null)
|
|
68
|
+
return { ok: false, error: signatureError };
|
|
69
|
+
const routeError = preflightFulfilmentCustomerRoutes(fulfilment, deps.customerRoutes);
|
|
70
|
+
if (routeError !== null)
|
|
71
|
+
return { ok: false, error: routeError };
|
|
72
|
+
}
|
|
64
73
|
const policy = deps.policy ?? new AllowAllPolicy();
|
|
65
74
|
const env = await resolveEnv(deps);
|
|
66
75
|
const callStack = [];
|
|
@@ -135,362 +144,4 @@ export async function resolveEnv(deps) {
|
|
|
135
144
|
return {};
|
|
136
145
|
return typeof deps.env === 'function' ? deps.env() : deps.env;
|
|
137
146
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Run one connector operation end to end: resolve the connector, verify the signature has not
|
|
140
|
-
* drifted, gate with policy, evaluate + validate arguments, mint a downstream credential, invoke,
|
|
141
|
-
* redact, and validate the output. Shared by single-operation fulfilment and flow operation steps.
|
|
142
|
-
*/
|
|
143
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
144
|
-
export async function runOperation(ref, argsAst, scope, toolName, deps, policy, host, env, argsPath, outputPath, reviewedAction, beforeDispatch) {
|
|
145
|
-
const prepared = prepareOperationAction(ref, argsAst, scope, deps, argsPath);
|
|
146
|
-
if (!prepared.ok)
|
|
147
|
-
return { ok: false, error: prepared.error };
|
|
148
|
-
if (reviewedAction !== undefined && !samePreparedAction(prepared.action, reviewedAction)) {
|
|
149
|
-
return fail('invalid_continuation', 'prepared connector arguments no longer match the reviewed action', argsPath);
|
|
150
|
-
}
|
|
151
|
-
if (ref.resolved !== true)
|
|
152
|
-
return fail('shape_only_artifact', 'operation reference is unresolved');
|
|
153
|
-
return invokeOperation(ref, prepared.action.arguments, prepared.signature, toolName, deps, policy, host, env, argsPath, outputPath, beforeDispatch);
|
|
154
|
-
}
|
|
155
|
-
/** Resolve and validate an operation without policy, credentials, connector I/O, or side effects. */
|
|
156
|
-
export function prepareOperationAction(ref, argsAst, scope, deps, argsPath, additionalOperationCount = 0) {
|
|
157
|
-
if (ref.resolved !== true) {
|
|
158
|
-
return {
|
|
159
|
-
ok: false,
|
|
160
|
-
error: { code: 'shape_only_artifact', message: 'operation reference is unresolved' },
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
const connector = deps.connectors.resolve(ref);
|
|
164
|
-
if (!connector) {
|
|
165
|
-
return {
|
|
166
|
-
ok: false,
|
|
167
|
-
error: {
|
|
168
|
-
code: 'connector_unavailable',
|
|
169
|
-
message: `no connector for ${ref.connectorId}@${ref.connectorVersion}`,
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
const signature = connector.signature(ref.operation);
|
|
174
|
-
const drift = checkSignature(ref, signature);
|
|
175
|
-
if (drift)
|
|
176
|
-
return { ok: false, error: drift };
|
|
177
|
-
const exactSignature = signature;
|
|
178
|
-
let evaluated;
|
|
179
|
-
try {
|
|
180
|
-
evaluated = evalExprMap(argsAst, scope, argsPath);
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
if (error instanceof ExpressionEvalError) {
|
|
184
|
-
return {
|
|
185
|
-
ok: false,
|
|
186
|
-
error: error.path === undefined
|
|
187
|
-
? { code: 'expression_error', message: error.message }
|
|
188
|
-
: { code: 'expression_error', message: error.message, path: error.path },
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
throw error;
|
|
192
|
-
}
|
|
193
|
-
const argError = validateAgainstSchema(evaluated, exactSignature.input, argsPath, 'arg_invalid', 'argument');
|
|
194
|
-
if (argError)
|
|
195
|
-
return { ok: false, error: argError };
|
|
196
|
-
return {
|
|
197
|
-
ok: true,
|
|
198
|
-
signature: exactSignature,
|
|
199
|
-
action: {
|
|
200
|
-
connectorId: ref.connectorId,
|
|
201
|
-
connectorVersion: ref.connectorVersion,
|
|
202
|
-
operation: ref.operation,
|
|
203
|
-
...(ref.credentialBinding ?? {}),
|
|
204
|
-
arguments: evaluated,
|
|
205
|
-
inputSchema: exactSignature.input,
|
|
206
|
-
additionalOperationCount,
|
|
207
|
-
},
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
function samePreparedAction(prepared, reviewed) {
|
|
211
|
-
if (prepared.connectorId !== reviewed.connectorId ||
|
|
212
|
-
prepared.connectorVersion !== reviewed.connectorVersion ||
|
|
213
|
-
prepared.operation !== reviewed.operation) {
|
|
214
|
-
return false;
|
|
215
|
-
}
|
|
216
|
-
for (const key of [
|
|
217
|
-
'bindingId',
|
|
218
|
-
'connectionId',
|
|
219
|
-
'connectionConfigRevision',
|
|
220
|
-
'profile',
|
|
221
|
-
'requiredAudience',
|
|
222
|
-
]) {
|
|
223
|
-
if (prepared[key] !== reviewed[key])
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
if (!sameJsonValue(prepared.requiredScopes, reviewed.requiredScopes))
|
|
227
|
-
return false;
|
|
228
|
-
if (!sameJsonValue(prepared.presentation, reviewed.presentation))
|
|
229
|
-
return false;
|
|
230
|
-
try {
|
|
231
|
-
return sameJsonValue(prepared.arguments, reviewed.arguments);
|
|
232
|
-
}
|
|
233
|
-
catch {
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/** Compare persisted JSON values structurally; PostgreSQL JSONB does not preserve object key order. */
|
|
238
|
-
function sameJsonValue(left, right) {
|
|
239
|
-
if (Object.is(left, right))
|
|
240
|
-
return true;
|
|
241
|
-
if (left === null || right === null || typeof left !== 'object' || typeof right !== 'object') {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
if (Array.isArray(left) || Array.isArray(right)) {
|
|
245
|
-
return (Array.isArray(left) &&
|
|
246
|
-
Array.isArray(right) &&
|
|
247
|
-
left.length === right.length &&
|
|
248
|
-
left.every((value, index) => sameJsonValue(value, right[index])));
|
|
249
|
-
}
|
|
250
|
-
const leftRecord = left;
|
|
251
|
-
const rightRecord = right;
|
|
252
|
-
const leftKeys = Object.keys(leftRecord);
|
|
253
|
-
const rightKeys = Object.keys(rightRecord);
|
|
254
|
-
return (leftKeys.length === rightKeys.length &&
|
|
255
|
-
leftKeys.every((key) => Object.hasOwn(rightRecord, key) && sameJsonValue(leftRecord[key], rightRecord[key])));
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Invoke a resolved connector operation with already-evaluated arguments. This is the shared path for
|
|
259
|
-
* manifest operation steps and host-mediated sandbox calls.
|
|
260
|
-
*/
|
|
261
|
-
async function invokeOperation(ref, args, sig, toolName, deps, policy, host, env, argsPath, outputPath, beforeDispatch) {
|
|
262
|
-
const callKey = operationKey(ref);
|
|
263
|
-
if (hostCallStack(host).includes(callKey)) {
|
|
264
|
-
return fail('circular_call_dependency', `circular connector operation call detected at ${callKey}`, outputPath);
|
|
265
|
-
}
|
|
266
|
-
hostCallStack(host).push(callKey);
|
|
267
|
-
try {
|
|
268
|
-
const connector = deps.connectors.resolve(ref);
|
|
269
|
-
if (!connector) {
|
|
270
|
-
return fail('connector_unavailable', `no connector for ${ref.connectorId}@${ref.connectorVersion}`);
|
|
271
|
-
}
|
|
272
|
-
const context = {
|
|
273
|
-
toolName,
|
|
274
|
-
connectorId: ref.connectorId,
|
|
275
|
-
connectorVersion: ref.connectorVersion,
|
|
276
|
-
operation: ref.operation,
|
|
277
|
-
...(ref.credentialBinding ?? {}),
|
|
278
|
-
...(deps.tenantId !== undefined ? { tenantId: deps.tenantId } : {}),
|
|
279
|
-
...(deps.deploymentId !== undefined ? { deploymentId: deps.deploymentId } : {}),
|
|
280
|
-
};
|
|
281
|
-
let decision;
|
|
282
|
-
try {
|
|
283
|
-
decision = await policy.before(context);
|
|
284
|
-
}
|
|
285
|
-
catch {
|
|
286
|
-
return fail('policy_error', 'policy before hook failed');
|
|
287
|
-
}
|
|
288
|
-
if (!decision.allow)
|
|
289
|
-
return fail('policy_denied', decision.reason);
|
|
290
|
-
let credential;
|
|
291
|
-
try {
|
|
292
|
-
credential = await deps.broker.getCredential({
|
|
293
|
-
connectorId: ref.connectorId,
|
|
294
|
-
connectorVersion: ref.connectorVersion,
|
|
295
|
-
operation: ref.operation,
|
|
296
|
-
...(ref.credentialBinding ?? {}),
|
|
297
|
-
...(deps.tenantId !== undefined ? { tenantId: deps.tenantId } : {}),
|
|
298
|
-
...(deps.deploymentId !== undefined ? { deploymentId: deps.deploymentId } : {}),
|
|
299
|
-
...(deps.caller !== undefined ? { caller: deps.caller } : {}),
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
if (error instanceof CredentialUnavailableError) {
|
|
304
|
-
return fail('credential_unavailable', `credential unavailable for operation "${ref.operation}"`, {
|
|
305
|
-
reason: error.reason,
|
|
306
|
-
...(error.fix === undefined ? {} : { fix: error.fix }),
|
|
307
|
-
...(error.next === undefined ? {} : { next: error.next }),
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
return fail('credential_unavailable', `credential unavailable for operation "${ref.operation}"`);
|
|
311
|
-
}
|
|
312
|
-
let connectorArgs;
|
|
313
|
-
try {
|
|
314
|
-
connectorArgs = structuredClone(args);
|
|
315
|
-
}
|
|
316
|
-
catch {
|
|
317
|
-
return fail('arg_invalid', 'connector arguments could not be safely isolated', argsPath);
|
|
318
|
-
}
|
|
319
|
-
const admissionError = await admitToolDispatch(beforeDispatch, { toolName });
|
|
320
|
-
if (admissionError !== null)
|
|
321
|
-
return { ok: false, error: admissionError };
|
|
322
|
-
let output;
|
|
323
|
-
try {
|
|
324
|
-
output = await connector.invoke({
|
|
325
|
-
operation: ref.operation,
|
|
326
|
-
args: connectorArgs,
|
|
327
|
-
env,
|
|
328
|
-
credential,
|
|
329
|
-
...(ref.credentialBinding === undefined
|
|
330
|
-
? {}
|
|
331
|
-
: { credentialPresentation: ref.credentialBinding.presentation }),
|
|
332
|
-
...(deps.caller !== undefined ? { caller: deps.caller } : {}),
|
|
333
|
-
host,
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
if (error instanceof HostCallError) {
|
|
338
|
-
return fail(error.code, error.message, error.path);
|
|
339
|
-
}
|
|
340
|
-
if (error instanceof ConnectorInvocationError) {
|
|
341
|
-
deps.trace?.record({
|
|
342
|
-
kind: 'connector',
|
|
343
|
-
connectorId: ref.connectorId,
|
|
344
|
-
connectorVersion: ref.connectorVersion,
|
|
345
|
-
operation: ref.operation,
|
|
346
|
-
...(error.status !== undefined ? { status: error.status } : {}),
|
|
347
|
-
...(error.category !== undefined ? { category: error.category } : {}),
|
|
348
|
-
...(error.attempts !== undefined ? { attempts: error.attempts } : {}),
|
|
349
|
-
...(error.retryable !== undefined ? { retryable: error.retryable } : {}),
|
|
350
|
-
...(error.retryAfterMs !== undefined ? { retryAfterMs: error.retryAfterMs } : {}),
|
|
351
|
-
...(error.responseExcerpt !== undefined
|
|
352
|
-
? { responseExcerpt: error.responseExcerpt }
|
|
353
|
-
: {}),
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
// Normalize connector failures; never surface backend internals or credentials.
|
|
357
|
-
return fail('connector_error', `connector failed for operation "${ref.operation}"`);
|
|
358
|
-
}
|
|
359
|
-
let redacted;
|
|
360
|
-
try {
|
|
361
|
-
redacted = await policy.after(context, output);
|
|
362
|
-
}
|
|
363
|
-
catch {
|
|
364
|
-
return fail('policy_error', 'policy after hook failed');
|
|
365
|
-
}
|
|
366
|
-
// Projection metadata is a reserved runtime envelope, not part of the connector's visible output
|
|
367
|
-
// contract. Validate the visible value deeply while preserving policy-processed metadata for the
|
|
368
|
-
// flow/result projection channel.
|
|
369
|
-
const outputError = validateAgainstSchema(splitResultMeta(redacted).visible, sig.output, outputPath, 'output_invalid', 'output field');
|
|
370
|
-
if (outputError)
|
|
371
|
-
return { ok: false, error: outputError };
|
|
372
|
-
return { ok: true, output: redacted };
|
|
373
|
-
}
|
|
374
|
-
finally {
|
|
375
|
-
hostCallStack(host).pop();
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
379
|
-
export function createHost(toolName, deps, policy, env, callStack, beforeDispatch) {
|
|
380
|
-
const host = {
|
|
381
|
-
[CALL_STACK]: callStack,
|
|
382
|
-
async callOperation(ref, args, path) {
|
|
383
|
-
const connector = deps.connectors.resolve(ref);
|
|
384
|
-
if (!connector)
|
|
385
|
-
throw new HostCallError('connector_unavailable', 'connector unavailable');
|
|
386
|
-
const signature = connector.signature(ref.operation);
|
|
387
|
-
const drift = checkSignature(ref, signature);
|
|
388
|
-
if (drift)
|
|
389
|
-
throw new HostCallError(drift.code, drift.message, drift.path);
|
|
390
|
-
const sig = signature;
|
|
391
|
-
const argError = validateAgainstSchema(args, sig.input, `${path}.args`, 'arg_invalid', 'argument');
|
|
392
|
-
if (argError)
|
|
393
|
-
throw new HostCallError(argError.code, argError.message, argError.path);
|
|
394
|
-
const result = await invokeOperation(ref, args, sig, toolName, deps, policy, this, env, `${path}.args`, `${path}.output`, beforeDispatch);
|
|
395
|
-
if (!result.ok) {
|
|
396
|
-
throw new HostCallError(result.error.code, result.error.message, result.error.path);
|
|
397
|
-
}
|
|
398
|
-
return result.output;
|
|
399
|
-
},
|
|
400
|
-
};
|
|
401
|
-
return host;
|
|
402
|
-
}
|
|
403
|
-
const CALL_STACK = Symbol('noodle.connectorCallStack');
|
|
404
|
-
function operationKey(ref) {
|
|
405
|
-
return `${ref.connectorId}@${ref.connectorVersion}.${ref.operation}`;
|
|
406
|
-
}
|
|
407
|
-
function hostCallStack(host) {
|
|
408
|
-
return host[CALL_STACK];
|
|
409
|
-
}
|
|
410
|
-
/** Internal control-flow error used to carry normalized runtime failures into host-call callbacks. */
|
|
411
|
-
export class HostCallError extends Error {
|
|
412
|
-
code;
|
|
413
|
-
path;
|
|
414
|
-
constructor(code, message, path) {
|
|
415
|
-
super(message);
|
|
416
|
-
this.name = 'HostCallError';
|
|
417
|
-
this.code = code;
|
|
418
|
-
this.path = path;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
/** Verify the connector's live signature matches the hash the artifact was compiled against. */
|
|
422
|
-
function checkSignature(ref, signature) {
|
|
423
|
-
if (!signature) {
|
|
424
|
-
return {
|
|
425
|
-
code: 'signature_drift',
|
|
426
|
-
message: `connector has no operation "${ref.operation}"`,
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
const actual = computeSignatureHash(ref.operation, signature);
|
|
430
|
-
if (actual !== ref.signatureHash) {
|
|
431
|
-
return {
|
|
432
|
-
code: 'signature_drift',
|
|
433
|
-
message: `operation "${ref.operation}" signature has drifted from the compiled artifact`,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
return null;
|
|
437
|
-
}
|
|
438
|
-
/** Evaluate every value in an expression map; omit any key that resolves to `undefined`. */
|
|
439
|
-
/** @internal Shared with the suspension-aware flow executor. */
|
|
440
|
-
export function evalExprMap(map, scope, prefix) {
|
|
441
|
-
const out = {};
|
|
442
|
-
for (const [key, node] of Object.entries(map)) {
|
|
443
|
-
const value = evaluateValue(node, scope, `${prefix}.${key}`);
|
|
444
|
-
if (value !== undefined)
|
|
445
|
-
out[key] = value;
|
|
446
|
-
}
|
|
447
|
-
return out;
|
|
448
|
-
}
|
|
449
|
-
/** Validate operation I/O with the same complete JSON Schema contract advertised to clients. */
|
|
450
|
-
/** @internal Shared with the ambient-context executor; not exported from the package barrel. */
|
|
451
|
-
export function validateAgainstSchema(value, schema, pathPrefix, code, noun) {
|
|
452
|
-
const issue = validateJsonSchema(schema, value)[0];
|
|
453
|
-
if (issue === undefined)
|
|
454
|
-
return null;
|
|
455
|
-
return {
|
|
456
|
-
code,
|
|
457
|
-
path: issue.path.length === 0 ? pathPrefix : `${pathPrefix}.${issue.path}`,
|
|
458
|
-
message: runtimeValidationMessage(noun, issue),
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
/** Validate accepted interactive input and apply schema defaults on a defensive copy. */
|
|
462
|
-
/** @internal Shared by both confirmation and non-confirmation continuation kernels. */
|
|
463
|
-
export function validateAgainstSchemaWithDefaults(value, schema, pathPrefix, code, noun) {
|
|
464
|
-
const validated = validateJsonSchemaWithDefaults(schema, value);
|
|
465
|
-
const issue = validated.issues[0];
|
|
466
|
-
if (issue === undefined)
|
|
467
|
-
return { ok: true, value: validated.value };
|
|
468
|
-
return {
|
|
469
|
-
ok: false,
|
|
470
|
-
error: {
|
|
471
|
-
code,
|
|
472
|
-
path: issue.path.length === 0 ? pathPrefix : `${pathPrefix}.${issue.path}`,
|
|
473
|
-
message: runtimeValidationMessage(noun, issue),
|
|
474
|
-
},
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
function runtimeValidationMessage(noun, issue) {
|
|
478
|
-
const field = issue.path.split('.').at(-1);
|
|
479
|
-
if (issue.keyword === 'required' && field !== undefined) {
|
|
480
|
-
return `missing required ${noun} "${field}"`;
|
|
481
|
-
}
|
|
482
|
-
if (issue.keyword === 'type' && issue.path.length === 0) {
|
|
483
|
-
return `${noun} container must be a non-null object`;
|
|
484
|
-
}
|
|
485
|
-
if (issue.keyword === 'type' && field !== undefined) {
|
|
486
|
-
return `${noun} "${field}" ${issue.message.replace(/^expected /, 'expects ')}`;
|
|
487
|
-
}
|
|
488
|
-
return `${noun}${field === undefined ? '' : ` "${field}"`} ${issue.message}`;
|
|
489
|
-
}
|
|
490
|
-
function fail(code, message, pathOrDetails) {
|
|
491
|
-
if (typeof pathOrDetails === 'string') {
|
|
492
|
-
return { ok: false, error: { code, message, path: pathOrDetails } };
|
|
493
|
-
}
|
|
494
|
-
return { ok: false, error: { code, message, ...pathOrDetails } };
|
|
495
|
-
}
|
|
496
147
|
//# sourceMappingURL=execute.js.map
|