@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.
Files changed (371) hide show
  1. package/.cursor/rules/anchor-docs.mdc +15 -0
  2. package/.cursor/rules/cli-layout.mdc +75 -0
  3. package/.cursor/rules/project-rules.mdc +8 -0
  4. package/.npmrc.token +1 -0
  5. package/.nyc_output/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
  6. package/.nyc_output/processinfo/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
  7. package/.nyc_output/processinfo/index.json +1 -0
  8. package/README.md +1 -1
  9. package/anchor-docs/README.md +10 -0
  10. package/anchor-docs/_TEMPLATE +24 -0
  11. package/bin/aifabrix.js +13 -4
  12. package/integration/hubspot-test/README.md +31 -0
  13. package/integration/hubspot-test/create-hubspot.js +5 -5
  14. package/integration/hubspot-test/hubspot-test-datasource-company.json +58 -462
  15. package/integration/hubspot-test/hubspot-test-datasource-contact.json +61 -555
  16. package/integration/hubspot-test/hubspot-test-datasource-deal.json +63 -506
  17. package/integration/hubspot-test/hubspot-test-datasource-users.json +42 -83
  18. package/integration/hubspot-test/hubspot-test-deploy.json +3 -3
  19. package/integration/hubspot-test/test-dataplane-down-tests.js +1 -7
  20. package/integration/hubspot-test/test-dataplane-down.js +3 -3
  21. package/integration/hubspot-test/test.js +35 -43
  22. package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +23 -0
  23. package/integration/roundtrip-test-local/README.md +144 -0
  24. package/integration/roundtrip-test-local/application.yaml +13 -0
  25. package/integration/roundtrip-test-local/env.template +15 -0
  26. package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +14 -0
  27. package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +61 -0
  28. package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +25 -0
  29. package/integration/roundtrip-test-local2/README.md +144 -0
  30. package/integration/roundtrip-test-local2/application.yaml +13 -0
  31. package/integration/roundtrip-test-local2/env.template +15 -0
  32. package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +31 -0
  33. package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +86 -0
  34. package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +25 -0
  35. package/integration/test/wizard.yaml +8 -0
  36. package/jest.config.default.js +10 -0
  37. package/jest.config.integration.fixtures.js +22 -0
  38. package/jest.config.integration.js +21 -18
  39. package/jest.config.isolated.js +10 -0
  40. package/jest.projects.js +301 -0
  41. package/lib/api/certificates.api.js +62 -0
  42. package/lib/api/datasources-core.api.js +3 -3
  43. package/lib/api/dev-mtls-request.js +110 -0
  44. package/lib/api/dev-server-https.js +145 -0
  45. package/lib/api/dev.api.js +133 -144
  46. package/lib/api/index.js +11 -3
  47. package/lib/api/pipeline.api.js +67 -20
  48. package/lib/api/types/certificates.types.js +48 -0
  49. package/lib/api/types/dev.types.js +4 -3
  50. package/lib/api/types/pipeline.types.js +8 -5
  51. package/lib/api/types/validation-run.types.js +56 -0
  52. package/lib/api/validation-run.api.js +111 -0
  53. package/lib/api/validation-runner.js +109 -0
  54. package/lib/app/certification-show-enrich.js +129 -0
  55. package/lib/app/certification-verify-rows.js +60 -0
  56. package/lib/app/config.js +1 -1
  57. package/lib/app/deploy-status-display.js +2 -2
  58. package/lib/app/deploy.js +7 -6
  59. package/lib/app/display.js +2 -1
  60. package/lib/app/dockerfile.js +3 -2
  61. package/lib/app/down.js +2 -1
  62. package/lib/app/helpers.js +6 -5
  63. package/lib/app/index.js +27 -8
  64. package/lib/app/list.js +7 -6
  65. package/lib/app/push.js +4 -3
  66. package/lib/app/register.js +16 -7
  67. package/lib/app/rotate-secret.js +14 -13
  68. package/lib/app/run-container-start.js +184 -0
  69. package/lib/app/run-docker-fallback.js +108 -0
  70. package/lib/app/run-env-compose.js +30 -42
  71. package/lib/app/run-helpers.js +49 -126
  72. package/lib/app/run-infra-requirements.js +30 -0
  73. package/lib/app/run-resolve-image.js +21 -0
  74. package/lib/app/run.js +74 -21
  75. package/lib/app/show-display.js +44 -1
  76. package/lib/app/show.js +93 -9
  77. package/lib/build/index.js +13 -10
  78. package/lib/certification/cli-cert-sync-skip.js +21 -0
  79. package/lib/certification/merge-certification-from-artifact.js +185 -0
  80. package/lib/certification/post-unified-cert-sync.js +33 -0
  81. package/lib/certification/sync-after-external-command.js +52 -0
  82. package/lib/certification/sync-system-certification.js +197 -0
  83. package/lib/cli/index.js +2 -0
  84. package/lib/cli/setup-app.help.js +67 -0
  85. package/lib/cli/setup-app.js +61 -121
  86. package/lib/cli/setup-app.test-commands.js +195 -0
  87. package/lib/cli/setup-auth.js +19 -5
  88. package/lib/cli/setup-credential-deployment.js +22 -8
  89. package/lib/cli/setup-dev-path-commands.js +124 -0
  90. package/lib/cli/setup-dev.js +170 -113
  91. package/lib/cli/setup-environment.js +7 -1
  92. package/lib/cli/setup-external-system.js +84 -23
  93. package/lib/cli/setup-infra.js +126 -47
  94. package/lib/cli/setup-parameters.js +32 -0
  95. package/lib/cli/setup-secrets.js +137 -18
  96. package/lib/cli/setup-service-user.js +1 -1
  97. package/lib/cli/setup-utility.js +54 -22
  98. package/lib/commands/app-down.js +5 -7
  99. package/lib/commands/app-install.js +14 -7
  100. package/lib/commands/app-logs.js +13 -10
  101. package/lib/commands/app-shell.js +4 -1
  102. package/lib/commands/app-test.js +25 -19
  103. package/lib/commands/app.js +32 -11
  104. package/lib/commands/auth-config.js +6 -6
  105. package/lib/commands/auth-status.js +4 -3
  106. package/lib/commands/credential-env.js +4 -3
  107. package/lib/commands/credential-list.js +5 -4
  108. package/lib/commands/credential-push.js +4 -3
  109. package/lib/commands/datasource-unified-test-cli.js +428 -0
  110. package/lib/commands/datasource-unified-test-cli.options.js +191 -0
  111. package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +106 -0
  112. package/lib/commands/datasource-validation-cli.js +143 -0
  113. package/lib/commands/datasource.js +125 -95
  114. package/lib/commands/deployment-list.js +6 -5
  115. package/lib/commands/dev-cli-handlers.js +122 -18
  116. package/lib/commands/dev-down.js +4 -3
  117. package/lib/commands/dev-init.js +231 -116
  118. package/lib/commands/dev-show-display.js +473 -0
  119. package/lib/commands/login-credentials.js +3 -2
  120. package/lib/commands/login-device.js +4 -3
  121. package/lib/commands/login.js +5 -4
  122. package/lib/commands/logout.js +8 -7
  123. package/lib/commands/parameters-validate.js +54 -0
  124. package/lib/commands/repair-datasource.js +314 -68
  125. package/lib/commands/repair-env-template.js +2 -2
  126. package/lib/commands/repair.js +21 -3
  127. package/lib/commands/secrets-list.js +23 -12
  128. package/lib/commands/secrets-remove-all.js +220 -0
  129. package/lib/commands/secrets-remove.js +21 -12
  130. package/lib/commands/secrets-set.js +21 -12
  131. package/lib/commands/secrets-validate.js +4 -4
  132. package/lib/commands/secure.js +10 -9
  133. package/lib/commands/service-user.js +26 -25
  134. package/lib/commands/test-e2e-external.js +27 -1
  135. package/lib/commands/up-common.js +3 -2
  136. package/lib/commands/up-dataplane.js +29 -16
  137. package/lib/commands/up-miso.js +19 -29
  138. package/lib/commands/upload.js +149 -39
  139. package/lib/commands/wizard-core-helpers.js +1 -1
  140. package/lib/commands/wizard-dataplane.js +4 -3
  141. package/lib/commands/wizard-helpers.js +3 -3
  142. package/lib/commands/wizard.js +2 -2
  143. package/lib/core/admin-secrets.js +14 -5
  144. package/lib/core/audit-logger.js +12 -4
  145. package/lib/core/config-attach-extensions.js +46 -0
  146. package/lib/core/config-runtime-paths.js +29 -0
  147. package/lib/core/config.js +55 -56
  148. package/lib/core/diff.js +3 -2
  149. package/lib/core/ensure-encryption-key.js +1 -1
  150. package/lib/core/secrets-ensure-infra.js +77 -0
  151. package/lib/core/secrets-ensure.js +120 -64
  152. package/lib/core/secrets-env-write.js +35 -7
  153. package/lib/core/secrets-infra-placeholder-sync.js +61 -0
  154. package/lib/core/secrets.js +200 -37
  155. package/lib/core/templates-env.js +4 -3
  156. package/lib/datasource/abac-validator.js +1 -10
  157. package/lib/datasource/deploy.js +75 -53
  158. package/lib/datasource/field-reference-validator.js +9 -6
  159. package/lib/datasource/integration-context.js +63 -0
  160. package/lib/datasource/list.js +8 -7
  161. package/lib/datasource/log-viewer.js +189 -67
  162. package/lib/datasource/resolve-app.js +4 -4
  163. package/lib/datasource/test-e2e.js +113 -146
  164. package/lib/datasource/test-integration.js +114 -122
  165. package/lib/datasource/unified-validation-run-body.js +68 -0
  166. package/lib/datasource/unified-validation-run-post.js +23 -0
  167. package/lib/datasource/unified-validation-run-resolve.js +43 -0
  168. package/lib/datasource/unified-validation-run.js +93 -0
  169. package/lib/datasource/validate.js +157 -13
  170. package/lib/deployment/deployer.js +4 -3
  171. package/lib/deployment/environment.js +7 -6
  172. package/lib/deployment/push.js +17 -8
  173. package/lib/external-system/delete.js +4 -3
  174. package/lib/external-system/deploy.js +166 -53
  175. package/lib/external-system/download-helpers.js +1 -1
  176. package/lib/external-system/download.js +7 -6
  177. package/lib/external-system/generator.js +92 -6
  178. package/lib/external-system/integration-test-dispatch.js +26 -0
  179. package/lib/external-system/test-execution.js +5 -1
  180. package/lib/external-system/test-helpers.js +0 -4
  181. package/lib/external-system/test-system-level-helpers.js +110 -0
  182. package/lib/external-system/test-system-level.js +83 -44
  183. package/lib/external-system/test.js +59 -8
  184. package/lib/generator/builders.js +23 -11
  185. package/lib/generator/deploy-manifest-azure-kv.js +81 -0
  186. package/lib/generator/external.js +16 -4
  187. package/lib/generator/helpers.js +58 -3
  188. package/lib/generator/index.js +4 -0
  189. package/lib/generator/split-readme.js +12 -7
  190. package/lib/generator/split-variables.js +2 -1
  191. package/lib/generator/split.js +1 -1
  192. package/lib/generator/wizard-readme.js +3 -3
  193. package/lib/generator/wizard.js +8 -8
  194. package/lib/infrastructure/compose.js +70 -7
  195. package/lib/infrastructure/helpers-docker-check.js +67 -0
  196. package/lib/infrastructure/helpers.js +203 -42
  197. package/lib/infrastructure/index.js +31 -18
  198. package/lib/infrastructure/services.js +21 -67
  199. package/lib/internal/fs-real-sync.js +104 -0
  200. package/lib/internal/node-fs.js +98 -0
  201. package/lib/parameters/database-secret-values.js +173 -0
  202. package/lib/parameters/infra-kv-discovery.js +121 -0
  203. package/lib/parameters/infra-parameter-catalog.js +458 -0
  204. package/lib/parameters/infra-parameter-validate.js +64 -0
  205. package/lib/schema/application-schema.json +37 -17
  206. package/lib/schema/datasource-test-run.schema.json +493 -0
  207. package/lib/schema/deployment-rules.yaml +102 -63
  208. package/lib/schema/external-datasource.schema.json +1200 -442
  209. package/lib/schema/external-system.schema.json +203 -5
  210. package/lib/schema/flag-map-validation-run.json +31 -0
  211. package/lib/schema/infra-parameter.schema.json +106 -0
  212. package/lib/schema/infra.parameter.yaml +421 -0
  213. package/lib/schema/type/credential-auth-templates.json +40 -0
  214. package/lib/schema/type/document-storage.json +226 -0
  215. package/lib/schema/type/message-service.json +123 -0
  216. package/lib/schema/type/vector-store.json +88 -0
  217. package/lib/utils/aifabrix-runtime-config-dir.js +132 -0
  218. package/lib/utils/api-error-handler.js +2 -2
  219. package/lib/utils/api.js +77 -17
  220. package/lib/utils/app-register-api.js +3 -2
  221. package/lib/utils/app-register-auth.js +1 -1
  222. package/lib/utils/app-register-config.js +4 -4
  223. package/lib/utils/app-register-display.js +3 -2
  224. package/lib/utils/app-register-validator.js +3 -2
  225. package/lib/utils/app-run-containers.js +26 -22
  226. package/lib/utils/app-scoped-config.js +31 -0
  227. package/lib/utils/app-service-env-from-builder.js +164 -0
  228. package/lib/utils/build-copy.js +1 -1
  229. package/lib/utils/build-helpers.js +20 -20
  230. package/lib/utils/build-resolve-image.js +165 -0
  231. package/lib/utils/cli-layout-chalk.js +8 -0
  232. package/lib/utils/cli-test-layout-chalk.js +267 -0
  233. package/lib/utils/cli-utils.js +88 -11
  234. package/lib/utils/compose-db-passwords.js +138 -0
  235. package/lib/utils/compose-generate-docker-compose.js +216 -0
  236. package/lib/utils/compose-generator.js +197 -291
  237. package/lib/utils/compose-miso-env.js +18 -0
  238. package/lib/utils/compose-traefik-ingress-base.js +158 -0
  239. package/lib/utils/config-paths.js +166 -7
  240. package/lib/utils/config-scoped-resources-preference.js +41 -0
  241. package/lib/utils/configuration-env-resolver.js +11 -8
  242. package/lib/utils/controller-deployment-outcome.js +68 -0
  243. package/lib/utils/credential-display.js +2 -2
  244. package/lib/utils/credential-secrets-env.js +5 -5
  245. package/lib/utils/dataplane-pipeline-warning.js +4 -3
  246. package/lib/utils/datasource-test-run-capability-scope.js +43 -0
  247. package/lib/utils/datasource-test-run-certificate-tty.js +82 -0
  248. package/lib/utils/datasource-test-run-debug-display.js +137 -0
  249. package/lib/utils/datasource-test-run-debug-slice.js +93 -0
  250. package/lib/utils/datasource-test-run-display.js +459 -0
  251. package/lib/utils/datasource-test-run-exit.js +83 -0
  252. package/lib/utils/datasource-test-run-legacy-adapter.js +93 -0
  253. package/lib/utils/datasource-test-run-report-version.js +51 -0
  254. package/lib/utils/datasource-test-run-schema-sync.js +59 -0
  255. package/lib/utils/datasource-test-run-tty-log.js +81 -0
  256. package/lib/utils/datasource-validation-watch.js +266 -0
  257. package/lib/utils/declarative-url-ports.js +47 -0
  258. package/lib/utils/derive-env-key-from-client-id.js +41 -0
  259. package/lib/utils/dev-ca-install.js +185 -23
  260. package/lib/utils/dev-cert-helper.js +266 -17
  261. package/lib/utils/dev-hosts-helper.js +307 -0
  262. package/lib/utils/dev-init-cert-hints.js +37 -0
  263. package/lib/utils/dev-init-health-messages.js +52 -0
  264. package/lib/utils/dev-init-resolve.js +86 -0
  265. package/lib/utils/dev-init-ssh-merge.js +65 -0
  266. package/lib/utils/dev-ssh-config-helper.js +196 -0
  267. package/lib/utils/dev-user-groups.js +93 -0
  268. package/lib/utils/docker-build.js +42 -17
  269. package/lib/utils/docker-exec.js +28 -0
  270. package/lib/utils/docker-manifest-public-port.js +116 -0
  271. package/lib/utils/docker-not-running-hint.js +52 -0
  272. package/lib/utils/docker.js +98 -11
  273. package/lib/utils/ensure-dev-certs-for-remote-docker.js +192 -0
  274. package/lib/utils/env-config-loader.js +10 -91
  275. package/lib/utils/env-copy.js +19 -10
  276. package/lib/utils/env-map.js +35 -8
  277. package/lib/utils/env-template.js +2 -2
  278. package/lib/utils/environment-scoped-resources.js +144 -0
  279. package/lib/utils/error-formatter.js +92 -13
  280. package/lib/utils/error-formatters/http-status-errors.js +6 -5
  281. package/lib/utils/error-formatters/network-errors.js +2 -1
  282. package/lib/utils/error-formatters/permission-errors.js +2 -1
  283. package/lib/utils/error-formatters/validation-errors.js +2 -1
  284. package/lib/utils/external-readme.js +8 -1
  285. package/lib/utils/external-system-display.js +242 -136
  286. package/lib/utils/external-system-local-test-tty.js +389 -0
  287. package/lib/utils/external-system-readiness-core.js +377 -0
  288. package/lib/utils/external-system-readiness-deploy-display.js +270 -0
  289. package/lib/utils/external-system-readiness-display-internals.js +150 -0
  290. package/lib/utils/external-system-readiness-display.js +186 -0
  291. package/lib/utils/external-system-system-test-tty-overview.js +120 -0
  292. package/lib/utils/external-system-system-test-tty.js +417 -0
  293. package/lib/utils/external-system-test-helpers.js +24 -6
  294. package/lib/utils/external-system-validators.js +30 -12
  295. package/lib/utils/health-check-url.js +119 -0
  296. package/lib/utils/health-check.js +59 -25
  297. package/lib/utils/help-builder.js +11 -8
  298. package/lib/utils/image-version.js +4 -8
  299. package/lib/utils/infra-containers.js +4 -7
  300. package/lib/utils/infra-env-defaults.js +162 -0
  301. package/lib/utils/infra-status-display.js +167 -0
  302. package/lib/utils/infra-status.js +16 -8
  303. package/lib/utils/local-secrets.js +3 -4
  304. package/lib/utils/paths.js +148 -47
  305. package/lib/utils/port-resolver.js +10 -23
  306. package/lib/utils/redis-env-scope.js +62 -0
  307. package/lib/utils/register-aifabrix-shell-env.js +204 -0
  308. package/lib/utils/remote-builder-validation.js +99 -0
  309. package/lib/utils/remote-dev-auth.js +117 -21
  310. package/lib/utils/remote-docker-env.js +67 -15
  311. package/lib/utils/remote-secrets-loader.js +13 -4
  312. package/lib/utils/resolve-docker-image-ref.js +124 -0
  313. package/lib/utils/schema-loader.js +22 -9
  314. package/lib/utils/secrets-bash-kv.js +25 -0
  315. package/lib/utils/secrets-generator.js +169 -49
  316. package/lib/utils/secrets-helpers.js +70 -59
  317. package/lib/utils/secrets-kv-scope.js +60 -0
  318. package/lib/utils/secrets-utils.js +32 -38
  319. package/lib/utils/secrets-validation.js +3 -1
  320. package/lib/utils/secrets-yaml-preserve.js +109 -0
  321. package/lib/utils/ssh-key-helper.js +4 -2
  322. package/lib/utils/template-helpers.js +2 -2
  323. package/lib/utils/test-log-writer.js +3 -3
  324. package/lib/utils/token-manager.js +1 -2
  325. package/lib/utils/url-declarative-public-base.js +188 -0
  326. package/lib/utils/url-declarative-resolve-build.js +493 -0
  327. package/lib/utils/url-declarative-resolve-load-doc.js +51 -0
  328. package/lib/utils/url-declarative-resolve.js +220 -0
  329. package/lib/utils/url-declarative-token-parse.js +74 -0
  330. package/lib/utils/url-declarative-url-flags.js +50 -0
  331. package/lib/utils/url-declarative-vdir-inactive-env.js +99 -0
  332. package/lib/utils/url-public-path-prefix.js +34 -0
  333. package/lib/utils/urls-local-registry.js +220 -0
  334. package/lib/utils/validation-report-tty-kit.js +77 -0
  335. package/lib/utils/validation-run-poll.js +112 -0
  336. package/lib/utils/validation-run-post-retry.js +85 -0
  337. package/lib/utils/validation-run-request.js +116 -0
  338. package/lib/utils/variable-transformer.js +21 -4
  339. package/lib/utils/yaml-preserve.js +33 -14
  340. package/lib/validation/datasource-warnings.js +56 -0
  341. package/lib/validation/env-template-auth.js +1 -1
  342. package/lib/validation/external-manifest-validator.js +27 -7
  343. package/lib/validation/validate-display.js +37 -31
  344. package/lib/validation/validate-external-cert-sync.js +23 -0
  345. package/lib/validation/validate.js +8 -14
  346. package/lib/validation/validator-unresolved-placeholders.js +98 -0
  347. package/lib/validation/validator.js +22 -65
  348. package/lib/validation/wizard-config-validator.js +2 -1
  349. package/package.json +9 -4
  350. package/scripts/check-datasource-test-run-schema-sync.js +34 -0
  351. package/scripts/diagnose-cli.js +150 -0
  352. package/scripts/install-local.js +307 -55
  353. package/scripts/pnpm-global-remove.js +48 -0
  354. package/templates/README.md +15 -2
  355. package/templates/applications/dataplane/application.yaml +52 -2
  356. package/templates/applications/dataplane/env.template +79 -17
  357. package/templates/applications/dataplane/rbac.yaml +8 -0
  358. package/templates/applications/keycloak/application.yaml +9 -1
  359. package/templates/applications/keycloak/env.template +15 -6
  360. package/templates/applications/miso-controller/application.yaml +10 -2
  361. package/templates/applications/miso-controller/env.template +42 -12
  362. package/templates/applications/miso-controller/rbac.yaml +5 -0
  363. package/templates/external-system/README.md.hbs +20 -7
  364. package/templates/external-system/deploy.js.hbs +5 -5
  365. package/templates/external-system/external-datasource.yaml.hbs +197 -118
  366. package/templates/infra/compose.yaml.hbs +33 -16
  367. package/templates/infra/servers.json.hbs +3 -1
  368. package/templates/python/docker-compose.hbs +16 -0
  369. package/templates/typescript/docker-compose.hbs +16 -0
  370. package/lib/api/external-test.api.js +0 -111
  371. 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
