@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
|
@@ -24,21 +24,23 @@ LOG_FILE_PATH=/mnt/data/logs/app.log
|
|
|
24
24
|
LOCAL_MODE=false
|
|
25
25
|
|
|
26
26
|
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation
|
|
27
|
-
|
|
27
|
+
# Same kv:// as miso-controller API_KEY so pipeline Bearer bypass uses one secrets.local entry
|
|
28
|
+
API_KEY=kv://miso-controller-secrets-apiKeyVault
|
|
28
29
|
|
|
29
30
|
# API Configuration
|
|
30
31
|
API_V1_STR=/api/v1
|
|
31
|
-
VERSION=1.
|
|
32
|
+
VERSION=1.9.5
|
|
32
33
|
# Base URL for the dataplane web server (used for default OAuth2 callback URL when redirectUri is omitted)
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
# url:// resolves after kv://; includes front-door path from application.yaml (e.g. /data)
|
|
35
|
+
DATAPLANE_WEB_SERVER_URL=url://public
|
|
36
|
+
DATAPLANE_INTERNAL_URL=url://internal
|
|
35
37
|
|
|
36
38
|
# CORS Configuration
|
|
37
|
-
ALLOWED_ORIGINS=http://localhost
|
|
39
|
+
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private
|
|
38
40
|
IDE_CORS_ORIGINS=
|
|
39
41
|
|
|
40
42
|
# Encryption Configuration
|
|
41
|
-
ENCRYPTION_KEY=kv://secrets-encryptionKeyVault
|
|
43
|
+
ENCRYPTION_KEY=kv://miso-controller-secrets-encryptionKeyVault
|
|
42
44
|
|
|
43
45
|
# =============================================================================
|
|
44
46
|
# DATABASE CONFIGURATION
|
|
@@ -88,6 +90,14 @@ CACHE_CIP_EXECUTION_TTL=1800
|
|
|
88
90
|
# TTL in seconds for metadata filter cache
|
|
89
91
|
CACHE_METADATA_FILTER_TTL=3600
|
|
90
92
|
|
|
93
|
+
# ABAC policy parse cache (in-memory)
|
|
94
|
+
# Caches parsed PolicyLibrary.rules (Pydantic) by (policyKey, updatedAt)
|
|
95
|
+
ABAC_POLICY_PARSE_CACHE_ENABLED=true
|
|
96
|
+
# TTL in seconds for parsed policy entries
|
|
97
|
+
ABAC_POLICY_PARSE_CACHE_TTL_SECONDS=300
|
|
98
|
+
# Max entries before eviction (clears cache at capacity)
|
|
99
|
+
ABAC_POLICY_PARSE_CACHE_MAX_ENTRIES=2048
|
|
100
|
+
|
|
91
101
|
# =============================================================================
|
|
92
102
|
# AUTHENTICATION CONFIGURATION
|
|
93
103
|
# =============================================================================
|
|
@@ -97,22 +107,22 @@ MISO_CLIENTID=kv://dataplane-client-idKeyVault
|
|
|
97
107
|
MISO_CLIENTSECRET=kv://dataplane-client-secretKeyVault
|
|
98
108
|
|
|
99
109
|
# Keycloak Configuration (for OAuth2 endpoints)
|
|
100
|
-
# Public:
|
|
101
|
-
KEYCLOAK_SERVER_URL=
|
|
102
|
-
# Internal
|
|
103
|
-
KEYCLOAK_INTERNAL_SERVER_URL=
|
|
110
|
+
# Public: browser / issuer (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
|
|
111
|
+
KEYCLOAK_SERVER_URL=url://keycloak-public
|
|
112
|
+
# Internal: server-to-Keycloak HTTP (docker: service:port + /auth from keycloak application.yaml)
|
|
113
|
+
KEYCLOAK_INTERNAL_SERVER_URL=url://keycloak-internal
|
|
104
114
|
KEYCLOAK_REALM=aifabrix
|
|
105
115
|
|
|
106
116
|
# =============================================================================
|
|
107
117
|
# MISO CONTROLLER CONFIGURATION
|
|
108
118
|
# =============================================================================
|
|
109
|
-
# Public: browser redirects and CORS
|
|
110
|
-
MISO_WEB_SERVER_URL=
|
|
111
|
-
# Internal: server-to-controller API calls (
|
|
112
|
-
MISO_CONTROLLER_URL=
|
|
119
|
+
# Public: browser redirects and CORS (includes /controller front-door path from miso-controller application.yaml).
|
|
120
|
+
MISO_WEB_SERVER_URL=url://miso-controller-public
|
|
121
|
+
# Internal: server-to-controller API calls (Docker: service:port; local: host:port — no front-door path).
|
|
122
|
+
MISO_CONTROLLER_URL=url://miso-controller-internal
|
|
113
123
|
|
|
114
|
-
#
|
|
115
|
-
# Set MISO_PIPELINE_ENV_KEY=dev when controller uses dev (e.g. MISO_CLIENTID=miso-controller-dev-dataplane).
|
|
124
|
+
# Environment key sent to miso-controller (e.g. environmentKey on RBAC/register) when not supplied in the payload.
|
|
125
|
+
# Set MISO_PIPELINE_ENV_KEY=dev when the controller installation uses dev (e.g. MISO_CLIENTID=miso-controller-dev-dataplane).
|
|
116
126
|
# If unset, derived from MISO_CLIENTID (e.g. dev from miso-controller-dev-dataplane).
|
|
117
127
|
MISO_PIPELINE_ENV_KEY=
|
|
118
128
|
|
|
@@ -124,7 +134,7 @@ MISO_PIPELINE_ENV_KEY=
|
|
|
124
134
|
OPENAI_API_KEY=kv://secrets-openaiApiKeyVault
|
|
125
135
|
|
|
126
136
|
# Azure OpenAI Configuration
|
|
127
|
-
AZURE_OPENAI_ENDPOINT=
|
|
137
|
+
AZURE_OPENAI_ENDPOINT=kv://azure-openaiapi-urlKeyVault
|
|
128
138
|
AZURE_OPENAI_API_KEY=kv://secrets-azureOpenaiApiKeyVault
|
|
129
139
|
AZURE_OPENAI_API_VERSION=2024-02-15-preview
|
|
130
140
|
AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o
|
|
@@ -151,6 +161,10 @@ RBAC_AUDIT_ENABLED=true
|
|
|
151
161
|
RBAC_AUDIT_DETAIL_LEVEL=summary
|
|
152
162
|
RBAC_EXPLAIN_MODE_ENABLED=false
|
|
153
163
|
|
|
164
|
+
# Async audit: after sync CIP writes, rebuild AuditEvent and enqueue; worker
|
|
165
|
+
# validates only (no second DB write). Default false.
|
|
166
|
+
AUDIT_ASYNC_SHADOW_ENQUEUE=false
|
|
167
|
+
|
|
154
168
|
# =============================================================================
|
|
155
169
|
# OBSERVABILITY CONFIGURATION
|
|
156
170
|
# =============================================================================
|
|
@@ -159,6 +173,22 @@ RBAC_EXPLAIN_MODE_ENABLED=false
|
|
|
159
173
|
OPENTELEMETRY_ENABLED=false
|
|
160
174
|
OPENTELEMETRY_ENDPOINT=
|
|
161
175
|
|
|
176
|
+
# =============================================================================
|
|
177
|
+
# INTEGRATION CERTIFICATE SIGNING (RS256 PEM)
|
|
178
|
+
# =============================================================================
|
|
179
|
+
# Read by PemRsaCertificateSigner.from_environment in app/validation/certificates/signer.py.
|
|
180
|
+
# When CERTIFICATE_PRIVATE_KEY and CERTIFICATE_PUBLIC_KEY are both set (non-empty PEM), the
|
|
181
|
+
# engine uses RS256; otherwise it falls back to local HS256 (see build_certificate_signer in engine).
|
|
182
|
+
# PEM values are often multi-line; resolve via secret store / deploy pipeline (kv://) or inject as env.
|
|
183
|
+
CERTIFICATE_PRIVATE_KEY=
|
|
184
|
+
CERTIFICATE_PUBLIC_KEY=
|
|
185
|
+
# Optional public key identifier for issued certificates; default if unset: dataplane-signing-key
|
|
186
|
+
CERTIFICATE_PUBLIC_KEY_ID=
|
|
187
|
+
|
|
188
|
+
# After a successful POST /api/v1/validation/run (validation engine with certification passed, or E2E success),
|
|
189
|
+
# persist an active integration certificate without a separate issue call. Set false to require explicit issue only.
|
|
190
|
+
VALIDATION_AUTO_ISSUE_INTEGRATION_CERTIFICATE=true
|
|
191
|
+
|
|
162
192
|
# =============================================================================
|
|
163
193
|
# CIP EXECUTION CONFIGURATION
|
|
164
194
|
# =============================================================================
|
|
@@ -172,6 +202,10 @@ CIP_EXECUTION_MAX_RETRIES=3
|
|
|
172
202
|
CIP_EXECUTION_RETRY_BACKOFF_FACTOR=2.0
|
|
173
203
|
CIP_EXECUTION_RETRY_INITIAL_DELAY=1.0
|
|
174
204
|
|
|
205
|
+
# CIP performance instrumentation (off by default)
|
|
206
|
+
# When enabled, CipStepOrchestrator emits per-step timing aggregates in metrics.
|
|
207
|
+
CIP_STEP_TIMINGS_ENABLED=true
|
|
208
|
+
|
|
175
209
|
# Circuit Breaker Configuration
|
|
176
210
|
CIP_EXECUTION_CIRCUIT_BREAKER_FAILURE_THRESHOLD=5
|
|
177
211
|
CIP_EXECUTION_CIRCUIT_BREAKER_TIME_WINDOW=60
|
|
@@ -181,3 +215,31 @@ CIP_EXECUTION_CIRCUIT_BREAKER_HALF_OPEN_TIMEOUT=30
|
|
|
181
215
|
# Rate Limiting Configuration
|
|
182
216
|
CIP_EXECUTION_RATE_LIMIT_REQUESTS_PER_SECOND=10.0
|
|
183
217
|
CIP_EXECUTION_RATE_LIMIT_BURST_SIZE=20
|
|
218
|
+
|
|
219
|
+
# =============================================================================
|
|
220
|
+
# TRUST POLICY AND ENFORCEMENT GATES (optional)
|
|
221
|
+
# =============================================================================
|
|
222
|
+
# Policies resolve by deployment ENVIRONMENT (dev | tst | pro) and trust scope
|
|
223
|
+
# (publish | promote | runtime | aiExposure). When no registered policy matches,
|
|
224
|
+
# fallbacks use whenNoPolicyMatches[<level>] from configs/trust-policy-defaults.yaml;
|
|
225
|
+
# TRUST_CUSTOMER_POLICY_LEVEL picks that row and is orthogonal to ENVIRONMENT.
|
|
226
|
+
#
|
|
227
|
+
# Customer posture for no-match defaults (lowercase): strict | standard | relaxed
|
|
228
|
+
TRUST_CUSTOMER_POLICY_LEVEL=standard
|
|
229
|
+
#
|
|
230
|
+
# Opt-in gates (default false). When true, trust is evaluated at the call site;
|
|
231
|
+
# DENY/REVIEW can block the operation (e.g. datasource publish returns 403).
|
|
232
|
+
# Datasource publish — scope publish; runs before marking the datasource published
|
|
233
|
+
TRUST_PUBLISH_GATE_ENABLED=false
|
|
234
|
+
# External system publish — scope promote; evaluated per active datasource first
|
|
235
|
+
TRUST_PROMOTE_GATE_ENABLED=false
|
|
236
|
+
# CIP operation execution — scope runtime; evaluation uses live/runtime checks
|
|
237
|
+
TRUST_RUNTIME_GATE_ENABLED=false
|
|
238
|
+
# Document-storage AI system prompt generation — scope aiExposure; before LLM call
|
|
239
|
+
TRUST_AI_EXPOSURE_GATE_ENABLED=false
|
|
240
|
+
|
|
241
|
+
# Certification baseline (346.6 §12.1). Empty CERTIFICATION_DATASOURCE_SCHEMA_VERSION uses bundled
|
|
242
|
+
# app/schemas/json/external-datasource.schema.json metadata.version. Set CERTIFICATION_RULES_VERSION
|
|
243
|
+
# when 346.rules / §17 revisions must invalidate existing certificates without matching rulesVersion.
|
|
244
|
+
CERTIFICATION_DATASOURCE_SCHEMA_VERSION=
|
|
245
|
+
CERTIFICATION_RULES_VERSION=
|
|
@@ -184,6 +184,10 @@ permissions:
|
|
|
184
184
|
- name: "document-record:approve"
|
|
185
185
|
roles: ["aifabrix-platform-admin", "aifabrix-compliance-admin"]
|
|
186
186
|
description: "Approve document records"
|
|
187
|
+
|
|
188
|
+
- name: "document-record:triage-unowned"
|
|
189
|
+
roles: ["aifabrix-platform-admin", "aifabrix-compliance-admin"]
|
|
190
|
+
description: "Include unowned pending documents (createdBy null) in the pending validation queue"
|
|
187
191
|
|
|
188
192
|
# External record management
|
|
189
193
|
- name: "external-record:create"
|
|
@@ -250,6 +254,10 @@ permissions:
|
|
|
250
254
|
- name: "record-relation:create"
|
|
251
255
|
roles: ["aifabrix-platform-admin", "aifabrix-developer"]
|
|
252
256
|
description: "Create record relations"
|
|
257
|
+
|
|
258
|
+
- name: "record-relation:update"
|
|
259
|
+
roles: ["aifabrix-platform-admin", "aifabrix-developer"]
|
|
260
|
+
description: "Update mutable fields on record relations (direction, confidence, catalogId, createdBy)"
|
|
253
261
|
|
|
254
262
|
- name: "record-relation:read"
|
|
255
263
|
roles: ["aifabrix-platform-admin", "aifabrix-security-admin", "aifabrix-deployment-admin", "aifabrix-compliance-admin", "aifabrix-developer", "aifabrix-observer"]
|
|
@@ -16,6 +16,14 @@ image:
|
|
|
16
16
|
# Port Configuration (base for host; host port = 8082 + developer_id*100 from ~/.aifabrix/config.yaml)
|
|
17
17
|
port: 8082
|
|
18
18
|
|
|
19
|
+
# Public path behind Azure Front Door / reverse proxy (used by url://public and urls.local.yaml).
|
|
20
|
+
# Traefik: host is expanded from developer-id + remote-server (hostname of `remote-server` in ~/.aifabrix/config.yaml).
|
|
21
|
+
frontDoorRouting:
|
|
22
|
+
pattern: /auth/*
|
|
23
|
+
enabled: true
|
|
24
|
+
host: ${DEV_USERNAME}.${REMOTE_HOST}
|
|
25
|
+
tls: ${TLS_ENABLED}
|
|
26
|
+
|
|
19
27
|
# Azure Requirements
|
|
20
28
|
requires:
|
|
21
29
|
database: true
|
|
@@ -27,6 +35,7 @@ requires:
|
|
|
27
35
|
# Health Check
|
|
28
36
|
healthCheck:
|
|
29
37
|
path: /health/ready
|
|
38
|
+
bashProbe: true
|
|
30
39
|
interval: 30
|
|
31
40
|
probePath: /health/ready
|
|
32
41
|
probeRequestType: GET
|
|
@@ -41,6 +50,5 @@ authentication:
|
|
|
41
50
|
build:
|
|
42
51
|
context: .. # Docker build context (relative to builder/)
|
|
43
52
|
dockerfile: builder/Dockerfile # Dockerfile name (empty = use template)
|
|
44
|
-
localPort: 8082 # Port for local development (different from Docker port)
|
|
45
53
|
containerPort: 8080 # Container port (different from local port)
|
|
46
54
|
language: typescript # Runtime language for template selection
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
# APPLICATION ENVIRONMENT
|
|
7
7
|
# =============================================================================
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
KC_BOOTSTRAP_ADMIN_USERNAME=admin
|
|
10
|
+
KC_BOOTSTRAP_ADMIN_PASSWORD=kv://keycloak-admin-passwordKeyVault
|
|
11
11
|
KC_HOSTNAME_STRICT=false
|
|
12
|
-
KC_HTTP_ENABLED
|
|
12
|
+
KC_HTTP_ENABLED=${HTTP_ENABLED}
|
|
13
|
+
# When Traefik + frontDoorRouting.enabled are on, same vdir as url://public. If the front door is off, env generation
|
|
14
|
+
# rewrites url://vdir-public to "/" before expansion (empty path is invalid — Keycloak 26 SRCFG00040).
|
|
15
|
+
# Docker-only templates may use url://vdir-internal instead.
|
|
16
|
+
KC_HTTP_RELATIVE_PATH=url://vdir-public
|
|
13
17
|
|
|
14
18
|
# =============================================================================
|
|
15
19
|
# HOSTNAME / ISSUER (Docker vs localhost)
|
|
@@ -22,9 +26,14 @@ KC_HTTP_ENABLED=true
|
|
|
22
26
|
# - Server calls Keycloak at http://keycloak:8080 for token exchange and refresh
|
|
23
27
|
# - Controller sends Host: localhost:${KEYCLOAK_PUBLIC_PORT} so Keycloak validates issuer
|
|
24
28
|
# against public URL (requires KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true)
|
|
25
|
-
# When KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true, hostname must be a full URL
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
# When KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true, hostname must be a full URL.
|
|
30
|
+
# Use host-only origin (no /auth); KC_HTTP_RELATIVE_PATH carries the front-door path (url://vdir-public).
|
|
31
|
+
# Hostname v2: port belongs in KC_HOSTNAME (url://host-public expands to e.g. http://localhost:8182 or
|
|
32
|
+
# https://devNN.example.com). Do not set KC_HOSTNAME_PORT (deprecated v1; triggers Quarkus warnings).
|
|
33
|
+
# KEYCLOAK_PUBLIC_PORT = application.yaml `port` (host-published) + dev×100; used by other apps / docs.
|
|
34
|
+
KC_HOSTNAME=url://host-public
|
|
35
|
+
# nginx / Traefik send X-Forwarded-*; required when using an edge proxy (Keycloak 26+).
|
|
36
|
+
KC_PROXY_HEADERS=xforwarded
|
|
28
37
|
# Required for Host header to work: Keycloak resolves backchannel URL from request headers
|
|
29
38
|
KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true
|
|
30
39
|
|
|
@@ -4,17 +4,26 @@ app:
|
|
|
4
4
|
displayName: 'Miso Controller'
|
|
5
5
|
description: 'Miso is the AI Fabrix in-tenant controller and portal layer for securely operating enterprise AI apps inside a customer’s Azure tenant. It provides Entra ID SSO, RBAC, audit logs, environment/app configuration via schemas, and safe secret handling via Key Vault references—ensuring governance, traceability, and predictable UX across portal, SDK, and CLI.'
|
|
6
6
|
type: webapp
|
|
7
|
-
version: '1.9.
|
|
7
|
+
version: '1.9.5'
|
|
8
8
|
|
|
9
9
|
# Image Configuration
|
|
10
10
|
image:
|
|
11
11
|
name: aifabrix/miso-controller
|
|
12
|
+
tag: latest
|
|
12
13
|
registry: aifabrixdevacr.azurecr.io
|
|
13
14
|
registryMode: acr
|
|
14
15
|
|
|
15
16
|
# Port Configuration (container port; host port = 3000 + developer_id*100 from ~/.aifabrix/config.yaml)
|
|
16
17
|
port: 3000
|
|
17
18
|
|
|
19
|
+
# Public path behind Azure Front Door / reverse proxy (used by url://public and urls.local.yaml).
|
|
20
|
+
# Traefik: host is expanded from developer-id + remote-server (hostname of `remote-server` in ~/.aifabrix/config.yaml).
|
|
21
|
+
frontDoorRouting:
|
|
22
|
+
pattern: /miso/*
|
|
23
|
+
enabled: true
|
|
24
|
+
host: ${DEV_USERNAME}.${REMOTE_HOST}
|
|
25
|
+
tls: ${TLS_ENABLED}
|
|
26
|
+
|
|
18
27
|
# Azure Requirements
|
|
19
28
|
requires:
|
|
20
29
|
database: true
|
|
@@ -45,7 +54,6 @@ build:
|
|
|
45
54
|
context: ../.. # Docker build context (relative to builder/miso-controller/)
|
|
46
55
|
dockerfile: builder/miso-controller/Dockerfile # Dockerfile name (relative to project root)
|
|
47
56
|
envOutputPath: ../../packages/miso-controller/.env # Copy .env to repo root for local dev (relative to builder/) (if null, no .env file is copied) (if empty, .env file is copied to repo root)
|
|
48
|
-
localPort: 3010 # Port for local development (different from Docker port)
|
|
49
57
|
language: typescript # Runtime language for template selection (typescript or python)
|
|
50
58
|
reloadStart: pnpm run start:reload # When running with --reload
|
|
51
59
|
|
|
@@ -53,7 +53,7 @@ NODE_ENV=dev
|
|
|
53
53
|
PORT=${PORT}
|
|
54
54
|
AUTO_CREATE_TABLES=true
|
|
55
55
|
FAST_STARTUP=false
|
|
56
|
-
ALLOWED_ORIGINS=http://localhost
|
|
56
|
+
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
|
|
57
57
|
ENABLE_API_DOCS=true
|
|
58
58
|
|
|
59
59
|
# Rate Limiting Configuration (for local development)
|
|
@@ -109,13 +109,15 @@ REDIS_PERMISSIONS_TTL=900
|
|
|
109
109
|
# KEYCLOAK_SKIP_AZURE_ENTRA_SSO=false
|
|
110
110
|
|
|
111
111
|
KEYCLOAK_REALM=aifabrix
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
# Public issuer / browser URL (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH=/auth).
|
|
113
|
+
KEYCLOAK_SERVER_URL=url://keycloak-public
|
|
114
|
+
# Internal token/JWKS calls: url://keycloak-internal (includes /auth when Keycloak uses KC_HTTP_RELATIVE_PATH).
|
|
115
|
+
KEYCLOAK_INTERNAL_SERVER_URL=url://keycloak-internal
|
|
114
116
|
# Docker/internal host and port: used when config from DB has localhost (getDockerKeycloakInternalUrl).
|
|
115
117
|
# Resolved from env-config (e.g. KEYCLOAK_HOST=keycloak, KEYCLOAK_PORT=8080 for docker).
|
|
116
118
|
KEYCLOAK_HOST=${KEYCLOAK_HOST}
|
|
117
119
|
KEYCLOAK_PORT=${KEYCLOAK_PORT}
|
|
118
|
-
KEYCLOAK_CLIENT_ID=
|
|
120
|
+
KEYCLOAK_CLIENT_ID=kv://keycloak-client-idKeyVault
|
|
119
121
|
KEYCLOAK_CLIENT_SECRET=kv://keycloak-client-secretKeyVault
|
|
120
122
|
KEYCLOAK_ADMIN_USERNAME=admin
|
|
121
123
|
KEYCLOAK_ADMIN_PASSWORD=kv://keycloak-admin-passwordKeyVault
|
|
@@ -135,6 +137,19 @@ KEYCLOAK_EVENTS_SECRET=kv://keycloak-events-secretKeyVault
|
|
|
135
137
|
WAIT_FOR_KEYCLOAK=true
|
|
136
138
|
# KEYCLOAK_WAIT_TIMEOUT=60
|
|
137
139
|
|
|
140
|
+
# =============================================================================
|
|
141
|
+
# TENANT ACTIVATION (TA-3) — EXISTING LLM CATALOG
|
|
142
|
+
# =============================================================================
|
|
143
|
+
# Optional JSON array for GET /api/v1/tenant/existing-llm-configurations (and
|
|
144
|
+
# access-model.existingLlmConfigurations). Merge order: env entries first, then
|
|
145
|
+
# entries derived from saved activation LLM (same id in saved overrides).
|
|
146
|
+
# When unset and no saved LLM, the list can be empty — use this for real endpoints.
|
|
147
|
+
#
|
|
148
|
+
# Example (minify to one line in production):
|
|
149
|
+
# EXISTING_LLM_CONFIGURATIONS=[{"id":"prod","name":"Azure Prod","type":"azure-openai","endpoint":"https://my.openai.azure.com","deploymentName":"gpt-4o"}]
|
|
150
|
+
#
|
|
151
|
+
# EXISTING_LLM_CONFIGURATIONS=
|
|
152
|
+
|
|
138
153
|
# =============================================================================
|
|
139
154
|
# AZURE AD PROVIDER CONFIGURATION
|
|
140
155
|
# =============================================================================
|
|
@@ -269,7 +284,7 @@ DEPLOYMENT=database
|
|
|
269
284
|
# =============================================================================
|
|
270
285
|
|
|
271
286
|
# Encryption Key for Database Secrets
|
|
272
|
-
ENCRYPTION_KEY=kv://secrets-encryptionKeyVault
|
|
287
|
+
ENCRYPTION_KEY=kv://miso-controller-secrets-encryptionKeyVault
|
|
273
288
|
|
|
274
289
|
# Key Vault Integration (for security parameter encryption)
|
|
275
290
|
# Set to true to enable Azure Key Vault for storing security parameters
|
|
@@ -280,10 +295,10 @@ KEY_VAULT_ENABLED=false
|
|
|
280
295
|
JWT_SECRET=kv://miso-controller-jwt-secretKeyVault
|
|
281
296
|
|
|
282
297
|
# When API_KEY is set, a matching Bearer token bypasses OAuth2 validation
|
|
283
|
-
API_KEY=kv://miso-controller-
|
|
298
|
+
API_KEY=kv://miso-controller-secrets-apiKeyVault
|
|
284
299
|
|
|
285
300
|
# NPM token for private package (npmjs.org)
|
|
286
|
-
NPM_TOKEN=kv://
|
|
301
|
+
NPM_TOKEN=kv://BASH_NPM_TOKEN
|
|
287
302
|
|
|
288
303
|
# =============================================================================
|
|
289
304
|
# MISO CONTROLLER CONFIGURATION
|
|
@@ -293,8 +308,9 @@ NPM_TOKEN=kv://npm-token-secretKeyVault
|
|
|
293
308
|
# Used to generate correct server URLs in OpenAPI spec and Keycloak callback URLs
|
|
294
309
|
# For Docker: use localhost with mapped port (e.g., localhost:3100)
|
|
295
310
|
# For production: use public domain (e.g., https://miso.example.com)
|
|
296
|
-
|
|
297
|
-
|
|
311
|
+
# url://public includes front-door path from application.yaml (e.g. /controller).
|
|
312
|
+
MISO_WEB_SERVER_URL=url://public
|
|
313
|
+
MISO_CONTROLLER_URL=url://internal
|
|
298
314
|
|
|
299
315
|
# MISO Environment Configuration (miso, dev, tst, pro)
|
|
300
316
|
MISO_ENVIRONMENT=miso
|
|
@@ -305,7 +321,13 @@ MISO_CLIENTSECRET=kv://miso-controller-client-secretKeyVault
|
|
|
305
321
|
|
|
306
322
|
# Allowed origins for CORS validation (comma-separated)
|
|
307
323
|
# Use wildcards for ports: http://localhost:*
|
|
308
|
-
MISO_ALLOWED_ORIGINS=http://localhost
|
|
324
|
+
MISO_ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
|
|
325
|
+
|
|
326
|
+
# Evaluation mode (optional .env override of DB controller.configuration.evaluation):
|
|
327
|
+
# When true (default if DB omits flag), infra deploy may coerce :envKey to `miso` — e2e poll on `dev` can 404.
|
|
328
|
+
# Set false locally to force path envKey to match deploy + GET .../deployments/:id.
|
|
329
|
+
# Unset = use DB only.
|
|
330
|
+
CONTROLLER_EVALUATION=
|
|
309
331
|
|
|
310
332
|
# =============================================================================
|
|
311
333
|
# LICENSE CONFIGURATION
|
|
@@ -320,11 +342,19 @@ MISO_ALLOWED_ORIGINS=http://localhost:*
|
|
|
320
342
|
# - Use only for local development; do not use in production.
|
|
321
343
|
LICENSE_JWT=DEVELOPMENT
|
|
322
344
|
|
|
345
|
+
# =============================================================================
|
|
346
|
+
# ENTRA ID ONBOARDING (delegated Graph via Mori)
|
|
347
|
+
# =============================================================================
|
|
348
|
+
# Must match a Web redirect URI on the vendor multi-tenant app and Mori’s route
|
|
349
|
+
# …/entra-graph-delegated/callback. Example (001 dev Mori API):
|
|
350
|
+
# ENTRA_GRAPH_DELEGATED_REDIRECT_URI=https://aifabrix001-mori-web-we.azurewebsites.net/entra-graph-delegated/callback
|
|
351
|
+
ENTRA_GRAPH_DELEGATED_REDIRECT_URI=
|
|
352
|
+
|
|
323
353
|
# =============================================================================
|
|
324
354
|
# MORI SERVICE CONFIGURATION
|
|
325
355
|
# =============================================================================
|
|
326
356
|
|
|
327
|
-
MORI_BASE_URL=
|
|
357
|
+
MORI_BASE_URL=url://mori-controller-public
|
|
328
358
|
MORI_AUTH_METHOD=apiKey
|
|
329
359
|
MORI_API_KEY=kv://mori-controller-api-keyKeyVault
|
|
330
360
|
MORI_USERNAME=kv://mori-controller-basic-usernameKeyVault
|
|
@@ -346,7 +376,7 @@ LOG_FILE_PATH=./logs
|
|
|
346
376
|
# Azure Application Insights connection string (required for OpenTelemetry)
|
|
347
377
|
# If not set, OpenTelemetry will be disabled gracefully
|
|
348
378
|
# Get this from Azure Portal: Application Insights > Overview > Connection String
|
|
349
|
-
APPLICATIONINSIGHTS_CONNECTION_STRING=kv://
|
|
379
|
+
APPLICATIONINSIGHTS_CONNECTION_STRING=kv://appinsights-connectionStringKeyVault
|
|
350
380
|
|
|
351
381
|
# OpenTelemetry service name (optional, defaults to miso-controller)
|
|
352
382
|
OTEL_SERVICE_NAME=miso-controller
|
|
@@ -367,3 +367,8 @@ permissions:
|
|
|
367
367
|
- name: 'onboarding:config'
|
|
368
368
|
roles: ['aifabrix-platform-admin', 'aifabrix-infrastructure-admin']
|
|
369
369
|
description: 'Configure onboarding (license, Entra ID, subscription config)'
|
|
370
|
+
|
|
371
|
+
# Reserved for routes that use non-OAuth verification (e.g. future webhooks); keep for routes.csv compatibility
|
|
372
|
+
- name: 'system:callback'
|
|
373
|
+
roles: ['aifabrix-platform-admin', 'aifabrix-infrastructure-admin']
|
|
374
|
+
description: 'Routes.csv / OpenAPI marker for routes without standard OAuth scopes'
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
- `deploy.js` – Deploy script for the integration
|
|
21
21
|
- `wizard.yaml` – Wizard configuration (if created via wizard)
|
|
22
22
|
|
|
23
|
-
Optional: `
|
|
23
|
+
Optional: `{{rbacOptionalFile}}` – Roles and permissions merged into the system when present.
|
|
24
24
|
|
|
25
25
|
## Quick Start
|
|
26
26
|
|
|
@@ -43,7 +43,7 @@ aifabrix wizard --app {{appName}}
|
|
|
43
43
|
Edit files in `integration/{{appName}}/`:
|
|
44
44
|
|
|
45
45
|
- **Authentication**: `{{systemKey}}-system{{fileExt}}` (auth type, credentials placeholders)
|
|
46
|
-
- **Field mappings**: `{{systemKey}}-datasource
|
|
46
|
+
- **Field mappings**: `{{systemKey}}-datasource-*{{fileExt}}` (dimensions, attributes, operations)
|
|
47
47
|
- **Credential and configuration**: `env.template` (security settings and configuration variables)
|
|
48
48
|
|
|
49
49
|
{{#if secretPaths}}{{#if secretPaths.length}}
|
|
@@ -58,12 +58,16 @@ aifabrix secret set {{path}} <your value> # {{description}}
|
|
|
58
58
|
```
|
|
59
59
|
{{/if}}{{/if}}
|
|
60
60
|
|
|
61
|
-
### 3. Validate
|
|
61
|
+
### 3. Validate configuration (local only)
|
|
62
|
+
|
|
63
|
+
`aifabrix validate` runs **on your machine**: it loads files under `integration/{{appName}}/`, checks them against the application and external-system / external-datasource JSON schemas, and runs related manifest rules. It does **not** call the dataplane or any other remote API.
|
|
62
64
|
|
|
63
65
|
```bash
|
|
64
66
|
aifabrix validate {{appName}}
|
|
65
67
|
```
|
|
66
68
|
|
|
69
|
+
Use this before upload or deploy to catch structural and policy errors early.
|
|
70
|
+
|
|
67
71
|
### 4. Repair Deployment Manifest
|
|
68
72
|
|
|
69
73
|
**Run repair regularly.** It keeps naming conventions, filenames, and the deployment manifest aligned with AI Fabrix platform best practices. Use it after editing datasources, env.template, or system config—and run it often to catch drift early.
|
|
@@ -88,19 +92,28 @@ aifabrix upload {{appName}}
|
|
|
88
92
|
|
|
89
93
|
## Testing
|
|
90
94
|
|
|
91
|
-
|
|
95
|
+
| Command | Where it runs | Calls dataplane? |
|
|
96
|
+
|--------|----------------|------------------|
|
|
97
|
+
| `aifabrix validate {{appName}}` | Local (schemas / files) | No |
|
|
98
|
+
| `aifabrix test {{appName}}` | Local (manifest / payload checks) | No |
|
|
99
|
+
| `aifabrix test-integration {{appName}}`, `aifabrix test-e2e {{appName}}`, `aifabrix datasource test …`, `aifabrix datasource test-integration …`, `aifabrix datasource test-e2e …` | Through configured auth | Yes — unified validation / pipeline API |
|
|
100
|
+
|
|
101
|
+
So: **validate** (and **`test`**) stay offline; **all integration and E2E test commands** exercise the system **via the API** (after login and a reachable dataplane).
|
|
102
|
+
|
|
103
|
+
### Local checks (no API)
|
|
92
104
|
|
|
93
105
|
```bash
|
|
106
|
+
aifabrix validate {{appName}}
|
|
94
107
|
aifabrix test {{appName}}
|
|
95
108
|
```
|
|
96
109
|
|
|
97
|
-
### Integration
|
|
110
|
+
### Integration tests (dataplane API)
|
|
98
111
|
|
|
99
112
|
```bash
|
|
100
113
|
aifabrix test-integration {{appName}}
|
|
101
114
|
```
|
|
102
115
|
|
|
103
|
-
### End-to-end
|
|
116
|
+
### End-to-end tests (dataplane API)
|
|
104
117
|
|
|
105
118
|
```bash
|
|
106
119
|
aifabrix test-e2e {{appName}}
|
|
@@ -147,6 +160,6 @@ aifabrix deploy {{appName}}
|
|
|
147
160
|
|
|
148
161
|
## Troubleshooting
|
|
149
162
|
|
|
150
|
-
- **
|
|
163
|
+
- **Local validation errors**: Run `aifabrix validate {{appName}}` (and `aifabrix test {{appName}}`) — these only inspect files on disk, not the dataplane.
|
|
151
164
|
- **Deployment / auth**: Run `aifabrix auth config --set-controller <url> --set-environment <env>` and `aifabrix login` before `aifabrix deploy`.
|
|
152
165
|
- **File not found**: Run commands from the project root (where `package.json` and `integration/` live).
|
|
@@ -48,7 +48,7 @@ function isLoggedIn() {
|
|
|
48
48
|
|
|
49
49
|
console.log('🔍 Checking authentication...');
|
|
50
50
|
if (!isLoggedIn()) {
|
|
51
|
-
console.log('
|
|
51
|
+
console.log('⚠ Not logged in. Run login (e.g. aifabrix login --controller <url> --method device --environment ' + env + ').');
|
|
52
52
|
run('aifabrix login --environment ' + env);
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -56,16 +56,16 @@ console.log('🔍 Validating configuration...');
|
|
|
56
56
|
{{#each allJsonFiles}}
|
|
57
57
|
run('aifabrix validate "' + path.join(scriptDir, '{{this}}') + '"');
|
|
58
58
|
{{/each}}
|
|
59
|
-
console.log('
|
|
59
|
+
console.log('✔ Validation passed');
|
|
60
60
|
|
|
61
61
|
console.log('🚀 Deploying ' + appKey + '...');
|
|
62
62
|
run('aifabrix deploy ' + appKey, { cwd: projectRoot });
|
|
63
|
-
console.log('
|
|
63
|
+
console.log('✔ Deployment complete');
|
|
64
64
|
|
|
65
65
|
if (process.env.RUN_TESTS !== 'false') {
|
|
66
66
|
console.log('🧪 Running integration tests...');
|
|
67
67
|
run('aifabrix test-integration ' + appKey, { cwd: projectRoot });
|
|
68
|
-
console.log('
|
|
68
|
+
console.log('✔ Tests passed');
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
console.log('
|
|
71
|
+
console.log('✔ Done.');
|