@noodleseed/one 0.162.0 → 0.164.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/banner.d.ts +6 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +29 -0
- package/dist/banner.js.map +1 -0
- 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/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +2 -0
- package/dist/commands/project-setup.js.map +1 -1
- 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/first-run.d.ts.map +1 -1
- package/dist/first-run.js +2 -0
- package/dist/first-run.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/index.d.ts +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +10 -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/dist/welcome-wordmark.d.ts +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.js +10 -0
- 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/assistant-gateway/package.json +1 -1
- 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 +4 -1
- package/node_modules/@noodle-borg/control-plane/dist/deploy-gates.js +1 -0
- 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 +22 -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 +33 -234
- 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/node_modules/@noodleseed/assistant/package.json +1 -1
- package/package.json +2 -2
|
@@ -9,6 +9,7 @@ import { emitCatalogArtifactSurfaces, isContextProvider, } from './artifact/cata
|
|
|
9
9
|
import { MCP_APP_MIME_TYPE, } from './artifact/types.js';
|
|
10
10
|
import { rewriteHostedAssets, rewriteLocalAssets, } from './assets.js';
|
|
11
11
|
import { brandingWarnings, normalizeRuntimeBranding } from './branding.js';
|
|
12
|
+
import { compileVariableDeclarations } from './business-variables.js';
|
|
12
13
|
import { validateInteractiveFlow } from './confirmation-flow.js';
|
|
13
14
|
import { parseAmbientContext } from './context-compile.js';
|
|
14
15
|
import { findExternalRef, parseFulfilment } from './fulfilment-structural.js';
|
|
@@ -144,7 +145,11 @@ export function compileManifest(raw, options = {}) {
|
|
|
144
145
|
// 2. Structural passes (catalog-independent): duplicate names, `$use` resolution, external refs,
|
|
145
146
|
// fulfilment parsing. `$use` is resolved first so external-ref detection also scans bundled defs.
|
|
146
147
|
const errors = widgetHtmlSizeErrors(manifest, runtimeBranding);
|
|
147
|
-
const
|
|
148
|
+
const variables = compileVariableDeclarations(manifest.manifestVersion === '2' ? (manifest.server.variables ?? []) : [], manifest.tools.map((tool) => tool.name), errors);
|
|
149
|
+
const managedCollections = compileManagedCollections(manifest.manifestVersion === '2' ? (manifest.server.collections ?? []) : [], manifest.tools.map((tool) => tool.name), errors, {
|
|
150
|
+
...(options.catalog === undefined ? {} : { catalog: options.catalog }),
|
|
151
|
+
declared: manifest.connectors ?? {},
|
|
152
|
+
});
|
|
148
153
|
const requirements = parseCapabilityRequirements(manifest.requires, errors);
|
|
149
154
|
const seen = new Set();
|
|
150
155
|
const schemasMap = manifest.schemas ?? {};
|
|
@@ -437,6 +442,7 @@ export function compileManifest(raw, options = {}) {
|
|
|
437
442
|
customerEndpoints,
|
|
438
443
|
...(knowledge.length > 0 ? { knowledge } : {}),
|
|
439
444
|
...(managedCollections.length > 0 ? { managedCollections } : {}),
|
|
445
|
+
...(variables.length > 0 ? { variables } : {}),
|
|
440
446
|
});
|
|
441
447
|
const warnings = [
|
|
442
448
|
...brandingWarnings(manifest.server.branding),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AppPackageArtifactV1 } from '@noodle-borg/app-package';
|
|
2
2
|
import type { RuntimeArtifact } from './artifact/types.js';
|
|
3
3
|
import type { PackagedAsset } from './assets.js';
|
|
4
|
-
export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
|
|
4
|
+
export type CompileErrorCode = 'invalid_context_provider' | 'yaml_parse_error' | 'invalid_shape' | 'invalid_name' | 'duplicate_name' | 'reserved_name' | 'unsupported_manifest_version' | 'reserved_for_future_version' | 'invalid_operation_ref' | 'external_ref' | 'invalid_schema_ref' | 'unknown_schema_ref' | 'schema_ref_conflict' | 'invalid_expression' | 'expr_unknown_root' | 'expr_root_unavailable' | 'expr_operator_not_allowed' | 'expr_if_not_boolean' | 'unknown_step_ref' | 'forward_step_ref' | 'self_step_ref' | 'duplicate_step_id' | 'invalid_fulfilment' | 'invalid_elicitation_schema' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'arg_type_mismatch' | 'ambient_context_action' | 'duplicate_resource' | 'duplicate_prompt' | 'duplicate_resource_uri' | 'unsupported_uri_template' | 'duplicate_widget' | 'unknown_widget_tool' | 'unknown_widget_action_tool' | 'duplicate_widget_tool' | 'invalid_widget_binding' | 'invalid_widget_state_handle' | 'widget_html_too_large' | 'widget_html_total_too_large' | 'invalid_asset' | 'invalid_capability_requirement' | 'state_secret_field' | 'invalid_knowledge' | 'knowledge_unhashed' | 'invalid_managed_collection' | 'invalid_variable_declaration' | 'invalid_managed_collection_source' | 'unknown_connector_alias' | 'connector_not_in_catalog' | 'unknown_operation' | 'connector_binding_required' | 'unsupported_credential_profile' | 'credential_scope_mismatch' | 'credential_audience_mismatch' | 'customer_endpoint_auth_required' | 'customer_endpoint_mapping_required' | 'customer_endpoint_unknown_mapping' | 'customer_endpoint_bridge_unsupported' | 'assistant_capability_unknown' | 'assistant_public_user_reference' | 'assistant_public_effect_unconfirmed' | 'customer_endpoint_action_unsupported' | 'customer_endpoint_surface_unsupported' | 'customer_endpoint_credential_source_unsupported' | 'customer_endpoint_policy_conflict' | 'customer_endpoint_routing_inconsistent' | 'unused_connector_alias' | 'arg_mismatch' | 'agent_guide_invalid' | 'agent_guide_duplicate_workflow' | 'agent_guide_duplicate_example' | 'agent_guide_example_workflow_missing' | 'agent_guide_capability_missing' | 'agent_guide_capability_kind' | 'app_package_sensitive_content';
|
|
5
5
|
export interface CompileError {
|
|
6
6
|
readonly code: CompileErrorCode;
|
|
7
7
|
/** Dotted path to the offending location (e.g. `tools.1.name`); empty string for the document root. */
|
|
@@ -5,6 +5,7 @@ export { compileAppPackage } from './app-package/compile.js';
|
|
|
5
5
|
export { isSafeReadTool, requiresToolConfirmation } from './artifact/consent.js';
|
|
6
6
|
export { ARTIFACT_SCHEMA_VERSION, type ArtifactConnectionSource, type ArtifactConnectorBinding, type ArtifactCustomerAuthRouting, type ArtifactFulfilment, type ArtifactManagedCollection, type ArtifactMeta, type ArtifactPackagedAsset, type ArtifactPrompt, type ArtifactPromptArgument, type ArtifactResource, type ArtifactServer, type ArtifactServerContext, type ArtifactState, type ArtifactStateHandle, type ArtifactStateHandleKind, type ArtifactStateHandleScope, type ArtifactStep, type ArtifactTool, type ArtifactToolAuthorization, type ExprMap, type JsonSchema, MCP_APP_MIME_TYPE, type OperationRef, type ResolvedCredentialBinding, type ResolvedOperationRef, type RuntimeArtifact, type UnresolvedOperationRef, type WidgetUiMeta, } from './artifact/types.js';
|
|
7
7
|
export { assetReference, type HostedAssetOptions, type HostedPackagedAsset, isPackagedAssetReference, type LocalAssetOptions, localAssetRoutePrefix, type PackagedAsset, type PackagedAssetReference, type PreparedPackagedAsset, prepareLocalAssets, } from './assets.js';
|
|
8
|
+
export { type ArtifactVariableDeclaration, compileVariableDeclarations, MAX_VARIABLE_DECLARATIONS, MAX_VARIABLE_SCHEMA_BYTES, MAX_VARIABLE_SCHEMA_DEPTH, MAX_VARIABLE_VALUE_BYTES, type VariableDeclarationManifest, validateVariableDeclaration, variableDeclarationManifestSchema, } from './business-variables.js';
|
|
8
9
|
export { InMemoryCatalog } from './catalog/in-memory.js';
|
|
9
10
|
export { isLegacyFieldMap, normalizeOperationIoSchema } from './catalog/io-schema.js';
|
|
10
11
|
export { computeSignatureHash } from './catalog/signature.js';
|
|
@@ -13,6 +14,7 @@ export { type CompileOptions, compile, compileManifest, type ValidateResult, val
|
|
|
13
14
|
export { type CustomerEndpointPolicy, type CustomerEndpointRef, isCustomerEndpointRef, isValidCustomerEndpointName, normalizeCustomerEndpointPolicy, resolveCustomerEndpointBaseUrl, } from './customer-endpoint.js';
|
|
14
15
|
export type { CompileError, CompileErrorCode, CompileResult } from './errors.js';
|
|
15
16
|
export { computeConnectionConfigRevision } from './fulfilment-emit.js';
|
|
17
|
+
export { type ManagedCollectionControls, projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
|
|
16
18
|
export { MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH, MAX_MANAGED_COLLECTION_NAME_LENGTH, MAX_MANAGED_COLLECTION_RECORD_FIELDS, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH, MAX_MANAGED_COLLECTION_SCHEMA_VERSION, MAX_MANAGED_COLLECTION_TITLE_LENGTH, MAX_MANAGED_COLLECTIONS, type ManagedCollectionManifest, } from './managed-collections.js';
|
|
17
19
|
export { type CspFault, type CspList, cspFaultsInManifest, cspOriginFaults, isHonorableCspOrigin, } from './manifest/csp-origins.js';
|
|
18
20
|
export { type ArrayNode, type CoalesceNode, type CondNode, type ExprNode, type ObjectEntry, type ObjectNode, type PathNode, type PathSegment, parseCondition, parseValue, } from './manifest/expression.js';
|
|
@@ -21,6 +23,7 @@ export { type Manifest, manifestSchema } from './manifest/schema.js';
|
|
|
21
23
|
export { type ResolveSchemaResult, resolveSchemaUses, type SchemasMap, } from './manifest/schema-refs.js';
|
|
22
24
|
export { anonymousBehavior } from './manifest/website-projection.js';
|
|
23
25
|
export { type SniffedImage, sniffImageBytes } from './mime-sniffing.js';
|
|
26
|
+
export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
|
|
24
27
|
export { manifestJsonSchema } from './schema-export.js';
|
|
25
28
|
export { MAX_COMPILED_WIDGET_HTML_BYTES, MAX_RAW_WIDGET_HTML_BYTES, MAX_TOTAL_WIDGET_HTML_BYTES, RECOMMENDED_COMPILED_WIDGET_HTML_BYTES, } from './widget-limits.js';
|
|
26
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -4,12 +4,14 @@ export { compileAppPackage } from './app-package/compile.js';
|
|
|
4
4
|
export { isSafeReadTool, requiresToolConfirmation } from './artifact/consent.js';
|
|
5
5
|
export { ARTIFACT_SCHEMA_VERSION, MCP_APP_MIME_TYPE, } from './artifact/types.js';
|
|
6
6
|
export { assetReference, isPackagedAssetReference, localAssetRoutePrefix, prepareLocalAssets, } from './assets.js';
|
|
7
|
+
export { compileVariableDeclarations, MAX_VARIABLE_DECLARATIONS, MAX_VARIABLE_SCHEMA_BYTES, MAX_VARIABLE_SCHEMA_DEPTH, MAX_VARIABLE_VALUE_BYTES, validateVariableDeclaration, variableDeclarationManifestSchema, } from './business-variables.js';
|
|
7
8
|
export { InMemoryCatalog } from './catalog/in-memory.js';
|
|
8
9
|
export { isLegacyFieldMap, normalizeOperationIoSchema } from './catalog/io-schema.js';
|
|
9
10
|
export { computeSignatureHash } from './catalog/signature.js';
|
|
10
11
|
export { compile, compileManifest, validateManifest, } from './compile.js';
|
|
11
12
|
export { isCustomerEndpointRef, isValidCustomerEndpointName, normalizeCustomerEndpointPolicy, resolveCustomerEndpointBaseUrl, } from './customer-endpoint.js';
|
|
12
13
|
export { computeConnectionConfigRevision } from './fulfilment-emit.js';
|
|
14
|
+
export { projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
|
|
13
15
|
export { MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH, MAX_MANAGED_COLLECTION_NAME_LENGTH, MAX_MANAGED_COLLECTION_RECORD_FIELDS, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES, MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH, MAX_MANAGED_COLLECTION_SCHEMA_VERSION, MAX_MANAGED_COLLECTION_TITLE_LENGTH, MAX_MANAGED_COLLECTIONS, } from './managed-collections.js';
|
|
14
16
|
export { cspFaultsInManifest, cspOriginFaults, isHonorableCspOrigin, } from './manifest/csp-origins.js';
|
|
15
17
|
export { parseCondition, parseValue, } from './manifest/expression.js';
|
|
@@ -18,6 +20,7 @@ export { manifestSchema } from './manifest/schema.js';
|
|
|
18
20
|
export { resolveSchemaUses, } from './manifest/schema-refs.js';
|
|
19
21
|
export { anonymousBehavior } from './manifest/website-projection.js';
|
|
20
22
|
export { sniffImageBytes } from './mime-sniffing.js';
|
|
23
|
+
export { BUILTIN_RECORD_CATALOG_CONNECTOR, RECORD_CONNECTOR_ID, RECORD_CONNECTOR_VERSION, RECORD_OPERATION_SIGNATURES, } from './native-record-operations.js';
|
|
21
24
|
export { manifestJsonSchema } from './schema-export.js';
|
|
22
25
|
export { MAX_COMPILED_WIDGET_HTML_BYTES, MAX_RAW_WIDGET_HTML_BYTES, MAX_TOTAL_WIDGET_HTML_BYTES, RECOMMENDED_COMPILED_WIDGET_HTML_BYTES, } from './widget-limits.js';
|
|
23
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { CompileError } from './errors.js';
|
|
3
|
+
export declare const managedCollectionControlFields: {
|
|
4
|
+
management: z.ZodOptional<z.ZodObject<{
|
|
5
|
+
assignment: z.ZodOptional<z.ZodLiteral<true>>;
|
|
6
|
+
notes: z.ZodOptional<z.ZodLiteral<true>>;
|
|
7
|
+
}, z.core.$strict>>;
|
|
8
|
+
fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
9
|
+
label: z.ZodOptional<z.ZodString>;
|
|
10
|
+
help: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strict>>>;
|
|
12
|
+
publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
+
summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
|
+
filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
16
|
+
sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
};
|
|
18
|
+
declare const controlsSchema: z.ZodObject<{
|
|
19
|
+
management: z.ZodOptional<z.ZodObject<{
|
|
20
|
+
assignment: z.ZodOptional<z.ZodLiteral<true>>;
|
|
21
|
+
notes: z.ZodOptional<z.ZodLiteral<true>>;
|
|
22
|
+
}, z.core.$strict>>;
|
|
23
|
+
fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
24
|
+
label: z.ZodOptional<z.ZodString>;
|
|
25
|
+
help: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strict>>>;
|
|
27
|
+
publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
+
editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
|
+
summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
|
+
filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
32
|
+
}, z.core.$strict>;
|
|
33
|
+
export interface ManagedCollectionControls {
|
|
34
|
+
readonly management?: {
|
|
35
|
+
readonly assignment?: true | undefined;
|
|
36
|
+
readonly notes?: true | undefined;
|
|
37
|
+
} | undefined;
|
|
38
|
+
readonly fields?: Readonly<Record<string, {
|
|
39
|
+
readonly label?: string | undefined;
|
|
40
|
+
readonly help?: string | undefined;
|
|
41
|
+
}>> | undefined;
|
|
42
|
+
readonly publicFields?: readonly string[] | undefined;
|
|
43
|
+
readonly editableFields?: readonly string[] | undefined;
|
|
44
|
+
readonly summaryFields?: readonly string[] | undefined;
|
|
45
|
+
readonly filterFields?: readonly string[] | undefined;
|
|
46
|
+
readonly sortFields?: readonly string[] | undefined;
|
|
47
|
+
}
|
|
48
|
+
/** Validate presentation/exposure against actual record fields, independently of application names. */
|
|
49
|
+
export declare function validateManagedCollectionControls(controls: ManagedCollectionControls, schema: Readonly<Record<string, unknown>>, external: boolean, path: string, errors: CompileError[]): void;
|
|
50
|
+
export declare function projectManagedCollectionControls(value: ManagedCollectionControls): z.infer<typeof controlsSchema>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=managed-collection-controls.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { validateJsonSchema } from '@noodle-borg/app-package';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const fieldName = z
|
|
4
|
+
.string()
|
|
5
|
+
.min(1)
|
|
6
|
+
.max(64)
|
|
7
|
+
.regex(/^(?!(?:__proto__|constructor|prototype)$)[A-Za-z_][A-Za-z0-9_]*$/);
|
|
8
|
+
const fieldList = z.array(fieldName).max(128);
|
|
9
|
+
const plainText = (max) => z
|
|
10
|
+
.string()
|
|
11
|
+
.trim()
|
|
12
|
+
.min(1)
|
|
13
|
+
.max(max)
|
|
14
|
+
.regex(/^[^<>\p{Cc}]+$/u);
|
|
15
|
+
export const managedCollectionControlFields = {
|
|
16
|
+
management: z
|
|
17
|
+
.object({ assignment: z.literal(true).optional(), notes: z.literal(true).optional() })
|
|
18
|
+
.strict()
|
|
19
|
+
.optional(),
|
|
20
|
+
fields: z
|
|
21
|
+
.record(fieldName, z.object({ label: plainText(120).optional(), help: plainText(1000).optional() }).strict())
|
|
22
|
+
.optional(),
|
|
23
|
+
publicFields: fieldList.optional(),
|
|
24
|
+
editableFields: fieldList.optional(),
|
|
25
|
+
summaryFields: fieldList.optional(),
|
|
26
|
+
filterFields: fieldList.optional(),
|
|
27
|
+
sortFields: fieldList.optional(),
|
|
28
|
+
};
|
|
29
|
+
const controlsSchema = z.object(managedCollectionControlFields).strict();
|
|
30
|
+
/** Validate presentation/exposure against actual record fields, independently of application names. */
|
|
31
|
+
export function validateManagedCollectionControls(controls, schema, external, path, errors) {
|
|
32
|
+
const fail = (suffix, message) => errors.push({ code: 'invalid_managed_collection', path: `${path}.${suffix}`, message });
|
|
33
|
+
if (!controlsSchema.safeParse(controls).success) {
|
|
34
|
+
fail('fields', 'invalid collection management or field metadata');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const properties = isObject(schema.properties) ? schema.properties : {};
|
|
38
|
+
for (const key of [
|
|
39
|
+
'publicFields',
|
|
40
|
+
'editableFields',
|
|
41
|
+
'summaryFields',
|
|
42
|
+
'filterFields',
|
|
43
|
+
'sortFields',
|
|
44
|
+
]) {
|
|
45
|
+
const names = controls[key] ?? [];
|
|
46
|
+
if (new Set(names).size !== names.length)
|
|
47
|
+
fail(key, 'duplicate field reference');
|
|
48
|
+
for (const name of names) {
|
|
49
|
+
if (!Object.hasOwn(properties, name))
|
|
50
|
+
fail(key, 'field is not declared in the record schema');
|
|
51
|
+
if ((key === 'filterFields' || key === 'sortFields') &&
|
|
52
|
+
(!isObject(properties[name]) ||
|
|
53
|
+
!['string', 'number', 'integer', 'boolean'].includes(String(properties[name].type))))
|
|
54
|
+
fail(key, 'filter and sort fields must be scalar values');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
for (const name of Object.keys(controls.fields ?? {}))
|
|
58
|
+
if (!Object.hasOwn(properties, name))
|
|
59
|
+
fail('fields', 'metadata must name a declared field');
|
|
60
|
+
if (external &&
|
|
61
|
+
(controls.management !== undefined ||
|
|
62
|
+
(controls.publicFields?.length ?? 0) > 0 ||
|
|
63
|
+
(controls.editableFields?.length ?? 0) > 0))
|
|
64
|
+
fail('management', 'external reference collections cannot enable record writes, assignment or notes');
|
|
65
|
+
if ((controls.publicFields?.length ?? 0) > 0 && Array.isArray(schema.required)) {
|
|
66
|
+
for (const name of schema.required) {
|
|
67
|
+
if (typeof name !== 'string' || controls.publicFields?.includes(name))
|
|
68
|
+
continue;
|
|
69
|
+
const property = properties[name];
|
|
70
|
+
if (!isObject(property) ||
|
|
71
|
+
!Object.hasOwn(property, 'default') ||
|
|
72
|
+
validateJsonSchema(property, property.default).length > 0)
|
|
73
|
+
fail('publicFields', 'required non-public fields need valid creation defaults');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const property of Object.values(properties)) {
|
|
77
|
+
if (isObject(property) &&
|
|
78
|
+
Object.hasOwn(property, 'default') &&
|
|
79
|
+
validateJsonSchema(property, property.default).length > 0)
|
|
80
|
+
fail('recordSchema', 'creation default does not match its field schema');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function projectManagedCollectionControls(value) {
|
|
84
|
+
return controlsSchema.parse(Object.fromEntries(Object.keys(managedCollectionControlFields).flatMap((key) => {
|
|
85
|
+
const entry = value[key];
|
|
86
|
+
return entry === undefined ? [] : [[key, structuredClone(entry)]];
|
|
87
|
+
})));
|
|
88
|
+
}
|
|
89
|
+
function isObject(value) {
|
|
90
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=managed-collection-controls.js.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { ArtifactManagedCollection } from './artifact/types.js';
|
|
3
|
+
import type { ConnectorCatalog } from './catalog/types.js';
|
|
3
4
|
import type { CompileError } from './errors.js';
|
|
5
|
+
import { type DeclaredConnectorRef } from './fulfilment-emit.js';
|
|
4
6
|
export declare const MAX_MANAGED_COLLECTIONS = 16;
|
|
5
7
|
export declare const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
|
|
6
8
|
export declare const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
|
|
@@ -10,16 +12,39 @@ export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES: number;
|
|
|
10
12
|
export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH = 12;
|
|
11
13
|
export declare const MAX_MANAGED_COLLECTION_RECORD_FIELDS = 128;
|
|
12
14
|
export declare const managedCollectionManifestSchema: z.ZodObject<{
|
|
15
|
+
management: z.ZodOptional<z.ZodObject<{
|
|
16
|
+
assignment: z.ZodOptional<z.ZodLiteral<true>>;
|
|
17
|
+
notes: z.ZodOptional<z.ZodLiteral<true>>;
|
|
18
|
+
}, z.core.$strict>>;
|
|
19
|
+
fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
20
|
+
label: z.ZodOptional<z.ZodString>;
|
|
21
|
+
help: z.ZodOptional<z.ZodString>;
|
|
22
|
+
}, z.core.$strict>>>;
|
|
23
|
+
publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
24
|
+
editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
26
|
+
filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
28
|
name: z.ZodString;
|
|
14
29
|
title: z.ZodString;
|
|
15
30
|
description: z.ZodString;
|
|
16
31
|
schemaVersion: z.ZodNumber;
|
|
17
32
|
recordSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
33
|
+
behavior: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
kind: z.ZodLiteral<"request">;
|
|
35
|
+
}, z.core.$strict>>;
|
|
36
|
+
source: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
connector: z.ZodString;
|
|
38
|
+
scan: z.ZodString;
|
|
39
|
+
}, z.core.$strict>>;
|
|
18
40
|
}, z.core.$strict>;
|
|
19
41
|
export type ManagedCollectionManifest = z.infer<typeof managedCollectionManifestSchema>;
|
|
20
42
|
/**
|
|
21
43
|
* Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
|
|
22
44
|
* retention deliberately do not enter this compiled definition.
|
|
23
45
|
*/
|
|
24
|
-
export declare function compileManagedCollections(collections: readonly ManagedCollectionManifest[], toolNames: readonly string[], errors: CompileError[]
|
|
46
|
+
export declare function compileManagedCollections(collections: readonly ManagedCollectionManifest[], toolNames: readonly string[], errors: CompileError[], options?: {
|
|
47
|
+
readonly catalog?: ConnectorCatalog;
|
|
48
|
+
readonly declared?: Readonly<Record<string, DeclaredConnectorRef>>;
|
|
49
|
+
}): readonly ArtifactManagedCollection[];
|
|
25
50
|
//# sourceMappingURL=managed-collections.d.ts.map
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { canonicalJson, sha256Canonical } from '@noodle-borg/app-package';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { computeSignatureHash } from './catalog/signature.js';
|
|
4
|
+
import { computeConnectionConfigRevision } from './fulfilment-emit.js';
|
|
5
|
+
import { managedCollectionControlFields, projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
|
|
3
6
|
export const MAX_MANAGED_COLLECTIONS = 16;
|
|
4
7
|
export const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
|
|
5
8
|
export const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
|
|
@@ -14,6 +17,12 @@ const collectionNameSchema = z
|
|
|
14
17
|
.max(MAX_MANAGED_COLLECTION_NAME_LENGTH)
|
|
15
18
|
.regex(/^[a-z][a-z0-9_]*$/, 'must start with a letter and use lowercase letters, numbers, and underscores');
|
|
16
19
|
const jsonSchemaSchema = z.record(z.string(), z.unknown());
|
|
20
|
+
const sourceSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
connector: collectionNameSchema,
|
|
23
|
+
scan: collectionNameSchema,
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
17
26
|
export const managedCollectionManifestSchema = z
|
|
18
27
|
.object({
|
|
19
28
|
name: collectionNameSchema,
|
|
@@ -21,6 +30,12 @@ export const managedCollectionManifestSchema = z
|
|
|
21
30
|
description: z.string().trim().min(1).max(MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH),
|
|
22
31
|
schemaVersion: z.number().int().positive().max(MAX_MANAGED_COLLECTION_SCHEMA_VERSION),
|
|
23
32
|
recordSchema: jsonSchemaSchema,
|
|
33
|
+
behavior: z
|
|
34
|
+
.object({ kind: z.literal('request') })
|
|
35
|
+
.strict()
|
|
36
|
+
.optional(),
|
|
37
|
+
source: sourceSchema.optional(),
|
|
38
|
+
...managedCollectionControlFields,
|
|
24
39
|
})
|
|
25
40
|
.strict();
|
|
26
41
|
const PROHIBITED_FIELD_NAME = /(?:card|cvv|cvc|password|passcode|token|secret|passport|governmentid|nationalid|socialsecurity|health|biometric)/i;
|
|
@@ -45,7 +60,7 @@ const SUBSCHEMA_LIST_KEYS = ['prefixItems', 'allOf', 'anyOf', 'oneOf'];
|
|
|
45
60
|
* Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
|
|
46
61
|
* retention deliberately do not enter this compiled definition.
|
|
47
62
|
*/
|
|
48
|
-
export function compileManagedCollections(collections, toolNames, errors) {
|
|
63
|
+
export function compileManagedCollections(collections, toolNames, errors, options = {}) {
|
|
49
64
|
const compiled = [];
|
|
50
65
|
const seen = new Set();
|
|
51
66
|
collections.forEach((collection, index) => {
|
|
@@ -70,8 +85,12 @@ export function compileManagedCollections(collections, toolNames, errors) {
|
|
|
70
85
|
}
|
|
71
86
|
const schemaErrorsBefore = errors.length;
|
|
72
87
|
validateRecordSchema(collection.recordSchema, `${path}.recordSchema`, errors);
|
|
88
|
+
validateManagedCollectionControls(projectManagedCollectionControls(collection), collection.recordSchema, collection.source !== undefined, path, errors);
|
|
73
89
|
if (errors.length !== schemaErrorsBefore)
|
|
74
90
|
return;
|
|
91
|
+
const source = compileCollectionSource(collection, path, errors, options);
|
|
92
|
+
if (collection.source !== undefined && source === undefined)
|
|
93
|
+
return;
|
|
75
94
|
compiled.push({
|
|
76
95
|
name: collection.name,
|
|
77
96
|
title: collection.title,
|
|
@@ -79,10 +98,180 @@ export function compileManagedCollections(collections, toolNames, errors) {
|
|
|
79
98
|
schemaVersion: collection.schemaVersion,
|
|
80
99
|
schemaDigest: sha256Canonical(collection.recordSchema),
|
|
81
100
|
recordSchema: collection.recordSchema,
|
|
101
|
+
...projectManagedCollectionControls(collection),
|
|
102
|
+
...(collection.behavior === undefined ? {} : { behavior: collection.behavior }),
|
|
103
|
+
source: source ?? { authority: 'native' },
|
|
82
104
|
});
|
|
83
105
|
});
|
|
84
106
|
return compiled;
|
|
85
107
|
}
|
|
108
|
+
function compileCollectionSource(collection, path, errors, options) {
|
|
109
|
+
if (collection.source === undefined)
|
|
110
|
+
return { authority: 'native' };
|
|
111
|
+
const declared = options.declared?.[collection.source.connector];
|
|
112
|
+
if (declared === undefined) {
|
|
113
|
+
sourceError(errors, `${path}.source.connector`, `connector alias "${collection.source.connector}" is not declared`);
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
if (declared.binding === undefined) {
|
|
117
|
+
sourceError(errors, `${path}.source.connector`, 'external collection sources require an operator-bound connector');
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const connector = options.catalog?.get(declared.id, declared.version);
|
|
121
|
+
if (options.catalog !== undefined && connector === undefined) {
|
|
122
|
+
sourceError(errors, `${path}.source.connector`, `connector "${declared.id}" version "${declared.version}" is not in the catalog`);
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const scan = resolveSourceOperation({
|
|
126
|
+
alias: collection.source.connector,
|
|
127
|
+
name: collection.source.scan,
|
|
128
|
+
connector,
|
|
129
|
+
declared,
|
|
130
|
+
recordSchema: collection.recordSchema,
|
|
131
|
+
path: `${path}.source.scan`,
|
|
132
|
+
errors,
|
|
133
|
+
});
|
|
134
|
+
if (scan === undefined)
|
|
135
|
+
return undefined;
|
|
136
|
+
return {
|
|
137
|
+
authority: 'external',
|
|
138
|
+
connectorAlias: collection.source.connector,
|
|
139
|
+
connectorId: declared.id,
|
|
140
|
+
connectorVersion: declared.version,
|
|
141
|
+
scan,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function resolveSourceOperation(input) {
|
|
145
|
+
if (input.connector === undefined) {
|
|
146
|
+
return { resolved: false, connector: input.alias, operation: input.name };
|
|
147
|
+
}
|
|
148
|
+
const operation = input.connector.operations[input.name];
|
|
149
|
+
if (operation === undefined) {
|
|
150
|
+
sourceError(input.errors, input.path, `operation "${input.name}" does not exist on connector "${input.connector.id}"`);
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
if (operation.type !== 'read') {
|
|
154
|
+
sourceError(input.errors, input.path, `source operation "${input.name}" must be classified as read`);
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
const contractError = validateScanSignature(operation, input.recordSchema);
|
|
158
|
+
if (contractError !== undefined) {
|
|
159
|
+
sourceError(input.errors, input.path, contractError);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
const binding = input.declared.binding;
|
|
163
|
+
const credentialPresentation = binding === undefined ? undefined : input.connector.credentialProfiles?.[binding.profile];
|
|
164
|
+
if (binding === undefined || credentialPresentation === undefined) {
|
|
165
|
+
sourceError(input.errors, input.path, `source operation "${input.name}" requires a valid bound credential profile`);
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const credentialRequirement = input.connector.operationCredentials?.[input.name];
|
|
169
|
+
if (credentialRequirement !== undefined &&
|
|
170
|
+
!credentialRequirement.profiles.includes(binding.profile)) {
|
|
171
|
+
sourceError(input.errors, input.path, `source operation "${input.name}" does not permit credential profile "${binding.profile}"`);
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
resolved: true,
|
|
176
|
+
alias: input.alias,
|
|
177
|
+
connectorId: input.declared.id,
|
|
178
|
+
connectorVersion: input.declared.version,
|
|
179
|
+
operation: input.name,
|
|
180
|
+
signatureHash: computeSignatureHash(input.name, operation),
|
|
181
|
+
credentialBinding: {
|
|
182
|
+
bindingId: input.alias,
|
|
183
|
+
connectionId: binding.connection.id,
|
|
184
|
+
connectionConfigRevision: computeConnectionConfigRevision(binding.connection),
|
|
185
|
+
profile: binding.profile,
|
|
186
|
+
presentation: credentialPresentation,
|
|
187
|
+
requiredScopes: [...(credentialRequirement?.scopes ?? [])],
|
|
188
|
+
...(credentialRequirement?.audience === undefined
|
|
189
|
+
? {}
|
|
190
|
+
: { requiredAudience: credentialRequirement.audience }),
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
function validateScanSignature(operation, recordSchema) {
|
|
195
|
+
const input = operation.input;
|
|
196
|
+
if (!isClosedObjectWithKeys(input, ['mode', 'cursor', 'checkpoint', 'limit'])) {
|
|
197
|
+
return 'scan input must be a closed object containing only mode, cursor, checkpoint and limit';
|
|
198
|
+
}
|
|
199
|
+
const inputProperties = input.properties;
|
|
200
|
+
if (!hasTypes(inputProperties, {
|
|
201
|
+
mode: 'string',
|
|
202
|
+
cursor: 'string',
|
|
203
|
+
checkpoint: 'string',
|
|
204
|
+
limit: 'integer',
|
|
205
|
+
})) {
|
|
206
|
+
return 'scan input fields do not match the normalized source contract';
|
|
207
|
+
}
|
|
208
|
+
if (!sameStrings(input.required, ['mode', 'limit']))
|
|
209
|
+
return 'scan input must require mode and limit only';
|
|
210
|
+
const modeEnum = inputProperties.mode?.enum;
|
|
211
|
+
if (!sameStrings(modeEnum, ['snapshot', 'changes']))
|
|
212
|
+
return 'scan mode must allow snapshot and changes';
|
|
213
|
+
const output = operation.output;
|
|
214
|
+
if (!isClosedObjectWithKeys(output, [
|
|
215
|
+
'records',
|
|
216
|
+
'deletedIds',
|
|
217
|
+
'nextCursor',
|
|
218
|
+
'checkpoint',
|
|
219
|
+
'complete',
|
|
220
|
+
'resetRequired',
|
|
221
|
+
])) {
|
|
222
|
+
return 'scan output must match the normalized source page envelope';
|
|
223
|
+
}
|
|
224
|
+
if (!sameStrings(output.required, ['records', 'deletedIds', 'complete'])) {
|
|
225
|
+
return 'scan output must require records, deletedIds and complete only';
|
|
226
|
+
}
|
|
227
|
+
const properties = output.properties;
|
|
228
|
+
if (!hasTypes(properties, {
|
|
229
|
+
records: 'array',
|
|
230
|
+
deletedIds: 'array',
|
|
231
|
+
nextCursor: 'string',
|
|
232
|
+
checkpoint: 'string',
|
|
233
|
+
complete: 'boolean',
|
|
234
|
+
resetRequired: 'boolean',
|
|
235
|
+
})) {
|
|
236
|
+
return 'scan output fields do not match the normalized source page contract';
|
|
237
|
+
}
|
|
238
|
+
const item = properties.records?.items;
|
|
239
|
+
if (!isRecord(item) || !isClosedObjectWithKeys(item, ['id', 'version', 'record'])) {
|
|
240
|
+
return 'scan records must contain closed id, optional version and record objects';
|
|
241
|
+
}
|
|
242
|
+
if (!sameStrings(item.required, ['id', 'record']))
|
|
243
|
+
return 'scan records must require id and record only';
|
|
244
|
+
const itemProperties = item.properties;
|
|
245
|
+
if (itemProperties.id?.type !== 'string' || itemProperties.version?.type !== 'string') {
|
|
246
|
+
return 'scan record id and version must be strings';
|
|
247
|
+
}
|
|
248
|
+
if (sha256Canonical(itemProperties.record) !== sha256Canonical(recordSchema)) {
|
|
249
|
+
return 'scan record schema must exactly match the managed collection record schema';
|
|
250
|
+
}
|
|
251
|
+
const deletedItems = properties.deletedIds?.items;
|
|
252
|
+
if (!isRecord(deletedItems) || deletedItems.type !== 'string')
|
|
253
|
+
return 'deletedIds must be an array of strings';
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
function isClosedObjectWithKeys(value, keys) {
|
|
257
|
+
if (!isRecord(value) ||
|
|
258
|
+
value.type !== 'object' ||
|
|
259
|
+
value.additionalProperties !== false ||
|
|
260
|
+
!isRecord(value.properties))
|
|
261
|
+
return false;
|
|
262
|
+
return sameStrings(Object.keys(value.properties), keys);
|
|
263
|
+
}
|
|
264
|
+
function hasTypes(properties, expected) {
|
|
265
|
+
return Object.entries(expected).every(([key, type]) => properties[key]?.type === type);
|
|
266
|
+
}
|
|
267
|
+
function sameStrings(value, expected) {
|
|
268
|
+
return (Array.isArray(value) &&
|
|
269
|
+
value.every((entry) => typeof entry === 'string') &&
|
|
270
|
+
[...value].sort().join('\u0000') === [...expected].sort().join('\u0000'));
|
|
271
|
+
}
|
|
272
|
+
function sourceError(errors, path, message) {
|
|
273
|
+
errors.push({ code: 'invalid_managed_collection_source', path, message });
|
|
274
|
+
}
|
|
86
275
|
function validateRecordSchema(schema, path, errors) {
|
|
87
276
|
const bytes = new TextEncoder().encode(canonicalJson(schema)).byteLength;
|
|
88
277
|
if (bytes > MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES) {
|