@aifabrix/builder 2.42.1 → 2.44.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/anchor-docs.mdc +15 -0
- package/README.md +2 -2
- 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 +157 -0
- package/integration/{hubspot → hubspot-test}/application.json +6 -6
- package/integration/{hubspot → hubspot-test}/create-hubspot.js +10 -10
- package/integration/hubspot-test/env.template +4 -0
- package/integration/hubspot-test/hubspot-test-datasource-company.json +138 -0
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +146 -0
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +146 -0
- package/integration/hubspot-test/hubspot-test-datasource-users.json +76 -0
- package/integration/{hubspot/hubspot-deploy.json → hubspot-test/hubspot-test-deploy.json} +201 -24
- package/integration/{hubspot/hubspot-system.json → hubspot-test/hubspot-test-system.json} +8 -7
- package/integration/hubspot-test/rbac.json +166 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-hubspot-credential-real.yaml +3 -3
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-hubspot-env-vars.yaml +2 -2
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-add-datasource.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-credential-create.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-credential-select.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-known-platform.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +2 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-mode.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-openapi-file.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-openapi-url.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-source.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-dimension-array-test.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +5 -0
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +5 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-dimension-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-rbac-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-dataplane-down-tests.js +1 -7
- package/integration/{hubspot → hubspot-test}/test-dataplane-down.js +3 -3
- package/integration/{hubspot → hubspot-test}/test.js +137 -102
- package/integration/{hubspot → hubspot-test}/wizard-hubspot-e2e.yaml +2 -2
- package/integration/{hubspot → hubspot-test}/wizard-hubspot-platform.yaml +1 -1
- 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 +288 -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 +0 -1
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/service-users.api.js +111 -2
- package/lib/api/types/dev.types.js +4 -3
- package/lib/api/types/pipeline.types.js +8 -5
- package/lib/api/types/service-users.types.js +41 -0
- package/lib/api/types/validation-run.types.js +56 -0
- package/lib/api/validation-run.api.js +99 -0
- package/lib/api/validation-runner.js +99 -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 +19 -8
- package/lib/app/rotate-secret.js +17 -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 +1 -1
- package/lib/app/show.js +1 -1
- package/lib/build/index.js +13 -10
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +59 -123
- package/lib/cli/setup-app.test-commands.js +179 -0
- package/lib/cli/setup-auth.js +36 -14
- 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 +190 -103
- package/lib/cli/setup-environment.js +11 -20
- package/lib/cli/setup-external-system.js +62 -22
- package/lib/cli/setup-infra.js +139 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +147 -10
- package/lib/cli/setup-service-user.js +146 -20
- package/lib/cli/setup-utility.js +47 -19
- 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 +22 -10
- package/lib/commands/auth-config.js +10 -14
- 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 +495 -0
- package/lib/commands/datasource-unified-test-cli.options.js +149 -0
- package/lib/commands/datasource-validation-cli.js +129 -0
- package/lib/commands/datasource.js +123 -71
- 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 +16 -10
- package/lib/commands/repair-rbac.js +25 -19
- package/lib/commands/repair.js +116 -32
- package/lib/commands/secrets-list.js +23 -12
- package/lib/commands/secrets-remove-all.js +220 -0
- package/lib/commands/secrets-remove.js +22 -13
- package/lib/commands/secrets-set.js +21 -12
- package/lib/commands/secrets-validate.js +20 -7
- package/lib/commands/secure.js +10 -9
- package/lib/commands/service-user.js +243 -13
- package/lib/commands/test-e2e-external.js +27 -1
- package/lib/commands/up-common.js +28 -2
- package/lib/commands/up-dataplane.js +31 -18
- package/lib/commands/up-miso.js +19 -29
- package/lib/commands/upload.js +138 -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 +16 -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 +59 -58
- package/lib/core/diff.js +3 -2
- package/lib/core/ensure-encryption-key.js +2 -4
- 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 +228 -42
- package/lib/core/templates-env.js +4 -3
- package/lib/core/templates.js +1 -1
- package/lib/datasource/abac-validator.js +148 -0
- package/lib/datasource/deploy.js +75 -53
- package/lib/datasource/field-reference-validator.js +77 -36
- package/lib/datasource/integration-context.js +63 -0
- package/lib/datasource/list.js +8 -7
- package/lib/datasource/log-viewer.js +252 -0
- package/lib/datasource/resolve-app.js +109 -0
- package/lib/datasource/test-e2e.js +95 -155
- package/lib/datasource/test-integration.js +121 -109
- package/lib/datasource/unified-validation-run-body.js +65 -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 +92 -0
- package/lib/datasource/validate.js +162 -15
- 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 +131 -53
- package/lib/external-system/download-helpers.js +1 -1
- package/lib/external-system/download.js +7 -6
- package/lib/external-system/generator.js +104 -14
- 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-controller-manifest.js +3 -3
- package/lib/generator/external.js +23 -11
- package/lib/generator/helpers.js +71 -12
- package/lib/generator/index.js +8 -4
- package/lib/generator/split-readme.js +12 -7
- package/lib/generator/split-variables.js +2 -1
- package/lib/generator/split.js +46 -11
- package/lib/generator/wizard-readme.js +3 -3
- package/lib/generator/wizard.js +16 -13
- package/lib/infrastructure/compose.js +60 -6
- package/lib/infrastructure/helpers.js +238 -51
- package/lib/infrastructure/index.js +64 -37
- package/lib/infrastructure/services.js +21 -15
- 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 +1201 -433
- package/lib/schema/external-system.schema.json +181 -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 +213 -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 +49 -14
- package/lib/utils/app-config-resolver.js +23 -1
- 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 +209 -6
- package/lib/utils/config-scoped-resources-preference.js +41 -0
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/credential-secrets-env.js +16 -1
- 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-debug-display.js +137 -0
- package/lib/utils/datasource-test-run-debug-slice.js +93 -0
- package/lib/utils/datasource-test-run-display.js +442 -0
- package/lib/utils/datasource-test-run-exit.js +58 -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 +42 -11
- package/lib/utils/env-template.js +2 -2
- package/lib/utils/environment-scoped-resources.js +144 -0
- package/lib/utils/error-formatter.js +125 -9
- 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-env-template.js +180 -0
- package/lib/utils/external-readme.js +8 -1
- package/lib/utils/external-system-display.js +277 -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-test-helpers.js +24 -6
- package/lib/utils/external-system-validators.js +32 -14
- package/lib/utils/health-check-url.js +119 -0
- package/lib/utils/health-check.js +59 -25
- package/lib/utils/help-builder.js +14 -13
- 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 +29 -7
- package/lib/utils/paths.js +136 -48
- 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 +171 -51
- package/lib/utils/secrets-helpers.js +70 -59
- package/lib/utils/secrets-kv-scope.js +60 -0
- package/lib/utils/secrets-utils.js +35 -37
- package/lib/utils/secrets-validation.js +3 -1
- package/lib/utils/secrets-yaml-preserve.js +109 -0
- package/lib/utils/secure-file-permissions.js +91 -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 +37 -5
- 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 +89 -0
- package/lib/utils/validation-run-post-retry.js +73 -0
- package/lib/utils/validation-run-request.js +98 -0
- package/lib/utils/variable-transformer.js +21 -4
- package/lib/utils/yaml-preserve.js +78 -1
- package/lib/validation/datasource-warnings.js +56 -0
- package/lib/validation/env-template-auth.js +50 -2
- package/lib/validation/external-manifest-validator.js +35 -7
- package/lib/validation/validate-display.js +37 -31
- package/lib/validation/validate.js +9 -10
- package/lib/validation/validator-unresolved-placeholders.js +98 -0
- package/lib/validation/validator.js +32 -78
- package/lib/validation/wizard-config-validator.js +2 -1
- package/package.json +11 -3
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +304 -55
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +80 -18
- 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 +55 -14
- 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/env.template.hbs +22 -0
- package/templates/external-system/external-datasource.yaml.hbs +197 -118
- package/templates/infra/compose.yaml.hbs +20 -4
- package/templates/python/docker-compose.hbs +16 -0
- package/templates/typescript/docker-compose.hbs +16 -0
- package/integration/hubspot/README.md +0 -102
- package/integration/hubspot/env.template +0 -4
- package/integration/hubspot/hubspot-datasource-company.json +0 -541
- package/integration/hubspot/hubspot-datasource-contact.json +0 -639
- package/integration/hubspot/hubspot-datasource-deal.json +0 -588
- package/integration/hubspot/hubspot-datasource-users.json +0 -116
- package/integration/hubspot/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
- package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
- package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
- package/lib/api/external-test.api.js +0 -111
- package/lib/schema/env-config.yaml +0 -43
- /package/integration/{hubspot → hubspot-test}/companies.json +0 -0
- /package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-app-name.yaml +0 -0
- /package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-missing-app.yaml +0 -0
- /package/integration/{hubspot → hubspot-test}/test-dataplane-down-helpers.js +0 -0
|
@@ -11,33 +11,85 @@ const config = require('../core/config');
|
|
|
11
11
|
const { getCertDir } = require('./dev-cert-helper');
|
|
12
12
|
const { getConfigDirForPaths } = require('./paths');
|
|
13
13
|
|
|
14
|
+
function devTlsCertPaths(certDir) {
|
|
15
|
+
return {
|
|
16
|
+
certPath: path.join(certDir, 'cert.pem'),
|
|
17
|
+
keyPath: path.join(certDir, 'key.pem'),
|
|
18
|
+
caPath: path.join(certDir, 'ca.pem')
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function missingClientTlsError(trimmed, certDir) {
|
|
23
|
+
return new Error(
|
|
24
|
+
`docker-endpoint is set (${trimmed}) but client TLS material is missing in ${certDir}. ` +
|
|
25
|
+
'Place cert.pem and key.pem there (from Builder Server issue-cert or `AIFABRIX_DEV_ISSUE_PIN`), ' +
|
|
26
|
+
'or enable TLS skip-verify (`docker-tls-skip-verify: true` or `AIFABRIX_DOCKER_TLS_SKIP_VERIFY=1`) ' +
|
|
27
|
+
'if the daemon does not require client certificates. With skip-verify and no ca.pem, DOCKER_TLS_VERIFY=0. ' +
|
|
28
|
+
'Clear docker-endpoint only if you intend to use the local Docker daemon.'
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function missingCaError(trimmed, certDir) {
|
|
33
|
+
return new Error(
|
|
34
|
+
`docker-endpoint is set (${trimmed}) but ca.pem is missing in ${certDir} and docker-tls-skip-verify is not enabled. ` +
|
|
35
|
+
'Add ca.pem (daemon/CA PEM), or for a self-signed Docker API set docker-tls-skip-verify: true in ~/.aifabrix/config.yaml ' +
|
|
36
|
+
'(or AIFABRIX_DOCKER_TLS_SKIP_VERIFY=1). Skip-verify uses TLS but does not verify the daemon certificate — use only on trusted networks.'
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
14
40
|
/**
|
|
15
|
-
* If remote Docker is configured (docker-endpoint
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
41
|
+
* If remote Docker is configured (docker-endpoint set), returns env vars for Docker CLI:
|
|
42
|
+
* DOCKER_HOST, DOCKER_TLS_VERIFY, and optionally DOCKER_CERT_PATH when client certs exist.
|
|
43
|
+
* When docker-endpoint is set, we do not fall back to the local daemon without that endpoint
|
|
44
|
+
* (avoids accidentally using Docker Desktop while the dev profile targets a remote engine).
|
|
45
|
+
*
|
|
46
|
+
* When **TLS skip-verify** is enabled (config or env) and **ca.pem is missing**, client cert/key are
|
|
47
|
+
* optional: Docker can use DOCKER_TLS_VERIFY=0 with no client certs if the daemon allows it.
|
|
48
|
+
* If **ca.pem is present** (e.g. from Builder Server issue-cert), the daemon certificate is always
|
|
49
|
+
* verified (DOCKER_TLS_VERIFY=1) even when skip-verify is set — better security once a trust anchor exists.
|
|
19
50
|
*
|
|
20
|
-
*
|
|
51
|
+
* Without skip-verify, cert.pem, key.pem, and ca.pem are required in the dev cert directory.
|
|
52
|
+
*
|
|
53
|
+
* @returns {Promise<Object>} Env overlay (empty when docker-endpoint is not set)
|
|
54
|
+
* @throws {Error} When docker-endpoint is set but required TLS material is missing
|
|
21
55
|
*/
|
|
22
56
|
async function getRemoteDockerEnv() {
|
|
23
57
|
const endpoint = await config.getDockerEndpoint();
|
|
24
58
|
if (!endpoint || typeof endpoint !== 'string' || !endpoint.trim()) {
|
|
25
59
|
return {};
|
|
26
60
|
}
|
|
27
|
-
const
|
|
28
|
-
const certDir = getCertDir(getConfigDirForPaths(),
|
|
29
|
-
const certPath =
|
|
30
|
-
const keyPath = path.join(certDir, 'key.pem');
|
|
31
|
-
const caPath = path.join(certDir, 'ca.pem');
|
|
61
|
+
const trimmed = endpoint.trim();
|
|
62
|
+
const certDir = getCertDir(getConfigDirForPaths(), await config.getDeveloperId());
|
|
63
|
+
const { certPath, keyPath, caPath } = devTlsCertPaths(certDir);
|
|
32
64
|
const fs = require('fs');
|
|
33
|
-
|
|
34
|
-
|
|
65
|
+
const skipVerify = await config.getDockerTlsSkipVerify();
|
|
66
|
+
const hasClient = fs.existsSync(certPath) && fs.existsSync(keyPath);
|
|
67
|
+
const hasCa = fs.existsSync(caPath);
|
|
68
|
+
|
|
69
|
+
if (!hasClient) {
|
|
70
|
+
if (!skipVerify) throw missingClientTlsError(trimmed, certDir);
|
|
71
|
+
return { DOCKER_HOST: trimmed, DOCKER_TLS_VERIFY: '0' };
|
|
35
72
|
}
|
|
73
|
+
if (!hasCa && !skipVerify) throw missingCaError(trimmed, certDir);
|
|
74
|
+
const verifyDaemon = hasCa;
|
|
36
75
|
return {
|
|
37
|
-
DOCKER_HOST:
|
|
38
|
-
DOCKER_TLS_VERIFY: '1',
|
|
76
|
+
DOCKER_HOST: trimmed,
|
|
77
|
+
DOCKER_TLS_VERIFY: verifyDaemon ? '1' : '0',
|
|
39
78
|
DOCKER_CERT_PATH: certDir
|
|
40
79
|
};
|
|
41
80
|
}
|
|
42
81
|
|
|
43
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Full environment for child_process exec/spawn: process.env merged with remote Docker vars when configured.
|
|
84
|
+
* @returns {Promise<Object>}
|
|
85
|
+
*/
|
|
86
|
+
async function getDockerExecEnv() {
|
|
87
|
+
const overlay = await getRemoteDockerEnv();
|
|
88
|
+
const merged = { ...process.env };
|
|
89
|
+
if (overlay.DOCKER_HOST && !Object.prototype.hasOwnProperty.call(overlay, 'DOCKER_CERT_PATH')) {
|
|
90
|
+
delete merged.DOCKER_CERT_PATH;
|
|
91
|
+
}
|
|
92
|
+
return { ...merged, ...overlay };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
module.exports = { getRemoteDockerEnv, getDockerExecEnv };
|
|
@@ -14,16 +14,25 @@ const config = require('../core/config');
|
|
|
14
14
|
* @returns {Promise<Object|null>} Key-value secrets from API or null
|
|
15
15
|
*/
|
|
16
16
|
async function loadRemoteSharedSecrets() {
|
|
17
|
-
const
|
|
17
|
+
const remoteDevAuth = require('./remote-dev-auth');
|
|
18
18
|
const devApi = require('../api/dev.api');
|
|
19
19
|
const configSecretsPath = await config.getSecretsPath();
|
|
20
|
-
if (!configSecretsPath
|
|
20
|
+
if (!configSecretsPath) {
|
|
21
21
|
return null;
|
|
22
22
|
}
|
|
23
|
-
const
|
|
23
|
+
const endpoint = await remoteDevAuth.resolveSharedSecretsEndpoint(configSecretsPath);
|
|
24
|
+
if (!remoteDevAuth.isRemoteSecretsUrl(endpoint)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const auth = await remoteDevAuth.getRemoteDevAuth();
|
|
24
28
|
if (!auth) return null;
|
|
25
29
|
try {
|
|
26
|
-
const items = await devApi.listSecrets(
|
|
30
|
+
const items = await devApi.listSecrets(
|
|
31
|
+
auth.serverUrl,
|
|
32
|
+
auth.clientCertPem,
|
|
33
|
+
auth.serverCaPem || undefined,
|
|
34
|
+
endpoint
|
|
35
|
+
);
|
|
27
36
|
if (!Array.isArray(items)) return null;
|
|
28
37
|
const obj = {};
|
|
29
38
|
for (const item of items) {
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Docker repository path and tag from application config and optional CLI overrides.
|
|
3
|
+
* Precedence: --image (full ref), --registry CLI, image.registry in manifest, else unqualified name.
|
|
4
|
+
*
|
|
5
|
+
* For refs like localhost:5000/repo without an explicit tag, prefer --image with :tag (parse ambiguity).
|
|
6
|
+
*
|
|
7
|
+
* @fileoverview Shared Docker image reference resolution for run, compose, and version checks
|
|
8
|
+
* @author AI Fabrix Team
|
|
9
|
+
* @version 2.0.0
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
const { parseImageOverride } = require('./parse-image-ref');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Repository path without host (same rules as compose-generator getImageName).
|
|
18
|
+
* @param {Object} appConfig - Application configuration
|
|
19
|
+
* @param {string} appName - Application name fallback
|
|
20
|
+
* @returns {string}
|
|
21
|
+
*/
|
|
22
|
+
function getRepositoryPathFromConfig(appConfig, appName) {
|
|
23
|
+
if (!appConfig || typeof appConfig !== 'object') {
|
|
24
|
+
return appName;
|
|
25
|
+
}
|
|
26
|
+
if (typeof appConfig.image === 'string') {
|
|
27
|
+
return appConfig.image.split(':')[0];
|
|
28
|
+
}
|
|
29
|
+
if (appConfig.image?.name) {
|
|
30
|
+
return appConfig.image.name;
|
|
31
|
+
}
|
|
32
|
+
if (appConfig.app?.key) {
|
|
33
|
+
return appConfig.app.key;
|
|
34
|
+
}
|
|
35
|
+
return appName;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {Object} [appConfig]
|
|
40
|
+
* @returns {string}
|
|
41
|
+
*/
|
|
42
|
+
function imageTagFromConfig(appConfig) {
|
|
43
|
+
return (appConfig && appConfig.image && appConfig.image.tag) || 'latest';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Trim and strip trailing slashes from a registry host/prefix. Empty/whitespace → ''.
|
|
48
|
+
* @param {string|undefined|null|number} registry - Registry host or prefix
|
|
49
|
+
* @returns {string}
|
|
50
|
+
*/
|
|
51
|
+
function normalizeDockerRegistryPrefix(registry) {
|
|
52
|
+
if (registry === null || registry === undefined) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
if (typeof registry !== 'string') {
|
|
56
|
+
return normalizeDockerRegistryPrefix(String(registry));
|
|
57
|
+
}
|
|
58
|
+
const t = registry.trim();
|
|
59
|
+
if (!t) {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
return t.replace(/\/+$/, '');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Effective image repository (may include registry prefix) and tag for Docker.
|
|
67
|
+
* @param {string} appName - Application name
|
|
68
|
+
* @param {Object} appConfig - Loaded application manifest
|
|
69
|
+
* @param {Object} [runOptions] - Run/deploy options
|
|
70
|
+
* @param {string} [runOptions.image] - Full image ref override
|
|
71
|
+
* @param {string} [runOptions.registry] - CLI registry prefix (wins over manifest)
|
|
72
|
+
* @returns {{ imageName: string, imageTag: string }}
|
|
73
|
+
*/
|
|
74
|
+
function resolveDockerImageRef(appName, appConfig, runOptions = {}) {
|
|
75
|
+
const opts = runOptions || {};
|
|
76
|
+
if (opts.image) {
|
|
77
|
+
const parsed = parseImageOverride(opts.image);
|
|
78
|
+
return {
|
|
79
|
+
imageName: parsed ? parsed.name : getRepositoryPathFromConfig(appConfig, appName),
|
|
80
|
+
imageTag: parsed ? parsed.tag : imageTagFromConfig(appConfig)
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const baseRepo = getRepositoryPathFromConfig(appConfig, appName);
|
|
85
|
+
const imageTag = imageTagFromConfig(appConfig);
|
|
86
|
+
const prefix =
|
|
87
|
+
normalizeDockerRegistryPrefix(opts.registry) ||
|
|
88
|
+
normalizeDockerRegistryPrefix(appConfig?.image?.registry ?? '');
|
|
89
|
+
if (prefix) {
|
|
90
|
+
return { imageName: `${prefix}/${baseRepo}`, imageTag };
|
|
91
|
+
}
|
|
92
|
+
return { imageName: baseRepo, imageTag };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Full image string for compose when manifest/CLI registry applies; else null (use template defaults).
|
|
97
|
+
* @param {string} appName - Application name
|
|
98
|
+
* @param {Object} appConfig - Application configuration
|
|
99
|
+
* @param {Object} [options] - Run options (image, imageOverride, tag, registry)
|
|
100
|
+
* @returns {string|null}
|
|
101
|
+
*/
|
|
102
|
+
function resolveComposeImageOverrideString(appName, appConfig, options = {}) {
|
|
103
|
+
if (options.image) return options.image;
|
|
104
|
+
if (options.imageOverride) return options.imageOverride;
|
|
105
|
+
const runOpts = { registry: options.registry, image: undefined };
|
|
106
|
+
if (options.tag) {
|
|
107
|
+
const { imageName } = resolveDockerImageRef(appName, appConfig, runOpts);
|
|
108
|
+
return `${imageName}:${options.tag}`;
|
|
109
|
+
}
|
|
110
|
+
const { imageName, imageTag } = resolveDockerImageRef(appName, appConfig, runOpts);
|
|
111
|
+
const shortName = getRepositoryPathFromConfig(appConfig, appName);
|
|
112
|
+
const shortTag = imageTagFromConfig(appConfig);
|
|
113
|
+
if (imageName === shortName && imageTag === shortTag) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return `${imageName}:${imageTag}`;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = {
|
|
120
|
+
resolveDockerImageRef,
|
|
121
|
+
resolveComposeImageOverrideString,
|
|
122
|
+
normalizeDockerRegistryPrefix,
|
|
123
|
+
getRepositoryPathFromConfig
|
|
124
|
+
};
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
* @version 2.0.0
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const fsRealSync = require('../internal/fs-real-sync');
|
|
13
13
|
const path = require('path');
|
|
14
14
|
const Ajv = require('ajv');
|
|
15
|
+
const addFormats = require('ajv-formats');
|
|
15
16
|
|
|
16
17
|
// Cache for compiled validators
|
|
17
18
|
// These are reset when module is reloaded (for testing)
|
|
@@ -46,11 +47,14 @@ function loadExternalSystemSchema() {
|
|
|
46
47
|
|
|
47
48
|
const schemaPath = path.join(__dirname, '..', 'schema', 'external-system.schema.json');
|
|
48
49
|
|
|
49
|
-
if (!
|
|
50
|
-
throw new Error(
|
|
50
|
+
if (!fsRealSync.existsSync(schemaPath)) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`External system schema not found: ${schemaPath}. ` +
|
|
53
|
+
'Ensure the file exists (tracked under lib/schema/); run git checkout HEAD -- lib/schema/external-system.schema.json if your tree is incomplete.'
|
|
54
|
+
);
|
|
51
55
|
}
|
|
52
56
|
|
|
53
|
-
const schemaContent =
|
|
57
|
+
const schemaContent = fsRealSync.readFileSync(schemaPath, 'utf8');
|
|
54
58
|
let schema;
|
|
55
59
|
|
|
56
60
|
try {
|
|
@@ -60,6 +64,7 @@ function loadExternalSystemSchema() {
|
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
67
|
+
addFormats(ajv);
|
|
63
68
|
externalSystemValidator = ajv.compile(schema);
|
|
64
69
|
|
|
65
70
|
return externalSystemValidator;
|
|
@@ -84,11 +89,14 @@ function loadExternalDataSourceSchema() {
|
|
|
84
89
|
|
|
85
90
|
const schemaPath = path.join(__dirname, '..', 'schema', 'external-datasource.schema.json');
|
|
86
91
|
|
|
87
|
-
if (!
|
|
88
|
-
throw new Error(
|
|
92
|
+
if (!fsRealSync.existsSync(schemaPath)) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`External datasource schema not found: ${schemaPath}. ` +
|
|
95
|
+
'Ensure the file exists (tracked under lib/schema/); run git checkout HEAD -- lib/schema/external-datasource.schema.json if your tree is incomplete.'
|
|
96
|
+
);
|
|
89
97
|
}
|
|
90
98
|
|
|
91
|
-
const schemaContent =
|
|
99
|
+
const schemaContent = fsRealSync.readFileSync(schemaPath, 'utf8');
|
|
92
100
|
let schema;
|
|
93
101
|
|
|
94
102
|
try {
|
|
@@ -106,6 +114,11 @@ function loadExternalDataSourceSchema() {
|
|
|
106
114
|
}
|
|
107
115
|
|
|
108
116
|
const ajv = new Ajv({ allErrors: true, strict: false, strictSchema: false });
|
|
117
|
+
addFormats(ajv);
|
|
118
|
+
// external-datasource.schema.json references these by $id (aifabrix://schema/type/*)
|
|
119
|
+
ajv.addSchema(require('../schema/type/document-storage.json'));
|
|
120
|
+
ajv.addSchema(require('../schema/type/message-service.json'));
|
|
121
|
+
ajv.addSchema(require('../schema/type/vector-store.json'));
|
|
109
122
|
externalDataSourceValidator = ajv.compile(schemaToCompile);
|
|
110
123
|
|
|
111
124
|
return externalDataSourceValidator;
|
|
@@ -250,10 +263,10 @@ function readAndParseFileContent(filePath, content) {
|
|
|
250
263
|
let fileContent = content;
|
|
251
264
|
|
|
252
265
|
if (!fileContent) {
|
|
253
|
-
if (!
|
|
266
|
+
if (!fsRealSync.existsSync(filePath)) {
|
|
254
267
|
throw new Error(`File not found: ${filePath}`);
|
|
255
268
|
}
|
|
256
|
-
fileContent =
|
|
269
|
+
fileContent = fsRealSync.readFileSync(filePath, 'utf8');
|
|
257
270
|
}
|
|
258
271
|
|
|
259
272
|
try {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kv://BASH_<NAME> fallback: use process.env.<NAME>, then process.env.BASH_<NAME> (shared BASH_ keys).
|
|
3
|
+
* @fileoverview
|
|
4
|
+
*/
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} pathStr - Flat kv path (no slashes)
|
|
9
|
+
* @returns {string|undefined}
|
|
10
|
+
*/
|
|
11
|
+
function resolveBashKvFromProcessEnv(pathStr) {
|
|
12
|
+
if (!pathStr || typeof pathStr !== 'string' || pathStr.includes('/')) return undefined;
|
|
13
|
+
if (!pathStr.startsWith('BASH_')) return undefined;
|
|
14
|
+
const suffix = pathStr.slice(5);
|
|
15
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(suffix)) return undefined;
|
|
16
|
+
const pick = k => {
|
|
17
|
+
const raw = process.env[k];
|
|
18
|
+
if (raw === undefined || raw === null) return undefined;
|
|
19
|
+
const t = String(raw).trim();
|
|
20
|
+
return t.length > 0 ? t : undefined;
|
|
21
|
+
};
|
|
22
|
+
return pick(suffix) ?? pick(pathStr);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = { resolveBashKvFromProcessEnv };
|