- API_KEY=kv://miso-controller-api-key-secretKeyVault
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.8.0
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
- DATAPLANE_WEB_SERVER_URL=kv://dataplane-web-server-url
34
- DATAPLANE_INTERNAL_URL=kv://dataplane-internal-server-url
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: used by OpenAPI OAuth2 / browser (authorizationUrl, tokenUrl).
101
- KEYCLOAK_SERVER_URL=kv://keycloak-server-url
102
- # Internal (same role as MISO_CONTROLLER_URL): future server-side Keycloak (e.g. JWKS). Not used by dataplane today.
103
- KEYCLOAK_INTERNAL_SERVER_URL=kv://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 for client_token; set when controller is behind a different public URL.
110
- MISO_WEB_SERVER_URL=kv://miso-controller-web-server-url
111
- # Internal: server-to-controller API calls (auth, pipeline, status, RBAC).
112
- MISO_CONTROLLER_URL=http://${MISO_HOST}:${MISO_PORT}
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
- # Pipeline env key for controller URLs: /api/v1/pipeline/{envKey}/validate and /deploy.
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
- KEYCLOAK_ADMIN=admin
10
- KEYCLOAK_ADMIN_PASSWORD=kv://keycloak-admin-passwordKeyVault
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=true
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
- KC_HOSTNAME=http://localhost:${KEYCLOAK_PUBLIC_PORT}
27
- KC_HOSTNAME_PORT=${KEYCLOAK_PUBLIC_PORT}
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.0'
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
- KEYCLOAK_SERVER_URL=kv://keycloak-server-url
113
- KEYCLOAK_INTERNAL_SERVER_URL=kv://keycloak-internal-server-url
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=miso-controller
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-api-key-secretKeyVault
298
+ API_KEY=kv://miso-controller-secrets-apiKeyVault
284
299
 
