@aifabrix/builder 2.49.2 → 2.50.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/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
- package/.cursor/skills/README.md +1 -0
- package/.dockerignore +52 -0
- package/.eslintignore +22 -0
- package/README.md +2 -0
- package/bin/builder-api-cleanup.js +26 -0
- package/bin/builder-api-nest.js +10 -0
- package/bin/builder-api-spike.js +19 -0
- package/enterprise-knowledge/README.md +50 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
- package/integration/README.md +81 -0
- package/integration/github/README.md +53 -0
- package/integration/github/application.json +21 -0
- package/integration/github/deploy.js +72 -0
- package/integration/github/env.template +11 -0
- package/integration/github/github-datasource-issue-comments.json +239 -0
- package/integration/github/github-datasource-issues.json +399 -0
- package/integration/github/github-datasource-repository.json +354 -0
- package/integration/github/github-deploy.json +1202 -0
- package/integration/github/github-system.json +82 -0
- package/integration/hubspot-test/README.md +1 -1
- package/jest.isolated-projects.js +31 -1
- package/jest.projects.js +87 -1
- package/lib/api/dev-server-https.js +1 -1
- package/lib/api/enterprise-knowledge.api.js +63 -0
- package/lib/api/evidence.api.js +172 -0
- package/lib/api/external-systems.api.js +8 -2
- package/lib/api/resource-types.api.js +1 -0
- package/lib/api/types/enterprise-knowledge.types.js +46 -0
- package/lib/api/types/evidence.types.js +67 -0
- package/lib/api/types/resource-types.types.js +2 -0
- package/lib/app/controller-application-filter.js +36 -0
- package/lib/app/deploy.js +1 -1
- package/lib/app/list-external-systems.js +130 -0
- package/lib/app/list.js +20 -8
- package/lib/app/run.js +3 -1
- package/lib/app/show-display.js +8 -3
- package/lib/app/show-online.js +178 -0
- package/lib/app/show.js +37 -88
- package/lib/build/builder-api-docker-staging.js +47 -0
- package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
- package/lib/build/standard-docker-build.js +2 -0
- package/lib/certification/post-unified-cert-sync.js +4 -31
- package/lib/certification/sync-after-external-command.js +0 -1
- package/lib/certification/sync-system-certification.js +0 -3
- package/lib/channels/add-channel.js +40 -34
- package/lib/channels/approval-guides/chatgpt.js +33 -0
- package/lib/channels/approval-guides/credential-portal.js +38 -0
- package/lib/channels/approval-guides/index.js +110 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
- package/lib/channels/approval-guides/slack.js +34 -0
- package/lib/channels/approval-guides/teams-bot.js +35 -0
- package/lib/channels/approval-guides/web-embed.js +32 -0
- package/lib/channels/channel-approval-guide.js +11 -0
- package/lib/channels/channel-artifact-generator.js +16 -4
- package/lib/channels/channel-audit.js +3 -0
- package/lib/channels/channel-auth-context.js +1 -1
- package/lib/channels/channel-description.js +59 -0
- package/lib/channels/channel-integration-generator.js +13 -230
- package/lib/channels/channel-integration-template.js +94 -0
- package/lib/channels/channel-runtime-resolver.js +43 -3
- package/lib/channels/channel-status-display.js +66 -26
- package/lib/channels/channel-targets.js +3 -3
- package/lib/cli/index.js +27 -3
- package/lib/cli/infra-guided.js +5 -1
- package/lib/cli/setup-app-external-create.js +111 -0
- package/lib/cli/setup-app.help.js +1 -1
- package/lib/cli/setup-app.js +38 -125
- package/lib/cli/setup-app.test-commands.js +26 -52
- package/lib/cli/setup-certification-commands.js +4 -4
- package/lib/cli/setup-certification.help.js +9 -9
- package/lib/cli/setup-dev.js +7 -2
- package/lib/cli/setup-external-system-help.js +4 -6
- package/lib/cli/setup-external-system.js +58 -52
- package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
- package/lib/cli/setup-infra-up-platform-action.js +3 -1
- package/lib/cli/setup-infra.js +15 -0
- package/lib/cli/setup-list.js +43 -0
- package/lib/cli/setup-utility-repair.js +26 -7
- package/lib/cli/setup-utility.js +5 -3
- package/lib/commands/app.js +15 -43
- package/lib/commands/channel-add-setup.js +110 -0
- package/lib/commands/channel.js +42 -8
- package/lib/commands/datasource-sync-display.js +96 -0
- package/lib/commands/datasource-sync-policy.js +210 -0
- package/lib/commands/datasource-test-trust-cli.js +6 -6
- package/lib/commands/datasource-unified-test-cli.js +2 -1
- package/lib/commands/datasource-unified-test-cli.options.js +33 -23
- package/lib/commands/deploy-gate-failure-details.js +163 -0
- package/lib/commands/deploy-gate-orchestrator.js +322 -0
- package/lib/commands/dev-cli-handlers.js +1 -59
- package/lib/commands/dev-host-ops-params.js +91 -0
- package/lib/commands/dev-host-ops-poll.js +111 -0
- package/lib/commands/dev-host-ops.js +107 -94
- package/lib/commands/dev-init.js +3 -1
- package/lib/commands/enterprise-knowledge.js +284 -0
- package/lib/commands/evidence-cli-leaves.js +250 -0
- package/lib/commands/evidence.js +51 -0
- package/lib/commands/governance-cli-shared.js +2 -2
- package/lib/commands/governance-command-action.js +2 -2
- package/lib/commands/governance-fixture-subjects.js +85 -0
- package/lib/commands/governance.js +1 -1
- package/lib/commands/lifecycle-command-action.js +2 -2
- package/lib/commands/lifecycle-external.js +3 -3
- package/lib/commands/manifest-cli-auth.js +29 -0
- package/lib/commands/manifest-cli-commands.js +170 -0
- package/lib/commands/manifest-cli-integration-path.js +63 -0
- package/lib/commands/manifest.js +21 -0
- package/lib/commands/protection-cli-leaves.js +3 -3
- package/lib/commands/repair-auth-apply.js +15 -1
- package/lib/commands/repair-authentications-454.js +169 -0
- package/lib/commands/repair-capability-openapi-warnings.js +126 -0
- package/lib/commands/repair-datasource-apply.js +135 -0
- package/lib/commands/repair-datasource-auto-rbac.js +62 -1
- package/lib/commands/repair-datasource-http-service-contract.js +239 -0
- package/lib/commands/repair-datasource-operation-security.js +180 -0
- package/lib/commands/repair-datasource-run.js +7 -2
- package/lib/commands/repair-datasource-sync-operations.js +177 -0
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
- package/lib/commands/repair-datasource.js +12 -68
- package/lib/commands/repair-env-template.js +11 -1
- package/lib/commands/repair-external-run.js +121 -31
- package/lib/commands/repair-internal.js +1 -1
- package/lib/commands/repair-openapi-export.js +156 -0
- package/lib/commands/repair-openapi-sync.js +19 -2
- package/lib/commands/repair-orchestration-datasource-split.js +259 -0
- package/lib/commands/repair-persist.js +22 -1
- package/lib/commands/repair-rbac-platform-preset.js +204 -0
- package/lib/commands/repair-rbac-reader-roles.js +191 -0
- package/lib/commands/repair-rbac.js +163 -86
- package/lib/commands/repair-steps.js +83 -18
- package/lib/commands/repair-system-permissions.js +1 -0
- package/lib/commands/repair.js +1 -1
- package/lib/commands/resource-type.js +65 -26
- package/lib/commands/run-post-publish-data-sync.js +68 -0
- package/lib/commands/setup-modes.js +1 -1
- package/lib/commands/test-e2e-external.js +21 -8
- package/lib/commands/test-governance-cli-options.js +2 -2
- package/lib/commands/test-trust-cli-options.js +2 -2
- package/lib/commands/up-builder-api-bootstrap.js +71 -0
- package/lib/commands/up-builder-api-provision.js +241 -0
- package/lib/commands/up-builder-api.js +88 -0
- package/lib/commands/up-common.js +25 -1
- package/lib/commands/upload-credential-push-log.js +117 -0
- package/lib/commands/upload-data-sync-finalize.js +60 -0
- package/lib/commands/upload-probe.js +66 -0
- package/lib/commands/upload-publish-context.js +4 -1
- package/lib/commands/upload-sidecar-followups.js +55 -27
- package/lib/commands/upload.js +116 -157
- package/lib/commands/verify-governance-combined-external.js +1 -1
- package/lib/commands/verify-governance-db.js +2 -2
- package/lib/commands/verify-operations-command-action.js +2 -2
- package/lib/commands/verify-operations-step-plan.js +2 -2
- package/lib/commands/verify-operations-steps.js +2 -2
- package/lib/commands/verify-trust-command-action.js +1 -1
- package/lib/commands/wizard-core.js +1 -1
- package/lib/commands/wizard-headless.js +2 -1
- package/lib/core/admin-secrets.js +2 -6
- package/lib/core/secrets-env-content.js +10 -4
- package/lib/core/secrets-env-write.js +2 -13
- package/lib/datasource/agent-trust-run.js +3 -3
- package/lib/datasource/deploy.js +3 -1
- package/lib/datasource/test-e2e.js +6 -1
- package/lib/datasource/unified-validation-run-body.js +4 -1
- package/lib/datasource/unified-validation-run.js +1 -1
- package/lib/deployment/deploy-poll-ui.js +73 -12
- package/lib/deployment/deployer-poll-run.js +113 -0
- package/lib/deployment/deployer.js +17 -87
- package/lib/evidence/dataplane-context.js +21 -0
- package/lib/evidence/evidence-display.js +78 -0
- package/lib/evidence/evidence-service.js +392 -0
- package/lib/external-system/deploy.js +290 -112
- package/lib/external-system/download.js +7 -3
- package/lib/external-system/test-execution.js +1 -1
- package/lib/external-system/test-system-level.js +8 -10
- package/lib/external-system/test.js +12 -6
- package/lib/generator/deploy-script.js +73 -0
- package/lib/generator/external.js +2 -1
- package/lib/generator/index.js +17 -2
- package/lib/generator/wizard.js +3 -36
- package/lib/internal/fs-real-sync.js +22 -1
- package/lib/internal/node-fs.js +2 -0
- package/lib/lifecycle/lifecycle-governance-options.js +1 -1
- package/lib/lifecycle/verify-step-progress.js +1 -1
- package/lib/programmatic/access-log.js +26 -0
- package/lib/programmatic/auth-config.js +44 -0
- package/lib/programmatic/bearer-auth.js +176 -0
- package/lib/programmatic/builder-api-request.js +175 -0
- package/lib/programmatic/builder-api-route-dispatch.js +82 -0
- package/lib/programmatic/builder-api-runtime-config.js +42 -0
- package/lib/programmatic/builder-api-server.js +230 -0
- package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
- package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
- package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
- package/lib/programmatic/builder-help-envelope.js +36 -0
- package/lib/programmatic/builder-help-fixtures.js +200 -0
- package/lib/programmatic/builder-help-governance.js +172 -0
- package/lib/programmatic/builder-help-schema-catalog.js +92 -0
- package/lib/programmatic/builder-help.js +361 -0
- package/lib/programmatic/capability-registry.js +77 -0
- package/lib/programmatic/command-options.js +32 -0
- package/lib/programmatic/enterprise-mcp-client.js +98 -0
- package/lib/programmatic/http-problem-details.js +99 -0
- package/lib/programmatic/http-route-match.js +40 -0
- package/lib/programmatic/idempotency-cache.js +69 -0
- package/lib/programmatic/index.js +53 -0
- package/lib/programmatic/integration-path-scope.js +39 -0
- package/lib/programmatic/log-redaction.js +66 -0
- package/lib/programmatic/manifest-get-section.js +146 -0
- package/lib/programmatic/manifest-patch-section.js +252 -0
- package/lib/programmatic/manifest-repair.js +122 -0
- package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
- package/lib/programmatic/manifest-section-io.js +225 -0
- package/lib/programmatic/manifest-section-quality.js +171 -0
- package/lib/programmatic/manifest-section-registry-data.js +269 -0
- package/lib/programmatic/manifest-section-registry.js +205 -0
- package/lib/programmatic/nest-http-bridge.js +34 -0
- package/lib/programmatic/openapi-component-schemas.js +68 -0
- package/lib/programmatic/openapi-description-enricher.js +117 -0
- package/lib/programmatic/openapi-descriptions.js +190 -0
- package/lib/programmatic/openapi-docs-serving.js +123 -0
- package/lib/programmatic/openapi-help-schemas.js +63 -0
- package/lib/programmatic/openapi-manifest-schemas.js +141 -0
- package/lib/programmatic/openapi-operation-bindings.js +274 -0
- package/lib/programmatic/openapi-request-schemas.js +155 -0
- package/lib/programmatic/openapi-result-schemas.js +476 -0
- package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +159 -0
- package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
- package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
- package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
- package/lib/programmatic/openapi-schema-helpers.js +93 -0
- package/lib/programmatic/openapi-spec.js +203 -0
- package/lib/programmatic/orchestration-openapi-meta.js +159 -0
- package/lib/programmatic/platform-rbac-catalog.js +90 -0
- package/lib/programmatic/request-timeout.js +53 -0
- package/lib/programmatic/route-handler-map.js +143 -0
- package/lib/programmatic/route-handlers-context.js +29 -0
- package/lib/programmatic/route-handlers.js +33 -0
- package/lib/programmatic/run-certify.js +57 -0
- package/lib/programmatic/run-enterprise-mcp.js +32 -0
- package/lib/programmatic/run-lifecycle.js +29 -0
- package/lib/programmatic/run-repair.js +41 -0
- package/lib/programmatic/run-repository-emcp.js +54 -0
- package/lib/programmatic/run-template-workspace.js +61 -0
- package/lib/programmatic/run-test.js +49 -0
- package/lib/programmatic/run-upload.js +63 -0
- package/lib/programmatic/run-validate.js +53 -0
- package/lib/programmatic/run-wizard.js +40 -0
- package/lib/programmatic/system-key.js +48 -0
- package/lib/programmatic/wizard-config-normalize.js +118 -0
- package/lib/programmatic/workspace-cleanup.js +128 -0
- package/lib/programmatic/workspace-context.js +145 -0
- package/lib/programmatic/workspace-lock.js +75 -0
- package/lib/programmatic/workspace-meta.js +64 -0
- package/lib/programmatic/workspace-ops.js +149 -0
- package/lib/protection/run-commands-upload-sync.js +35 -0
- package/lib/protection/run-commands.js +2 -20
- package/lib/protection/upload-batch.js +11 -7
- package/lib/resolvers/resource-type-file.js +22 -0
- package/lib/schema/external-datasource.schema.json +161 -1
- package/lib/schema/external-system.schema.json +244 -118
- package/lib/schema/flag-map-validation-run.json +3 -0
- package/lib/schema/type/credential-field-registry.json +2 -2
- package/lib/schema/type/document-storage.json +9 -0
- package/lib/utils/agent-trust-run-display.js +1 -1
- package/lib/utils/app-path-resolve.js +168 -0
- package/lib/utils/authentication-env-template.js +222 -0
- package/lib/utils/cli-sync-options.js +7 -11
- package/lib/utils/cli-utils.js +4 -0
- package/lib/utils/cli-workspace-options.js +29 -0
- package/lib/utils/compose-generate-docker-compose.js +102 -0
- package/lib/utils/configuration-env-resolver.js +203 -27
- package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
- package/lib/utils/datasource-test-run-certification-debug.js +130 -0
- package/lib/utils/datasource-test-run-debug-display.js +2 -0
- package/lib/utils/datasource-test-run-debug-slice.js +7 -0
- package/lib/utils/datasource-test-run-display.js +2 -1
- package/lib/utils/dev-init-ssh-merge.js +165 -23
- package/lib/utils/dev-pin-share-instructions.js +110 -0
- package/lib/utils/dev-ssh-config-helper.js +177 -33
- package/lib/utils/enterprise-knowledge-paths.js +142 -0
- package/lib/utils/env-copy.js +2 -1
- package/lib/utils/env-dotenv-format.js +103 -0
- package/lib/utils/external-env-template.js +4 -1
- package/lib/utils/external-system-display.js +5 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +221 -0
- package/lib/utils/external-system-readiness-compact-display.js +324 -0
- package/lib/utils/external-system-readiness-core.js +16 -0
- package/lib/utils/external-system-readiness-deploy-display.js +29 -11
- package/lib/utils/external-system-readiness-display-internals.js +3 -1
- package/lib/utils/external-system-readiness-display.js +20 -30
- package/lib/utils/external-system-system-test-tty-certification.js +135 -0
- package/lib/utils/external-system-system-test-tty.js +5 -41
- package/lib/utils/help-builder.js +6 -1
- package/lib/utils/host-ops-job-labels.js +236 -0
- package/lib/utils/host-ops-job-result.js +61 -0
- package/lib/utils/host-ops-poll-ui.js +163 -0
- package/lib/utils/integration-path-resolve.js +112 -0
- package/lib/utils/paths-reload-source.js +148 -0
- package/lib/utils/paths-system-builder-keys.js +25 -0
- package/lib/utils/paths.js +151 -26
- package/lib/utils/runtime-configuration-values.js +64 -2
- package/lib/utils/secrets-helpers.js +5 -1
- package/lib/utils/ssh-known-hosts.js +130 -0
- package/lib/utils/test-target-cli-options.js +75 -0
- package/lib/utils/upload-sync-options.js +4 -0
- package/lib/utils/validation-run-request.js +11 -2
- package/lib/validation/external-manifest-validator.js +11 -1
- package/lib/validation/openapi-contract-surface-validator.js +426 -0
- package/lib/validation/openapi-contract-vendor-validation.js +238 -0
- package/lib/validation/validate-external-file.js +160 -0
- package/lib/validation/validate.js +6 -117
- package/package.json +46 -29
- package/packages/builder-api/README.md +120 -0
- package/packages/builder-api/package.json +30 -0
- package/packages/builder-api/src/app.module.ts +7 -0
- package/packages/builder-api/src/auth/auth.module.ts +5 -0
- package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
- package/packages/builder-api/src/main.ts +16 -0
- package/packages/builder-api/tsconfig.json +15 -0
- package/scripts/check-builder-api-architecture-grep.js +79 -0
- package/scripts/docker_image_content_gate.js +47 -0
- package/scripts/docker_image_content_gate.sh +5 -0
- package/scripts/export-builder-api-evidence.js +262 -0
- package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
- package/scripts/lib/builder-api-docker-staging-core.js +183 -0
- package/scripts/lib/docker-image-content-gate-core.js +166 -0
- package/scripts/lib/plan-actor.js +109 -0
- package/scripts/lib/plan-config.js +20 -0
- package/scripts/lib/plan-gates.js +154 -0
- package/scripts/lib/plan-meta.js +104 -0
- package/scripts/lib/plan-parse.js +162 -0
- package/scripts/lib/plan-prevalidate-gates.js +326 -0
- package/scripts/lib/plan-run-core.js +125 -0
- package/scripts/lib/plan-run-report.js +108 -0
- package/scripts/plan-approve.js +24 -0
- package/scripts/plan-archive.js +49 -0
- package/scripts/plan-run.js +13 -0
- package/scripts/plan-set-actor.js +21 -0
- package/scripts/plan-validate.js +80 -0
- package/scripts/pnpm/af.mjs +110 -0
- package/scripts/pnpm/check-quiet.mjs +32 -0
- package/scripts/pnpm/dev-install.mjs +29 -0
- package/scripts/pnpm/dev-reload.mjs +18 -0
- package/scripts/pnpm/help.mjs +55 -0
- package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
- package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
- package/scripts/pnpm/lib/spinner.mjs +42 -0
- package/scripts/stage_builder_api_for_docker.js +65 -0
- package/scripts/sync-builder-api-template.js +44 -0
- package/templates/README.md +3 -0
- package/templates/applications/builder-api/Dockerfile +38 -0
- package/templates/applications/builder-api/application.yaml +75 -0
- package/templates/applications/builder-api/env.template +48 -0
- package/templates/applications/dataplane/application.yaml +1 -1
- package/templates/applications/dataplane/env.template +10 -6
- package/templates/applications/dataplane/rbac.yaml +21 -1
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +1 -3
- package/templates/channels/README.md +18 -0
- package/templates/channels/ai-fabrix-icon.jpg +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +21 -24
- package/templates/channels/chatgpt/integration/README.md +11 -0
- package/templates/channels/chatgpt/integration/application.json +15 -0
- package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
- package/templates/channels/chatgpt/integration/env.template +4 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
- package/templates/channels/microsoft-copilot/integration/README.md +11 -0
- package/templates/channels/microsoft-copilot/integration/application.json +15 -0
- package/templates/channels/microsoft-copilot/integration/env.template +6 -0
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
- package/templates/channels/slack/install.template.md.hbs +48 -18
- package/templates/channels/slack/integration/README.md +38 -0
- package/templates/channels/slack/integration/application.json +18 -0
- package/templates/channels/slack/integration/env.template +29 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
- package/templates/channels/slack/integration/slack-system.json +86 -0
- package/templates/channels/slack/manifest.template.json.hbs +20 -10
- package/templates/channels/teams-bot/install.template.md.hbs +31 -17
- package/templates/channels/teams-bot/integration/README.md +18 -0
- package/templates/channels/teams-bot/integration/application.json +17 -0
- package/templates/channels/teams-bot/integration/env.template +5 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
- package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
- package/templates/channels/web-embed/install.template.md.hbs +16 -26
- package/templates/channels/web-embed/integration/README.md +11 -0
- package/templates/channels/web-embed/integration/application.json +15 -0
- package/templates/channels/web-embed/integration/env.template +4 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
- package/templates/openapi/redoc_page.html +86 -0
- package/templates/python/docker-compose.hbs +11 -0
- package/templates/python/requirements.txt +1 -1
- package/templates/typescript/docker-compose.hbs +11 -0
- package/lib/certification/cli-cert-sync-skip.js +0 -21
package/lib/commands/upload.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const {
|
|
2
2
|
formatSuccessLine,
|
|
3
3
|
formatWarningLine,
|
|
4
|
-
formatProgress,
|
|
5
4
|
sectionTitle,
|
|
6
5
|
headerKeyValue,
|
|
7
6
|
metadata
|
|
@@ -15,7 +14,6 @@ const {
|
|
|
15
14
|
* @version 2.0.0
|
|
16
15
|
*/
|
|
17
16
|
|
|
18
|
-
const path = require('path');
|
|
19
17
|
const chalk = require('chalk');
|
|
20
18
|
const logger = require('../utils/logger');
|
|
21
19
|
|
|
@@ -23,38 +21,32 @@ const SEP = chalk.gray('──────────────────
|
|
|
23
21
|
const { resolveControllerUrl } = require('../utils/controller-url');
|
|
24
22
|
const { getDeploymentAuth } = require('../utils/token-manager');
|
|
25
23
|
const { resolveDataplaneUrl } = require('../utils/dataplane-resolver');
|
|
26
|
-
const {
|
|
27
|
-
const { pushCredentialSecrets } = require('../utils/credential-secrets-env');
|
|
28
|
-
const { runWithCredentialPushSpinner } = require('../utils/credential-push-ui');
|
|
24
|
+
const { resolveExternalSystemPath } = require('../utils/app-path-resolve');
|
|
29
25
|
const { runWithUploadPipelineSpinner } = require('../utils/upload-pipeline-ui');
|
|
30
26
|
const {
|
|
31
27
|
buildResolvedEnvMapForIntegration,
|
|
32
|
-
resolveConfigurationValues
|
|
33
|
-
collectResolvedVariableConfigurationNames
|
|
28
|
+
resolveConfigurationValues
|
|
34
29
|
} = require('../utils/configuration-env-resolver');
|
|
35
|
-
const { pushRuntimeConfigurationValues } = require('../utils/runtime-configuration-values');
|
|
36
30
|
const { validateExternalSystemComplete } = require('../validation/validate');
|
|
37
31
|
const { displayValidationResults } = require('../validation/validate-display');
|
|
38
32
|
const { generateControllerManifest } = require('../generator/external-controller-manifest');
|
|
39
33
|
const {
|
|
40
|
-
validatePipelineConfig
|
|
41
|
-
testSystemViaPipeline
|
|
34
|
+
validatePipelineConfig
|
|
42
35
|
} = require('../api/pipeline.api');
|
|
43
36
|
const { uploadApplicationViaPipelineWithAuthRetry } = require('../utils/pipeline-upload-auth-retry');
|
|
44
37
|
const { formatApiError } = require('../utils/api-error-handler');
|
|
45
38
|
const { unwrapPublicationResult, unwrapApiData, isPublicationUnchanged } = require('../utils/external-system-readiness-core');
|
|
46
39
|
const {
|
|
47
|
-
logServerValidationWarnings
|
|
48
|
-
logProbeRuntimeBlock
|
|
40
|
+
logServerValidationWarnings
|
|
49
41
|
} = require('../utils/external-system-readiness-display');
|
|
42
|
+
const { maybeRunUploadProbe } = require('./upload-probe');
|
|
50
43
|
const { maybeSyncOpenApiFilesForMcp } = require('./repair-openapi-sync');
|
|
44
|
+
const { exportProgrammaticOpenApiForRepair } = require('./repair-openapi-export');
|
|
51
45
|
const { resolveUploadPublishContext } = require('./upload-publish-context');
|
|
52
46
|
const { syncDeployJsonFromSources } = require('../external-system/sync-deploy-manifest');
|
|
53
|
-
const {
|
|
54
|
-
const {
|
|
55
|
-
|
|
56
|
-
handlePublicationAndFollowups
|
|
57
|
-
} = require('./upload-sidecar-followups');
|
|
47
|
+
const { handlePublicationAndFollowups } = require('./upload-sidecar-followups');
|
|
48
|
+
const { finalizeUploadPublishResult, finishUnchangedUploadPublication } = require('./upload-data-sync-finalize');
|
|
49
|
+
const { pushAndLogCredentialSecrets } = require('./upload-credential-push-log');
|
|
58
50
|
|
|
59
51
|
/**
|
|
60
52
|
* Validates system-key format (same as download).
|
|
@@ -72,21 +64,22 @@ function validateSystemKeyFormat(systemKey) {
|
|
|
72
64
|
|
|
73
65
|
/**
|
|
74
66
|
* Builds pipeline upload payload from controller manifest.
|
|
75
|
-
* Payload: { version, application, dataSources, status };
|
|
67
|
+
* Payload: { version, application, dataSources, status }; upload uses "draft", deploy preflight uses "published".
|
|
76
68
|
* @param {Object} manifest - Controller manifest from generateControllerManifest
|
|
77
|
-
* @returns {Object} { version, application, dataSources, status
|
|
69
|
+
* @returns {Object} { version, application, dataSources, status }
|
|
78
70
|
*/
|
|
79
71
|
/**
|
|
80
72
|
* @param {Object} manifest - Controller manifest from generateControllerManifest
|
|
81
|
-
* @param {{ force?: boolean }} [opts]
|
|
73
|
+
* @param {{ force?: boolean, status?: 'draft'|'published' }} [opts]
|
|
82
74
|
* @returns {Object}
|
|
83
75
|
*/
|
|
84
76
|
function buildUploadPayload(manifest, opts = {}) {
|
|
77
|
+
const lifecycleStatus = opts.status === 'published' ? 'published' : 'draft';
|
|
85
78
|
const payload = {
|
|
86
79
|
version: manifest.version || '1.0.0',
|
|
87
80
|
application: manifest.system,
|
|
88
81
|
dataSources: manifest.dataSources || [],
|
|
89
|
-
status:
|
|
82
|
+
status: lifecycleStatus
|
|
90
83
|
};
|
|
91
84
|
if (opts.force === true) {
|
|
92
85
|
payload.force = true;
|
|
@@ -101,6 +94,13 @@ function buildUploadPayload(manifest, opts = {}) {
|
|
|
101
94
|
* @returns {Promise<{ dataplaneUrl: string, authConfig: Object, environment: string }>}
|
|
102
95
|
*/
|
|
103
96
|
async function resolveDataplaneAndAuth(systemKey, opts = {}) {
|
|
97
|
+
if (opts.authConfig && opts.dataplaneUrl && opts.environment) {
|
|
98
|
+
return {
|
|
99
|
+
dataplaneUrl: opts.dataplaneUrl,
|
|
100
|
+
authConfig: opts.authConfig,
|
|
101
|
+
environment: opts.environment
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
104
|
const silent = opts.silent === true;
|
|
105
105
|
const { resolveEnvironment } = require('../core/config');
|
|
106
106
|
const environment = await resolveEnvironment();
|
|
@@ -170,8 +170,11 @@ function throwIfValidationFailed(validationResult) {
|
|
|
170
170
|
* @param {string} systemKey - System key
|
|
171
171
|
* @param {Object} payload - Upload payload (mutated)
|
|
172
172
|
*/
|
|
173
|
-
async function resolvePayloadConfiguration(systemKey, payload) {
|
|
174
|
-
const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey
|
|
173
|
+
async function resolvePayloadConfiguration(systemKey, payload, pathOptions = {}) {
|
|
174
|
+
const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey, {
|
|
175
|
+
dataplaneRuntime: true,
|
|
176
|
+
...pathOptions
|
|
177
|
+
});
|
|
175
178
|
if (Array.isArray(payload.application?.configuration) && payload.application.configuration.length > 0) {
|
|
176
179
|
resolveConfigurationValues(payload.application.configuration, envMap, secrets, systemKey);
|
|
177
180
|
}
|
|
@@ -182,64 +185,6 @@ async function resolvePayloadConfiguration(systemKey, payload) {
|
|
|
182
185
|
}
|
|
183
186
|
}
|
|
184
187
|
|
|
185
|
-
/**
|
|
186
|
-
* Pushes credential secrets from .env and payload to dataplane; logs result or warning.
|
|
187
|
-
* @param {string} dataplaneUrl - Dataplane URL
|
|
188
|
-
* @param {Object} authConfig - Auth config
|
|
189
|
-
* @param {string} systemKey - System key
|
|
190
|
-
* @param {Object} payload - Upload payload
|
|
191
|
-
*/
|
|
192
|
-
async function pushAndLogCredentialSecrets(dataplaneUrl, authConfig, systemKey, payload, uiOpts = {}) {
|
|
193
|
-
const envFilePath = path.join(getIntegrationPath(systemKey), '.env');
|
|
194
|
-
const pushResult = await runWithCredentialPushSpinner(
|
|
195
|
-
() =>
|
|
196
|
-
pushCredentialSecrets(dataplaneUrl, authConfig, {
|
|
197
|
-
envFilePath,
|
|
198
|
-
appName: systemKey,
|
|
199
|
-
payload
|
|
200
|
-
}),
|
|
201
|
-
{ systemKey, json: uiOpts.json === true }
|
|
202
|
-
);
|
|
203
|
-
if (pushResult.pushed > 0) {
|
|
204
|
-
const keyList = pushResult.keys?.length ? ` (${pushResult.keys.join(', ')})` : '';
|
|
205
|
-
logger.log(
|
|
206
|
-
formatSuccessLine(`Pushed ${pushResult.pushed} credential secret(s) to dataplane${keyList}.`)
|
|
207
|
-
);
|
|
208
|
-
} else {
|
|
209
|
-
logger.log(chalk.yellow('Secret push skipped'));
|
|
210
|
-
}
|
|
211
|
-
const resolvedParamNames = collectResolvedVariableConfigurationNames(payload);
|
|
212
|
-
if (resolvedParamNames.length > 0) {
|
|
213
|
-
const nameList = ` (${resolvedParamNames.join(', ')})`;
|
|
214
|
-
logger.log(
|
|
215
|
-
formatSuccessLine(
|
|
216
|
-
`Resolved ${resolvedParamNames.length} integration parameter(s) from .env for publish${nameList}.`
|
|
217
|
-
)
|
|
218
|
-
);
|
|
219
|
-
}
|
|
220
|
-
if (pushResult.warning) {
|
|
221
|
-
logger.log(chalk.yellow(`Warning: ${pushResult.warning}`));
|
|
222
|
-
}
|
|
223
|
-
try {
|
|
224
|
-
const configPush = await pushRuntimeConfigurationValues(
|
|
225
|
-
dataplaneUrl,
|
|
226
|
-
authConfig,
|
|
227
|
-
systemKey,
|
|
228
|
-
payload
|
|
229
|
-
);
|
|
230
|
-
if (configPush.pushed > 0) {
|
|
231
|
-
const nameList = configPush.names.length ? ` (${configPush.names.join(', ')})` : '';
|
|
232
|
-
logger.log(
|
|
233
|
-
formatSuccessLine(
|
|
234
|
-
`Stored ${configPush.pushed} runtime configuration value(s) in dataplane${nameList}.`
|
|
235
|
-
)
|
|
236
|
-
);
|
|
237
|
-
}
|
|
238
|
-
} catch (err) {
|
|
239
|
-
logger.log(chalk.yellow(`Warning: runtime configuration store skipped: ${err.message}`));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
188
|
/**
|
|
244
189
|
* Optional server-side pipeline validate when --verbose.
|
|
245
190
|
* @param {string} dataplaneUrl
|
|
@@ -261,46 +206,6 @@ async function maybeRunVerboseServerValidation(dataplaneUrl, authConfig, payload
|
|
|
261
206
|
logServerValidationWarnings(body);
|
|
262
207
|
}
|
|
263
208
|
|
|
264
|
-
/**
|
|
265
|
-
* Omit payloadTemplate so POST /validation/run uses the **validation-engine** path
|
|
266
|
-
* (same as deploy --probe). Needed for certification and dataplane auto-issue of integration
|
|
267
|
-
* certificates after a successful run. If RBAC/live checks fail right after upload until the
|
|
268
|
-
* controller syncs permissions, skip --probe or retry once permissions are visible.
|
|
269
|
-
*/
|
|
270
|
-
const UPLOAD_PROBE_TEST_DATA = {};
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Optional POST validation/run after successful upload.
|
|
274
|
-
* @param {string} dataplaneUrl
|
|
275
|
-
* @param {string} systemKey
|
|
276
|
-
* @param {Object} authConfig
|
|
277
|
-
* @param {number|undefined} probeTimeoutMs
|
|
278
|
-
*/
|
|
279
|
-
async function maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, probeTimeoutMs) {
|
|
280
|
-
logger.log('');
|
|
281
|
-
logger.log(sectionTitle('Runtime checks (--probe)'));
|
|
282
|
-
logger.log(SEP);
|
|
283
|
-
logger.log(formatProgress('Running runtime checks...'));
|
|
284
|
-
const timeoutMs = probeTimeoutMs === undefined || probeTimeoutMs === null ? 120000 : probeTimeoutMs;
|
|
285
|
-
try {
|
|
286
|
-
const pr = await testSystemViaPipeline(
|
|
287
|
-
dataplaneUrl,
|
|
288
|
-
systemKey,
|
|
289
|
-
authConfig,
|
|
290
|
-
UPLOAD_PROBE_TEST_DATA,
|
|
291
|
-
{ timeout: timeoutMs }
|
|
292
|
-
);
|
|
293
|
-
if (pr.success === false) {
|
|
294
|
-
logger.log(chalk.yellow(`⚠ Probe request failed: ${pr.formattedError || pr.error || 'unknown error'}`));
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
const probeData = unwrapApiData(pr);
|
|
298
|
-
logProbeRuntimeBlock(probeData, systemKey);
|
|
299
|
-
} catch (e) {
|
|
300
|
-
logger.log(chalk.yellow(`⚠ Probe failed: ${e.message}`));
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
209
|
/**
|
|
305
210
|
* Local validation, manifest, payload, and configuration resolution.
|
|
306
211
|
* Regenerates integration/<systemKey>/<systemKey>-deploy.json from sources (same as `aifabrix json`).
|
|
@@ -311,15 +216,22 @@ async function maybeRunUploadProbe(dataplaneUrl, systemKey, authConfig, probeTim
|
|
|
311
216
|
*/
|
|
312
217
|
async function buildValidatedUploadManifestPayload(systemKey, opts = {}) {
|
|
313
218
|
const quiet = opts.minimal === true || opts.quiet === true;
|
|
314
|
-
const
|
|
219
|
+
const pathOptions = opts.pathOptions || {};
|
|
220
|
+
const validationResult = await validateExternalSystemComplete(systemKey, {
|
|
221
|
+
type: 'external',
|
|
222
|
+
...pathOptions
|
|
223
|
+
});
|
|
315
224
|
throwIfValidationFailed(validationResult);
|
|
316
225
|
if (!quiet) {
|
|
317
226
|
logger.log(formatSuccessLine('Local validation passed'));
|
|
318
227
|
}
|
|
319
|
-
await syncDeployJsonFromSources(systemKey, { quiet });
|
|
320
|
-
const manifest = await generateControllerManifest(systemKey, { type: 'external' });
|
|
321
|
-
const payload = buildUploadPayload(manifest, {
|
|
322
|
-
|
|
228
|
+
await syncDeployJsonFromSources(systemKey, { quiet, ...pathOptions });
|
|
229
|
+
const manifest = await generateControllerManifest(systemKey, { type: 'external', ...pathOptions });
|
|
230
|
+
const payload = buildUploadPayload(manifest, {
|
|
231
|
+
force: opts.force === true,
|
|
232
|
+
status: opts.uploadStatus === 'published' ? 'published' : 'draft'
|
|
233
|
+
});
|
|
234
|
+
await resolvePayloadConfiguration(systemKey, payload, pathOptions);
|
|
323
235
|
return { manifest, payload };
|
|
324
236
|
}
|
|
325
237
|
|
|
@@ -334,9 +246,17 @@ async function buildValidatedUploadManifestPayload(systemKey, opts = {}) {
|
|
|
334
246
|
* @returns {Promise<void>}
|
|
335
247
|
*/
|
|
336
248
|
async function logAndSyncLocalOpenApiForUpload(systemKey, manifest, uploadContext = {}) {
|
|
337
|
-
const
|
|
249
|
+
const pathOptions = uploadContext.pathOptions || {};
|
|
250
|
+
const appPath = resolveExternalSystemPath(systemKey, pathOptions);
|
|
338
251
|
const ei = manifest && manifest.externalIntegration;
|
|
339
252
|
const datasourceFiles = ei && Array.isArray(ei.dataSources) ? ei.dataSources : [];
|
|
253
|
+
await exportProgrammaticOpenApiForRepair({
|
|
254
|
+
appPath,
|
|
255
|
+
systemKey,
|
|
256
|
+
datasourceFiles,
|
|
257
|
+
dryRun: false,
|
|
258
|
+
backupCtx: { dryRun: false, changedFiles: [] }
|
|
259
|
+
});
|
|
340
260
|
const openapiSyncLines = await maybeSyncOpenApiFilesForMcp({
|
|
341
261
|
enabled: true,
|
|
342
262
|
dryRun: false,
|
|
@@ -346,11 +266,55 @@ async function logAndSyncLocalOpenApiForUpload(systemKey, manifest, uploadContex
|
|
|
346
266
|
dataplaneUrl: uploadContext.dataplaneUrl,
|
|
347
267
|
authConfig: uploadContext.authConfig
|
|
348
268
|
});
|
|
349
|
-
|
|
350
|
-
|
|
269
|
+
if (!uploadContext.quiet) {
|
|
270
|
+
for (const line of openapiSyncLines) {
|
|
271
|
+
logger.log(line.startsWith('Skipped') ? formatWarningLine(line) : formatSuccessLine(line));
|
|
272
|
+
}
|
|
351
273
|
}
|
|
352
274
|
}
|
|
353
275
|
|
|
276
|
+
/**
|
|
277
|
+
* @param {string} systemKey
|
|
278
|
+
* @param {Object} options
|
|
279
|
+
* @param {Object} manifest
|
|
280
|
+
* @param {Object} payload
|
|
281
|
+
* @param {{ dataplaneUrl: string, authConfig: Object, environment: string, rawRes: Object }} ctx
|
|
282
|
+
*/
|
|
283
|
+
async function completeUploadAfterPublish(systemKey, options, manifest, payload, ctx) {
|
|
284
|
+
const quietCompact = options.minimal === true && options.verbose !== true;
|
|
285
|
+
const pushMeta = await pushAndLogCredentialSecrets(ctx.dataplaneUrl, ctx.authConfig, systemKey, payload, {
|
|
286
|
+
json: options.json === true,
|
|
287
|
+
pathOptions: options.pathOptions,
|
|
288
|
+
suppressCredentialLog: quietCompact
|
|
289
|
+
});
|
|
290
|
+
await logAndSyncLocalOpenApiForUpload(systemKey, manifest, {
|
|
291
|
+
dataplaneUrl: ctx.dataplaneUrl,
|
|
292
|
+
authConfig: ctx.authConfig,
|
|
293
|
+
pathOptions: options.pathOptions,
|
|
294
|
+
quiet: quietCompact
|
|
295
|
+
});
|
|
296
|
+
await handlePublicationAndFollowups(
|
|
297
|
+
{
|
|
298
|
+
systemKey,
|
|
299
|
+
options,
|
|
300
|
+
manifest,
|
|
301
|
+
payload,
|
|
302
|
+
environment: ctx.environment,
|
|
303
|
+
dataplaneUrl: ctx.dataplaneUrl,
|
|
304
|
+
authConfig: ctx.authConfig,
|
|
305
|
+
rawRes: ctx.rawRes,
|
|
306
|
+
credentialPush: pushMeta.credentialPush,
|
|
307
|
+
configPush: pushMeta.configPush
|
|
308
|
+
},
|
|
309
|
+
maybeRunUploadProbe
|
|
310
|
+
);
|
|
311
|
+
return finalizeUploadPublishResult(
|
|
312
|
+
{ dataplaneUrl: ctx.dataplaneUrl, authConfig: ctx.authConfig, environment: ctx.environment, uploadSkipped: false },
|
|
313
|
+
payload,
|
|
314
|
+
options
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
354
318
|
/**
|
|
355
319
|
* Upload path after dry-run check.
|
|
356
320
|
* @param {string} systemKey
|
|
@@ -377,37 +341,22 @@ async function runUploadPublishAndSummary(systemKey, options, manifest, payload)
|
|
|
377
341
|
);
|
|
378
342
|
const publication = unwrapPublicationResult(rawRes);
|
|
379
343
|
if (isPublicationUnchanged(publication)) {
|
|
380
|
-
|
|
381
|
-
logger.log(formatSuccessLine('Config unchanged on dataplane — upload skipped.'));
|
|
382
|
-
}
|
|
383
|
-
await runUploadSidecarFollowups({
|
|
344
|
+
return finishUnchangedUploadPublication({
|
|
384
345
|
systemKey,
|
|
385
346
|
options,
|
|
386
347
|
payload,
|
|
387
348
|
dataplaneUrl,
|
|
388
|
-
authConfig
|
|
349
|
+
authConfig,
|
|
350
|
+
environment
|
|
389
351
|
});
|
|
390
|
-
return { dataplaneUrl, authConfig, environment, uploadSkipped: true };
|
|
391
352
|
}
|
|
392
353
|
|
|
393
|
-
|
|
394
|
-
|
|
354
|
+
return completeUploadAfterPublish(systemKey, options, manifest, payload, {
|
|
355
|
+
dataplaneUrl,
|
|
356
|
+
authConfig,
|
|
357
|
+
environment,
|
|
358
|
+
rawRes
|
|
395
359
|
});
|
|
396
|
-
await logAndSyncLocalOpenApiForUpload(systemKey, manifest, { dataplaneUrl, authConfig });
|
|
397
|
-
await handlePublicationAndFollowups(
|
|
398
|
-
{
|
|
399
|
-
systemKey,
|
|
400
|
-
options,
|
|
401
|
-
manifest,
|
|
402
|
-
payload,
|
|
403
|
-
environment,
|
|
404
|
-
dataplaneUrl,
|
|
405
|
-
authConfig,
|
|
406
|
-
rawRes
|
|
407
|
-
},
|
|
408
|
-
maybeRunUploadProbe
|
|
409
|
-
);
|
|
410
|
-
return { dataplaneUrl, authConfig, environment, uploadSkipped: false };
|
|
411
360
|
}
|
|
412
361
|
|
|
413
362
|
/**
|
|
@@ -415,16 +364,23 @@ async function runUploadPublishAndSummary(systemKey, options, manifest, payload)
|
|
|
415
364
|
* @param {string} systemKey - External system key (integration/<systemKey>/)
|
|
416
365
|
* @param {Object} [options] - Options
|
|
417
366
|
* @param {boolean} [options.dryRun] - Validate and build payload only; no API calls
|
|
418
|
-
* @param {boolean} [options.verbose] -
|
|
367
|
+
* @param {boolean} [options.verbose] - Expanded summary and server-side pipeline validate warnings
|
|
419
368
|
* @param {boolean} [options.probe] - POST validation/run after publish
|
|
420
369
|
* @param {number} [options.probeTimeout] - Probe timeout ms (default 120000)
|
|
421
|
-
* @param {boolean} [options.minimal] - Short summary
|
|
370
|
+
* @param {boolean} [options.minimal] - Short summary (default: compact unless --verbose)
|
|
422
371
|
* @returns {Promise<{ dataplaneUrl: string, authConfig: Object, environment: string }|void>}
|
|
423
372
|
* @throws {Error} If validation or API calls fail
|
|
424
373
|
*/
|
|
425
374
|
async function uploadExternalSystem(systemKey, options = {}) {
|
|
426
375
|
validateSystemKeyFormat(systemKey);
|
|
427
|
-
const
|
|
376
|
+
const pathOptions = options.pathOptions || {};
|
|
377
|
+
const minimal =
|
|
378
|
+
options.minimal === true
|
|
379
|
+
? true
|
|
380
|
+
: options.minimal === false
|
|
381
|
+
? false
|
|
382
|
+
: options.verbose !== true;
|
|
383
|
+
const uploadOptions = { ...options, minimal };
|
|
428
384
|
if (!minimal) {
|
|
429
385
|
logger.log('');
|
|
430
386
|
logger.log(sectionTitle('Upload external system'));
|
|
@@ -434,7 +390,9 @@ async function uploadExternalSystem(systemKey, options = {}) {
|
|
|
434
390
|
const { manifest, payload } = await buildValidatedUploadManifestPayload(systemKey, {
|
|
435
391
|
dryRun: !!options.dryRun,
|
|
436
392
|
force: options.force === true,
|
|
437
|
-
minimal
|
|
393
|
+
minimal,
|
|
394
|
+
pathOptions,
|
|
395
|
+
uploadStatus: options.uploadStatus
|
|
438
396
|
});
|
|
439
397
|
if (options.dryRun) {
|
|
440
398
|
logger.log(chalk.yellow('Dry run: would upload payload (no API calls).'));
|
|
@@ -443,11 +401,12 @@ async function uploadExternalSystem(systemKey, options = {}) {
|
|
|
443
401
|
);
|
|
444
402
|
return undefined;
|
|
445
403
|
}
|
|
446
|
-
return runUploadPublishAndSummary(systemKey,
|
|
404
|
+
return runUploadPublishAndSummary(systemKey, uploadOptions, manifest, payload);
|
|
447
405
|
}
|
|
448
406
|
|
|
449
407
|
module.exports = {
|
|
450
408
|
uploadExternalSystem,
|
|
409
|
+
buildValidatedUploadManifestPayload,
|
|
451
410
|
buildUploadPayload,
|
|
452
411
|
resolveDataplaneAndAuth,
|
|
453
412
|
runUploadValidatePublish,
|
|
@@ -10,7 +10,7 @@ const {
|
|
|
10
10
|
} = require('./test-e2e-external');
|
|
11
11
|
const { runDatasourceGovernanceScenarios, getDatasourceGovernancePack } = require('../api/governance-scenario-pack.api');
|
|
12
12
|
const { resolveIntegrationAuth } = require('../external-system/integration-auth-context');
|
|
13
|
-
const {
|
|
13
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
14
14
|
const { VERDICT } = require('../lifecycle/product-model');
|
|
15
15
|
const { runWithVerifyStepProgress } = require('../lifecycle/verify-step-progress');
|
|
16
16
|
|
|
@@ -81,7 +81,7 @@ async function runVerifyGovernanceFromDbPacks(systemKey, options) {
|
|
|
81
81
|
return { resolvedKey, datasourceRows: [] };
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
if (!
|
|
84
|
+
if (!cliOptsSkipPublish(options)) {
|
|
85
85
|
const uploadCtx = await syncLocalIfRequested(resolvedKey, options);
|
|
86
86
|
attachUploadAuthToOptions(options, uploadCtx);
|
|
87
87
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
const logger = require('../utils/logger');
|
|
10
10
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
11
|
-
const {
|
|
11
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
12
12
|
const { runVerifyOperationsForExternalSystem } = require('./verify-operations-external');
|
|
13
13
|
const { displayVerifyOperationsTTY } = require('../lifecycle/report-display');
|
|
14
14
|
const { exitCodeFromVerdict } = require('../lifecycle/exit-codes');
|
|
@@ -27,7 +27,7 @@ function normalizeVerifyOperationsCliOptions(options, cmd) {
|
|
|
27
27
|
verbose: options.verbose === true || has('-v') || has('--verbose'),
|
|
28
28
|
debug: options.debug === true || has('-d') || has('--debug'),
|
|
29
29
|
json: options.json === true || has('--json'),
|
|
30
|
-
|
|
30
|
+
noPublish: cliOptsSkipPublish(options, cmd),
|
|
31
31
|
continue: options.continue === true || has('--continue'),
|
|
32
32
|
async: options.async !== false
|
|
33
33
|
};
|
|
@@ -33,7 +33,7 @@ function buildOperationsVerifyStepPlan(systemKey, options) {
|
|
|
33
33
|
run: () =>
|
|
34
34
|
testExternalSystemIntegration(systemKey, {
|
|
35
35
|
environment: options.env,
|
|
36
|
-
|
|
36
|
+
noPublish: true,
|
|
37
37
|
verbose: false,
|
|
38
38
|
debug: options.debug === true
|
|
39
39
|
}),
|
|
@@ -45,7 +45,7 @@ function buildOperationsVerifyStepPlan(systemKey, options) {
|
|
|
45
45
|
run: (progress) =>
|
|
46
46
|
runTestE2EForExternalSystem(systemKey, {
|
|
47
47
|
env: options.env,
|
|
48
|
-
|
|
48
|
+
noPublish: true,
|
|
49
49
|
verbose: false,
|
|
50
50
|
debug: options.debug === true,
|
|
51
51
|
async: options.async !== false,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
'use strict';
|
|
6
6
|
|
|
7
7
|
const { syncLocalIfRequested } = require('./test-e2e-external');
|
|
8
|
-
const {
|
|
8
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
9
9
|
const { buildOperationsVerifyStepPlan } = require('./verify-operations-step-plan');
|
|
10
10
|
const { runWithVerifyStepProgress } = require('../lifecycle/verify-step-progress');
|
|
11
11
|
|
|
@@ -86,7 +86,7 @@ async function runOperationsVerifySteps(systemKey, options) {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
if (!
|
|
89
|
+
if (!cliOptsSkipPublish(options)) {
|
|
90
90
|
const uploadCtx = await syncLocalIfRequested(systemKey, options);
|
|
91
91
|
attachUploadAuthToOptions(options, uploadCtx);
|
|
92
92
|
}
|
|
@@ -28,7 +28,7 @@ async function runVerifyTrustCommandAction(appName, options, cmd) {
|
|
|
28
28
|
env: opts.env,
|
|
29
29
|
verbose: opts.verbose,
|
|
30
30
|
debug: opts.debug,
|
|
31
|
-
|
|
31
|
+
noPublish: opts.noPublish === true,
|
|
32
32
|
revalidate: opts.revalidate === true,
|
|
33
33
|
timeout: opts.timeout
|
|
34
34
|
});
|
|
@@ -468,7 +468,7 @@ async function handleFileSaving(appName, systemConfig, datasourceConfigs, system
|
|
|
468
468
|
const spinner = ora('Saving files...').start();
|
|
469
469
|
try {
|
|
470
470
|
const config = require('../core/config');
|
|
471
|
-
const format = (await config.getFormat()) || 'yaml';
|
|
471
|
+
const format = ctx?.format || (await config.getFormat()) || 'yaml';
|
|
472
472
|
const generatedFiles = await generateWizardFiles(appName, systemConfig, datasourceConfigs, systemKey, { aiGeneratedReadme: null, format });
|
|
473
473
|
if (enableRBAC && generatedFiles.appPath && generatedFiles.systemFilePath) {
|
|
474
474
|
try {
|
|
@@ -115,7 +115,8 @@ async function executeWizardFromConfig(wizardConfig, dataplaneUrl, authConfig, o
|
|
|
115
115
|
{
|
|
116
116
|
dataplaneUrl,
|
|
117
117
|
authConfig,
|
|
118
|
-
enableRBAC: Boolean(preferences?.enableRBAC)
|
|
118
|
+
enableRBAC: Boolean(preferences?.enableRBAC),
|
|
119
|
+
format: opts.format
|
|
119
120
|
}
|
|
120
121
|
);
|
|
121
122
|
}
|
|
@@ -33,12 +33,8 @@ function needsAdminEnvQuoting(value) {
|
|
|
33
33
|
* @returns {string}
|
|
34
34
|
*/
|
|
35
35
|
function formatAdminEnvLine(key, value) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
return `${key}=${safe}`;
|
|
39
|
-
}
|
|
40
|
-
const escaped = safe.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
41
|
-
return `${key}="${escaped}"`;
|
|
36
|
+
const { formatDotenvLine } = require('../utils/env-dotenv-format');
|
|
37
|
+
return formatDotenvLine(key, value);
|
|
42
38
|
}
|
|
43
39
|
|
|
44
40
|
/**
|
|
@@ -236,6 +236,7 @@ function parseEnvContentToMap(content) {
|
|
|
236
236
|
if (!content || typeof content !== 'string') {
|
|
237
237
|
return {};
|
|
238
238
|
}
|
|
239
|
+
const { parseDotenvRawValue } = require('../utils/env-dotenv-format');
|
|
239
240
|
const map = {};
|
|
240
241
|
const lines = content.split(/\r?\n/);
|
|
241
242
|
for (const line of lines) {
|
|
@@ -246,8 +247,7 @@ function parseEnvContentToMap(content) {
|
|
|
246
247
|
const eq = trimmed.indexOf('=');
|
|
247
248
|
if (eq > 0) {
|
|
248
249
|
const key = trimmed.substring(0, eq).trim();
|
|
249
|
-
|
|
250
|
-
map[key] = value;
|
|
250
|
+
map[key] = parseDotenvRawValue(trimmed.substring(eq + 1));
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
return map;
|
|
@@ -279,7 +279,12 @@ function collectSeenKeysAndMergeEnvLines(lines, newMap) {
|
|
|
279
279
|
if (eq > 0) {
|
|
280
280
|
const key = trimmed.substring(0, eq).trim();
|
|
281
281
|
seen.add(key);
|
|
282
|
-
|
|
282
|
+
if (Object.prototype.hasOwnProperty.call(newMap, key)) {
|
|
283
|
+
const { formatDotenvLine } = require('../utils/env-dotenv-format');
|
|
284
|
+
out.push(formatDotenvLine(key, newMap[key]));
|
|
285
|
+
} else {
|
|
286
|
+
out.push(line);
|
|
287
|
+
}
|
|
283
288
|
continue;
|
|
284
289
|
}
|
|
285
290
|
out.push(line);
|
|
@@ -288,9 +293,10 @@ function collectSeenKeysAndMergeEnvLines(lines, newMap) {
|
|
|
288
293
|
}
|
|
289
294
|
|
|
290
295
|
function appendMissingEnvKeysFromMap(out, seen, newMap) {
|
|
296
|
+
const { formatDotenvLine } = require('../utils/env-dotenv-format');
|
|
291
297
|
for (const key of Object.keys(newMap)) {
|
|
292
298
|
if (!seen.has(key)) {
|
|
293
|
-
out.push(
|
|
299
|
+
out.push(formatDotenvLine(key, newMap[key]));
|
|
294
300
|
}
|
|
295
301
|
}
|
|
296
302
|
}
|
|
@@ -130,19 +130,8 @@ async function injectBashPrefixedExportLines(content, secretsPath, appName) {
|
|
|
130
130
|
* @returns {Object.<string, string>} Map of variable name to value
|
|
131
131
|
*/
|
|
132
132
|
function parseEnvContentToMap(content) {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
const lines = content.split(/\r?\n/);
|
|
136
|
-
for (const line of lines) {
|
|
137
|
-
const trimmed = line.trim();
|
|
138
|
-
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
139
|
-
const eq = trimmed.indexOf('=');
|
|
140
|
-
if (eq > 0) {
|
|
141
|
-
const key = trimmed.substring(0, eq).trim();
|
|
142
|
-
map[key] = trimmed.substring(eq + 1);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return map;
|
|
133
|
+
const { parseEnvContentToMap: parseMap } = require('./secrets-env-content');
|
|
134
|
+
return parseMap(content);
|
|
146
135
|
}
|
|
147
136
|
|
|
148
137
|
/**
|
|
@@ -17,8 +17,8 @@ const { requireBearerForDataplanePipeline } = require('../utils/token-manager');
|
|
|
17
17
|
const { buildMinimalUploadSyncOptions } = require('../utils/upload-sync-options');
|
|
18
18
|
const { fetchTrustRunFromDataplane } = require('./agent-trust-fetch');
|
|
19
19
|
|
|
20
|
-
async function maybeSyncBeforeTrust({
|
|
21
|
-
if (
|
|
20
|
+
async function maybeSyncBeforeTrust({ noPublish, authConfig, systemKey, options = {} }) {
|
|
21
|
+
if (noPublish === true) return;
|
|
22
22
|
requireBearerForDataplanePipeline(authConfig);
|
|
23
23
|
logger.log(chalk.cyan('Syncing local config to dataplane…'));
|
|
24
24
|
const { uploadExternalSystem } = require('../commands/upload');
|
|
@@ -66,7 +66,7 @@ async function runDatasourceAgentTrust(datasourceKey, options = {}) {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
await maybeSyncBeforeTrust({
|
|
69
|
-
|
|
69
|
+
noPublish: options.noPublish === true,
|
|
70
70
|
authConfig,
|
|
71
71
|
systemKey,
|
|
72
72
|
options
|
package/lib/datasource/deploy.js
CHANGED
|
@@ -255,7 +255,9 @@ async function deployDatasource(fileOrKey, _options) {
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
if (Array.isArray(datasourceConfig.configuration) && datasourceConfig.configuration.length > 0) {
|
|
258
|
-
const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey
|
|
258
|
+
const { envMap, secrets } = await buildResolvedEnvMapForIntegration(systemKey, {
|
|
259
|
+
dataplaneRuntime: true
|
|
260
|
+
});
|
|
259
261
|
resolveConfigurationValues(datasourceConfig.configuration, envMap, secrets, systemKey);
|
|
260
262
|
}
|
|
261
263
|
|