@aifabrix/builder 2.43.0 → 2.44.1
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/anchor-docs.mdc +15 -0
- package/.cursor/rules/cli-layout.mdc +75 -0
- package/.cursor/rules/project-rules.mdc +8 -0
- package/.npmrc.token +1 -0
- package/.nyc_output/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
- package/.nyc_output/processinfo/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -0
- package/README.md +1 -1
- package/anchor-docs/README.md +10 -0
- package/anchor-docs/_TEMPLATE +24 -0
- package/bin/aifabrix.js +13 -4
- package/integration/hubspot-test/README.md +31 -0
- package/integration/hubspot-test/create-hubspot.js +5 -5
- package/integration/hubspot-test/hubspot-test-datasource-company.json +58 -462
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +61 -555
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +63 -506
- package/integration/hubspot-test/hubspot-test-datasource-users.json +42 -83
- package/integration/hubspot-test/hubspot-test-deploy.json +3 -3
- package/integration/hubspot-test/test-dataplane-down-tests.js +1 -7
- package/integration/hubspot-test/test-dataplane-down.js +3 -3
- package/integration/hubspot-test/test.js +35 -43
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +23 -0
- package/integration/roundtrip-test-local/README.md +144 -0
- package/integration/roundtrip-test-local/application.yaml +13 -0
- package/integration/roundtrip-test-local/env.template +15 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +14 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +61 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +25 -0
- package/integration/roundtrip-test-local2/README.md +144 -0
- package/integration/roundtrip-test-local2/application.yaml +13 -0
- package/integration/roundtrip-test-local2/env.template +15 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +31 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +86 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +25 -0
- package/integration/test/wizard.yaml +8 -0
- package/jest.config.default.js +10 -0
- package/jest.config.integration.fixtures.js +22 -0
- package/jest.config.integration.js +21 -18
- package/jest.config.isolated.js +10 -0
- package/jest.projects.js +301 -0
- package/lib/api/certificates.api.js +62 -0
- package/lib/api/datasources-core.api.js +3 -3
- package/lib/api/dev-mtls-request.js +110 -0
- package/lib/api/dev-server-https.js +145 -0
- package/lib/api/dev.api.js +133 -144
- package/lib/api/index.js +11 -3
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/types/certificates.types.js +48 -0
- package/lib/api/types/dev.types.js +4 -3
- package/lib/api/types/pipeline.types.js +8 -5
- package/lib/api/types/validation-run.types.js +56 -0
- package/lib/api/validation-run.api.js +111 -0
- package/lib/api/validation-runner.js +109 -0
- package/lib/app/certification-show-enrich.js +129 -0
- package/lib/app/certification-verify-rows.js +60 -0
- package/lib/app/config.js +1 -1
- package/lib/app/deploy-status-display.js +2 -2
- package/lib/app/deploy.js +7 -6
- package/lib/app/display.js +2 -1
- package/lib/app/dockerfile.js +3 -2
- package/lib/app/down.js +2 -1
- package/lib/app/helpers.js +6 -5
- package/lib/app/index.js +27 -8
- package/lib/app/list.js +7 -6
- package/lib/app/push.js +4 -3
- package/lib/app/register.js +16 -7
- package/lib/app/rotate-secret.js +14 -13
- package/lib/app/run-container-start.js +184 -0
- package/lib/app/run-docker-fallback.js +108 -0
- package/lib/app/run-env-compose.js +30 -42
- package/lib/app/run-helpers.js +49 -126
- package/lib/app/run-infra-requirements.js +30 -0
- package/lib/app/run-resolve-image.js +21 -0
- package/lib/app/run.js +74 -21
- package/lib/app/show-display.js +44 -1
- package/lib/app/show.js +93 -9
- package/lib/build/index.js +13 -10
- package/lib/certification/cli-cert-sync-skip.js +21 -0
- package/lib/certification/merge-certification-from-artifact.js +185 -0
- package/lib/certification/post-unified-cert-sync.js +33 -0
- package/lib/certification/sync-after-external-command.js +52 -0
- package/lib/certification/sync-system-certification.js +197 -0
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +61 -121
- package/lib/cli/setup-app.test-commands.js +195 -0
- package/lib/cli/setup-auth.js +19 -5
- package/lib/cli/setup-credential-deployment.js +22 -8
- package/lib/cli/setup-dev-path-commands.js +124 -0
- package/lib/cli/setup-dev.js +170 -113
- package/lib/cli/setup-environment.js +7 -1
- package/lib/cli/setup-external-system.js +84 -23
- package/lib/cli/setup-infra.js +126 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +137 -18
- package/lib/cli/setup-service-user.js +1 -1
- package/lib/cli/setup-utility.js +54 -22
- package/lib/commands/app-down.js +5 -7
- package/lib/commands/app-install.js +14 -7
- package/lib/commands/app-logs.js +13 -10
- package/lib/commands/app-shell.js +4 -1
- package/lib/commands/app-test.js +25 -19
- package/lib/commands/app.js +32 -11
- package/lib/commands/auth-config.js +6 -6
- package/lib/commands/auth-status.js +4 -3
- package/lib/commands/credential-env.js +4 -3
- package/lib/commands/credential-list.js +5 -4
- package/lib/commands/credential-push.js +4 -3
- package/lib/commands/datasource-unified-test-cli.js +428 -0
- package/lib/commands/datasource-unified-test-cli.options.js +191 -0
- package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +106 -0
- package/lib/commands/datasource-validation-cli.js +143 -0
- package/lib/commands/datasource.js +125 -95
- package/lib/commands/deployment-list.js +6 -5
- package/lib/commands/dev-cli-handlers.js +122 -18
- package/lib/commands/dev-down.js +4 -3
- package/lib/commands/dev-init.js +231 -116
- package/lib/commands/dev-show-display.js +473 -0
- package/lib/commands/login-credentials.js +3 -2
- package/lib/commands/login-device.js +4 -3
- package/lib/commands/login.js +5 -4
- package/lib/commands/logout.js +8 -7
- package/lib/commands/parameters-validate.js +54 -0
- package/lib/commands/repair-datasource.js +314 -68
- package/lib/commands/repair-env-template.js +2 -2
- package/lib/commands/repair.js +21 -3
- package/lib/commands/secrets-list.js +23 -12
- package/lib/commands/secrets-remove-all.js +220 -0
- package/lib/commands/secrets-remove.js +21 -12
- package/lib/commands/secrets-set.js +21 -12
- package/lib/commands/secrets-validate.js +4 -4
- package/lib/commands/secure.js +10 -9
- package/lib/commands/service-user.js +26 -25
- package/lib/commands/test-e2e-external.js +27 -1
- package/lib/commands/up-common.js +3 -2
- package/lib/commands/up-dataplane.js +29 -16
- package/lib/commands/up-miso.js +19 -29
- package/lib/commands/upload.js +149 -39
- package/lib/commands/wizard-core-helpers.js +1 -1
- package/lib/commands/wizard-dataplane.js +4 -3
- package/lib/commands/wizard-helpers.js +3 -3
- package/lib/commands/wizard.js +2 -2
- package/lib/core/admin-secrets.js +14 -5
- package/lib/core/audit-logger.js +12 -4
- package/lib/core/config-attach-extensions.js +46 -0
- package/lib/core/config-runtime-paths.js +29 -0
- package/lib/core/config.js +55 -56
- package/lib/core/diff.js +3 -2
- package/lib/core/ensure-encryption-key.js +1 -1
- package/lib/core/secrets-ensure-infra.js +77 -0
- package/lib/core/secrets-ensure.js +120 -64
- package/lib/core/secrets-env-write.js +35 -7
- package/lib/core/secrets-infra-placeholder-sync.js +61 -0
- package/lib/core/secrets.js +200 -37
- package/lib/core/templates-env.js +4 -3
- package/lib/datasource/abac-validator.js +1 -10
- package/lib/datasource/deploy.js +75 -53
- package/lib/datasource/field-reference-validator.js +9 -6
- package/lib/datasource/integration-context.js +63 -0
- package/lib/datasource/list.js +8 -7
- package/lib/datasource/log-viewer.js +189 -67
- package/lib/datasource/resolve-app.js +4 -4
- package/lib/datasource/test-e2e.js +113 -146
- package/lib/datasource/test-integration.js +114 -122
- package/lib/datasource/unified-validation-run-body.js +68 -0
- package/lib/datasource/unified-validation-run-post.js +23 -0
- package/lib/datasource/unified-validation-run-resolve.js +43 -0
- package/lib/datasource/unified-validation-run.js +93 -0
- package/lib/datasource/validate.js +157 -13
- package/lib/deployment/deployer.js +4 -3
- package/lib/deployment/environment.js +7 -6
- package/lib/deployment/push.js +17 -8
- package/lib/external-system/delete.js +4 -3
- package/lib/external-system/deploy.js +166 -53
- package/lib/external-system/download-helpers.js +1 -1
- package/lib/external-system/download.js +7 -6
- package/lib/external-system/generator.js +92 -6
- package/lib/external-system/integration-test-dispatch.js +26 -0
- package/lib/external-system/test-execution.js +5 -1
- package/lib/external-system/test-helpers.js +0 -4
- package/lib/external-system/test-system-level-helpers.js +110 -0
- package/lib/external-system/test-system-level.js +83 -44
- package/lib/external-system/test.js +59 -8
- package/lib/generator/builders.js +23 -11
- package/lib/generator/deploy-manifest-azure-kv.js +81 -0
- package/lib/generator/external.js +16 -4
- package/lib/generator/helpers.js +58 -3
- package/lib/generator/index.js +4 -0
- package/lib/generator/split-readme.js +12 -7
- package/lib/generator/split-variables.js +2 -1
- package/lib/generator/split.js +1 -1
- package/lib/generator/wizard-readme.js +3 -3
- package/lib/generator/wizard.js +8 -8
- package/lib/infrastructure/compose.js +70 -7
- package/lib/infrastructure/helpers-docker-check.js +67 -0
- package/lib/infrastructure/helpers.js +203 -42
- package/lib/infrastructure/index.js +31 -18
- package/lib/infrastructure/services.js +21 -67
- package/lib/internal/fs-real-sync.js +104 -0
- package/lib/internal/node-fs.js +98 -0
- package/lib/parameters/database-secret-values.js +173 -0
- package/lib/parameters/infra-kv-discovery.js +121 -0
- package/lib/parameters/infra-parameter-catalog.js +458 -0
- package/lib/parameters/infra-parameter-validate.js +64 -0
- package/lib/schema/application-schema.json +37 -17
- package/lib/schema/datasource-test-run.schema.json +493 -0
- package/lib/schema/deployment-rules.yaml +102 -63
- package/lib/schema/external-datasource.schema.json +1200 -442
- package/lib/schema/external-system.schema.json +203 -5
- package/lib/schema/flag-map-validation-run.json +31 -0
- package/lib/schema/infra-parameter.schema.json +106 -0
- package/lib/schema/infra.parameter.yaml +421 -0
- package/lib/schema/type/credential-auth-templates.json +40 -0
- package/lib/schema/type/document-storage.json +226 -0
- package/lib/schema/type/message-service.json +123 -0
- package/lib/schema/type/vector-store.json +88 -0
- package/lib/utils/aifabrix-runtime-config-dir.js +132 -0
- package/lib/utils/api-error-handler.js +2 -2
- package/lib/utils/api.js +77 -17
- package/lib/utils/app-register-api.js +3 -2
- package/lib/utils/app-register-auth.js +1 -1
- package/lib/utils/app-register-config.js +4 -4
- package/lib/utils/app-register-display.js +3 -2
- package/lib/utils/app-register-validator.js +3 -2
- package/lib/utils/app-run-containers.js +26 -22
- package/lib/utils/app-scoped-config.js +31 -0
- package/lib/utils/app-service-env-from-builder.js +164 -0
- package/lib/utils/build-copy.js +1 -1
- package/lib/utils/build-helpers.js +20 -20
- package/lib/utils/build-resolve-image.js +165 -0
- package/lib/utils/cli-layout-chalk.js +8 -0
- package/lib/utils/cli-test-layout-chalk.js +267 -0
- package/lib/utils/cli-utils.js +88 -11
- package/lib/utils/compose-db-passwords.js +138 -0
- package/lib/utils/compose-generate-docker-compose.js +216 -0
- package/lib/utils/compose-generator.js +197 -291
- package/lib/utils/compose-miso-env.js +18 -0
- package/lib/utils/compose-traefik-ingress-base.js +158 -0
- package/lib/utils/config-paths.js +166 -7
- package/lib/utils/config-scoped-resources-preference.js +41 -0
- package/lib/utils/configuration-env-resolver.js +11 -8
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/credential-secrets-env.js +5 -5
- package/lib/utils/dataplane-pipeline-warning.js +4 -3
- package/lib/utils/datasource-test-run-capability-scope.js +43 -0
- package/lib/utils/datasource-test-run-certificate-tty.js +82 -0
- package/lib/utils/datasource-test-run-debug-display.js +137 -0
- package/lib/utils/datasource-test-run-debug-slice.js +93 -0
- package/lib/utils/datasource-test-run-display.js +459 -0
- package/lib/utils/datasource-test-run-exit.js +83 -0
- package/lib/utils/datasource-test-run-legacy-adapter.js +93 -0
- package/lib/utils/datasource-test-run-report-version.js +51 -0
- package/lib/utils/datasource-test-run-schema-sync.js +59 -0
- package/lib/utils/datasource-test-run-tty-log.js +81 -0
- package/lib/utils/datasource-validation-watch.js +266 -0
- package/lib/utils/declarative-url-ports.js +47 -0
- package/lib/utils/derive-env-key-from-client-id.js +41 -0
- package/lib/utils/dev-ca-install.js +185 -23
- package/lib/utils/dev-cert-helper.js +266 -17
- package/lib/utils/dev-hosts-helper.js +307 -0
- package/lib/utils/dev-init-cert-hints.js +37 -0
- package/lib/utils/dev-init-health-messages.js +52 -0
- package/lib/utils/dev-init-resolve.js +86 -0
- package/lib/utils/dev-init-ssh-merge.js +65 -0
- package/lib/utils/dev-ssh-config-helper.js +196 -0
- package/lib/utils/dev-user-groups.js +93 -0
- package/lib/utils/docker-build.js +42 -17
- package/lib/utils/docker-exec.js +28 -0
- package/lib/utils/docker-manifest-public-port.js +116 -0
- package/lib/utils/docker-not-running-hint.js +52 -0
- package/lib/utils/docker.js +98 -11
- package/lib/utils/ensure-dev-certs-for-remote-docker.js +192 -0
- package/lib/utils/env-config-loader.js +10 -91
- package/lib/utils/env-copy.js +19 -10
- package/lib/utils/env-map.js +35 -8
- package/lib/utils/env-template.js +2 -2
- package/lib/utils/environment-scoped-resources.js +144 -0
- package/lib/utils/error-formatter.js +92 -13
- package/lib/utils/error-formatters/http-status-errors.js +6 -5
- package/lib/utils/error-formatters/network-errors.js +2 -1
- package/lib/utils/error-formatters/permission-errors.js +2 -1
- package/lib/utils/error-formatters/validation-errors.js +2 -1
- package/lib/utils/external-readme.js +8 -1
- package/lib/utils/external-system-display.js +242 -136
- package/lib/utils/external-system-local-test-tty.js +389 -0
- package/lib/utils/external-system-readiness-core.js +377 -0
- package/lib/utils/external-system-readiness-deploy-display.js +270 -0
- package/lib/utils/external-system-readiness-display-internals.js +150 -0
- package/lib/utils/external-system-readiness-display.js +186 -0
- package/lib/utils/external-system-system-test-tty-overview.js +120 -0
- package/lib/utils/external-system-system-test-tty.js +417 -0
- package/lib/utils/external-system-test-helpers.js +24 -6
- package/lib/utils/external-system-validators.js +30 -12
- package/lib/utils/health-check-url.js +119 -0
- package/lib/utils/health-check.js +59 -25
- package/lib/utils/help-builder.js +11 -8
- package/lib/utils/image-version.js +4 -8
- package/lib/utils/infra-containers.js +4 -7
- package/lib/utils/infra-env-defaults.js +162 -0
- package/lib/utils/infra-status-display.js +167 -0
- package/lib/utils/infra-status.js +16 -8
- package/lib/utils/local-secrets.js +3 -4
- package/lib/utils/paths.js +148 -47
- package/lib/utils/port-resolver.js +10 -23
- package/lib/utils/redis-env-scope.js +62 -0
- package/lib/utils/register-aifabrix-shell-env.js +204 -0
- package/lib/utils/remote-builder-validation.js +99 -0
- package/lib/utils/remote-dev-auth.js +117 -21
- package/lib/utils/remote-docker-env.js +67 -15
- package/lib/utils/remote-secrets-loader.js +13 -4
- package/lib/utils/resolve-docker-image-ref.js +124 -0
- package/lib/utils/schema-loader.js +22 -9
- package/lib/utils/secrets-bash-kv.js +25 -0
- package/lib/utils/secrets-generator.js +169 -49
- package/lib/utils/secrets-helpers.js +70 -59
- package/lib/utils/secrets-kv-scope.js +60 -0
- package/lib/utils/secrets-utils.js +32 -38
- package/lib/utils/secrets-validation.js +3 -1
- package/lib/utils/secrets-yaml-preserve.js +109 -0
- package/lib/utils/ssh-key-helper.js +4 -2
- package/lib/utils/template-helpers.js +2 -2
- package/lib/utils/test-log-writer.js +3 -3
- package/lib/utils/token-manager.js +1 -2
- package/lib/utils/url-declarative-public-base.js +188 -0
- package/lib/utils/url-declarative-resolve-build.js +493 -0
- package/lib/utils/url-declarative-resolve-load-doc.js +51 -0
- package/lib/utils/url-declarative-resolve.js +220 -0
- package/lib/utils/url-declarative-token-parse.js +74 -0
- package/lib/utils/url-declarative-url-flags.js +50 -0
- package/lib/utils/url-declarative-vdir-inactive-env.js +99 -0
- package/lib/utils/url-public-path-prefix.js +34 -0
- package/lib/utils/urls-local-registry.js +220 -0
- package/lib/utils/validation-report-tty-kit.js +77 -0
- package/lib/utils/validation-run-poll.js +112 -0
- package/lib/utils/validation-run-post-retry.js +85 -0
- package/lib/utils/validation-run-request.js +116 -0
- package/lib/utils/variable-transformer.js +21 -4
- package/lib/utils/yaml-preserve.js +33 -14
- package/lib/validation/datasource-warnings.js +56 -0
- package/lib/validation/env-template-auth.js +1 -1
- package/lib/validation/external-manifest-validator.js +27 -7
- package/lib/validation/validate-display.js +37 -31
- package/lib/validation/validate-external-cert-sync.js +23 -0
- package/lib/validation/validate.js +8 -14
- package/lib/validation/validator-unresolved-placeholders.js +98 -0
- package/lib/validation/validator.js +22 -65
- package/lib/validation/wizard-config-validator.js +2 -1
- package/package.json +9 -4
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +307 -55
- package/scripts/pnpm-global-remove.js +48 -0
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +79 -17
- package/templates/applications/dataplane/rbac.yaml +8 -0
- package/templates/applications/keycloak/application.yaml +9 -1
- package/templates/applications/keycloak/env.template +15 -6
- package/templates/applications/miso-controller/application.yaml +10 -2
- package/templates/applications/miso-controller/env.template +42 -12
- package/templates/applications/miso-controller/rbac.yaml +5 -0
- package/templates/external-system/README.md.hbs +20 -7
- package/templates/external-system/deploy.js.hbs +5 -5
- package/templates/external-system/external-datasource.yaml.hbs +197 -118
- package/templates/infra/compose.yaml.hbs +33 -16
- package/templates/infra/servers.json.hbs +3 -1
- package/templates/python/docker-compose.hbs +16 -0
- package/templates/typescript/docker-compose.hbs +16 -0
- package/lib/api/external-test.api.js +0 -111
- package/lib/schema/env-config.yaml +0 -60
package/lib/commands/app.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { formatBlockingError } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* AI Fabrix Builder - Application Registration Commands
|
|
3
4
|
*
|
|
@@ -17,9 +18,20 @@ const { rotateSecret } = require('../app/rotate-secret');
|
|
|
17
18
|
const { showApp } = require('../app/show');
|
|
18
19
|
const { runAppDeploymentList } = require('./deployment-list');
|
|
19
20
|
|
|
21
|
+
const APP_HELP_AFTER = `
|
|
22
|
+
Subcommands:
|
|
23
|
+
register <appKey> Register app; get pipeline client id/secret
|
|
24
|
+
list Applications in current environment
|
|
25
|
+
rotate-secret <key> New ClientSecret (shown once)
|
|
26
|
+
show <key> From controller (like show --online)
|
|
27
|
+
deployment <key> Deployment history for app
|
|
28
|
+
|
|
29
|
+
Requires: aifabrix login
|
|
30
|
+
`;
|
|
31
|
+
|
|
20
32
|
function setupAppRegisterCommand(app) {
|
|
21
33
|
app.command('register <appKey>')
|
|
22
|
-
.description('Register
|
|
34
|
+
.description('Register app; receive pipeline credentials')
|
|
23
35
|
.option('-p, --port <port>', 'Application port (default: from application.yaml)')
|
|
24
36
|
.option('-u, --url <url>', 'Application URL. If omitted: app.url, deployment.dataplaneUrl or deployment.appUrl in application.yaml; else http://localhost:{port})')
|
|
25
37
|
.option('-n, --name <name>', 'Override display name')
|
|
@@ -28,7 +40,7 @@ function setupAppRegisterCommand(app) {
|
|
|
28
40
|
try {
|
|
29
41
|
await registerApplication(appKey, options);
|
|
30
42
|
} catch (error) {
|
|
31
|
-
logger.error(
|
|
43
|
+
logger.error(formatBlockingError('Registration failed:'), error.message);
|
|
32
44
|
process.exit(1);
|
|
33
45
|
}
|
|
34
46
|
});
|
|
@@ -36,12 +48,12 @@ function setupAppRegisterCommand(app) {
|
|
|
36
48
|
|
|
37
49
|
function setupAppListCommand(app) {
|
|
38
50
|
app.command('list')
|
|
39
|
-
.description('List
|
|
51
|
+
.description('List apps in current environment')
|
|
40
52
|
.action(async(options) => {
|
|
41
53
|
try {
|
|
42
54
|
await listApplications(options);
|
|
43
55
|
} catch (error) {
|
|
44
|
-
logger.error(
|
|
56
|
+
logger.error(formatBlockingError('Failed to list applications:'), error.message);
|
|
45
57
|
process.exit(1);
|
|
46
58
|
}
|
|
47
59
|
});
|
|
@@ -49,26 +61,35 @@ function setupAppListCommand(app) {
|
|
|
49
61
|
|
|
50
62
|
function setupAppRotateSecretCommand(app) {
|
|
51
63
|
app.command('rotate-secret <appKey>')
|
|
52
|
-
.description('Rotate pipeline ClientSecret
|
|
64
|
+
.description('Rotate pipeline ClientSecret (one-time display)')
|
|
53
65
|
.action(async(appKey, options) => {
|
|
54
66
|
try {
|
|
55
67
|
await rotateSecret(appKey, options);
|
|
56
68
|
} catch (error) {
|
|
57
|
-
logger.error(
|
|
69
|
+
logger.error(formatBlockingError('Rotation failed:'), error.message);
|
|
58
70
|
process.exit(1);
|
|
59
71
|
}
|
|
60
72
|
});
|
|
61
73
|
}
|
|
62
74
|
|
|
63
75
|
function setupAppShowCommand(app) {
|
|
64
|
-
app.command('show <
|
|
65
|
-
.description('
|
|
76
|
+
app.command('show <app>')
|
|
77
|
+
.description('App details from controller (same as show --online)')
|
|
66
78
|
.option('--online', 'Fetch from controller (default for this command)')
|
|
67
79
|
.option('--json', 'Output as JSON')
|
|
68
80
|
.option('--permissions', 'Show only list of permissions')
|
|
81
|
+
.option(
|
|
82
|
+
'--verify-cert',
|
|
83
|
+
'For external integrations, verify trust state on the dataplane (requires login)'
|
|
84
|
+
)
|
|
69
85
|
.action(async(appKey, options) => {
|
|
70
86
|
try {
|
|
71
|
-
await showApp(appKey, {
|
|
87
|
+
await showApp(appKey, {
|
|
88
|
+
online: true,
|
|
89
|
+
json: !!options.json,
|
|
90
|
+
permissions: !!options.permissions,
|
|
91
|
+
verifyCert: options.verifyCert === true
|
|
92
|
+
});
|
|
72
93
|
} catch (error) {
|
|
73
94
|
logger.error(chalk.red(`Error: ${error.message}`));
|
|
74
95
|
process.exit(1);
|
|
@@ -78,7 +99,7 @@ function setupAppShowCommand(app) {
|
|
|
78
99
|
|
|
79
100
|
function setupAppDeploymentCommand(app) {
|
|
80
101
|
app.command('deployment <appKey>')
|
|
81
|
-
.description('List
|
|
102
|
+
.description('List recent deployments for app in current environment')
|
|
82
103
|
.option('--controller <url>', 'Controller URL (default: from config)')
|
|
83
104
|
.option('--environment <env>', 'Environment key (default: from config)')
|
|
84
105
|
.option('--page-size <n>', 'Items per page', '50')
|
|
@@ -102,7 +123,7 @@ function setupAppDeploymentCommand(app) {
|
|
|
102
123
|
* @param {Command} program - Commander program instance
|
|
103
124
|
*/
|
|
104
125
|
function setupAppCommands(program) {
|
|
105
|
-
const app = program.command('app').description('
|
|
126
|
+
const app = program.command('app').description('Controller apps: register, list, secrets, deploy history').addHelpText('after', APP_HELP_AFTER);
|
|
106
127
|
setupAppRegisterCommand(app);
|
|
107
128
|
setupAppListCommand(app);
|
|
108
129
|
setupAppRotateSecretCommand(app);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @version 2.0.0
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const { formatBlockingError, formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
12
12
|
const {
|
|
13
13
|
setControllerUrl,
|
|
14
14
|
setCurrentEnvironment,
|
|
@@ -42,14 +42,14 @@ async function handleSetController(url) {
|
|
|
42
42
|
if (!loggedInControllerUrl) {
|
|
43
43
|
// No stored credentials: allow setting controller so "aifabrix login" opens the right place
|
|
44
44
|
await setControllerUrl(url);
|
|
45
|
-
logger.log(
|
|
45
|
+
logger.log(formatSuccessLine(`Controller URL set to: ${url}`));
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
const normalizedLoggedIn = loggedInControllerUrl.trim().replace(/\/+$/, '');
|
|
50
50
|
if (normalizedLoggedIn === normalizedUrl) {
|
|
51
51
|
await setControllerUrl(url);
|
|
52
|
-
logger.log(
|
|
52
|
+
logger.log(formatSuccessLine(`Controller URL set to: ${url}`));
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -58,7 +58,7 @@ async function handleSetController(url) {
|
|
|
58
58
|
'To use a different controller either run "aifabrix login" with that controller, or run "aifabrix logout" first to clear credentials, then set the new controller with "aifabrix auth --set-controller <url>".'
|
|
59
59
|
);
|
|
60
60
|
} catch (error) {
|
|
61
|
-
logger.error(
|
|
61
|
+
logger.error(formatBlockingError(`Failed to set controller URL: ${error.message}`));
|
|
62
62
|
throw error;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -95,9 +95,9 @@ async function handleSetEnvironment(environment) {
|
|
|
95
95
|
// Save environment
|
|
96
96
|
await setCurrentEnvironment(environment);
|
|
97
97
|
|
|
98
|
-
logger.log(
|
|
98
|
+
logger.log(formatSuccessLine(`Environment set to: ${environment}`));
|
|
99
99
|
} catch (error) {
|
|
100
|
-
logger.error(
|
|
100
|
+
logger.error(formatBlockingError(`Failed to set environment: ${error.message}`));
|
|
101
101
|
throw error;
|
|
102
102
|
}
|
|
103
103
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
const chalk = require('chalk');
|
|
12
|
+
const { failureGlyph, successGlyph } = require('../utils/cli-test-layout-chalk');
|
|
12
13
|
const logger = require('../utils/logger');
|
|
13
14
|
const config = require('../core/config');
|
|
14
15
|
const { getConfig } = config;
|
|
@@ -194,7 +195,7 @@ function displayUserInfo(user) {
|
|
|
194
195
|
* @param {Object} tokenInfo - Token information
|
|
195
196
|
*/
|
|
196
197
|
function displayTokenInfo(tokenInfo) {
|
|
197
|
-
const statusIcon = tokenInfo.authenticated ?
|
|
198
|
+
const statusIcon = tokenInfo.authenticated ? successGlyph() : failureGlyph();
|
|
198
199
|
const statusText = tokenInfo.authenticated ? 'Authenticated' : 'Not authenticated';
|
|
199
200
|
|
|
200
201
|
logger.log(` Status: ${statusIcon} ${statusText}`);
|
|
@@ -244,7 +245,7 @@ function displayDataplaneSection(dataplaneUrl, dataplaneConnected) {
|
|
|
244
245
|
logger.log('');
|
|
245
246
|
if (dataplaneUrl) {
|
|
246
247
|
logger.log(`Dataplane: ${chalk.cyan(dataplaneUrl)}`);
|
|
247
|
-
const statusIcon = dataplaneConnected ?
|
|
248
|
+
const statusIcon = dataplaneConnected ? successGlyph() : failureGlyph();
|
|
248
249
|
const statusText = dataplaneConnected ? 'Connected' : 'Not reachable';
|
|
249
250
|
displayOpenApiDocs(null, dataplaneUrl);
|
|
250
251
|
logger.log('');
|
|
@@ -297,7 +298,7 @@ function displayStatus(controllerUrl, environment, tokenInfo, dataplaneInfo) {
|
|
|
297
298
|
logger.log(` Environment: ${chalk.cyan(environment || 'Not specified')}\n`);
|
|
298
299
|
|
|
299
300
|
if (!tokenInfo) {
|
|
300
|
-
logger.log(` Status: ${chalk.red('
|
|
301
|
+
logger.log(` Status: ${failureGlyph()} ${chalk.red('Not authenticated')}`);
|
|
301
302
|
logger.log(` Token Type: ${chalk.gray('None')}\n`);
|
|
302
303
|
logger.log(chalk.yellow('💡 Run "aifabrix login" to authenticate\n'));
|
|
303
304
|
return;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
const { formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* Credential env command – prompts for KV_* values and writes .env.
|
|
3
|
-
* Used by `aifabrix credential env <
|
|
4
|
+
* Used by `aifabrix credential env <systemKey>`.
|
|
4
5
|
*
|
|
5
6
|
* @fileoverview Credential env command – interactive credential capture to .env
|
|
6
7
|
* @author AI Fabrix Team
|
|
@@ -120,7 +121,7 @@ function buildEnvContent(templateContent, promptValues) {
|
|
|
120
121
|
/**
|
|
121
122
|
* Runs credential env command: prompt for KV_* values and write .env.
|
|
122
123
|
* @async
|
|
123
|
-
* @param {string} systemKey - External system key (integration/<
|
|
124
|
+
* @param {string} systemKey - External system key (integration/<systemKey>/)
|
|
124
125
|
* @returns {Promise<string>} Path to written .env file
|
|
125
126
|
* @throws {Error} If env.template missing or write fails
|
|
126
127
|
*/
|
|
@@ -155,7 +156,7 @@ async function runCredentialEnv(systemKey) {
|
|
|
155
156
|
const dir = path.dirname(envPath);
|
|
156
157
|
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
157
158
|
fs.writeFileSync(envPath, content, { mode: 0o600 });
|
|
158
|
-
logger.log(
|
|
159
|
+
logger.log(formatSuccessLine(`Wrote ${envPath}`));
|
|
159
160
|
return envPath;
|
|
160
161
|
}
|
|
161
162
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { formatBlockingError } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* Credential list command – list credentials from Dataplane
|
|
3
4
|
* GET /api/v1/credential. Used by `aifabrix credential list`.
|
|
@@ -78,12 +79,12 @@ function displayCredentialList(list, baseUrl) {
|
|
|
78
79
|
async function ensureControllerAndAuth(options = {}) {
|
|
79
80
|
const controllerUrl = options.controller || (await resolveControllerUrl());
|
|
80
81
|
if (!controllerUrl) {
|
|
81
|
-
logger.error(
|
|
82
|
+
logger.error(formatBlockingError('Controller URL is required. Run "aifabrix login" first.'));
|
|
82
83
|
process.exit(1);
|
|
83
84
|
}
|
|
84
85
|
const authResult = await getCredentialListAuth(controllerUrl);
|
|
85
86
|
if (!authResult || !authResult.token) {
|
|
86
|
-
logger.error(
|
|
87
|
+
logger.error(formatBlockingError(`No authentication token for controller: ${controllerUrl}`));
|
|
87
88
|
logger.error(chalk.gray('Run: aifabrix login'));
|
|
88
89
|
process.exit(1);
|
|
89
90
|
}
|
|
@@ -129,7 +130,7 @@ async function resolveDataplaneUrlOrExit(controllerUrl, authConfig) {
|
|
|
129
130
|
try {
|
|
130
131
|
return await resolveCredentialListDataplaneUrl(controllerUrl, authConfig);
|
|
131
132
|
} catch (err) {
|
|
132
|
-
logger.error(
|
|
133
|
+
logger.error(formatBlockingError(`Could not resolve Dataplane URL: ${err.message}`));
|
|
133
134
|
process.exit(1);
|
|
134
135
|
}
|
|
135
136
|
}
|
|
@@ -152,7 +153,7 @@ async function runCredentialList(options = {}) {
|
|
|
152
153
|
try {
|
|
153
154
|
await fetchAndDisplayCredentials(dataplaneUrl, authConfig, listOptions);
|
|
154
155
|
} catch (error) {
|
|
155
|
-
logger.error(
|
|
156
|
+
logger.error(formatBlockingError(`Failed to list credentials: ${error.message}`));
|
|
156
157
|
process.exit(1);
|
|
157
158
|
}
|
|
158
159
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
const { formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* Credential push command – pushes KV_* from .env to dataplane.
|
|
3
|
-
* Used by `aifabrix credential push <
|
|
4
|
+
* Used by `aifabrix credential push <systemKey>`.
|
|
4
5
|
*
|
|
5
6
|
* @fileoverview Credential push command – push credential secrets to dataplane
|
|
6
7
|
* @author AI Fabrix Team
|
|
@@ -55,7 +56,7 @@ async function buildPayload(systemKey) {
|
|
|
55
56
|
function logPushResult(pushResult) {
|
|
56
57
|
if (pushResult.pushed > 0) {
|
|
57
58
|
const keyList = pushResult.keys?.length ? ` (${pushResult.keys.join(', ')})` : '';
|
|
58
|
-
logger.log(
|
|
59
|
+
logger.log(formatSuccessLine(`Pushed ${pushResult.pushed} credential secret(s) to dataplane${keyList}.`));
|
|
59
60
|
} else if (pushResult.skipped) {
|
|
60
61
|
logger.log(chalk.yellow('No credential secrets to push (empty .env or no KV_* vars with values).'));
|
|
61
62
|
} else {
|
|
@@ -75,7 +76,7 @@ async function runCredentialPush(systemKey) {
|
|
|
75
76
|
const authConfig = await getDeploymentAuth(controllerUrl, environment, systemKey);
|
|
76
77
|
|
|
77
78
|
if (!authConfig.token && !authConfig.clientId) {
|
|
78
|
-
throw new Error('Authentication required. Run "aifabrix login" or "aifabrix app register <
|
|
79
|
+
throw new Error('Authentication required. Run "aifabrix login" or "aifabrix app register <systemKey>" first.');
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
requireBearerForDataplanePipeline(authConfig);
|