@noodleseed/one 0.161.2 → 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/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- 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 +3 -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 +7 -0
- package/dist/commands/solutions-ops.d.ts.map +1 -0
- package/dist/commands/solutions-ops.js +544 -0
- package/dist/commands/solutions-ops.js.map +1 -0
- 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/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +4 -1
- 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 +6 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +21 -2
- 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 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -0
- 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 +40 -0
- package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +39 -0
- 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 +6 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +5 -43
- 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-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 +5 -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 +26 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +9 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +9 -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 +9 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +5 -1
- package/node_modules/@noodle-borg/compiler/dist/index.js +4 -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 +50 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +373 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +114 -36
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +5 -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/contracts.js +5 -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 +557 -0
- 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 +393 -0
- 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 +78 -0
- package/node_modules/@noodle-borg/service/dist/business-information/portable.js +15 -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 +252 -0
- 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/validation.js +200 -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 +5 -2
- 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 +131 -0
- 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 +168 -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 +317 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information.js +592 -0
- 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 +6 -0
- package/node_modules/@noodle-borg/service/dist/service.js +77 -6
- 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 +2241 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +580 -0
- 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 +12 -3
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +9 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +6 -6
- package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +15 -15
- 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
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import type { ArtifactVariableDeclaration, ManagedCollectionControls } from '@noodle-borg/compiler';
|
|
2
|
+
import type { ManagedRecordQuery } from '@noodle-borg/wire-contracts';
|
|
3
|
+
import type { BusinessNoticeStore } from './business-notice.js';
|
|
4
|
+
import type { BusinessPrincipalProvider } from './principal-authority.js';
|
|
5
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
6
|
+
export type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];
|
|
7
|
+
export interface JsonObject {
|
|
8
|
+
readonly [key: string]: JsonValue;
|
|
9
|
+
}
|
|
10
|
+
export declare const MANAGED_RETENTION_DAYS: readonly [7, 30, 90];
|
|
11
|
+
export type ManagedRetentionDays = (typeof MANAGED_RETENTION_DAYS)[number];
|
|
12
|
+
export declare const BUSINESS_ROLES: readonly ["administrator", "manager", "operator", "viewer"];
|
|
13
|
+
export type BusinessRole = (typeof BUSINESS_ROLES)[number];
|
|
14
|
+
export type BusinessPermission = 'installation:administer' | 'grants:manage' | 'records:create' | 'records:read' | 'records:update' | 'records:assign' | 'records:status' | 'records:note' | 'records:delete' | 'records:export';
|
|
15
|
+
export declare const MANAGED_REQUEST_STATUSES: readonly ["new", "in_progress", "resolved", "closed"];
|
|
16
|
+
export type ManagedRequestStatus = (typeof MANAGED_REQUEST_STATUSES)[number];
|
|
17
|
+
export declare const BUILT_IN_PROFILE_KEYS: readonly ["travel", "b2b_saas", "ecommerce", "restaurant"];
|
|
18
|
+
export type BuiltInProfileKey = (typeof BUILT_IN_PROFILE_KEYS)[number];
|
|
19
|
+
export interface NativeCollectionAuthority {
|
|
20
|
+
readonly authority: 'native';
|
|
21
|
+
}
|
|
22
|
+
export interface ExternalCollectionAuthority {
|
|
23
|
+
readonly authority: 'external';
|
|
24
|
+
readonly connectorAlias: string;
|
|
25
|
+
readonly connectorId: string;
|
|
26
|
+
readonly connectorVersion: string;
|
|
27
|
+
readonly scanOperation: string;
|
|
28
|
+
readonly scanSignatureHash: string;
|
|
29
|
+
}
|
|
30
|
+
export type CollectionAuthority = NativeCollectionAuthority | ExternalCollectionAuthority;
|
|
31
|
+
export interface InstalledCollectionDefinition extends ManagedCollectionControls {
|
|
32
|
+
readonly key: string;
|
|
33
|
+
readonly title: string;
|
|
34
|
+
readonly singularTitle: string;
|
|
35
|
+
readonly description: string;
|
|
36
|
+
readonly schemaVersion: number;
|
|
37
|
+
readonly schemaDigest: string;
|
|
38
|
+
readonly recordSchema: JsonObject;
|
|
39
|
+
readonly summaryFields: readonly string[];
|
|
40
|
+
readonly authority: CollectionAuthority;
|
|
41
|
+
/** Historical release decoder only. New definitions use independently optional management controls. */
|
|
42
|
+
readonly behavior?: {
|
|
43
|
+
readonly kind: 'request';
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export type SolutionDefinitionReference = {
|
|
47
|
+
readonly kind: 'managed';
|
|
48
|
+
readonly definitionId: 'travel' | 'ecommerce' | 'restaurant';
|
|
49
|
+
readonly release: number;
|
|
50
|
+
readonly digest: string;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: 'private';
|
|
53
|
+
readonly publisherOrg: string;
|
|
54
|
+
readonly app: string;
|
|
55
|
+
readonly env: string;
|
|
56
|
+
readonly deploymentId: string;
|
|
57
|
+
readonly version: string;
|
|
58
|
+
readonly digest: string;
|
|
59
|
+
} | {
|
|
60
|
+
readonly kind: 'legacy';
|
|
61
|
+
readonly definitionId: 'b2b_saas';
|
|
62
|
+
readonly release: number;
|
|
63
|
+
readonly digest: string;
|
|
64
|
+
};
|
|
65
|
+
export interface SolutionDefinitionSnapshot {
|
|
66
|
+
readonly reference: SolutionDefinitionReference;
|
|
67
|
+
readonly title: string;
|
|
68
|
+
readonly description: string;
|
|
69
|
+
readonly collections: readonly InstalledCollectionDefinition[];
|
|
70
|
+
readonly variables?: readonly ArtifactVariableDeclaration[];
|
|
71
|
+
}
|
|
72
|
+
export interface InstallationScope {
|
|
73
|
+
readonly org: string;
|
|
74
|
+
readonly app: string;
|
|
75
|
+
readonly env: string;
|
|
76
|
+
readonly installationId: string;
|
|
77
|
+
}
|
|
78
|
+
export interface SolutionInstallation {
|
|
79
|
+
readonly scope: InstallationScope;
|
|
80
|
+
/** Opaque stable identifier for public channel resolution; never grants access by possession. */
|
|
81
|
+
readonly publicId: string;
|
|
82
|
+
/** Legacy storage key retained while old installations are served and backfilled. */
|
|
83
|
+
readonly profileKey: string;
|
|
84
|
+
readonly profileVersion: number;
|
|
85
|
+
readonly managedCollections: readonly string[];
|
|
86
|
+
readonly definition: SolutionDefinitionSnapshot;
|
|
87
|
+
readonly retentionDays: ManagedRetentionDays;
|
|
88
|
+
/** Public native-record intake exposure; authorized records remain operable while paused. */
|
|
89
|
+
readonly intakeActive: boolean;
|
|
90
|
+
/** Internal binding to the authoritative app incarnation; never a Portal configuration value. */
|
|
91
|
+
readonly applicationGeneration?: string;
|
|
92
|
+
readonly revision: number;
|
|
93
|
+
readonly createdAt: string;
|
|
94
|
+
readonly createdBySubject: string;
|
|
95
|
+
readonly updatedAt: string;
|
|
96
|
+
readonly updatedBySubject: string;
|
|
97
|
+
}
|
|
98
|
+
export interface BusinessGrant {
|
|
99
|
+
readonly scope: InstallationScope;
|
|
100
|
+
readonly subject: string;
|
|
101
|
+
readonly email?: string;
|
|
102
|
+
readonly role: BusinessRole;
|
|
103
|
+
readonly revision: number;
|
|
104
|
+
readonly createdAt: string;
|
|
105
|
+
readonly createdBySubject: string;
|
|
106
|
+
readonly updatedAt: string;
|
|
107
|
+
readonly updatedBySubject: string;
|
|
108
|
+
readonly revokedAt?: string;
|
|
109
|
+
}
|
|
110
|
+
export interface BusinessInvitation {
|
|
111
|
+
readonly scope: InstallationScope;
|
|
112
|
+
readonly invitationId: string;
|
|
113
|
+
readonly email: string;
|
|
114
|
+
readonly role: BusinessRole;
|
|
115
|
+
/** SHA-256 digest of the high-entropy bearer token; the raw token is never persisted. */
|
|
116
|
+
readonly tokenDigest: string;
|
|
117
|
+
readonly idempotencyDigest: string;
|
|
118
|
+
readonly createFingerprint: string;
|
|
119
|
+
readonly revision: number;
|
|
120
|
+
readonly createdAt: string;
|
|
121
|
+
readonly expiresAt: string;
|
|
122
|
+
readonly createdBySubject: string;
|
|
123
|
+
readonly acceptedAt?: string;
|
|
124
|
+
readonly acceptedBySubject?: string;
|
|
125
|
+
readonly revokedAt?: string;
|
|
126
|
+
readonly revokedBySubject?: string;
|
|
127
|
+
}
|
|
128
|
+
export interface ManagedRequestOrigin {
|
|
129
|
+
readonly kind: 'embedded' | 'mcp' | 'portal' | 'api' | 'import';
|
|
130
|
+
readonly reference?: string;
|
|
131
|
+
}
|
|
132
|
+
export interface ManagedRequestNote {
|
|
133
|
+
readonly id: string;
|
|
134
|
+
readonly text: string;
|
|
135
|
+
readonly createdAt: string;
|
|
136
|
+
readonly createdBySubject: string;
|
|
137
|
+
}
|
|
138
|
+
export interface ManagedRequestContent {
|
|
139
|
+
readonly payload: JsonObject;
|
|
140
|
+
readonly notes: readonly ManagedRequestNote[];
|
|
141
|
+
}
|
|
142
|
+
export interface ManagedRequestRecord {
|
|
143
|
+
readonly originalSchema?: {
|
|
144
|
+
readonly profileVersion: number;
|
|
145
|
+
readonly schemaVersion: number;
|
|
146
|
+
readonly schemaDigest: string;
|
|
147
|
+
};
|
|
148
|
+
readonly scope: InstallationScope;
|
|
149
|
+
readonly collectionKey: string;
|
|
150
|
+
readonly id: string;
|
|
151
|
+
readonly profileKey: string;
|
|
152
|
+
readonly profileVersion: number;
|
|
153
|
+
readonly schemaVersion: number;
|
|
154
|
+
readonly schemaDigest: string;
|
|
155
|
+
readonly status?: ManagedRequestStatus;
|
|
156
|
+
readonly assigneeSubject?: string;
|
|
157
|
+
readonly origin: ManagedRequestOrigin;
|
|
158
|
+
readonly revision: number;
|
|
159
|
+
readonly retentionExpiresAt: string;
|
|
160
|
+
readonly createdAt: string;
|
|
161
|
+
readonly createdBySubject: string;
|
|
162
|
+
readonly updatedAt: string;
|
|
163
|
+
readonly updatedBySubject: string;
|
|
164
|
+
readonly deletedAt?: string;
|
|
165
|
+
readonly deletionReason?: 'customer_request' | 'retention_expired';
|
|
166
|
+
readonly content?: ManagedRequestContent;
|
|
167
|
+
}
|
|
168
|
+
/** Payload-free identity of a schema that has accepted at least one durable business record. */
|
|
169
|
+
export type AcceptedBusinessInformationSchema = Pick<ManagedRequestRecord, 'profileKey' | 'profileVersion' | 'collectionKey' | 'schemaVersion' | 'schemaDigest'>;
|
|
170
|
+
export type ManagedRequestActivityKind = 'created' | 'updated' | 'assigned' | 'status_changed' | 'note_added' | 'schema_migrated' | 'deleted' | 'retention_expired';
|
|
171
|
+
export interface RequestActivityPage {
|
|
172
|
+
readonly activities: readonly ManagedRequestActivity[];
|
|
173
|
+
readonly nextCursor?: string;
|
|
174
|
+
}
|
|
175
|
+
export interface ManagedRequestActivity {
|
|
176
|
+
readonly scope: InstallationScope;
|
|
177
|
+
readonly collectionKey: string;
|
|
178
|
+
readonly recordId: string;
|
|
179
|
+
readonly revision: number;
|
|
180
|
+
readonly kind: ManagedRequestActivityKind;
|
|
181
|
+
readonly status?: ManagedRequestStatus;
|
|
182
|
+
readonly assigneeSubject?: string;
|
|
183
|
+
readonly occurredAt: string;
|
|
184
|
+
readonly actorSubject: string;
|
|
185
|
+
readonly content?: ManagedRequestContent;
|
|
186
|
+
}
|
|
187
|
+
export interface PayloadCipherContext extends InstallationScope {
|
|
188
|
+
readonly collectionKey: string;
|
|
189
|
+
readonly recordId: string;
|
|
190
|
+
readonly revision: number;
|
|
191
|
+
}
|
|
192
|
+
/** An opaque authenticated-encryption envelope. Implementations own nonce/tag encoding in ciphertext. */
|
|
193
|
+
export interface SealedPayload {
|
|
194
|
+
readonly version: 1;
|
|
195
|
+
readonly algorithm: string;
|
|
196
|
+
readonly keyId: string;
|
|
197
|
+
readonly ciphertext: string;
|
|
198
|
+
}
|
|
199
|
+
export interface PayloadCipher {
|
|
200
|
+
seal(plaintext: Uint8Array, context: PayloadCipherContext): Promise<SealedPayload>;
|
|
201
|
+
open(payload: SealedPayload, context: PayloadCipherContext): Promise<Uint8Array>;
|
|
202
|
+
}
|
|
203
|
+
export type InstallationCreateResult = {
|
|
204
|
+
readonly disposition: 'created' | 'replayed';
|
|
205
|
+
readonly installation: SolutionInstallation;
|
|
206
|
+
} | {
|
|
207
|
+
readonly disposition: 'conflict';
|
|
208
|
+
readonly installation: SolutionInstallation;
|
|
209
|
+
};
|
|
210
|
+
export type GrantMutationResult = {
|
|
211
|
+
readonly ok: true;
|
|
212
|
+
readonly grant: BusinessGrant;
|
|
213
|
+
} | {
|
|
214
|
+
readonly ok: false;
|
|
215
|
+
readonly reason: 'not_found' | 'conflict' | 'last_administrator';
|
|
216
|
+
readonly currentRevision: number;
|
|
217
|
+
};
|
|
218
|
+
export type InvitationCreateResult = {
|
|
219
|
+
readonly disposition: 'created' | 'replayed';
|
|
220
|
+
readonly invitation: BusinessInvitation;
|
|
221
|
+
} | {
|
|
222
|
+
readonly disposition: 'conflict';
|
|
223
|
+
readonly invitation: BusinessInvitation;
|
|
224
|
+
};
|
|
225
|
+
export type InvitationMutationResult = {
|
|
226
|
+
readonly ok: true;
|
|
227
|
+
readonly invitation: BusinessInvitation;
|
|
228
|
+
} | {
|
|
229
|
+
readonly ok: false;
|
|
230
|
+
readonly reason: 'not_found' | 'conflict' | 'already_used';
|
|
231
|
+
readonly currentRevision: number;
|
|
232
|
+
};
|
|
233
|
+
export type InvitationClaimResult = {
|
|
234
|
+
readonly ok: true;
|
|
235
|
+
readonly invitation: BusinessInvitation;
|
|
236
|
+
readonly grant: BusinessGrant;
|
|
237
|
+
} | {
|
|
238
|
+
readonly ok: false;
|
|
239
|
+
readonly reason: 'not_found' | 'expired' | 'revoked' | 'already_used' | 'email_mismatch' | 'last_administrator';
|
|
240
|
+
};
|
|
241
|
+
export type RequestCreateResult = {
|
|
242
|
+
readonly disposition: 'created' | 'replayed';
|
|
243
|
+
readonly record: ManagedRequestRecord;
|
|
244
|
+
} | {
|
|
245
|
+
readonly disposition: 'conflict';
|
|
246
|
+
readonly record: ManagedRequestRecord;
|
|
247
|
+
} | {
|
|
248
|
+
readonly disposition: 'paused';
|
|
249
|
+
};
|
|
250
|
+
export type RequestCreateProbeResult = {
|
|
251
|
+
readonly disposition: 'missing';
|
|
252
|
+
} | {
|
|
253
|
+
readonly disposition: 'replayed' | 'conflict';
|
|
254
|
+
readonly record: ManagedRequestRecord;
|
|
255
|
+
};
|
|
256
|
+
export type InstallationMutationResult = {
|
|
257
|
+
readonly ok: true;
|
|
258
|
+
readonly installation: SolutionInstallation;
|
|
259
|
+
} | {
|
|
260
|
+
readonly ok: false;
|
|
261
|
+
readonly reason: 'not_found' | 'conflict' | 'invalid_state' | 'application_unavailable';
|
|
262
|
+
readonly currentRevision: number;
|
|
263
|
+
};
|
|
264
|
+
export type RequestMutationResult = {
|
|
265
|
+
readonly ok: true;
|
|
266
|
+
readonly record: ManagedRequestRecord;
|
|
267
|
+
} | {
|
|
268
|
+
readonly ok: false;
|
|
269
|
+
readonly reason: 'not_found' | 'conflict' | 'invalid_transition' | 'invalid_assignee';
|
|
270
|
+
readonly currentRevision: number;
|
|
271
|
+
};
|
|
272
|
+
export type ManagedRequestOperation = {
|
|
273
|
+
readonly kind: 'update';
|
|
274
|
+
readonly payload: unknown;
|
|
275
|
+
readonly unset?: readonly string[];
|
|
276
|
+
} | {
|
|
277
|
+
readonly kind: 'assign';
|
|
278
|
+
readonly assigneeSubject: string | undefined;
|
|
279
|
+
} | {
|
|
280
|
+
readonly kind: 'set_status';
|
|
281
|
+
readonly status: ManagedRequestStatus;
|
|
282
|
+
} | {
|
|
283
|
+
readonly kind: 'add_note';
|
|
284
|
+
readonly note: string;
|
|
285
|
+
};
|
|
286
|
+
export interface RequestPage {
|
|
287
|
+
readonly records: readonly ManagedRequestRecord[];
|
|
288
|
+
readonly nextCursor?: string;
|
|
289
|
+
}
|
|
290
|
+
export interface RequestExportPage extends RequestPage {
|
|
291
|
+
readonly snapshotAt: string;
|
|
292
|
+
}
|
|
293
|
+
export interface SolutionInstallationStore {
|
|
294
|
+
bindApplication(scope: InstallationScope, generation: string): Promise<boolean>;
|
|
295
|
+
pauseApplication(org: string, app: string, at: string, retired?: boolean): Promise<void>;
|
|
296
|
+
createInstallation(input: {
|
|
297
|
+
readonly scope: InstallationScope;
|
|
298
|
+
readonly profileKey?: BuiltInProfileKey;
|
|
299
|
+
readonly definition?: SolutionDefinitionSnapshot;
|
|
300
|
+
readonly managedCollections: readonly string[];
|
|
301
|
+
readonly retentionDays?: ManagedRetentionDays;
|
|
302
|
+
readonly actorSubject: string;
|
|
303
|
+
readonly actorEmail?: string;
|
|
304
|
+
}): Promise<InstallationCreateResult>;
|
|
305
|
+
getInstallation(scope: InstallationScope): Promise<SolutionInstallation | undefined>;
|
|
306
|
+
getInstallationById(org: string, installationId: string): Promise<SolutionInstallation | undefined>;
|
|
307
|
+
resolveInstallationByPublicId(publicId: string): Promise<SolutionInstallation | undefined>;
|
|
308
|
+
listInstallations(org: string): Promise<readonly SolutionInstallation[]>;
|
|
309
|
+
listInstallationsForSubject(subject: string): Promise<readonly {
|
|
310
|
+
readonly installation: SolutionInstallation;
|
|
311
|
+
readonly grant: BusinessGrant;
|
|
312
|
+
}[]>;
|
|
313
|
+
setIntakeState(input: {
|
|
314
|
+
readonly scope: InstallationScope;
|
|
315
|
+
readonly expectedRevision: number;
|
|
316
|
+
readonly active: boolean;
|
|
317
|
+
readonly actorSubject: string;
|
|
318
|
+
}): Promise<InstallationMutationResult>;
|
|
319
|
+
}
|
|
320
|
+
export interface BusinessGrantStore {
|
|
321
|
+
getGrant(scope: InstallationScope, subject: string): Promise<BusinessGrant | undefined>;
|
|
322
|
+
listGrants(scope: InstallationScope): Promise<readonly BusinessGrant[]>;
|
|
323
|
+
setGrant(input: {
|
|
324
|
+
readonly scope: InstallationScope;
|
|
325
|
+
readonly subject: string;
|
|
326
|
+
readonly email: string;
|
|
327
|
+
readonly role: BusinessRole;
|
|
328
|
+
readonly expectedRevision: number;
|
|
329
|
+
readonly actorSubject: string;
|
|
330
|
+
}): Promise<GrantMutationResult>;
|
|
331
|
+
revokeGrant(input: {
|
|
332
|
+
readonly scope: InstallationScope;
|
|
333
|
+
readonly subject: string;
|
|
334
|
+
readonly expectedRevision: number;
|
|
335
|
+
readonly actorSubject: string;
|
|
336
|
+
}): Promise<GrantMutationResult>;
|
|
337
|
+
createInvitation(input: {
|
|
338
|
+
readonly scope: InstallationScope;
|
|
339
|
+
readonly invitationId: string;
|
|
340
|
+
readonly email: string;
|
|
341
|
+
readonly role: BusinessRole;
|
|
342
|
+
readonly tokenDigest: string;
|
|
343
|
+
readonly idempotencyKey: string;
|
|
344
|
+
readonly expiresAt: Date;
|
|
345
|
+
readonly actorSubject: string;
|
|
346
|
+
}): Promise<InvitationCreateResult>;
|
|
347
|
+
listInvitations(scope: InstallationScope): Promise<readonly BusinessInvitation[]>;
|
|
348
|
+
revokeInvitation(input: {
|
|
349
|
+
readonly scope: InstallationScope;
|
|
350
|
+
readonly invitationId: string;
|
|
351
|
+
readonly expectedRevision: number;
|
|
352
|
+
readonly actorSubject: string;
|
|
353
|
+
}): Promise<InvitationMutationResult>;
|
|
354
|
+
claimInvitation(input: {
|
|
355
|
+
readonly tokenDigest: string;
|
|
356
|
+
readonly subject: string;
|
|
357
|
+
readonly email: string;
|
|
358
|
+
}): Promise<InvitationClaimResult>;
|
|
359
|
+
}
|
|
360
|
+
export interface ManagedRequestStore {
|
|
361
|
+
/** Explicit authorized release migration; no read-time rewrite or broader record grants. */
|
|
362
|
+
migrateLegacyRequest(input: {
|
|
363
|
+
readonly scope: InstallationScope;
|
|
364
|
+
readonly collectionKey: string;
|
|
365
|
+
readonly id: string;
|
|
366
|
+
readonly expectedRevision: number;
|
|
367
|
+
readonly actorSubject: string;
|
|
368
|
+
}): Promise<RequestMutationResult>;
|
|
369
|
+
/** Authoritative, de-duplicated inventory used to prove release reader compatibility. */
|
|
370
|
+
listAcceptedSchemaInventory(): Promise<readonly AcceptedBusinessInformationSchema[]>;
|
|
371
|
+
/** Read completed idempotency evidence without creating a record or spending admission. */
|
|
372
|
+
probeRequest(input: {
|
|
373
|
+
readonly publicInput?: true;
|
|
374
|
+
readonly scope: InstallationScope;
|
|
375
|
+
readonly collectionKey: string;
|
|
376
|
+
readonly idempotencyKey: string;
|
|
377
|
+
readonly payload: unknown;
|
|
378
|
+
readonly origin: ManagedRequestOrigin;
|
|
379
|
+
readonly actorSubject: string;
|
|
380
|
+
}): Promise<RequestCreateProbeResult>;
|
|
381
|
+
createRequest(input: {
|
|
382
|
+
readonly publicInput?: true;
|
|
383
|
+
readonly scope: InstallationScope;
|
|
384
|
+
readonly collectionKey: string;
|
|
385
|
+
readonly idempotencyKey: string;
|
|
386
|
+
readonly payload: unknown;
|
|
387
|
+
readonly origin: ManagedRequestOrigin;
|
|
388
|
+
readonly actorSubject: string;
|
|
389
|
+
}): Promise<RequestCreateResult>;
|
|
390
|
+
getRequest(scope: InstallationScope, collectionKey: string, id: string, options?: {
|
|
391
|
+
readonly includeDeleted?: boolean;
|
|
392
|
+
}): Promise<ManagedRequestRecord | undefined>;
|
|
393
|
+
listRequests(input: ManagedRecordQuery & {
|
|
394
|
+
readonly scope: InstallationScope;
|
|
395
|
+
readonly collectionKey: string;
|
|
396
|
+
readonly status?: ManagedRequestStatus;
|
|
397
|
+
readonly assigneeSubject?: string;
|
|
398
|
+
readonly cursor?: string;
|
|
399
|
+
readonly limit?: number;
|
|
400
|
+
readonly includeDeleted?: boolean;
|
|
401
|
+
}): Promise<RequestPage>;
|
|
402
|
+
mutateRequest(input: {
|
|
403
|
+
readonly scope: InstallationScope;
|
|
404
|
+
readonly collectionKey: string;
|
|
405
|
+
readonly id: string;
|
|
406
|
+
readonly expectedRevision: number;
|
|
407
|
+
readonly actorSubject: string;
|
|
408
|
+
readonly operation: ManagedRequestOperation;
|
|
409
|
+
}): Promise<RequestMutationResult>;
|
|
410
|
+
deleteRequest(input: {
|
|
411
|
+
readonly scope: InstallationScope;
|
|
412
|
+
readonly collectionKey: string;
|
|
413
|
+
readonly id: string;
|
|
414
|
+
readonly expectedRevision: number;
|
|
415
|
+
readonly actorSubject: string;
|
|
416
|
+
readonly reason: 'customer_request';
|
|
417
|
+
}): Promise<RequestMutationResult>;
|
|
418
|
+
listActivity(scope: InstallationScope, collectionKey: string, id: string, paging?: {
|
|
419
|
+
readonly cursor?: string;
|
|
420
|
+
readonly limit?: number;
|
|
421
|
+
}): Promise<RequestActivityPage>;
|
|
422
|
+
exportRequests(input: {
|
|
423
|
+
readonly scope: InstallationScope;
|
|
424
|
+
readonly collectionKey: string;
|
|
425
|
+
readonly cursor?: string;
|
|
426
|
+
readonly limit?: number;
|
|
427
|
+
readonly includeDeleted?: boolean;
|
|
428
|
+
}): Promise<RequestExportPage>;
|
|
429
|
+
/** Erases expired content and retains payload-free tombstones. */
|
|
430
|
+
purgeExpired(input: {
|
|
431
|
+
readonly scope?: InstallationScope;
|
|
432
|
+
readonly limit?: number;
|
|
433
|
+
}): Promise<number>;
|
|
434
|
+
}
|
|
435
|
+
export interface BusinessInformationStore extends SolutionInstallationStore, BusinessNoticeStore, BusinessGrantStore, ManagedRequestStore {
|
|
436
|
+
configurePrincipalAuthority(provider: BusinessPrincipalProvider | undefined): void;
|
|
437
|
+
listEligibleAssignees(scope: InstallationScope): Promise<readonly BusinessGrant[]>;
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const MANAGED_RETENTION_DAYS = [7, 30, 90];
|
|
2
|
+
export const BUSINESS_ROLES = ['administrator', 'manager', 'operator', 'viewer'];
|
|
3
|
+
export const MANAGED_REQUEST_STATUSES = ['new', 'in_progress', 'resolved', 'closed'];
|
|
4
|
+
export const BUILT_IN_PROFILE_KEYS = ['travel', 'b2b_saas', 'ecommerce', 'restaurant'];
|
|
5
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { sha256Canonical } from '@noodle-borg/app-package';
|
|
2
|
+
import { projectManagedCollectionControls } from '@noodle-borg/compiler';
|
|
3
|
+
/**
|
|
4
|
+
* Validate and freeze an active deployment as an immutable private solution definition.
|
|
5
|
+
* Authorization and active-deployment lookup happen before this pure boundary.
|
|
6
|
+
*/
|
|
7
|
+
export function privateDefinitionFromDeployment(selector, deployment) {
|
|
8
|
+
if (deployment.deploymentId !== selector.deploymentId ||
|
|
9
|
+
deployment.org !== selector.publisherOrg ||
|
|
10
|
+
deployment.app !== selector.app ||
|
|
11
|
+
deployment.environment !== selector.environment) {
|
|
12
|
+
throw new Error('private definition deployment does not match the requested immutable reference');
|
|
13
|
+
}
|
|
14
|
+
if (deployment.artifact.resolution !== 'resolved') {
|
|
15
|
+
throw new Error('private definition requires a fully resolved runtime artifact');
|
|
16
|
+
}
|
|
17
|
+
const authored = deployment.artifact.server.managedCollections ?? [];
|
|
18
|
+
const collections = authored.map(collectionFromArtifact);
|
|
19
|
+
const digest = sha256Canonical({
|
|
20
|
+
deploymentId: deployment.deploymentId,
|
|
21
|
+
server: {
|
|
22
|
+
name: deployment.artifact.server.name,
|
|
23
|
+
version: deployment.artifact.server.version,
|
|
24
|
+
title: deployment.artifact.server.title,
|
|
25
|
+
managedCollections: authored,
|
|
26
|
+
...(deployment.artifact.server.variables === undefined
|
|
27
|
+
? {}
|
|
28
|
+
: { variables: deployment.artifact.server.variables }),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
reference: {
|
|
33
|
+
kind: 'private',
|
|
34
|
+
publisherOrg: deployment.org,
|
|
35
|
+
app: deployment.app,
|
|
36
|
+
env: deployment.environment,
|
|
37
|
+
deploymentId: deployment.deploymentId,
|
|
38
|
+
version: deployment.artifact.server.version,
|
|
39
|
+
digest,
|
|
40
|
+
},
|
|
41
|
+
title: deployment.artifact.server.title,
|
|
42
|
+
description: deployment.artifact.server.instructions ??
|
|
43
|
+
`Business operations for ${deployment.artifact.server.title}.`,
|
|
44
|
+
collections,
|
|
45
|
+
...(deployment.artifact.server.variables === undefined
|
|
46
|
+
? {}
|
|
47
|
+
: { variables: structuredClone(deployment.artifact.server.variables) }),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function collectionFromArtifact(collection) {
|
|
51
|
+
const source = collection.source;
|
|
52
|
+
const authority = source.authority === 'native' ? { authority: 'native' } : externalAuthority(source);
|
|
53
|
+
return {
|
|
54
|
+
key: collection.name,
|
|
55
|
+
title: collection.title,
|
|
56
|
+
singularTitle: singularize(collection.title),
|
|
57
|
+
description: collection.description,
|
|
58
|
+
schemaVersion: collection.schemaVersion,
|
|
59
|
+
schemaDigest: collection.schemaDigest.replace(/^sha256:/, ''),
|
|
60
|
+
recordSchema: structuredClone(collection.recordSchema),
|
|
61
|
+
...projectManagedCollectionControls(collection),
|
|
62
|
+
summaryFields: collection.summaryFields ?? summaryFields(collection.recordSchema),
|
|
63
|
+
authority,
|
|
64
|
+
...(collection.behavior === undefined ? {} : { behavior: collection.behavior }),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function externalAuthority(source) {
|
|
68
|
+
if (!source.scan.resolved) {
|
|
69
|
+
throw new Error('external collection source operations must be fully resolved');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
authority: 'external',
|
|
73
|
+
connectorAlias: source.connectorAlias,
|
|
74
|
+
connectorId: source.connectorId,
|
|
75
|
+
connectorVersion: source.connectorVersion,
|
|
76
|
+
scanOperation: source.scan.operation,
|
|
77
|
+
scanSignatureHash: source.scan.signatureHash,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function summaryFields(schema) {
|
|
81
|
+
const required = Array.isArray(schema.required)
|
|
82
|
+
? schema.required.filter((field) => typeof field === 'string')
|
|
83
|
+
: [];
|
|
84
|
+
const properties = schema.properties !== null &&
|
|
85
|
+
typeof schema.properties === 'object' &&
|
|
86
|
+
!Array.isArray(schema.properties)
|
|
87
|
+
? Object.keys(schema.properties)
|
|
88
|
+
: [];
|
|
89
|
+
return [...new Set([...required, ...properties])].slice(0, 6);
|
|
90
|
+
}
|
|
91
|
+
function singularize(title) {
|
|
92
|
+
return title.endsWith('s') && title.length > 1 ? title.slice(0, -1) : title;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=definition-resolver.js.map
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { BusinessNoticeError, validatedNotice, } from './business-notice.js';
|
|
2
|
+
import { effectiveInstallation, validateExpectedRevision } from './model.js';
|
|
3
|
+
import { scopeKey } from './pagination.js';
|
|
4
|
+
import { validateScalar, validateScope } from './validation.js';
|
|
5
|
+
/** Process-local lifecycle serialization shares the native intake lock. */
|
|
6
|
+
export class InMemoryInstallationLifecycle {
|
|
7
|
+
#installations;
|
|
8
|
+
#withLock;
|
|
9
|
+
#now;
|
|
10
|
+
#managedDefinition;
|
|
11
|
+
#application;
|
|
12
|
+
#notices = new Map();
|
|
13
|
+
#getGrant;
|
|
14
|
+
constructor(input) {
|
|
15
|
+
this.#installations = input.installations;
|
|
16
|
+
this.#getGrant = input.getGrant;
|
|
17
|
+
this.#withLock = input.withLock;
|
|
18
|
+
this.#now = input.now;
|
|
19
|
+
this.#managedDefinition = input.managedDefinition;
|
|
20
|
+
}
|
|
21
|
+
getInstallation(scope) {
|
|
22
|
+
const found = this.#installations.get(scopeKey(validateScope(scope)));
|
|
23
|
+
return Promise.resolve(found === undefined ? undefined : effectiveInstallation(found, this.#managedDefinition));
|
|
24
|
+
}
|
|
25
|
+
listInstallations(org) {
|
|
26
|
+
const normalized = validateScalar('organization', org, 63);
|
|
27
|
+
return Promise.resolve([...this.#installations.values()]
|
|
28
|
+
.filter((installation) => installation.scope.org === normalized)
|
|
29
|
+
.sort((left, right) => left.createdAt.localeCompare(right.createdAt))
|
|
30
|
+
.map((installation) => effectiveInstallation(installation, this.#managedDefinition)));
|
|
31
|
+
}
|
|
32
|
+
getBusinessNotice(scope) {
|
|
33
|
+
return Promise.resolve(structuredClone(this.#notices.get(scopeKey(validateScope(scope)))));
|
|
34
|
+
}
|
|
35
|
+
async setBusinessNotice(input) {
|
|
36
|
+
const scope = validateScope(input.scope);
|
|
37
|
+
const notice = validatedNotice(input);
|
|
38
|
+
return this.#withLock(`grants:${scopeKey(scope)}`, async () => {
|
|
39
|
+
const grant = this.#getGrant(scope, input.actorSubject);
|
|
40
|
+
if (grant?.role !== 'administrator' || grant.revokedAt)
|
|
41
|
+
throw new BusinessNoticeError('business_notice_forbidden');
|
|
42
|
+
const key = scopeKey(scope);
|
|
43
|
+
const current = this.#notices.get(key);
|
|
44
|
+
if ((current?.revision ?? 0) !== input.expectedRevision)
|
|
45
|
+
throw new BusinessNoticeError('business_notice_conflict');
|
|
46
|
+
const record = {
|
|
47
|
+
notice,
|
|
48
|
+
revision: input.expectedRevision + 1,
|
|
49
|
+
updatedAt: this.#now().toISOString(),
|
|
50
|
+
updatedBySubject: input.actorSubject,
|
|
51
|
+
};
|
|
52
|
+
this.#notices.set(key, record);
|
|
53
|
+
return structuredClone(record);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
configureApplicationLifecycle(resolve) {
|
|
57
|
+
this.#application = resolve;
|
|
58
|
+
}
|
|
59
|
+
async applicationAllows(installation) {
|
|
60
|
+
if (!this.#application)
|
|
61
|
+
return true;
|
|
62
|
+
const app = await this.#application(installation.scope);
|
|
63
|
+
return app?.active === true && app.generation === installation.applicationGeneration;
|
|
64
|
+
}
|
|
65
|
+
async bindApplication(scope, generation) {
|
|
66
|
+
if (!Number.isFinite(Date.parse(generation)))
|
|
67
|
+
return false;
|
|
68
|
+
return this.#withLock(`intake:${scopeKey(scope)}`, async () => {
|
|
69
|
+
const current = this.#installations.get(scopeKey(scope));
|
|
70
|
+
if (!current)
|
|
71
|
+
return false;
|
|
72
|
+
const app = await this.#application?.(scope);
|
|
73
|
+
if (this.#application && (!app?.active || app.generation !== generation))
|
|
74
|
+
return false;
|
|
75
|
+
if (current.applicationGeneration === generation)
|
|
76
|
+
return true;
|
|
77
|
+
if (current.applicationGeneration !== 'pending' &&
|
|
78
|
+
(current.applicationGeneration !== undefined ||
|
|
79
|
+
Date.parse(generation) > Date.parse(current.createdAt)))
|
|
80
|
+
return false;
|
|
81
|
+
this.#installations.set(scopeKey(scope), { ...current, applicationGeneration: generation });
|
|
82
|
+
return true;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async pauseApplication(org, app, at, retired = false) {
|
|
86
|
+
for (const installation of this.#installations.values()) {
|
|
87
|
+
if (installation.scope.org !== org || installation.scope.app !== app)
|
|
88
|
+
continue;
|
|
89
|
+
await this.#withLock(`intake:${scopeKey(installation.scope)}`, async () => {
|
|
90
|
+
const current = this.#installations.get(scopeKey(installation.scope));
|
|
91
|
+
if (current &&
|
|
92
|
+
(current.intakeActive || (retired && current.applicationGeneration !== 'retired')))
|
|
93
|
+
this.#installations.set(scopeKey(current.scope), {
|
|
94
|
+
...current,
|
|
95
|
+
intakeActive: false,
|
|
96
|
+
revision: current.revision + 1,
|
|
97
|
+
updatedAt: at,
|
|
98
|
+
updatedBySubject: retired ? 'noodle:application-purge' : 'noodle:application-archive',
|
|
99
|
+
...(retired ? { applicationGeneration: 'retired' } : {}),
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async setIntakeState(input) {
|
|
105
|
+
const scope = validateScope(input.scope);
|
|
106
|
+
validateExpectedRevision(input.expectedRevision);
|
|
107
|
+
const actor = validateScalar('actor subject', input.actorSubject, 256);
|
|
108
|
+
return this.#withLock(`intake:${scopeKey(scope)}`, async () => {
|
|
109
|
+
const key = scopeKey(scope);
|
|
110
|
+
const current = this.#installations.get(key);
|
|
111
|
+
if (current === undefined)
|
|
112
|
+
return { ok: false, reason: 'not_found', currentRevision: 0 };
|
|
113
|
+
if (current.revision !== input.expectedRevision) {
|
|
114
|
+
return { ok: false, reason: 'conflict', currentRevision: current.revision };
|
|
115
|
+
}
|
|
116
|
+
if (input.active && !(await this.applicationAllows(current)))
|
|
117
|
+
return { ok: false, reason: 'application_unavailable', currentRevision: current.revision };
|
|
118
|
+
if (current.intakeActive === input.active) {
|
|
119
|
+
return { ok: false, reason: 'invalid_state', currentRevision: current.revision };
|
|
120
|
+
}
|
|
121
|
+
const installation = {
|
|
122
|
+
...current,
|
|
123
|
+
intakeActive: input.active,
|
|
124
|
+
revision: current.revision + 1,
|
|
125
|
+
updatedAt: this.#now().toISOString(),
|
|
126
|
+
updatedBySubject: actor,
|
|
127
|
+
};
|
|
128
|
+
this.#installations.set(key, installation);
|
|
129
|
+
return {
|
|
130
|
+
ok: true,
|
|
131
|
+
installation: effectiveInstallation(installation, this.#managedDefinition),
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=in-memory-installation-lifecycle.js.map
|