@noodleseed/one 0.162.0 → 0.163.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/commands/billing-catalog-ops.d.ts +4 -0
- package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
- package/dist/commands/billing-catalog-ops.js +58 -0
- package/dist/commands/billing-catalog-ops.js.map +1 -0
- package/dist/commands/billing-ops.d.ts.map +1 -1
- package/dist/commands/billing-ops.js +3 -0
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +2 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/config-values.d.ts.map +1 -1
- package/dist/commands/config-values.js +16 -0
- package/dist/commands/config-values.js.map +1 -1
- package/dist/commands/installation-variables.d.ts +26 -0
- package/dist/commands/installation-variables.d.ts.map +1 -0
- package/dist/commands/installation-variables.js +171 -0
- package/dist/commands/installation-variables.js.map +1 -0
- package/dist/commands/solutions-activity.d.ts +5 -0
- package/dist/commands/solutions-activity.d.ts.map +1 -0
- package/dist/commands/solutions-activity.js +116 -0
- package/dist/commands/solutions-activity.js.map +1 -0
- package/dist/commands/solutions-connections.d.ts +7 -0
- package/dist/commands/solutions-connections.d.ts.map +1 -0
- package/dist/commands/solutions-connections.js +88 -0
- package/dist/commands/solutions-connections.js.map +1 -0
- package/dist/commands/solutions-installation-options.d.ts +5 -0
- package/dist/commands/solutions-installation-options.d.ts.map +1 -0
- package/dist/commands/solutions-installation-options.js +52 -0
- package/dist/commands/solutions-installation-options.js.map +1 -0
- package/dist/commands/solutions-onboarding.d.ts +5 -0
- package/dist/commands/solutions-onboarding.d.ts.map +1 -0
- package/dist/commands/solutions-onboarding.js +113 -0
- package/dist/commands/solutions-onboarding.js.map +1 -0
- package/dist/commands/solutions-ops.d.ts.map +1 -1
- package/dist/commands/solutions-ops.js +278 -17
- package/dist/commands/solutions-ops.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/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
- package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
- package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
- package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
- package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
- package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
- package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
- package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
- package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
- package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
- package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
- package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
- package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
- package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
- package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
- package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
- package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
- package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
- package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
- package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
- package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
- package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
- package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +2 -1
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +20 -0
- package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
- package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
- package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
- package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
- package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
- package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
- package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
- package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
- package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
- package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
- package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
- package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
- package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
- package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
- package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
- package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
- package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
- package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
- package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
- package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
- package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
- package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
- package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
- package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
- package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
- package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
- package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
- package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
- package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
- package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
- package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
- package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
- package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
- package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
- package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
- package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
- package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
- package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
- package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
- package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
- package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
- package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
- package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
- package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
- package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
- package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
- package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
- package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
- package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
- package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
- package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
- package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
- package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
- package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
- package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
- package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +19 -233
- package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
- package/node_modules/@noodle-borg/service/dist/service.js +57 -11
- package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
- package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
- package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
- package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
- package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
- package/node_modules/@noodle-borg/service/package.json +2 -2
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
- package/node_modules/@noodle-borg/transport-http/package.json +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
- package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
- package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
- package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
- package/node_modules/@noodleseed/assistant/README.md +5 -0
- package/package.json +2 -2
|
@@ -7,7 +7,7 @@ import { compileExpr, compileExprMap, evalMap, } from './compile-expr.js';
|
|
|
7
7
|
import { catalogCredentialMetadata } from './credential-profiles.js';
|
|
8
8
|
import { toHeaderRecord, validateHeaderNames } from './http-headers.js';
|
|
9
9
|
import { collectVariableExpression, collectVariablesFromExpr, collectVariablesFromExprMap, isVariableExpression, } from './variables.js';
|
|
10
|
-
const REQUEST_ROOTS = new Set(['args', 'env']);
|
|
10
|
+
const REQUEST_ROOTS = new Set(['args', 'env', 'execution']);
|
|
11
11
|
const RESPONSE_ROOTS = new Set(['args', 'response']);
|
|
12
12
|
const PROJECTION_ROOTS = new Set(['args', 'response', 'output']);
|
|
13
13
|
const PAGINATION_ROOTS = RESPONSE_ROOTS;
|
|
@@ -45,6 +45,29 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
45
45
|
message: 'http.allowedOrigins is required when http.baseUrl is a managed variable',
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
+
if (def.http.transportAuth !== undefined) {
|
|
49
|
+
if (def.http.auth !== undefined ||
|
|
50
|
+
Object.values(def.operations).some((op) => op.auth !== undefined) ||
|
|
51
|
+
routedBase) {
|
|
52
|
+
errors.push({
|
|
53
|
+
code: 'transport_auth_conflict',
|
|
54
|
+
path: `connectors.${def.id}.http.transportAuth`,
|
|
55
|
+
message: 'transportAuth requires a fixed/managed origin and account credential profiles, without legacy auth',
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const transportHeader = def.http.transportAuth.header.toLowerCase();
|
|
60
|
+
const profiles = Object.values(def.credentialProfiles ?? {});
|
|
61
|
+
if (profiles.length === 0 ||
|
|
62
|
+
profiles.some((profile) => profile.kind === 'apiKey' && profile.header.toLowerCase() === transportHeader)) {
|
|
63
|
+
errors.push({
|
|
64
|
+
code: 'transport_auth_conflict',
|
|
65
|
+
path: `connectors.${def.id}.http.transportAuth`,
|
|
66
|
+
message: 'transportAuth requires account profiles with distinct credential headers',
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
48
71
|
for (const [opName, op] of Object.entries(def.operations)) {
|
|
49
72
|
const base = `connectors.${def.id}.operations.${opName}`;
|
|
50
73
|
if (op.type === 'action' && op.resilience?.retry !== undefined) {
|
|
@@ -79,6 +102,14 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
79
102
|
message: 'HTTP paths take {name} placeholders (authored as ${args.name}); other ${...} expressions are not supported in a path',
|
|
80
103
|
});
|
|
81
104
|
}
|
|
105
|
+
if (def.http.transportAuth !== undefined &&
|
|
106
|
+
Object.keys(op.headers ?? {}).some((name) => name.toLowerCase() === def.http.transportAuth?.header.toLowerCase())) {
|
|
107
|
+
errors.push({
|
|
108
|
+
code: 'transport_auth_header_conflict',
|
|
109
|
+
path: `${base}.headers`,
|
|
110
|
+
message: 'operation headers cannot write the transport credential header',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
82
113
|
validateFakeShape(op, `${base}.fake`, errors);
|
|
83
114
|
const signature = toSignature(op.type, op.input, op.output);
|
|
84
115
|
signatures[opName] = signature;
|
|
@@ -94,6 +125,9 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
94
125
|
const responseAst = op.response
|
|
95
126
|
? compileExprMap(op.response, RESPONSE_ROOTS, `${base}.response`, errors)
|
|
96
127
|
: undefined;
|
|
128
|
+
const evidenceAst = op.evidence
|
|
129
|
+
? compileExprMap(op.evidence, new Set(['response']), `${base}.evidence`, errors)
|
|
130
|
+
: undefined;
|
|
97
131
|
// Headers use the same roots as the request body (args + env), so a runtime value threaded through
|
|
98
132
|
// args can be attached as dynamic, non-credential request metadata.
|
|
99
133
|
validateHeaderNames(op.headers, `${base}.headers`, errors);
|
|
@@ -105,7 +139,7 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
105
139
|
const pagination = compilePagination(op, `${base}.pagination`, errors);
|
|
106
140
|
const projection = compileProjection(op, `${base}.projection`, errors);
|
|
107
141
|
const fake = httpFake(op.fake);
|
|
108
|
-
operations[opName] = buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection);
|
|
142
|
+
operations[opName] = buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection, evidenceAst);
|
|
109
143
|
// Per-operation auth declares its own secret reference (overrides any connector-level default).
|
|
110
144
|
addAuthBinding({
|
|
111
145
|
auth: op.auth,
|
|
@@ -129,7 +163,7 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
129
163
|
});
|
|
130
164
|
// Connector-level default auth binds every operation that doesn't carry its own scheme.
|
|
131
165
|
addAuthBinding({
|
|
132
|
-
auth: def.http.auth,
|
|
166
|
+
auth: def.http.transportAuth ?? def.http.auth,
|
|
133
167
|
connectorId: def.id,
|
|
134
168
|
connectorVersion: def.version,
|
|
135
169
|
...(customerEndpoint === undefined ? {} : { customerEndpoint }),
|
|
@@ -145,6 +179,9 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
|
|
|
145
179
|
baseUrl: def.http.baseUrl,
|
|
146
180
|
...(def.http.allowedOrigins ? { allowedOrigins: def.http.allowedOrigins } : {}),
|
|
147
181
|
...(def.http.auth ? { auth: toAuthScheme(def.http.auth) } : {}),
|
|
182
|
+
...(def.http.transportAuth
|
|
183
|
+
? { transportAuth: { kind: 'apiKey', header: def.http.transportAuth.header } }
|
|
184
|
+
: {}),
|
|
148
185
|
...(mode === 'fake' ? { fakeMode: true } : {}),
|
|
149
186
|
operations,
|
|
150
187
|
};
|
|
@@ -231,10 +268,14 @@ function compileRequest(request, path, errors) {
|
|
|
231
268
|
function isRecord(value) {
|
|
232
269
|
return value !== null && typeof value === 'object';
|
|
233
270
|
}
|
|
234
|
-
function buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection) {
|
|
271
|
+
function buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection, evidenceAst) {
|
|
235
272
|
const resilience = httpResilience(op.resilience);
|
|
236
273
|
return {
|
|
237
274
|
method: op.method ?? 'GET',
|
|
275
|
+
requiresExecution: [
|
|
276
|
+
...(requestAst?.kind === 'value' ? [requestAst.node] : Object.values(requestAst?.map ?? {})),
|
|
277
|
+
...Object.values(headersAst ?? {}),
|
|
278
|
+
].some(usesExecutionIdentity),
|
|
238
279
|
path: op.path,
|
|
239
280
|
...(op.query ? { query: op.query } : {}),
|
|
240
281
|
signature,
|
|
@@ -246,21 +287,55 @@ function buildOperation(op, signature, requestAst, responseAst, headersAst, pagi
|
|
|
246
287
|
...(op.limits !== undefined ? { maxResponseBytes: op.limits.maxResponseBytes } : {}),
|
|
247
288
|
...(op.responseType !== undefined ? { responseType: op.responseType } : {}),
|
|
248
289
|
...(op.requestEncoding !== undefined ? { requestEncoding: op.requestEncoding } : {}),
|
|
290
|
+
...(evidenceAst === undefined
|
|
291
|
+
? {}
|
|
292
|
+
: {
|
|
293
|
+
evidence: (json) => {
|
|
294
|
+
const value = evalMap(evidenceAst, { response: json });
|
|
295
|
+
const outcome = value.outcome;
|
|
296
|
+
if (outcome !== 'completed' &&
|
|
297
|
+
outcome !== 'rejected' &&
|
|
298
|
+
outcome !== 'accepted' &&
|
|
299
|
+
outcome !== 'unknown')
|
|
300
|
+
return { outcome: 'unknown' };
|
|
301
|
+
return {
|
|
302
|
+
outcome,
|
|
303
|
+
...(typeof value.reference === 'string' ? { reference: value.reference } : {}),
|
|
304
|
+
};
|
|
305
|
+
},
|
|
306
|
+
}),
|
|
249
307
|
...(requestAst
|
|
250
308
|
? {
|
|
251
|
-
body: (args, env) => requestAst.kind === 'map'
|
|
252
|
-
? evalMap(requestAst.map, { args, env })
|
|
253
|
-
: evaluateValue(requestAst.node, { args, env }, 'request'),
|
|
309
|
+
body: (args, env, execution) => requestAst.kind === 'map'
|
|
310
|
+
? evalMap(requestAst.map, { args, env, execution })
|
|
311
|
+
: evaluateValue(requestAst.node, { args, env, execution }, 'request'),
|
|
254
312
|
}
|
|
255
313
|
: {}),
|
|
256
314
|
...(responseAst
|
|
257
315
|
? { mapResponse: (json, args) => evalMap(responseAst, { args, response: json }) }
|
|
258
316
|
: {}),
|
|
259
317
|
...(headersAst
|
|
260
|
-
? {
|
|
318
|
+
? {
|
|
319
|
+
headers: (args, env, execution) => toHeaderRecord(evalMap(headersAst, { args, env, execution })),
|
|
320
|
+
}
|
|
261
321
|
: {}),
|
|
262
322
|
};
|
|
263
323
|
}
|
|
324
|
+
function usesExecutionIdentity(node) {
|
|
325
|
+
if (node.kind === 'path')
|
|
326
|
+
return node.root === 'execution';
|
|
327
|
+
if (node.kind === 'template')
|
|
328
|
+
return node.parts.some((part) => part.kind !== 'text' && usesExecutionIdentity(part));
|
|
329
|
+
if (node.kind === 'array')
|
|
330
|
+
return node.items.some(usesExecutionIdentity);
|
|
331
|
+
if (node.kind === 'object')
|
|
332
|
+
return node.entries.some((entry) => usesExecutionIdentity(entry.value));
|
|
333
|
+
if (node.kind === 'coalesce')
|
|
334
|
+
return usesExecutionIdentity(node.left) || usesExecutionIdentity(node.right);
|
|
335
|
+
if (node.kind === 'function')
|
|
336
|
+
return node.args.some(usesExecutionIdentity);
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
264
339
|
function compileProjection(op, path, errors) {
|
|
265
340
|
const projection = op.projection;
|
|
266
341
|
if (projection === undefined)
|
|
@@ -99,6 +99,10 @@ declare const httpOperationSchema: z.ZodObject<{
|
|
|
99
99
|
"form-urlencoded": "form-urlencoded";
|
|
100
100
|
}>>;
|
|
101
101
|
response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
102
|
+
evidence: z.ZodOptional<z.ZodObject<{
|
|
103
|
+
outcome: z.ZodString;
|
|
104
|
+
reference: z.ZodOptional<z.ZodString>;
|
|
105
|
+
}, z.core.$strict>>;
|
|
102
106
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
103
107
|
responseType: z.ZodOptional<z.ZodEnum<{
|
|
104
108
|
json: "json";
|
|
@@ -342,7 +346,6 @@ declare const computeOperationSchema: z.ZodObject<{
|
|
|
342
346
|
audience: z.ZodOptional<z.ZodString>;
|
|
343
347
|
}, z.core.$strict>>;
|
|
344
348
|
}, z.core.$strict>;
|
|
345
|
-
/** An outbound HTTP connector: a declared `http` origin + HTTP operations with `${...}` mapping. */
|
|
346
349
|
declare const httpConnectorDefSchema: z.ZodObject<{
|
|
347
350
|
http: z.ZodObject<{
|
|
348
351
|
baseUrl: z.ZodUnion<readonly [z.ZodString, z.ZodString, z.ZodObject<{
|
|
@@ -422,6 +425,11 @@ declare const httpConnectorDefSchema: z.ZodObject<{
|
|
|
422
425
|
client_secret_post: "client_secret_post";
|
|
423
426
|
}>>;
|
|
424
427
|
}, z.core.$strict>], "kind">>;
|
|
428
|
+
transportAuth: z.ZodOptional<z.ZodObject<{
|
|
429
|
+
kind: z.ZodLiteral<"apiKey">;
|
|
430
|
+
header: z.ZodString;
|
|
431
|
+
secret: z.ZodString;
|
|
432
|
+
}, z.core.$strict>>;
|
|
425
433
|
}, z.core.$strict>;
|
|
426
434
|
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
427
435
|
type: z.ZodEnum<{
|
|
@@ -445,6 +453,10 @@ declare const httpConnectorDefSchema: z.ZodObject<{
|
|
|
445
453
|
"form-urlencoded": "form-urlencoded";
|
|
446
454
|
}>>;
|
|
447
455
|
response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
456
|
+
evidence: z.ZodOptional<z.ZodObject<{
|
|
457
|
+
outcome: z.ZodString;
|
|
458
|
+
reference: z.ZodOptional<z.ZodString>;
|
|
459
|
+
}, z.core.$strict>>;
|
|
448
460
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
449
461
|
responseType: z.ZodOptional<z.ZodEnum<{
|
|
450
462
|
json: "json";
|
|
@@ -887,6 +899,11 @@ declare const connectorDefSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
887
899
|
client_secret_post: "client_secret_post";
|
|
888
900
|
}>>;
|
|
889
901
|
}, z.core.$strict>], "kind">>;
|
|
902
|
+
transportAuth: z.ZodOptional<z.ZodObject<{
|
|
903
|
+
kind: z.ZodLiteral<"apiKey">;
|
|
904
|
+
header: z.ZodString;
|
|
905
|
+
secret: z.ZodString;
|
|
906
|
+
}, z.core.$strict>>;
|
|
890
907
|
}, z.core.$strict>;
|
|
891
908
|
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
892
909
|
type: z.ZodEnum<{
|
|
@@ -910,6 +927,10 @@ declare const connectorDefSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
910
927
|
"form-urlencoded": "form-urlencoded";
|
|
911
928
|
}>>;
|
|
912
929
|
response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
930
|
+
evidence: z.ZodOptional<z.ZodObject<{
|
|
931
|
+
outcome: z.ZodString;
|
|
932
|
+
reference: z.ZodOptional<z.ZodString>;
|
|
933
|
+
}, z.core.$strict>>;
|
|
913
934
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
914
935
|
responseType: z.ZodOptional<z.ZodEnum<{
|
|
915
936
|
json: "json";
|
|
@@ -1345,6 +1366,11 @@ export declare const connectorFileSchema: z.ZodObject<{
|
|
|
1345
1366
|
client_secret_post: "client_secret_post";
|
|
1346
1367
|
}>>;
|
|
1347
1368
|
}, z.core.$strict>], "kind">>;
|
|
1369
|
+
transportAuth: z.ZodOptional<z.ZodObject<{
|
|
1370
|
+
kind: z.ZodLiteral<"apiKey">;
|
|
1371
|
+
header: z.ZodString;
|
|
1372
|
+
secret: z.ZodString;
|
|
1373
|
+
}, z.core.$strict>>;
|
|
1348
1374
|
}, z.core.$strict>;
|
|
1349
1375
|
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1350
1376
|
type: z.ZodEnum<{
|
|
@@ -1368,6 +1394,10 @@ export declare const connectorFileSchema: z.ZodObject<{
|
|
|
1368
1394
|
"form-urlencoded": "form-urlencoded";
|
|
1369
1395
|
}>>;
|
|
1370
1396
|
response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1397
|
+
evidence: z.ZodOptional<z.ZodObject<{
|
|
1398
|
+
outcome: z.ZodString;
|
|
1399
|
+
reference: z.ZodOptional<z.ZodString>;
|
|
1400
|
+
}, z.core.$strict>>;
|
|
1371
1401
|
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1372
1402
|
responseType: z.ZodOptional<z.ZodEnum<{
|
|
1373
1403
|
json: "json";
|
|
@@ -308,6 +308,11 @@ const httpOperationSchema = z
|
|
|
308
308
|
/** How to encode a non-GET request mapping. JSON remains the default. */
|
|
309
309
|
requestEncoding: z.enum(['json', 'form-urlencoded']).optional(),
|
|
310
310
|
response: exprMapSchema.optional(),
|
|
311
|
+
/** Explicit provider evidence mapping; never infer completion from an HTTP status or tool name. */
|
|
312
|
+
evidence: z
|
|
313
|
+
.object({ outcome: z.string().min(1), reference: z.string().min(1).optional() })
|
|
314
|
+
.strict()
|
|
315
|
+
.optional(),
|
|
311
316
|
/**
|
|
312
317
|
* Per-operation request headers: header name -> a `${...}` expression (over `args`/`env`) or a
|
|
313
318
|
* literal string. Merged over the connector defaults but *below* the `auth` scheme, so a declared
|
|
@@ -491,6 +496,16 @@ const connectorIdentity = {
|
|
|
491
496
|
.optional(),
|
|
492
497
|
};
|
|
493
498
|
/** An outbound HTTP connector: a declared `http` origin + HTTP operations with `${...}` mapping. */
|
|
499
|
+
const transportAuthSchema = z
|
|
500
|
+
.object({
|
|
501
|
+
kind: z.literal('apiKey'),
|
|
502
|
+
header: z
|
|
503
|
+
.string()
|
|
504
|
+
.regex(/^x-[a-z0-9]+(?:-[a-z0-9]+)*$/iu)
|
|
505
|
+
.refine((header) => !/^x-(?:forwarded(?:-|$)|real-ip$|http-method-override$|original-url$|rewrite-url$)/iu.test(header), 'transport authentication cannot use routing headers'),
|
|
506
|
+
secret: secretRefSchema,
|
|
507
|
+
})
|
|
508
|
+
.strict();
|
|
494
509
|
const httpConnectorDefSchema = z
|
|
495
510
|
.object({
|
|
496
511
|
...connectorIdentity,
|
|
@@ -502,6 +517,7 @@ const httpConnectorDefSchema = z
|
|
|
502
517
|
.optional(),
|
|
503
518
|
/** Connector-default auth scheme; an operation's own `auth` overrides it. */
|
|
504
519
|
auth: httpAuthSchema.optional(),
|
|
520
|
+
transportAuth: transportAuthSchema.optional(),
|
|
505
521
|
})
|
|
506
522
|
.strict(),
|
|
507
523
|
operations: z.record(z.string(), httpOperationSchema),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CustomerEndpointRef, type OperationSignature } from '@noodle-borg/compiler';
|
|
2
|
-
import { type Connector, type ConnectorCall, type DownstreamCredential } from '@noodle-borg/runtime';
|
|
2
|
+
import { type Connector, type ConnectorCall, type DownstreamCredential, type OperationEvidence } from '@noodle-borg/runtime';
|
|
3
3
|
import { type HttpRetryPolicy } from './http-response.js';
|
|
4
4
|
import { type HttpOperationProjection } from './projection.js';
|
|
5
5
|
import { type HttpRequestEncoding } from './request-encoding.js';
|
|
@@ -57,6 +57,9 @@ export interface HttpOperationFake {
|
|
|
57
57
|
* declared output fields.
|
|
58
58
|
*/
|
|
59
59
|
export interface HttpOperation {
|
|
60
|
+
readonly evidence?: (json: unknown) => OperationEvidence;
|
|
61
|
+
/** Compiler-derived requirement for mappings that consume the trusted operation identity. */
|
|
62
|
+
readonly requiresExecution?: boolean;
|
|
60
63
|
readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
61
64
|
readonly path: string;
|
|
62
65
|
readonly query?: readonly string[];
|
|
@@ -64,7 +67,7 @@ export interface HttpOperation {
|
|
|
64
67
|
/** Per-operation base URL override. Its resolved request origin must still be in the allowlist. */
|
|
65
68
|
readonly baseUrl?: string;
|
|
66
69
|
/** Build a JSON request body from already-evaluated, validated args. Ignored for `GET`. */
|
|
67
|
-
readonly body?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string,
|
|
70
|
+
readonly body?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, unknown>>, execution?: ConnectorCall['execution']) => unknown;
|
|
68
71
|
/** Encode the evaluated body as JSON (default) or a WHATWG URLSearchParams form body. */
|
|
69
72
|
readonly requestEncoding?: HttpRequestEncoding;
|
|
70
73
|
/** Per-operation auth scheme; overrides the connector-level `auth`. */
|
|
@@ -74,7 +77,7 @@ export interface HttpOperation {
|
|
|
74
77
|
* defaults but *below* the `auth` scheme, so a declared `auth` block always wins. Lets an operation
|
|
75
78
|
* attach a runtime value — e.g. a token from a prior operation — as `Authorization: Bearer ${args.token}`.
|
|
76
79
|
*/
|
|
77
|
-
readonly headers?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string,
|
|
80
|
+
readonly headers?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, unknown>>, execution?: ConnectorCall['execution']) => Record<string, string>;
|
|
78
81
|
readonly mapResponse?: (json: unknown, args: Readonly<Record<string, unknown>>) => Record<string, unknown>;
|
|
79
82
|
readonly resilience?: HttpOperationResilience;
|
|
80
83
|
readonly pagination?: HttpOperationPagination;
|
|
@@ -105,6 +108,11 @@ export interface HttpConnectorConfig {
|
|
|
105
108
|
readonly headers?: Readonly<Record<string, string>>;
|
|
106
109
|
/** Connector-default auth scheme (an operation's own `auth` overrides this). */
|
|
107
110
|
readonly auth?: HttpAuthScheme;
|
|
111
|
+
/** Independent deployment API key; account credentials still use their bound presentation. */
|
|
112
|
+
readonly transportAuth?: {
|
|
113
|
+
readonly kind: 'apiKey';
|
|
114
|
+
readonly header: string;
|
|
115
|
+
};
|
|
108
116
|
/**
|
|
109
117
|
* Legacy escape hatch: map the broker credential to arbitrary auth headers. Used only when no
|
|
110
118
|
* declarative `auth` scheme resolves for the operation. Omitted for public, no-auth APIs.
|
|
@@ -145,6 +153,7 @@ export declare class HttpConnector implements Connector {
|
|
|
145
153
|
readonly version: string;
|
|
146
154
|
constructor(config: HttpConnectorConfig);
|
|
147
155
|
signature(operation: string): OperationSignature | undefined;
|
|
156
|
+
executionBoundMs(operation: string): number | undefined;
|
|
148
157
|
invoke(call: ConnectorCall): Promise<unknown>;
|
|
149
158
|
}
|
|
150
159
|
export {};
|
|
@@ -49,10 +49,19 @@ export class HttpConnector {
|
|
|
49
49
|
signature(operation) {
|
|
50
50
|
return this.#config.operations[operation]?.signature;
|
|
51
51
|
}
|
|
52
|
+
executionBoundMs(operation) {
|
|
53
|
+
const op = this.#config.operations[operation];
|
|
54
|
+
// Actions never use automatic retry; read retries do not create durable effect evidence.
|
|
55
|
+
return op?.signature.type === 'action'
|
|
56
|
+
? (op.resilience?.timeoutMs ?? this.#config.timeoutMs ?? 10_000)
|
|
57
|
+
: undefined;
|
|
58
|
+
}
|
|
52
59
|
async invoke(call) {
|
|
53
60
|
const op = this.#config.operations[call.operation];
|
|
54
61
|
if (!op)
|
|
55
62
|
throw new Error(`connector "${this.id}" has no operation "${call.operation}"`);
|
|
63
|
+
if (op.requiresExecution && !call.execution?.id)
|
|
64
|
+
throw new Error('Trusted operation identity unavailable');
|
|
56
65
|
const configuredBase = this.#config.baseUrl;
|
|
57
66
|
const customerBase = this.#customerBase
|
|
58
67
|
? resolveCustomerBase(this.#customerBase, op, call)
|
|
@@ -64,6 +73,8 @@ export class HttpConnector {
|
|
|
64
73
|
const json = op.pagination === undefined
|
|
65
74
|
? this.#fakeJson(call.operation, op)
|
|
66
75
|
: await this.#fakePaginatedJson(call.operation, op, call.args);
|
|
76
|
+
if (op.evidence)
|
|
77
|
+
call.reportOutcome?.(op.evidence(json));
|
|
67
78
|
return this.#mapOutput(op, json, call.args);
|
|
68
79
|
}
|
|
69
80
|
const env = call.env ?? {};
|
|
@@ -75,15 +86,20 @@ export class HttpConnector {
|
|
|
75
86
|
// material is constructed.
|
|
76
87
|
await this.#validateUrl(url, customerBase, allowed);
|
|
77
88
|
const method = op.method ?? 'GET';
|
|
78
|
-
const payload = requestPayload(op.requestEncoding, method !== 'GET' && op.body !== undefined
|
|
89
|
+
const payload = requestPayload(op.requestEncoding, method !== 'GET' && op.body !== undefined
|
|
90
|
+
? () => op.body?.(call.args, env, call.execution)
|
|
91
|
+
: undefined);
|
|
92
|
+
const transportHeaders = await this.#transportHeaders(call);
|
|
79
93
|
const headers = {
|
|
80
94
|
accept: op.responseType === 'text' ? 'text/plain, text/*;q=0.9, */*;q=0.8' : 'application/json',
|
|
81
95
|
'user-agent': 'noodle-borg/0.0',
|
|
82
96
|
...this.#config.headers,
|
|
83
97
|
// Per-operation dynamic headers sit below the auth scheme, so a declared `auth` block always wins.
|
|
84
|
-
...(op.headers !== undefined ? op.headers(call.args, env) : {}),
|
|
98
|
+
...(op.headers !== undefined ? op.headers(call.args, env, call.execution) : {}),
|
|
85
99
|
...this.#authHeaders(op, call.credential, call.credentialPresentation),
|
|
86
100
|
};
|
|
101
|
+
for (const [name, value] of Object.entries(transportHeaders))
|
|
102
|
+
setOwnedHeader(headers, name, value);
|
|
87
103
|
if (payload !== undefined) {
|
|
88
104
|
setOwnedHeader(headers, 'content-type', op.requestEncoding === 'form-urlencoded'
|
|
89
105
|
? 'application/x-www-form-urlencoded;charset=UTF-8'
|
|
@@ -96,11 +112,14 @@ export class HttpConnector {
|
|
|
96
112
|
const init = {
|
|
97
113
|
method,
|
|
98
114
|
headers,
|
|
115
|
+
...(call.signal === undefined ? {} : { signal: call.signal }),
|
|
99
116
|
...(payload !== undefined ? { body: payload } : {}),
|
|
100
117
|
};
|
|
101
118
|
const json = op.pagination === undefined
|
|
102
119
|
? await this.#fetchJsonWithResilience(url, op, init)
|
|
103
120
|
: await this.#fetchPaginatedJson(op, call.args, base, init, customerBase, allowed);
|
|
121
|
+
if (op.evidence)
|
|
122
|
+
call.reportOutcome?.(op.evidence(json));
|
|
104
123
|
return this.#mapOutput(op, json, call.args);
|
|
105
124
|
}
|
|
106
125
|
catch (error) {
|
|
@@ -109,6 +128,26 @@ export class HttpConnector {
|
|
|
109
128
|
throw error;
|
|
110
129
|
}
|
|
111
130
|
}
|
|
131
|
+
async #transportHeaders(call) {
|
|
132
|
+
const transport = this.#config.transportAuth;
|
|
133
|
+
if (transport === undefined)
|
|
134
|
+
return {};
|
|
135
|
+
const header = transport.header.toLowerCase();
|
|
136
|
+
const account = call.credentialPresentation;
|
|
137
|
+
if (!/^x-[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(header) ||
|
|
138
|
+
account === undefined ||
|
|
139
|
+
(account.kind === 'apiKey' && account.header.toLowerCase() === header) ||
|
|
140
|
+
call.acquireTransportCredential === undefined) {
|
|
141
|
+
throw new Error('Independent transport authentication is not configured safely');
|
|
142
|
+
}
|
|
143
|
+
const credential = await call.acquireTransportCredential();
|
|
144
|
+
if (credential.kind === 'cookie' ||
|
|
145
|
+
credential.token.length < 1 ||
|
|
146
|
+
credential.token.length > 4096 ||
|
|
147
|
+
/[\r\n]/u.test(credential.token))
|
|
148
|
+
throw new Error('Independent transport requires a valid bounded token credential');
|
|
149
|
+
return { [header]: credential.token };
|
|
150
|
+
}
|
|
112
151
|
#mapOutput(op, json, args) {
|
|
113
152
|
const mapped = op.mapResponse ? op.mapResponse(json, args) : json;
|
|
114
153
|
if (op.projection === undefined)
|
|
@@ -23,7 +23,8 @@ export async function fetchResponseWithResilience(url, op, init, options) {
|
|
|
23
23
|
const timeoutMs = op.resilience?.timeoutMs ?? options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
24
24
|
let lastError;
|
|
25
25
|
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
26
|
-
const
|
|
26
|
+
const timeout = AbortSignal.timeout(timeoutMs);
|
|
27
|
+
const signal = init.signal ? AbortSignal.any([init.signal, timeout]) : timeout;
|
|
27
28
|
try {
|
|
28
29
|
const response = await guardedFetch(url, {
|
|
29
30
|
...init,
|
|
@@ -53,7 +54,7 @@ export async function fetchResponseWithResilience(url, op, init, options) {
|
|
|
53
54
|
catch (error) {
|
|
54
55
|
const normalized = normalizeAttemptError(error, attempt, retry, op.signature.type === 'read', signal.aborted);
|
|
55
56
|
lastError = normalized.error;
|
|
56
|
-
if (!normalized.retry || attempt >= maxAttempts)
|
|
57
|
+
if (init.signal?.aborted || !normalized.retry || attempt >= maxAttempts)
|
|
57
58
|
throw lastError;
|
|
58
59
|
await sleep(retryDelayMs(retry, attempt, normalized.retryAfterMs));
|
|
59
60
|
}
|
|
@@ -11,7 +11,7 @@ export function resolveManagedString(configured, env) {
|
|
|
11
11
|
return configured;
|
|
12
12
|
const name = match[1];
|
|
13
13
|
const value = env[name];
|
|
14
|
-
if (value
|
|
14
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
15
15
|
throw new ConnectorInvocationError(`managed variable "${name}" is unavailable`, {
|
|
16
16
|
category: 'invalid_response',
|
|
17
17
|
retryable: false,
|
|
@@ -8,7 +8,7 @@ export function resolveConfigString(value, env) {
|
|
|
8
8
|
if (match?.[1] === undefined)
|
|
9
9
|
return value;
|
|
10
10
|
const resolved = env[match[1]];
|
|
11
|
-
if (resolved
|
|
11
|
+
if (typeof resolved !== 'string') {
|
|
12
12
|
throw new ConnectorInvocationError(`managed variable "${match[1]}" is not configured`, {
|
|
13
13
|
category: 'invalid_response',
|
|
14
14
|
retryable: false,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { OrganizationAgreementStore } from './organization-agreements.js';
|
|
1
2
|
export type OrgRole = 'owner' | 'developer';
|
|
2
3
|
/** The canonical principal bound to a personal workspace must remain that organization's owner. */
|
|
3
4
|
export declare class PersonalWorkspaceOwnerMutationError extends Error {
|
|
@@ -125,7 +126,7 @@ export interface WelcomeEmailRecord {
|
|
|
125
126
|
readonly providerMessageId?: string;
|
|
126
127
|
readonly lastErrorCode?: 'delivery_failed';
|
|
127
128
|
}
|
|
128
|
-
export interface OrganizationStore {
|
|
129
|
+
export interface OrganizationStore extends OrganizationAgreementStore {
|
|
129
130
|
/** Resolve the one active public MCP label for an immutable organization identity. */
|
|
130
131
|
getActiveMcpSubdomain(org: string): Promise<ActiveMcpSubdomainClaim | undefined>;
|
|
131
132
|
/** Resolve an active public MCP label to its immutable organization identity. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ActiveMcpSubdomainClaim, ChangeMcpSubdomainInput, McpSubdomainMutationResult, McpSubdomainSetting, OrganizationStore, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord } from './contracts.js';
|
|
2
|
+
import { type AcceptOrganizationAgreementInput } from './organization-agreements.js';
|
|
2
3
|
interface InMemoryOrganizationStoreOptions {
|
|
3
4
|
readonly now?: () => Date;
|
|
4
5
|
readonly orgs?: Map<string, OrgRecord>;
|
|
@@ -8,6 +9,8 @@ interface InMemoryOrganizationStoreOptions {
|
|
|
8
9
|
export declare class InMemoryOrganizationStore {
|
|
9
10
|
#private;
|
|
10
11
|
constructor(options?: InMemoryOrganizationStoreOptions);
|
|
12
|
+
getOrganizationAgreement(org: string, version: string): Promise<import("./organization-agreements.js").OrganizationAgreementAcceptance | undefined>;
|
|
13
|
+
acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<import("./organization-agreements.js").OrganizationAgreementAcceptance>;
|
|
11
14
|
hasOrg(org: string): boolean;
|
|
12
15
|
isExactOwner(org: string, subject: string): boolean;
|
|
13
16
|
ensureDefaultMcpSubdomain(org: string): ActiveMcpSubdomainClaim | undefined;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { InMemoryMcpSubdomainClaimStore } from './mcp-subdomain-claims.js';
|
|
3
|
+
import { InMemoryOrganizationAgreements, } from './organization-agreements.js';
|
|
3
4
|
import { domainFromEmail, domainKey, memberKey, normalizeSignupAllowlistValue, signupKey, } from './organization-helpers.js';
|
|
4
5
|
import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, } from './validation.js';
|
|
5
6
|
/** Shared in-memory organization persistence used by service-backed development stores. */
|
|
@@ -12,11 +13,19 @@ export class InMemoryOrganizationStore {
|
|
|
12
13
|
#invitations = new Map();
|
|
13
14
|
#mcpSubdomainClaims;
|
|
14
15
|
#now;
|
|
16
|
+
#agreements;
|
|
15
17
|
constructor(options = {}) {
|
|
16
18
|
this.#now = options.now ?? (() => new Date());
|
|
17
19
|
this.#orgs = options.orgs ?? new Map();
|
|
18
20
|
this.#members = options.members ?? new Map();
|
|
19
21
|
this.#mcpSubdomainClaims = new InMemoryMcpSubdomainClaimStore(this.#now);
|
|
22
|
+
this.#agreements = new InMemoryOrganizationAgreements((org, subject) => this.isExactOwner(org, subject), this.#now);
|
|
23
|
+
}
|
|
24
|
+
getOrganizationAgreement(org, version) {
|
|
25
|
+
return this.#agreements.getOrganizationAgreement(org, version);
|
|
26
|
+
}
|
|
27
|
+
acceptOrganizationAgreement(input) {
|
|
28
|
+
return this.#agreements.acceptOrganizationAgreement(input);
|
|
20
29
|
}
|
|
21
30
|
hasOrg(org) {
|
|
22
31
|
return this.#orgs.has(org);
|
|
@@ -266,6 +275,8 @@ export class InMemoryOrganizationStore {
|
|
|
266
275
|
/** Bind standard organization methods for composition with service-owned billing and outbox state. */
|
|
267
276
|
export function bindInMemoryOrganizationStore(store) {
|
|
268
277
|
return {
|
|
278
|
+
getOrganizationAgreement: store.getOrganizationAgreement.bind(store),
|
|
279
|
+
acceptOrganizationAgreement: store.acceptOrganizationAgreement.bind(store),
|
|
269
280
|
getActiveMcpSubdomain: store.getActiveMcpSubdomain.bind(store),
|
|
270
281
|
resolveActiveMcpSubdomain: store.resolveActiveMcpSubdomain.bind(store),
|
|
271
282
|
getMcpSubdomainSetting: store.getMcpSubdomainSetting.bind(store),
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface AgreementDocument {
|
|
2
|
+
readonly url: string;
|
|
3
|
+
readonly sha256: string;
|
|
4
|
+
}
|
|
5
|
+
/** Deployment-approved immutable identities, never supplied authoritatively by a browser. */
|
|
6
|
+
export interface AgreementDocuments {
|
|
7
|
+
readonly version: string;
|
|
8
|
+
readonly terms: AgreementDocument;
|
|
9
|
+
readonly privacy: AgreementDocument;
|
|
10
|
+
readonly processing: AgreementDocument;
|
|
11
|
+
}
|
|
12
|
+
export interface OrganizationAgreementAcceptance {
|
|
13
|
+
readonly org: string;
|
|
14
|
+
readonly actorSubject: string;
|
|
15
|
+
readonly documents: AgreementDocuments;
|
|
16
|
+
readonly documentDigest: string;
|
|
17
|
+
readonly acceptedAt: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AcceptOrganizationAgreementInput {
|
|
20
|
+
readonly org: string;
|
|
21
|
+
readonly actorSubject: string;
|
|
22
|
+
/** Trusted catalog entry selected by service policy after checking the submitted version/digest. */
|
|
23
|
+
readonly documents: AgreementDocuments;
|
|
24
|
+
}
|
|
25
|
+
export interface OrganizationAgreementStore {
|
|
26
|
+
getOrganizationAgreement(org: string, version: string): Promise<OrganizationAgreementAcceptance | undefined>;
|
|
27
|
+
/** Repeats live exact-owner authorization atomically; equal acceptance preserves the first receipt. */
|
|
28
|
+
acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<OrganizationAgreementAcceptance>;
|
|
29
|
+
}
|
|
30
|
+
export declare class OrganizationAgreementError extends Error {
|
|
31
|
+
readonly code: 'agreement_owner_required' | 'agreement_version_conflict';
|
|
32
|
+
constructor(code: 'agreement_owner_required' | 'agreement_version_conflict');
|
|
33
|
+
}
|
|
34
|
+
export declare function validateAgreementDocuments(input: AgreementDocuments): AgreementDocuments;
|
|
35
|
+
export declare function agreementDocumentDigest(documents: AgreementDocuments): string;
|
|
36
|
+
/** Synchronous commit boundary keeps membership recheck, catalog registration and receipt indivisible. */
|
|
37
|
+
export declare class InMemoryOrganizationAgreements implements OrganizationAgreementStore {
|
|
38
|
+
#private;
|
|
39
|
+
private readonly isOwner;
|
|
40
|
+
private readonly now;
|
|
41
|
+
constructor(isOwner: (org: string, subject: string) => boolean, now: () => Date);
|
|
42
|
+
getOrganizationAgreement(org: string, version: string): Promise<OrganizationAgreementAcceptance | undefined>;
|
|
43
|
+
acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<OrganizationAgreementAcceptance>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=organization-agreements.d.ts.map
|