@aifabrix/builder 2.45.5 → 2.47.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/cli-layout.mdc +2 -0
- package/.cursor/rules/cli-product-neutral.mdc +43 -0
- package/.cursor/rules/project-rules.mdc +1 -0
- package/.npmrc.token +1 -0
- package/.temp/jest-protection-convert/run-IFN2nv/.protection/hubspot-companies.json +1 -0
- package/.temp/jest-protection-convert/run-IvmKLO/.protection/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-convert/run-SdvblF/.protection/hubspot-companies.json +1 -0
- package/.temp/jest-protection-convert/run-b51TsW/.protection/hubspot-companies.json +1 -0
- package/.temp/jest-protection-convert/run-fiLmb1/.protection/hubspot-companies.json +1 -0
- package/.temp/jest-protection-convert/run-qYGHMU/.protection/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-Mq5re8/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-f3u4YL/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-iQtd1O/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-mdmz5M/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-qbKYxQ/hubspot-companies.yaml +17 -0
- package/.temp/jest-protection-fixtures/hubspot-yzlJy6/hubspot-companies.yaml +17 -0
- package/.temp/validation/summary.txt +5 -0
- package/README.md +43 -17
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +1 -1
- package/jest.config.default.js +2 -1
- package/jest.config.isolated.js +2 -1
- package/jest.global-live-fabrix-hooks.js +36 -0
- package/jest.isolated-projects.js +146 -0
- package/jest.projects.js +65 -136
- package/lib/api/api-response-errors.js +124 -0
- package/lib/api/dataplane-health.api.js +19 -7
- package/lib/api/governance-scenario-pack.api.js +159 -0
- package/lib/api/index.js +43 -3
- package/lib/api/lifecycle.api.js +98 -0
- package/lib/api/pipeline.api.js +3 -1
- package/lib/api/records-bulk.api.js +14 -1
- package/lib/api/resource-types.api.js +107 -0
- package/lib/api/runtime-configuration.api.js +72 -0
- package/lib/api/types/resource-types.types.js +45 -0
- package/lib/api/user-groups.api.js +9 -9
- package/lib/api/users.api.js +8 -8
- package/lib/api/validation-runner.js +3 -1
- package/lib/api/wizard.api.js +10 -2
- package/lib/app/deploy-config.js +4 -1
- package/lib/app/down.js +78 -27
- package/lib/app/index.js +2 -2
- package/lib/app/push.js +4 -5
- package/lib/app/register.js +7 -4
- package/lib/app/run-env-compose.js +84 -30
- package/lib/app/run-resolve-image.js +2 -1
- package/lib/app/run-stop-containers.js +113 -0
- package/lib/app/run.js +1 -31
- package/lib/app/show-display.js +35 -0
- package/lib/app/show.js +32 -1
- package/lib/build/index.js +22 -5
- package/lib/build/miso-controller-npm-sdk-guard.js +25 -0
- package/lib/certification/sync-system-certification.js +13 -6
- package/lib/channels/add-channel.js +348 -0
- package/lib/channels/channel-artifact-generator.js +141 -0
- package/lib/channels/channel-audit.js +101 -0
- package/lib/channels/channel-auth-context.js +37 -0
- package/lib/channels/channel-credential.js +200 -0
- package/lib/channels/channel-display-name.js +64 -0
- package/lib/channels/channel-external-system.js +106 -0
- package/lib/channels/channel-integration-generator.js +274 -0
- package/lib/channels/channel-probe.js +89 -0
- package/lib/channels/channel-runtime-resolver.js +152 -0
- package/lib/channels/channel-status-display.js +141 -0
- package/lib/channels/channel-targets.js +115 -0
- package/lib/cli/index.js +20 -4
- package/lib/cli/infra-guided-auth.js +109 -0
- package/lib/cli/infra-guided.js +84 -81
- package/lib/cli/setup-app.help.js +0 -31
- package/lib/cli/setup-app.js +82 -5
- package/lib/cli/setup-app.test-commands.js +5 -57
- package/lib/cli/setup-auth.js +25 -0
- package/lib/cli/setup-certification-commands.js +147 -0
- package/lib/cli/setup-certification.help.js +141 -0
- package/lib/cli/setup-environment.js +19 -2
- package/lib/cli/setup-external-system-help.js +62 -0
- package/lib/cli/setup-external-system.js +25 -3
- package/lib/cli/setup-infra-up-dataplane-action.js +2 -2
- package/lib/cli/setup-infra-up-platform-action.js +2 -1
- package/lib/cli/setup-infra.js +9 -1
- package/lib/cli/setup-platform.js +6 -1
- package/lib/cli/setup-secrets.js +33 -1
- package/lib/cli/setup-utility-help-after.js +25 -2
- package/lib/cli/setup-utility-repair.js +198 -0
- package/lib/cli/setup-utility-resolve.js +44 -5
- package/lib/cli/setup-utility-validate.js +197 -0
- package/lib/cli/setup-utility.js +4 -239
- package/lib/commands/app-logs.js +54 -26
- package/lib/commands/app.js +41 -0
- package/lib/commands/auth-status-client-tokens.js +214 -0
- package/lib/commands/auth-status-dataplane-version.js +142 -68
- package/lib/commands/auth-status.js +43 -54
- package/lib/commands/channel.js +58 -0
- package/lib/commands/datasource-test-trust-cli.js +27 -23
- package/lib/commands/datasource-unified-test-cli.js +6 -3
- package/lib/commands/datasource-unified-test-cli.options.js +5 -1
- package/lib/commands/datasource.js +8 -8
- package/lib/commands/dev-show-display.js +8 -1
- package/lib/commands/governance-cli-shared.js +94 -0
- package/lib/commands/governance-command-action.js +132 -0
- package/lib/commands/governance-download-external.js +34 -0
- package/lib/commands/governance-generate-external.js +71 -0
- package/lib/commands/governance-upload-external.js +36 -0
- package/lib/commands/governance-verify-external.js +64 -0
- package/lib/commands/governance.js +144 -0
- package/lib/commands/identity-apply-sync.js +49 -8
- package/lib/commands/identity-group-cli.js +66 -26
- package/lib/commands/identity-membership-role-cache.js +58 -37
- package/lib/commands/identity-shared.js +22 -1
- package/lib/commands/identity-user-cli.js +80 -34
- package/lib/commands/lifecycle-command-action.js +123 -0
- package/lib/commands/lifecycle-external.js +268 -0
- package/lib/commands/login.js +11 -2
- package/lib/commands/repair-auth-apply.js +153 -0
- package/lib/commands/repair-auth-config.js +8 -13
- package/lib/commands/repair-changed-files.js +41 -0
- package/lib/commands/repair-datasource-com-v2.js +15 -0
- package/lib/commands/repair-datasource-keys.js +4 -1
- package/lib/commands/repair-datasource-run.js +59 -0
- package/lib/commands/repair-datasource-service-contract.js +206 -0
- package/lib/commands/repair-datasource-test-payload.js +259 -0
- package/lib/commands/repair-datasource.js +49 -64
- package/lib/commands/repair-env-template.js +76 -25
- package/lib/commands/repair-external-run.js +216 -0
- package/lib/commands/repair-openapi-sync.js +49 -4
- package/lib/commands/repair-persist.js +4 -0
- package/lib/commands/repair-rbac.js +52 -1
- package/lib/commands/repair-steps.js +160 -0
- package/lib/commands/repair-system-alignment.js +7 -4
- package/lib/commands/repair.js +29 -296
- package/lib/commands/resource-type.js +371 -0
- package/lib/commands/secrets-get.js +184 -0
- package/lib/commands/secrets-remove-all.js +3 -1
- package/lib/commands/setup-image-refresh.js +146 -0
- package/lib/commands/setup-modes.js +158 -162
- package/lib/commands/setup-platform-auth.js +76 -0
- package/lib/commands/setup-prompts-admin.js +244 -0
- package/lib/commands/setup-prompts-platform-mode.js +70 -0
- package/lib/commands/setup-prompts-validators.js +36 -0
- package/lib/commands/setup-prompts.js +24 -76
- package/lib/commands/setup-run-context.js +45 -0
- package/lib/commands/setup-spinners.js +39 -0
- package/lib/commands/setup.js +27 -5
- package/lib/commands/teardown.js +39 -0
- package/lib/commands/test-e2e-external.js +24 -8
- package/lib/commands/test-governance-external.js +3 -24
- package/lib/commands/test-trust-external.js +48 -100
- package/lib/commands/up-common.js +57 -13
- package/lib/commands/up-dataplane.js +56 -15
- package/lib/commands/upload-publish-context.js +75 -0
- package/lib/commands/upload-sidecar-followups.js +89 -0
- package/lib/commands/upload.js +113 -110
- package/lib/commands/verify-governance-combined-external.js +61 -0
- package/lib/commands/verify-governance-command-action.js +64 -0
- package/lib/commands/verify-governance-db.js +102 -0
- package/lib/commands/verify-governance-external.js +77 -0
- package/lib/commands/verify-governance-result-builders.js +71 -0
- package/lib/commands/verify-operations-command-action.js +68 -0
- package/lib/commands/verify-operations-external.js +268 -0
- package/lib/commands/verify-operations-persist.js +75 -0
- package/lib/commands/verify-operations-step-plan.js +68 -0
- package/lib/commands/verify-operations-steps.js +111 -0
- package/lib/commands/verify-trust-command-action.js +73 -0
- package/lib/commands/verify-trust-external.js +59 -0
- package/lib/commands/wizard-config-normalizer.js +43 -23
- package/lib/commands/wizard-core.js +2 -0
- package/lib/core/admin-password-generator.js +38 -0
- package/lib/core/admin-secrets-bundle.js +111 -0
- package/lib/core/admin-secrets-env-overlay.js +62 -0
- package/lib/core/admin-secrets.js +32 -4
- package/lib/core/config-attach-extensions.js +3 -0
- package/lib/core/config-platform-controller.js +44 -0
- package/lib/core/config-setup-installation-profile.js +42 -0
- package/lib/core/config-setup-platform-mode.js +46 -0
- package/lib/core/config.js +46 -36
- package/lib/core/secrets-admin-env.js +6 -2
- package/lib/core/secrets-ensure.js +4 -0
- package/lib/core/secrets-env-content.js +54 -48
- package/lib/core/secrets-env-write.js +10 -1
- package/lib/core/secrets-infra-placeholder-sync.js +2 -0
- package/lib/core/setup-installation-profile.js +43 -0
- package/lib/core/setup-platform-mode.js +90 -0
- package/lib/datasource/agent-trust-debug-log.js +1 -1
- package/lib/datasource/agent-trust-run.js +5 -3
- package/lib/datasource/audit-evidence-extract-debug.js +30 -18
- package/lib/datasource/audit-evidence-extract.js +7 -4
- package/lib/datasource/audit-evidence-verify-matrix.js +54 -26
- package/lib/datasource/bulk-loader-run-batches.js +15 -3
- package/lib/datasource/capability/capability-diff-slice.js +2 -2
- package/lib/datasource/capability/capability-manifest.js +254 -0
- package/lib/datasource/capability/capability-resolve.js +3 -4
- package/lib/datasource/capability/copy-operations.js +5 -3
- package/lib/datasource/capability/remove-operations.js +2 -1
- package/lib/datasource/capability/run-capability-copy.js +32 -4
- package/lib/datasource/capability/run-capability-diff.js +3 -3
- package/lib/datasource/capability/run-capability-dimension.js +2 -4
- package/lib/datasource/capability/run-capability-edit.js +4 -7
- package/lib/datasource/capability/run-capability-relate.js +2 -4
- package/lib/datasource/capability/run-capability-remove.js +2 -4
- package/lib/datasource/capability/validate-capability-slice.js +2 -1
- package/lib/datasource/datasource-identifier.js +2 -1
- package/lib/datasource/datasource-load-export-context.js +3 -0
- package/lib/datasource/datasource-validate-display.js +1 -1
- package/lib/datasource/field-reference-validator.js +24 -3
- package/lib/datasource/log-cleaner.js +2 -2
- package/lib/datasource/log-viewer.js +8 -8
- package/lib/datasource/orphan-profiles-validator.js +98 -0
- package/lib/datasource/test-e2e.js +4 -1
- package/lib/datasource/unified-validation-run-body.js +3 -1
- package/lib/datasource/unified-validation-run.js +5 -2
- package/lib/datasource/validate.js +41 -23
- package/lib/deployment/environment-poll-status.js +138 -0
- package/lib/deployment/environment.js +42 -34
- package/lib/external-system/download-helpers.js +87 -0
- package/lib/external-system/download.js +78 -138
- package/lib/external-system/generator.js +1 -55
- package/lib/external-system/integration-auth-context.js +45 -0
- package/lib/external-system/test-auth.js +12 -5
- package/lib/external-system/test.js +16 -21
- package/lib/generator/builders.js +11 -1
- package/lib/generator/external-controller-manifest.js +18 -0
- package/lib/generator/split.js +3 -1
- package/lib/generator/wizard.js +1 -28
- package/lib/governance/governance-cli-errors.js +96 -0
- package/lib/governance/governance-download-display.js +38 -0
- package/lib/governance/governance-run-display.js +215 -25
- package/lib/identity/fk-reference.js +65 -0
- package/lib/identity/identity-apply-core.js +13 -58
- package/lib/identity/identity-apply-phases.js +5 -1
- package/lib/identity/identity-display.js +243 -0
- package/lib/identity/identity-response-helpers.js +52 -0
- package/lib/identity/identity-sync-errors.js +62 -0
- package/lib/identity/resolve-user-id.js +129 -0
- package/lib/identity/username-default.js +31 -0
- package/lib/infrastructure/admin-secrets-apply.js +84 -0
- package/lib/infrastructure/admin-secrets-ensure.js +130 -0
- package/lib/infrastructure/admin-secrets-resolve.js +95 -0
- package/lib/infrastructure/admin-secrets-sync.js +91 -0
- package/lib/infrastructure/helpers.js +23 -129
- package/lib/infrastructure/index.js +5 -6
- package/lib/infrastructure/orphan-infra-docker-teardown.js +11 -5
- package/lib/lifecycle/certification-progress.js +231 -0
- package/lib/lifecycle/dataplane-ui-url.js +145 -0
- package/lib/lifecycle/exit-codes.js +24 -0
- package/lib/lifecycle/json-envelope.js +25 -0
- package/lib/lifecycle/lifecycle-governance-options.js +51 -0
- package/lib/lifecycle/logger-quiet.js +29 -0
- package/lib/lifecycle/open-api-published.js +59 -0
- package/lib/lifecycle/operations-readiness-metrics.js +101 -0
- package/lib/lifecycle/product-model.js +196 -0
- package/lib/lifecycle/report-display-trust.js +70 -0
- package/lib/lifecycle/report-display.js +472 -0
- package/lib/lifecycle/scenario-upload.js +191 -0
- package/lib/lifecycle/verify-step-progress.js +87 -0
- package/lib/parameters/infra-kv-discovery.js +27 -2
- package/lib/protection/auth-context.js +10 -4
- package/lib/resolvers/datasource-resolver.js +2 -3
- package/lib/resolvers/resource-type-file.js +159 -0
- package/lib/schema/application-schema.json +17 -1
- package/lib/schema/datasource-test-run.schema.json +89 -6
- package/lib/schema/deployment-rules.yaml +2 -1
- package/lib/schema/external-datasource.schema.json +2947 -2619
- package/lib/schema/external-system.schema.json +1418 -761
- package/lib/schema/infra.parameter.yaml +45 -0
- package/lib/schema/type/credential-field-registry.json +103 -97
- package/lib/schema/type/document-storage.json +9 -5
- package/lib/utils/aifabrix-test-runtime-guard.js +125 -0
- package/lib/utils/api.js +55 -31
- package/lib/utils/app-relative-path-env.js +112 -0
- package/lib/utils/app-run-containers.js +25 -2
- package/lib/utils/authentication-shape.js +224 -0
- package/lib/utils/build-copy.js +36 -5
- package/lib/utils/build-resolve-image.js +66 -12
- package/lib/utils/celery-companion-apps.js +53 -0
- package/lib/utils/cli-secrets-error-format.js +83 -21
- package/lib/utils/cli-utils.js +20 -4
- package/lib/utils/compose-celery-worker.js +23 -0
- package/lib/utils/compose-generate-docker-compose.js +13 -1
- package/lib/utils/compose-traefik-ingress-base.js +16 -1
- package/lib/utils/config-secrets-path.js +46 -0
- package/lib/utils/configuration-env-resolver.js +36 -0
- package/lib/utils/controller-url.js +88 -1
- package/lib/utils/credential-secrets-env-kv.js +216 -0
- package/lib/utils/credential-secrets-env.js +175 -257
- package/lib/utils/dataplane-resolver.js +18 -2
- package/lib/utils/declarative-url-ports.js +27 -4
- package/lib/utils/deployment-auth-mode.js +41 -0
- package/lib/utils/developer-volume-id.js +33 -0
- package/lib/utils/docker-build.js +1 -4
- package/lib/utils/env-copy.js +14 -9
- package/lib/utils/env-kv-orphan-lines.js +43 -0
- package/lib/utils/error-formatters/network-errors.js +13 -4
- package/lib/utils/external-env-template.js +11 -3
- package/lib/utils/external-system-readiness-core.js +10 -0
- package/lib/utils/external-system-readiness-display.js +80 -23
- package/lib/utils/external-system-validators.js +8 -2
- package/lib/utils/health-check.js +4 -1
- package/lib/utils/help-builder.js +13 -8
- package/lib/utils/keycloak-realm-ready.js +101 -0
- package/lib/utils/load-cip-capacity-display-config.js +61 -15
- package/lib/utils/manifest-source-emit.js +2 -0
- package/lib/utils/paths.js +25 -0
- package/lib/utils/pipeline-upload-auth-retry.js +82 -0
- package/lib/utils/platform-controller-url.js +157 -0
- package/lib/utils/platform-kv-ref.js +57 -0
- package/lib/utils/postgres-platform-bootstrap.js +199 -0
- package/lib/utils/postgres-wipe.js +9 -2
- package/lib/utils/resolve-env-mode.js +47 -0
- package/lib/utils/runtime-configuration-download.js +189 -0
- package/lib/utils/runtime-configuration-values.js +119 -0
- package/lib/utils/schema-loader.js +19 -4
- package/lib/utils/secrets-generator.js +31 -25
- package/lib/utils/secrets-missing-error.js +164 -0
- package/lib/utils/service-url-label.js +81 -0
- package/lib/utils/setup-quiet-output.js +25 -0
- package/lib/utils/template-helpers.js +15 -0
- package/lib/utils/token-manager-client-credentials.js +201 -0
- package/lib/utils/token-manager-messages.js +8 -0
- package/lib/utils/token-manager-refresh.js +12 -2
- package/lib/utils/token-manager.js +86 -105
- package/lib/utils/upload-pipeline-ui.js +12 -5
- package/lib/utils/upload-sync-options.js +42 -0
- package/lib/utils/url-declarative-public-base.js +21 -3
- package/lib/utils/url-declarative-vdir-inactive-env.js +14 -4
- package/lib/utils/validation-poll-ui.js +8 -0
- package/lib/utils/validation-run-stage.js +45 -0
- package/lib/utils/worker-sidecars.js +142 -0
- package/lib/validation/external-manifest-validator.js +2 -0
- package/lib/validation/runtime-configuration-rules.js +98 -0
- package/lib/validation/validate-display-dimensions.js +154 -0
- package/lib/validation/validate-display-sections.js +276 -0
- package/lib/validation/validate-display-steps.js +67 -0
- package/lib/validation/validate-display.js +24 -402
- package/package.json +1 -1
- package/templates/applications/dataplane/application.yaml +7 -1
- package/templates/applications/dataplane/env.template +50 -14
- package/templates/applications/dataplane/rbac.yaml +108 -1
- package/templates/applications/miso-controller/application.yaml +2 -2
- package/templates/applications/miso-controller/env.template +53 -122
- package/templates/applications/miso-controller/rbac.yaml +28 -13
- package/templates/channels/chatgpt/install.template.md.hbs +49 -0
- package/templates/channels/chatgpt/manifest.template.json.hbs +9 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +49 -0
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +8 -0
- package/templates/channels/slack/install.template.md.hbs +49 -0
- package/templates/channels/slack/manifest.template.json.hbs +66 -0
- package/templates/channels/teams-bot/install.template.md.hbs +49 -0
- package/templates/channels/teams-bot/manifest.template.json.hbs +13 -0
- package/templates/channels/web-embed/install.template.md.hbs +49 -0
- package/templates/channels/web-embed/manifest.template.json.hbs +8 -0
- package/templates/external-system/README.md.hbs +74 -17
- package/templates/python/docker-compose.hbs +75 -18
- package/templates/typescript/docker-compose.hbs +70 -17
- package/lib/commands/test-governance-command-action.js +0 -55
- package/lib/commands/test-trust-command-action.js +0 -118
package/lib/commands/repair.js
CHANGED
|
@@ -12,207 +12,13 @@
|
|
|
12
12
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
|
-
const path = require('path');
|
|
16
15
|
const fs = require('fs');
|
|
17
|
-
const chalk = require('chalk');
|
|
18
16
|
const { detectAppType } = require('../utils/paths');
|
|
19
|
-
const { resolveApplicationConfigPath
|
|
20
|
-
const { loadConfigFile,
|
|
21
|
-
const logger = require('../utils/logger');
|
|
22
|
-
const { repairEnvTemplate, normalizeSystemFileAuthAndConfig } = require('./repair-env-template');
|
|
23
|
-
const { repairDatasourceFile } = require('./repair-datasource');
|
|
24
|
-
const { mergeRbacFromDatasources, extractRbacFromSystem, migrateSystemRbacIntoRbacFile } = require('./repair-rbac');
|
|
17
|
+
const { resolveApplicationConfigPath } = require('../utils/app-config-resolver');
|
|
18
|
+
const { loadConfigFile, isYamlPath } = require('../utils/config-format');
|
|
25
19
|
const { discoverIntegrationFiles, buildEffectiveDatasourceFiles } = require('./repair-internal');
|
|
26
|
-
const {
|
|
27
|
-
const { backupIntegrationFile } = require('../utils/integration-file-backup');
|
|
28
|
-
const { maybeSyncOpenApiFilesForMcp } = require('./repair-openapi-sync');
|
|
29
|
-
const {
|
|
30
|
-
alignAppKeyWithSystem,
|
|
31
|
-
alignDatasourceSystemKeys,
|
|
32
|
-
alignSystemFileDataSources,
|
|
33
|
-
ensureExternalIntegrationBlock,
|
|
34
|
-
removeAuthVarsFromConfiguration,
|
|
35
|
-
resolveSystemContext
|
|
36
|
-
} = require('./repair-system-alignment');
|
|
37
|
-
const { persistChangesAndRegenerate, regenerateReadmeIfRequested } = require('./repair-persist');
|
|
38
|
-
|
|
39
|
-
/** Allowed authentication methods for repair --auth (matches external-system schema) */
|
|
40
|
-
const ALLOWED_AUTH = ['oauth2', 'aad', 'apikey', 'basic', 'queryParam', 'oidc', 'hmac', 'none'];
|
|
41
|
-
|
|
42
|
-
function createRbacFromSystemIfNeeded(opts) {
|
|
43
|
-
const { appPath, systemFilePath, systemParsed, dryRun, changes, format, backupCtx } = opts;
|
|
44
|
-
if (resolveRbacPath(appPath)) return false;
|
|
45
|
-
const rbacFromSystem = extractRbacFromSystem(systemParsed);
|
|
46
|
-
if (!rbacFromSystem) return false;
|
|
47
|
-
if (!dryRun) {
|
|
48
|
-
const rbacFormat = format === 'json' ? 'json' : 'yaml';
|
|
49
|
-
const defaultRbacPath = path.join(appPath, rbacFormat === 'json' ? 'rbac.json' : 'rbac.yaml');
|
|
50
|
-
writeConfigFile(defaultRbacPath, rbacFromSystem, rbacFormat);
|
|
51
|
-
delete systemParsed.roles;
|
|
52
|
-
delete systemParsed.permissions;
|
|
53
|
-
backupIntegrationFile(systemFilePath, backupCtx);
|
|
54
|
-
writeConfigFile(systemFilePath, systemParsed);
|
|
55
|
-
}
|
|
56
|
-
changes.push('Created rbac.yaml from system roles/permissions');
|
|
57
|
-
changes.push('Removed roles/permissions from system file (now in rbac file)');
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Runs datasource repair for each file (v2.4 root dimensions, metadataSchema; optional expose/sync/test).
|
|
63
|
-
* @param {string} appPath - Application path
|
|
64
|
-
* @param {string[]} datasourceFiles - Datasource file names
|
|
65
|
-
* @param {Object} options - { expose?: boolean, sync?: boolean, test?: boolean }
|
|
66
|
-
* @param {boolean} dryRun - If true, do not write
|
|
67
|
-
* @param {string[]} changes - Array to append change descriptions to
|
|
68
|
-
* @returns {boolean} True if any datasource was updated
|
|
69
|
-
*/
|
|
70
|
-
function runDatasourceRepairs(appPath, datasourceFiles, options, dryRun, changes) {
|
|
71
|
-
if (!datasourceFiles || datasourceFiles.length === 0) return false;
|
|
72
|
-
let updated = false;
|
|
73
|
-
for (const fileName of datasourceFiles) {
|
|
74
|
-
const filePath = path.join(appPath, fileName);
|
|
75
|
-
if (!fs.existsSync(filePath)) continue;
|
|
76
|
-
try {
|
|
77
|
-
const parsed = loadConfigFile(filePath);
|
|
78
|
-
const { updated: fileUpdated, changes: fileChanges } = repairDatasourceFile(parsed, {
|
|
79
|
-
expose: options.expose,
|
|
80
|
-
sync: options.sync,
|
|
81
|
-
test: options.test
|
|
82
|
-
});
|
|
83
|
-
if (fileUpdated) {
|
|
84
|
-
updated = true;
|
|
85
|
-
fileChanges.forEach(c => changes.push(`${fileName}: ${c}`));
|
|
86
|
-
if (!dryRun) {
|
|
87
|
-
backupIntegrationFile(filePath, options.backupCtx);
|
|
88
|
-
writeConfigFile(filePath, parsed);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
} catch (err) {
|
|
92
|
-
logger.log(chalk.yellow(`⚠ Could not repair datasource ${fileName}: ${err.message}`));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return updated;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function maybeRepairRbac(appPath, systemFilePath, systemParsed, datasourceFiles, options) {
|
|
99
|
-
if (!options.rbac) return { rbacMigratedFromSystem: false, rbacMergeUpdated: false };
|
|
100
|
-
const { dryRun, changes, backupCtx, rbacFmt } = options;
|
|
101
|
-
const rbacMigratedFromSystem = migrateSystemRbacIntoRbacFile(appPath, systemFilePath, systemParsed, { dryRun, changes, backupCtx });
|
|
102
|
-
const rbacMergeUpdated = mergeRbacFromDatasources(appPath, systemParsed, datasourceFiles, extractRbacFromSystem, {
|
|
103
|
-
format: rbacFmt,
|
|
104
|
-
dryRun,
|
|
105
|
-
changes,
|
|
106
|
-
backupCtx
|
|
107
|
-
});
|
|
108
|
-
return { rbacMigratedFromSystem, rbacMergeUpdated };
|
|
109
|
-
}
|
|
20
|
+
const { runRepairExternalIntegration } = require('./repair-external-run');
|
|
110
21
|
|
|
111
|
-
/**
|
|
112
|
-
* Apply --auth: replace system file authentication with canonical block for the given method.
|
|
113
|
-
* Preserves existing authentication.variables (e.g. baseUrl, tokenUrl) from the current system file.
|
|
114
|
-
* @param {Object} ctx - Context with systemParsed, systemKey, auth, dryRun, changes
|
|
115
|
-
* @returns {boolean} True if auth was replaced
|
|
116
|
-
*/
|
|
117
|
-
function applyAuthMethod(ctx) {
|
|
118
|
-
if (!ctx.auth || typeof ctx.auth !== 'string') return false;
|
|
119
|
-
const method = ctx.auth.trim().toLowerCase();
|
|
120
|
-
if (!ALLOWED_AUTH.includes(method)) {
|
|
121
|
-
throw new Error(
|
|
122
|
-
`Invalid --auth "${ctx.auth}". Allowed methods: ${ALLOWED_AUTH.join(', ')}`
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
const existingAuth = ctx.systemParsed.authentication || ctx.systemParsed.auth || {};
|
|
126
|
-
const { buildAuthenticationFromMethod } = require('../external-system/generator');
|
|
127
|
-
const newAuth = buildAuthenticationFromMethod(ctx.systemKey, method);
|
|
128
|
-
const existingVars =
|
|
129
|
-
existingAuth.variables && typeof existingAuth.variables === 'object'
|
|
130
|
-
? existingAuth.variables
|
|
131
|
-
: {};
|
|
132
|
-
// When switching auth method, keep only connectivity fields from the wizard draft.
|
|
133
|
-
// Do not let OAuth-era variables (tokenUrl, scope, headerName, …) override the new method.
|
|
134
|
-
const mergedVariables = { ...newAuth.variables };
|
|
135
|
-
for (const key of ['baseUrl', 'testEndpoint']) {
|
|
136
|
-
if (existingVars[key] !== undefined && existingVars[key] !== null) {
|
|
137
|
-
mergedVariables[key] = existingVars[key];
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
ctx.systemParsed.authentication = {
|
|
141
|
-
...newAuth,
|
|
142
|
-
variables: mergedVariables
|
|
143
|
-
};
|
|
144
|
-
if (existingAuth.displayName !== undefined) {
|
|
145
|
-
ctx.systemParsed.authentication.displayName = existingAuth.displayName;
|
|
146
|
-
}
|
|
147
|
-
ctx.changes.push(`Set authentication method to ${method}`);
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Runs all repair steps (integration block, system dataSources, auth/config, app key, datasource keys, rbac, env.template).
|
|
153
|
-
* @param {Object} ctx - Context with appPath, configPath, variables, systemFilePath, systemParsed, systemKey, systemFiles, datasourceFiles, dryRun, changes, auth?, backupCtx?
|
|
154
|
-
* @returns {{ updated: boolean, appKeyFixed: boolean, datasourceKeysFixed: boolean, rbacFileCreated: boolean, envTemplateRepaired: boolean }}
|
|
155
|
-
*/
|
|
156
|
-
function runRepairSteps(ctx) {
|
|
157
|
-
const bc = ctx.backupCtx;
|
|
158
|
-
let updated = ensureExternalIntegrationBlock(
|
|
159
|
-
ctx.variables, ctx.systemFiles, ctx.datasourceFiles, ctx.changes
|
|
160
|
-
);
|
|
161
|
-
const authReplaced = applyAuthMethod(ctx);
|
|
162
|
-
updated = updated || authReplaced;
|
|
163
|
-
const systemAuthConfigNormalized = normalizeSystemFileAuthAndConfig(
|
|
164
|
-
ctx.systemParsed, ctx.systemKey, ctx.changes
|
|
165
|
-
);
|
|
166
|
-
const systemDataSourcesAligned = alignSystemFileDataSources(
|
|
167
|
-
ctx.appPath, ctx.systemParsed, ctx.datasourceFiles, ctx.systemKey, ctx.dryRun, ctx.changes
|
|
168
|
-
);
|
|
169
|
-
const authVarsRemoved = removeAuthVarsFromConfiguration(
|
|
170
|
-
ctx.systemParsed, ctx.systemKey, ctx.dryRun, ctx.changes
|
|
171
|
-
);
|
|
172
|
-
const systemFileUpdated =
|
|
173
|
-
authReplaced || systemAuthConfigNormalized || systemDataSourcesAligned || authVarsRemoved;
|
|
174
|
-
if (systemFileUpdated && !ctx.dryRun) {
|
|
175
|
-
backupIntegrationFile(ctx.systemFilePath, bc);
|
|
176
|
-
writeConfigFile(ctx.systemFilePath, ctx.systemParsed);
|
|
177
|
-
}
|
|
178
|
-
updated = updated || systemFileUpdated;
|
|
179
|
-
const appKeyFixed = alignAppKeyWithSystem(
|
|
180
|
-
ctx.variables, ctx.systemKey, ctx.systemParsed, ctx.changes
|
|
181
|
-
);
|
|
182
|
-
const datasourceKeysFixed = alignDatasourceSystemKeys(
|
|
183
|
-
ctx.appPath, ctx.datasourceFiles, ctx.systemKey, ctx.dryRun, ctx.changes, bc
|
|
184
|
-
);
|
|
185
|
-
const rbacFileCreated = createRbacFromSystemIfNeeded({
|
|
186
|
-
appPath: ctx.appPath,
|
|
187
|
-
systemFilePath: ctx.systemFilePath,
|
|
188
|
-
systemParsed: ctx.systemParsed,
|
|
189
|
-
dryRun: ctx.dryRun,
|
|
190
|
-
changes: ctx.changes,
|
|
191
|
-
format: ctx.format,
|
|
192
|
-
backupCtx: bc
|
|
193
|
-
});
|
|
194
|
-
const envTemplateRepaired = repairEnvTemplate(
|
|
195
|
-
ctx.appPath, ctx.systemParsed, ctx.systemKey, ctx.dryRun, ctx.changes, bc
|
|
196
|
-
);
|
|
197
|
-
updated = updated || appKeyFixed || datasourceKeysFixed || rbacFileCreated || envTemplateRepaired;
|
|
198
|
-
return {
|
|
199
|
-
updated,
|
|
200
|
-
appKeyFixed,
|
|
201
|
-
datasourceKeysFixed,
|
|
202
|
-
rbacFileCreated,
|
|
203
|
-
envTemplateRepaired
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Repairs external integration config: syncs files, aligns keys, creates rbac, regenerates manifest
|
|
209
|
-
* @async
|
|
210
|
-
* @param {string} appName - Application/integration name
|
|
211
|
-
* @param {Object} [options] - Options
|
|
212
|
-
* @param {boolean} [options.dryRun] - If true, only report changes; do not write
|
|
213
|
-
* @param {boolean} [options.doc] - If true, regenerate README.md from deployment manifest
|
|
214
|
-
* @returns {Promise<{ updated: boolean, changes: string[], systemFiles: string[], datasourceFiles: string[], appKeyFixed?: boolean, datasourceKeysFixed?: boolean, rbacFileCreated?: boolean, envTemplateRepaired?: boolean, manifestRegenerated?: boolean, readmeRegenerated?: boolean }>}
|
|
215
|
-
*/
|
|
216
22
|
/**
|
|
217
23
|
* Loads application config and discovers integration files; validates at least one system file exists.
|
|
218
24
|
* @param {string} appPath - Application path
|
|
@@ -226,43 +32,13 @@ function loadConfigAndDiscover(appPath, configPath) {
|
|
|
226
32
|
originalYamlContent = fs.readFileSync(configPath, 'utf8');
|
|
227
33
|
}
|
|
228
34
|
const { systemFiles, datasourceFiles: discoveredDatasourceFiles } = discoverIntegrationFiles(appPath);
|
|
229
|
-
if (systemFiles.length === 0) {
|
|
35
|
+
if (!systemFiles || systemFiles.length === 0) {
|
|
230
36
|
throw new Error(`No system file found in ${appPath}. Expected *-system.yaml or *-system.json`);
|
|
231
37
|
}
|
|
232
38
|
const datasourceFiles = buildEffectiveDatasourceFiles(appPath, discoveredDatasourceFiles, variables.externalIntegration?.dataSources);
|
|
233
39
|
return { variables, originalYamlContent, systemFiles, datasourceFiles };
|
|
234
40
|
}
|
|
235
41
|
|
|
236
|
-
/**
|
|
237
|
-
* Builds the repair result object from steps and flags.
|
|
238
|
-
* @param {Object} steps - Result of runRepairSteps
|
|
239
|
-
* @param {boolean} anyUpdated - Whether any repair made changes
|
|
240
|
-
* @param {boolean} manifestRegenerated - Whether manifest was regenerated
|
|
241
|
-
* @param {boolean} readmeRegenerated - Whether README was regenerated
|
|
242
|
-
* @param {{ changes: string[], systemFiles: string[], datasourceFiles: string[] }} ctx - changes and file lists
|
|
243
|
-
* @returns {Object} Combined result object
|
|
244
|
-
*/
|
|
245
|
-
function buildRepairResult(steps, anyUpdated, manifestRegenerated, readmeRegenerated, ctx) {
|
|
246
|
-
return Object.assign(
|
|
247
|
-
{
|
|
248
|
-
updated: anyUpdated,
|
|
249
|
-
actionsPerformed: ctx.actionsPerformed === true,
|
|
250
|
-
changes: ctx.changes,
|
|
251
|
-
systemFiles: ctx.systemFiles,
|
|
252
|
-
datasourceFiles: ctx.datasourceFiles,
|
|
253
|
-
backupPaths: ctx.backupPaths || []
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
appKeyFixed: steps.appKeyFixed,
|
|
257
|
-
datasourceKeysFixed: steps.datasourceKeysFixed,
|
|
258
|
-
rbacFileCreated: steps.rbacFileCreated,
|
|
259
|
-
envTemplateRepaired: steps.envTemplateRepaired,
|
|
260
|
-
manifestRegenerated,
|
|
261
|
-
readmeRegenerated
|
|
262
|
-
}
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
42
|
/**
|
|
267
43
|
* Validates repair inputs and resolves app path and config path.
|
|
268
44
|
* @param {string} appName - Application name
|
|
@@ -291,83 +67,40 @@ function createRepairBackupContext(options, dryRun) {
|
|
|
291
67
|
const noBackup = options.noBackup === true || options.backup === false;
|
|
292
68
|
const backupPaths = [];
|
|
293
69
|
const backedUpFiles = new Set();
|
|
294
|
-
const backupCtx = {
|
|
70
|
+
const backupCtx = {
|
|
71
|
+
dryRun,
|
|
72
|
+
noBackup,
|
|
73
|
+
backupPaths,
|
|
74
|
+
backedUpFiles,
|
|
75
|
+
changedFiles: [],
|
|
76
|
+
wouldChangeFiles: []
|
|
77
|
+
};
|
|
295
78
|
return { backupPaths, backupCtx };
|
|
296
79
|
}
|
|
297
80
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
});
|
|
308
|
-
openapiLines.forEach((l) => changes.push(l));
|
|
309
|
-
return openapiLines.length > 0;
|
|
310
|
-
} catch (err) {
|
|
311
|
-
changes.push(`OpenAPI upload for MCP failed: ${err.message}`);
|
|
312
|
-
return false;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Repairs external integration config: syncs files, aligns keys, creates rbac, regenerates manifest
|
|
83
|
+
* @async
|
|
84
|
+
* @param {string} appName - Application/integration name
|
|
85
|
+
* @param {Object} [options] - Options
|
|
86
|
+
* @param {boolean} [options.dryRun] - If true, only report changes; do not write
|
|
87
|
+
* @param {boolean} [options.doc] - If true, regenerate README.md from deployment manifest
|
|
88
|
+
* @returns {Promise<Object>}
|
|
89
|
+
*/
|
|
316
90
|
async function repairExternalIntegration(appName, options = {}) {
|
|
317
91
|
const { appPath, configPath, dryRun, authOption } = await validateAndResolveRepairPaths(appName, options);
|
|
318
92
|
const { backupPaths, backupCtx } = createRepairBackupContext(options, dryRun);
|
|
319
|
-
const
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
const { updated: keysNormalized, datasourceFiles } = normalizeDatasourceKeysAndFilenames(appPath, initialDatasourceFiles, systemKey, { variables, dryRun, changes, backupCtx });
|
|
324
|
-
const steps = runRepairSteps({
|
|
93
|
+
const loaded = loadConfigAndDiscover(appPath, configPath);
|
|
94
|
+
return runRepairExternalIntegration({
|
|
95
|
+
appName,
|
|
96
|
+
options,
|
|
325
97
|
appPath,
|
|
326
98
|
configPath,
|
|
327
|
-
variables,
|
|
328
|
-
systemFilePath,
|
|
329
|
-
systemParsed,
|
|
330
|
-
systemKey,
|
|
331
|
-
systemFiles,
|
|
332
|
-
datasourceFiles,
|
|
333
|
-
dryRun,
|
|
334
|
-
changes,
|
|
335
|
-
auth: authOption,
|
|
336
|
-
format: rbacFmt,
|
|
337
|
-
backupCtx
|
|
338
|
-
});
|
|
339
|
-
const datasourceRepairUpdated = runDatasourceRepairs(appPath, datasourceFiles, {
|
|
340
|
-
expose: Boolean(options.expose),
|
|
341
|
-
sync: Boolean(options.sync),
|
|
342
|
-
test: Boolean(options.test),
|
|
343
|
-
backupCtx
|
|
344
|
-
}, dryRun, changes);
|
|
345
|
-
const openapiActionsPerformed = await maybeRunOpenApiSyncForMcp({
|
|
346
|
-
options,
|
|
347
99
|
dryRun,
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
});
|
|
353
|
-
const { rbacMigratedFromSystem, rbacMergeUpdated } = maybeRepairRbac(
|
|
354
|
-
appPath,
|
|
355
|
-
systemFilePath,
|
|
356
|
-
systemParsed,
|
|
357
|
-
datasourceFiles,
|
|
358
|
-
{ rbac: Boolean(options.rbac), rbacFmt, dryRun, changes, backupCtx }
|
|
359
|
-
);
|
|
360
|
-
const anyLocalUpdated = keysNormalized || steps.updated || datasourceRepairUpdated || rbacMigratedFromSystem || rbacMergeUpdated;
|
|
361
|
-
const manifestRegenerated = (anyLocalUpdated && !dryRun) ? await persistChangesAndRegenerate(
|
|
362
|
-
{ configPath, variables, appName, appPath, changes, originalYamlContent, backupCtx }
|
|
363
|
-
) : false;
|
|
364
|
-
const readmeRegenerated = await regenerateReadmeIfRequested(appName, appPath, { ...options, backupCtx }, changes);
|
|
365
|
-
return buildRepairResult(steps, anyLocalUpdated, manifestRegenerated, readmeRegenerated, {
|
|
366
|
-
actionsPerformed: openapiActionsPerformed,
|
|
367
|
-
changes,
|
|
368
|
-
systemFiles,
|
|
369
|
-
datasourceFiles,
|
|
370
|
-
backupPaths
|
|
100
|
+
authOption,
|
|
101
|
+
backupPaths,
|
|
102
|
+
backupCtx,
|
|
103
|
+
...loaded
|
|
371
104
|
});
|
|
372
105
|
}
|
|
373
106
|
|