285
300
  # NPM token for private package (npmjs.org)
286
- NPM_TOKEN=kv://npm-token-secretKeyVault
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
- MISO_WEB_SERVER_URL=kv://miso-controller-web-server-url
297
- MISO_CONTROLLER_URL=kv://miso-controller-internal-server-url
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=kv://mori-controller-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://applicationinsights-connection-stringKeyVault
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: `rbac.yaml` – Roles and permissions merged into the system when present.
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-*-datasource{{fileExt}}` (dimensions, attributes, operations)
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 Configuration
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
- ### Unit Tests (Local Validation, No API)
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 Tests (Via Dataplane)
110
+ ### Integration tests (dataplane API)
98
111
 
99
112
  ```bash
100
113
  aifabrix test-integration {{appName}}
101
114
  ```
102
115
 
103
- ### End-to-end Tests (Via Dataplane)
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
- - **Validation errors**: Run `aifabrix validate {{appName}}` to see schema and manifest errors.
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('⚠️ Not logged in. Run login (e.g. aifabrix login --controller <url> --method device --environment ' + env + ').');
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(' Validation passed');
59
+ console.log(' Validation passed');
60
60
 
61
61
  console.log('🚀 Deploying ' + appKey + '...');
62
62
  run('aifabrix deploy ' + appKey, { cwd: projectRoot });
63
- console.log(' Deployment complete');
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(' Tests passed');
68
+ console.log(' Tests passed');
69
69
  }
70
70
 
71
- console.log(' Done.');
71
+ console.log(' Done.');