@aifabrix/builder 2.45.0 → 2.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/.cursor/rules/cli-layout.mdc +2 -0
  2. package/.cursor/rules/cli-product-neutral.mdc +43 -0
  3. package/.cursor/rules/docs-rules.mdc +3 -1
  4. package/.cursor/rules/project-rules.mdc +1 -0
  5. package/README.md +43 -17
  6. package/integration/hubspot-test/wizard-hubspot-e2e.yaml +1 -1
  7. package/jest.config.default.js +2 -1
  8. package/jest.config.isolated.js +2 -1
  9. package/jest.global-live-fabrix-hooks.js +36 -0
  10. package/jest.isolated-projects.js +130 -0
  11. package/jest.projects.js +69 -121
  12. package/lib/api/agent-metadata-validation.api.js +93 -0
  13. package/lib/api/api-response-errors.js +124 -0
  14. package/lib/api/audit-api-helpers.js +68 -0
  15. package/lib/api/audit.api.js +119 -0
  16. package/lib/api/auth-cache.api.js +44 -0
  17. package/lib/api/certificates.api.js +4 -4
  18. package/lib/api/credential.api.js +2 -2
  19. package/lib/api/dataplane-health.api.js +137 -0
  20. package/lib/api/dataplane-sync.api.js +27 -0
  21. package/lib/api/datasources-core.api.js +21 -18
  22. package/lib/api/datasources-extended.api.js +22 -22
  23. package/lib/api/dimensions.api.js +3 -0
  24. package/lib/api/external-systems.api.js +13 -13
  25. package/lib/api/governance-scenario-pack.api.js +159 -0
  26. package/lib/api/governance-scenarios.api.js +39 -0
  27. package/lib/api/groups.api.js +79 -0
  28. package/lib/api/index.js +88 -5
  29. package/lib/api/lifecycle.api.js +77 -0
  30. package/lib/api/pipeline.api.js +7 -5
  31. package/lib/api/protection.api.js +157 -0
  32. package/lib/api/records-bulk.api.js +43 -0
  33. package/lib/api/records-search-parse.js +49 -0
  34. package/lib/api/records-search.api.js +29 -0
  35. package/lib/api/types/agent-metadata-validation.types.js +67 -0
  36. package/lib/api/types/audit.types.js +72 -0
  37. package/lib/api/types/dataplane-health.types.js +27 -0
  38. package/lib/api/types/dimensions.types.js +2 -0
  39. package/lib/api/types/governance-scenarios.types.js +39 -0
  40. package/lib/api/types/protection.types.js +69 -0
  41. package/lib/api/types/records-bulk.types.js +35 -0
  42. package/lib/api/types/records-search.types.js +28 -0
  43. package/lib/api/user-groups.api.js +50 -0
  44. package/lib/api/users.api.js +95 -0
  45. package/lib/api/validation-run.api.js +3 -3
  46. package/lib/api/validation-runner.js +5 -3
  47. package/lib/api/wizard-platform.api.js +3 -3
  48. package/lib/api/wizard.api.js +21 -21
  49. package/lib/app/deploy-config.js +4 -1
  50. package/lib/app/deploy.js +34 -19
  51. package/lib/app/down.js +20 -1
  52. package/lib/app/push.js +4 -5
  53. package/lib/app/register.js +7 -4
  54. package/lib/app/run-env-compose.js +84 -30
  55. package/lib/build/index.js +5 -0
  56. package/lib/certification/sync-system-certification.js +13 -6
  57. package/lib/cli/index.js +8 -2
  58. package/lib/cli/infra-guided-auth.js +109 -0
  59. package/lib/cli/infra-guided.js +91 -69
  60. package/lib/cli/setup-app.help.js +19 -2
  61. package/lib/cli/setup-app.js +58 -23
  62. package/lib/cli/setup-app.test-commands.js +28 -21
  63. package/lib/cli/setup-auth.js +55 -3
  64. package/lib/cli/setup-certification-commands.js +147 -0
  65. package/lib/cli/setup-certification.help.js +141 -0
  66. package/lib/cli/setup-environment.js +19 -2
  67. package/lib/cli/setup-external-system-help.js +62 -0
  68. package/lib/cli/setup-external-system.js +62 -6
  69. package/lib/cli/setup-infra.js +9 -1
  70. package/lib/cli/setup-platform.js +6 -1
  71. package/lib/cli/setup-secrets.js +33 -1
  72. package/lib/cli/setup-utility-help-after.js +65 -0
  73. package/lib/cli/setup-utility-repair.js +198 -0
  74. package/lib/cli/setup-utility-resolve.js +42 -6
  75. package/lib/cli/setup-utility-validate.js +197 -0
  76. package/lib/cli/setup-utility.js +41 -258
  77. package/lib/commands/auth-status-client-tokens.js +214 -0
  78. package/lib/commands/auth-status-dataplane-version.js +269 -0
  79. package/lib/commands/auth-status-display.js +94 -0
  80. package/lib/commands/auth-status.js +111 -53
  81. package/lib/commands/credential-push.js +10 -5
  82. package/lib/commands/datasource-load-export-cli.js +178 -0
  83. package/lib/commands/datasource-test-trust-cli.js +118 -0
  84. package/lib/commands/datasource-unified-test-cli.js +31 -20
  85. package/lib/commands/datasource-unified-test-cli.options.js +22 -3
  86. package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +5 -5
  87. package/lib/commands/datasource-verify-audit-cli.js +96 -0
  88. package/lib/commands/datasource.js +68 -1
  89. package/lib/commands/dev-show-display.js +8 -1
  90. package/lib/commands/dimension-value.js +43 -13
  91. package/lib/commands/dimension.js +38 -7
  92. package/lib/commands/governance-cli-shared.js +94 -0
  93. package/lib/commands/governance-command-action.js +132 -0
  94. package/lib/commands/governance-download-external.js +34 -0
  95. package/lib/commands/governance-generate-external.js +71 -0
  96. package/lib/commands/governance-upload-external.js +36 -0
  97. package/lib/commands/governance-verify-external.js +64 -0
  98. package/lib/commands/governance.js +144 -0
  99. package/lib/commands/identity-apply-sync.js +131 -0
  100. package/lib/commands/identity-group-cli.js +146 -0
  101. package/lib/commands/identity-membership-role-cache.js +175 -0
  102. package/lib/commands/identity-shared.js +94 -0
  103. package/lib/commands/identity-user-cli.js +158 -0
  104. package/lib/commands/identity.js +43 -0
  105. package/lib/commands/lifecycle-command-action.js +123 -0
  106. package/lib/commands/lifecycle-external.js +268 -0
  107. package/lib/commands/login.js +56 -17
  108. package/lib/commands/protection-cli-leaves.js +286 -0
  109. package/lib/commands/protection.js +50 -0
  110. package/lib/commands/repair-auth-apply.js +127 -0
  111. package/lib/commands/repair-changed-files.js +41 -0
  112. package/lib/commands/repair-datasource-keys.js +4 -1
  113. package/lib/commands/repair-datasource-run.js +59 -0
  114. package/lib/commands/repair-datasource-test-payload.js +259 -0
  115. package/lib/commands/repair-datasource.js +1 -51
  116. package/lib/commands/repair-env-template.js +64 -13
  117. package/lib/commands/repair-external-run.js +216 -0
  118. package/lib/commands/repair-openapi-sync.js +23 -0
  119. package/lib/commands/repair-persist.js +4 -0
  120. package/lib/commands/repair-rbac.js +52 -1
  121. package/lib/commands/repair-steps.js +145 -0
  122. package/lib/commands/repair.js +29 -286
  123. package/lib/commands/secrets-get.js +184 -0
  124. package/lib/commands/secrets-remove-all.js +3 -1
  125. package/lib/commands/setup-image-refresh.js +146 -0
  126. package/lib/commands/setup-modes.js +158 -162
  127. package/lib/commands/setup-platform-auth.js +76 -0
  128. package/lib/commands/setup-prompts-admin.js +244 -0
  129. package/lib/commands/setup-prompts-platform-mode.js +67 -0
  130. package/lib/commands/setup-prompts-validators.js +36 -0
  131. package/lib/commands/setup-prompts.js +24 -76
  132. package/lib/commands/setup-run-context.js +45 -0
  133. package/lib/commands/setup-spinners.js +39 -0
  134. package/lib/commands/setup.js +27 -5
  135. package/lib/commands/teardown.js +39 -0
  136. package/lib/commands/test-e2e-external.js +61 -14
  137. package/lib/commands/test-governance-cli-options.js +47 -0
  138. package/lib/commands/test-governance-external.js +67 -0
  139. package/lib/commands/test-trust-cli-options.js +32 -0
  140. package/lib/commands/test-trust-external.js +126 -0
  141. package/lib/commands/up-common.js +25 -13
  142. package/lib/commands/up-dataplane.js +50 -13
  143. package/lib/commands/upload-publish-context.js +75 -0
  144. package/lib/commands/upload-sidecar-followups.js +89 -0
  145. package/lib/commands/upload.js +108 -105
  146. package/lib/commands/verify-governance-combined-external.js +61 -0
  147. package/lib/commands/verify-governance-command-action.js +64 -0
  148. package/lib/commands/verify-governance-db.js +102 -0
  149. package/lib/commands/verify-governance-external.js +77 -0
  150. package/lib/commands/verify-governance-result-builders.js +71 -0
  151. package/lib/commands/verify-operations-command-action.js +68 -0
  152. package/lib/commands/verify-operations-external.js +268 -0
  153. package/lib/commands/verify-operations-persist.js +75 -0
  154. package/lib/commands/verify-operations-step-plan.js +68 -0
  155. package/lib/commands/verify-operations-steps.js +111 -0
  156. package/lib/commands/verify-trust-command-action.js +70 -0
  157. package/lib/commands/verify-trust-external.js +67 -0
  158. package/lib/commands/wizard-config-normalizer.js +43 -23
  159. package/lib/commands/wizard-core.js +5 -0
  160. package/lib/core/admin-password-generator.js +38 -0
  161. package/lib/core/admin-secrets-bundle.js +111 -0
  162. package/lib/core/admin-secrets-env-overlay.js +62 -0
  163. package/lib/core/admin-secrets.js +32 -4
  164. package/lib/core/config-attach-extensions.js +3 -0
  165. package/lib/core/config-device-dataplane.js +185 -0
  166. package/lib/core/config-platform-controller.js +44 -0
  167. package/lib/core/config-setup-installation-profile.js +42 -0
  168. package/lib/core/config-setup-platform-mode.js +46 -0
  169. package/lib/core/config.js +46 -36
  170. package/lib/core/secrets-admin-env.js +6 -2
  171. package/lib/core/secrets-ensure.js +4 -0
  172. package/lib/core/secrets-env-content.js +54 -48
  173. package/lib/core/secrets-env-write.js +10 -1
  174. package/lib/core/secrets-infra-placeholder-sync.js +2 -0
  175. package/lib/core/setup-installation-profile.js +43 -0
  176. package/lib/core/setup-platform-mode.js +55 -0
  177. package/lib/datasource/agent-trust-debug-log.js +45 -0
  178. package/lib/datasource/agent-trust-fetch.js +115 -0
  179. package/lib/datasource/agent-trust-map.js +101 -0
  180. package/lib/datasource/agent-trust-mock.js +44 -0
  181. package/lib/datasource/agent-trust-run.js +95 -0
  182. package/lib/datasource/agent-trust-timeout.js +25 -0
  183. package/lib/datasource/audit-evidence-display.js +80 -0
  184. package/lib/datasource/audit-evidence-extract-debug.js +115 -0
  185. package/lib/datasource/audit-evidence-extract.js +180 -0
  186. package/lib/datasource/audit-evidence-matrix-rows.js +158 -0
  187. package/lib/datasource/audit-evidence-operation-aliases.js +63 -0
  188. package/lib/datasource/audit-evidence-poll.js +109 -0
  189. package/lib/datasource/audit-evidence-run.js +177 -0
  190. package/lib/datasource/audit-evidence-verify-helpers.js +167 -0
  191. package/lib/datasource/audit-evidence-verify-matrix.js +205 -0
  192. package/lib/datasource/audit-evidence-verify.js +108 -0
  193. package/lib/datasource/bulk-loader-run-batches.js +100 -0
  194. package/lib/datasource/bulk-loader-service-retry.js +52 -0
  195. package/lib/datasource/bulk-loader-service.js +127 -0
  196. package/lib/datasource/capability/run-capability-dimension.js +2 -1
  197. package/lib/datasource/datasource-exporter-resolve.js +82 -0
  198. package/lib/datasource/datasource-exporter-service.js +144 -0
  199. package/lib/datasource/datasource-identifier.js +148 -0
  200. package/lib/datasource/datasource-load-export-context.js +95 -0
  201. package/lib/datasource/integration-context.js +6 -4
  202. package/lib/datasource/local-data-paths.js +145 -0
  203. package/lib/datasource/log-cleaner.js +241 -0
  204. package/lib/datasource/log-viewer.js +111 -6
  205. package/lib/datasource/record-file-parser.js +85 -0
  206. package/lib/datasource/record-mapper.js +129 -0
  207. package/lib/datasource/resolve-app.js +74 -55
  208. package/lib/datasource/test-e2e.js +29 -2
  209. package/lib/datasource/unified-validation-run-body.js +3 -1
  210. package/lib/datasource/unified-validation-run-resolve.js +45 -12
  211. package/lib/datasource/unified-validation-run.js +47 -18
  212. package/lib/datasource/validate.js +37 -20
  213. package/lib/deployment/environment-poll-status.js +138 -0
  214. package/lib/deployment/environment.js +42 -34
  215. package/lib/external-system/download.js +21 -20
  216. package/lib/external-system/generator.js +5 -1
  217. package/lib/external-system/integration-auth-context.js +45 -0
  218. package/lib/external-system/test-auth.js +12 -5
  219. package/lib/external-system/test-system-level.js +25 -4
  220. package/lib/external-system/test.js +9 -7
  221. package/lib/generator/external-controller-manifest.js +15 -0
  222. package/lib/governance/governance-cli-errors.js +96 -0
  223. package/lib/governance/governance-download-display.js +38 -0
  224. package/lib/governance/governance-pack-loader.js +70 -0
  225. package/lib/governance/governance-run-display.js +309 -0
  226. package/lib/identity/identity-apply-core.js +108 -0
  227. package/lib/identity/identity-apply-phases.js +244 -0
  228. package/lib/identity/identity-apply-service.js +77 -0
  229. package/lib/identity/identity-csv-parser.js +114 -0
  230. package/lib/infrastructure/admin-secrets-apply.js +84 -0
  231. package/lib/infrastructure/admin-secrets-ensure.js +130 -0
  232. package/lib/infrastructure/admin-secrets-resolve.js +95 -0
  233. package/lib/infrastructure/admin-secrets-sync.js +91 -0
  234. package/lib/infrastructure/helpers.js +23 -129
  235. package/lib/infrastructure/index.js +5 -6
  236. package/lib/infrastructure/orphan-infra-docker-teardown.js +11 -5
  237. package/lib/internal/fs-real-sync.js +29 -1
  238. package/lib/lifecycle/certification-progress.js +231 -0
  239. package/lib/lifecycle/dataplane-ui-url.js +145 -0
  240. package/lib/lifecycle/exit-codes.js +24 -0
  241. package/lib/lifecycle/json-envelope.js +25 -0
  242. package/lib/lifecycle/lifecycle-governance-options.js +51 -0
  243. package/lib/lifecycle/logger-quiet.js +29 -0
  244. package/lib/lifecycle/open-api-published.js +59 -0
  245. package/lib/lifecycle/operations-readiness-metrics.js +101 -0
  246. package/lib/lifecycle/product-model.js +196 -0
  247. package/lib/lifecycle/report-display.js +471 -0
  248. package/lib/lifecycle/scenario-upload.js +191 -0
  249. package/lib/lifecycle/verify-step-progress.js +87 -0
  250. package/lib/parameters/infra-kv-discovery.js +27 -2
  251. package/lib/protection/auth-context.js +51 -0
  252. package/lib/protection/convert-batch.js +90 -0
  253. package/lib/protection/load.js +41 -0
  254. package/lib/protection/paths.js +158 -0
  255. package/lib/protection/preflight-datasource-ready.js +46 -0
  256. package/lib/protection/protection-create-probe-lines.js +142 -0
  257. package/lib/protection/protection-create-probes.js +95 -0
  258. package/lib/protection/protection-create-scaffold.js +281 -0
  259. package/lib/protection/protection-display-helpers.js +445 -0
  260. package/lib/protection/protection-display.js +215 -0
  261. package/lib/protection/protection-preset-registry.js +97 -0
  262. package/lib/protection/report-exit.js +62 -0
  263. package/lib/protection/resolve.js +202 -0
  264. package/lib/protection/run-commands-validate.js +130 -0
  265. package/lib/protection/run-commands.js +216 -0
  266. package/lib/protection/run-protection-create-helpers.js +134 -0
  267. package/lib/protection/run-protection-create-probes-flow.js +43 -0
  268. package/lib/protection/run-protection-create.js +191 -0
  269. package/lib/protection/scope.js +22 -0
  270. package/lib/protection/sync-after-upload.js +64 -0
  271. package/lib/protection/upload-batch.js +127 -0
  272. package/lib/protection/validate-batch.js +113 -0
  273. package/lib/protection/validate-local.js +65 -0
  274. package/lib/resolvers/dimension-file.js +29 -4
  275. package/lib/schema/application-schema.json +1 -1
  276. package/lib/schema/datasource-test-run.schema.json +89 -6
  277. package/lib/schema/external-datasource.schema.json +2636 -2588
  278. package/lib/schema/external-system.schema.json +1089 -761
  279. package/lib/schema/flag-map-validation-run.json +2 -2
  280. package/lib/schema/infra.parameter.yaml +45 -0
  281. package/lib/schema/protection.schema.json +374 -0
  282. package/lib/schema/type/credential-field-registry.json +642 -0
  283. package/lib/schema/wizard-config.schema.json +1 -1
  284. package/lib/utils/agent-trust-run-display.js +231 -0
  285. package/lib/utils/agent-trust-run-exit.js +59 -0
  286. package/lib/utils/agent-trust-wait-ui.js +94 -0
  287. package/lib/utils/aifabrix-test-runtime-guard.js +125 -0
  288. package/lib/utils/api.js +55 -31
  289. package/lib/utils/app-relative-path-env.js +112 -0
  290. package/lib/utils/cli-exit-codes.js +30 -0
  291. package/lib/utils/cli-secrets-error-format.js +83 -21
  292. package/lib/utils/cli-sync-options.js +33 -0
  293. package/lib/utils/cli-utils.js +16 -4
  294. package/lib/utils/compose-generate-docker-compose.js +4 -0
  295. package/lib/utils/compose-traefik-ingress-base.js +16 -1
  296. package/lib/utils/config-secrets-path.js +46 -0
  297. package/lib/utils/controller-url.js +88 -1
  298. package/lib/utils/credential-push-ui.js +90 -0
  299. package/lib/utils/credential-secrets-env.js +137 -9
  300. package/lib/utils/dataplane-cli-version-gate.js +202 -0
  301. package/lib/utils/dataplane-cli-version-help.js +74 -0
  302. package/lib/utils/dataplane-resolver.js +129 -2
  303. package/lib/utils/datasource-export-display.js +137 -0
  304. package/lib/utils/datasource-load-display.js +174 -0
  305. package/lib/utils/datasource-load-export-ui.js +120 -0
  306. package/lib/utils/datasource-test-run-capability-scope.js +3 -3
  307. package/lib/utils/datasource-test-run-display.js +3 -3
  308. package/lib/utils/datasource-test-run-tty-log.js +5 -1
  309. package/lib/utils/declarative-url-ports.js +3 -3
  310. package/lib/utils/deployment-auth-mode.js +41 -0
  311. package/lib/utils/developer-volume-id.js +33 -0
  312. package/lib/utils/env-copy.js +14 -9
  313. package/lib/utils/env-kv-orphan-lines.js +43 -0
  314. package/lib/utils/error-formatters/network-errors.js +13 -4
  315. package/lib/utils/external-env-template.js +1 -0
  316. package/lib/utils/external-system-readiness-core.js +10 -0
  317. package/lib/utils/external-system-readiness-display.js +80 -23
  318. package/lib/utils/health-check.js +4 -1
  319. package/lib/utils/help-builder.js +35 -26
  320. package/lib/utils/keycloak-realm-ready.js +101 -0
  321. package/lib/utils/load-cip-capacity-display-config.js +61 -15
  322. package/lib/utils/manifest-source-emit.js +24 -0
  323. package/lib/utils/pipeline-upload-auth-retry.js +82 -0
  324. package/lib/utils/platform-controller-url.js +156 -0
  325. package/lib/utils/postgres-platform-bootstrap.js +199 -0
  326. package/lib/utils/postgres-wipe.js +9 -2
  327. package/lib/utils/resolve-env-mode.js +47 -0
  328. package/lib/utils/secrets-generator.js +31 -25
  329. package/lib/utils/secrets-missing-error.js +164 -0
  330. package/lib/utils/semver-compare.js +127 -0
  331. package/lib/utils/service-url-label.js +81 -0
  332. package/lib/utils/setup-quiet-output.js +25 -0
  333. package/lib/utils/template-helpers.js +15 -0
  334. package/lib/utils/token-manager-client-credentials.js +201 -0
  335. package/lib/utils/token-manager-messages.js +8 -0
  336. package/lib/utils/token-manager-refresh.js +12 -2
  337. package/lib/utils/token-manager.js +86 -105
  338. package/lib/utils/upload-pipeline-ui.js +98 -0
  339. package/lib/utils/upload-sync-options.js +42 -0
  340. package/lib/utils/url-declarative-public-base.js +21 -3
  341. package/lib/utils/url-declarative-vdir-inactive-env.js +14 -4
  342. package/lib/utils/validation-poll-ui.js +22 -7
  343. package/lib/utils/validation-run-stage.js +45 -0
  344. package/lib/validation/wizard-config-validator.js +58 -19
  345. package/package.json +1 -1
  346. package/templates/applications/dataplane/application.yaml +2 -1
  347. package/templates/applications/dataplane/env.template +36 -1
  348. package/templates/applications/dataplane/rbac.yaml +4 -0
  349. package/templates/applications/miso-controller/env.template +16 -0
  350. package/templates/external-system/README.md.hbs +116 -11
  351. package/templates/python/docker-compose.hbs +19 -18
  352. package/templates/typescript/docker-compose.hbs +18 -17
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @fileoverview Agent metadata validation API (dataplane 404.5)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ const { createDataplaneApiClient } = require('./index');
8
+
9
+ /**
10
+ * Run agent metadata validation for a datasource.
11
+ * POST /api/v1/external/{sourceIdOrKey}/agent-metadata-validation
12
+ * @requiresPermission {Dataplane} external-data-source:update
13
+ * @async
14
+ * @function runAgentMetadataValidation
15
+ * @param {string} dataplaneUrl - Dataplane base URL
16
+ * @param {string} sourceIdOrKey - Datasource key or ID
17
+ * @param {Object} authConfig - Authentication configuration
18
+ * @param {import('./types/agent-metadata-validation.types').AgentMetadataValidationRunRequest} [body]
19
+ * @returns {Promise<import('./types/agent-metadata-validation.types').AgentMetadataValidationRunResponse>}
20
+ */
21
+ async function runAgentMetadataValidation(
22
+ dataplaneUrl,
23
+ sourceIdOrKey,
24
+ authConfig,
25
+ body = {},
26
+ opts = {}
27
+ ) {
28
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
29
+ const requestOpts = { body };
30
+ if (opts.timeoutMs !== undefined && opts.timeoutMs !== null) {
31
+ requestOpts.timeoutMs = opts.timeoutMs;
32
+ }
33
+ return await client.post(
34
+ `/api/v1/external/${encodeURIComponent(sourceIdOrKey)}/agent-metadata-validation`,
35
+ requestOpts
36
+ );
37
+ }
38
+
39
+ /**
40
+ * Get latest agent metadata validation result.
41
+ * GET /api/v1/external/{sourceIdOrKey}/agent-validation
42
+ * @requiresPermission {Dataplane} external-data-source:read
43
+ * @async
44
+ * @function getLatestAgentMetadataValidation
45
+ * @param {string} dataplaneUrl - Dataplane base URL
46
+ * @param {string} sourceIdOrKey - Datasource key or ID
47
+ * @param {Object} authConfig - Authentication configuration
48
+ * @returns {Promise<import('./types/agent-metadata-validation.types').AgentMetadataValidationResult>}
49
+ */
50
+ async function getLatestAgentMetadataValidation(
51
+ dataplaneUrl,
52
+ sourceIdOrKey,
53
+ authConfig,
54
+ opts = {}
55
+ ) {
56
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
57
+ const requestOpts = {};
58
+ if (opts.timeoutMs !== undefined && opts.timeoutMs !== null) {
59
+ requestOpts.timeoutMs = opts.timeoutMs;
60
+ }
61
+ return await client.get(
62
+ `/api/v1/external/${encodeURIComponent(sourceIdOrKey)}/agent-validation`,
63
+ requestOpts
64
+ );
65
+ }
66
+
67
+ /**
68
+ * List agent metadata validation history.
69
+ * GET /api/v1/external/{sourceIdOrKey}/agent-validation/history
70
+ * @requiresPermission {Dataplane} external-data-source:read
71
+ * @async
72
+ * @function listAgentMetadataValidationHistory
73
+ * @param {string} dataplaneUrl - Dataplane base URL
74
+ * @param {string} sourceIdOrKey - Datasource key or ID
75
+ * @param {Object} authConfig - Authentication configuration
76
+ * @returns {Promise<import('./types/agent-metadata-validation.types').AgentMetadataValidationHistoryItem[]>}
77
+ */
78
+ async function listAgentMetadataValidationHistory(
79
+ dataplaneUrl,
80
+ sourceIdOrKey,
81
+ authConfig
82
+ ) {
83
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
84
+ return await client.get(
85
+ `/api/v1/external/${encodeURIComponent(sourceIdOrKey)}/agent-validation/history`
86
+ );
87
+ }
88
+
89
+ module.exports = {
90
+ runAgentMetadataValidation,
91
+ getLatestAgentMetadataValidation,
92
+ listAgentMetadataValidationHistory
93
+ };
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Throw CLI errors from ApiClient responses with formatted output preserved.
3
+ *
4
+ * @fileoverview Dataplane/controller API failure helpers
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { formatApiError } = require('../utils/api-error-handler');
12
+ const {
13
+ enrichUnresolvableGovernanceSubjectsError
14
+ } = require('../governance/governance-cli-errors');
15
+ const { inferServiceLabelFromUrl } = require('../utils/service-url-label');
16
+
17
+ /**
18
+ * @param {Object|undefined} res - ApiClient response
19
+ * @param {string} fallbackMessage
20
+ * @returns {string}
21
+ */
22
+ function resolveApiErrorMessage(res, fallbackMessage) {
23
+ if (!res) {
24
+ return fallbackMessage;
25
+ }
26
+ const fromError =
27
+ res.error &&
28
+ (res.error.formattedError || res.error.error || res.error.message);
29
+ return (
30
+ res.formattedError ||
31
+ fromError ||
32
+ (typeof res.error === 'string' ? res.error : null) ||
33
+ fallbackMessage
34
+ );
35
+ }
36
+
37
+ /**
38
+ * @param {Object|undefined} res
39
+ * @param {string} endpointUrl
40
+ * @returns {{ endpoint: string, serviceLabel: string }}
41
+ */
42
+ function resolveApiFailureEndpointContext(res, endpointUrl) {
43
+ const endpoint =
44
+ (res && res.errorData && res.errorData.endpointUrl) || endpointUrl || '';
45
+ const serviceLabel =
46
+ (res && res.errorData && res.errorData.serviceLabel) ||
47
+ inferServiceLabelFromUrl(endpoint);
48
+ return { endpoint, serviceLabel };
49
+ }
50
+
51
+ /**
52
+ * @param {Object|undefined} res
53
+ * @param {string} endpoint
54
+ * @param {string} serviceLabel
55
+ * @returns {Object}
56
+ */
57
+ function buildEnrichedApiFailureResponse(res, endpoint, serviceLabel) {
58
+ return {
59
+ ...res,
60
+ errorData: {
61
+ ...(res && res.errorData),
62
+ endpointUrl: endpoint,
63
+ serviceLabel
64
+ }
65
+ };
66
+ }
67
+
68
+ /**
69
+ * @param {Error} err
70
+ * @param {Object|undefined} res
71
+ * @param {string} endpoint
72
+ * @param {string} serviceLabel
73
+ * @param {Object} enriched
74
+ */
75
+ function assignApiFailureErrorFields(err, res, endpoint, serviceLabel, enriched) {
76
+ err.formatted =
77
+ res && res.formattedError ? res.formattedError : formatApiError(enriched, null);
78
+ err.network = Boolean(res && res.network === true);
79
+ err.status = res && typeof res.status === 'number' ? res.status : 0;
80
+ err.endpointUrl = endpoint;
81
+ err.serviceLabel = serviceLabel;
82
+ }
83
+
84
+ /**
85
+ * @param {Object|undefined} res
86
+ * @param {string} endpointUrl
87
+ * @returns {Error}
88
+ */
89
+ function buildApiFailureError(res, endpointUrl, context = {}) {
90
+ const message = resolveApiErrorMessage(res, 'Request failed');
91
+ const err = new Error(message);
92
+ const { endpoint, serviceLabel } = resolveApiFailureEndpointContext(res, endpointUrl);
93
+ const enriched = buildEnrichedApiFailureResponse(res, endpoint, serviceLabel);
94
+ assignApiFailureErrorFields(err, res, endpoint, serviceLabel, enriched);
95
+ if (
96
+ typeof endpoint === 'string' &&
97
+ endpoint.includes('/governance-scenarios/generate')
98
+ ) {
99
+ enrichUnresolvableGovernanceSubjectsError(err, context);
100
+ }
101
+ return err;
102
+ }
103
+
104
+ /**
105
+ * @param {Object} res - ApiClient response (`success: false`)
106
+ * @param {{ fallbackMessage?: string, endpointUrl?: string }} [context]
107
+ * @throws {Error}
108
+ */
109
+ function throwIfApiFailed(res, context = {}) {
110
+ if (!res || res.success !== false) {
111
+ return;
112
+ }
113
+ const endpointUrl =
114
+ context.endpointUrl ||
115
+ (res.errorData && res.errorData.endpointUrl) ||
116
+ '';
117
+ throw buildApiFailureError(res, endpointUrl || context.endpointUrl || '', context);
118
+ }
119
+
120
+ module.exports = {
121
+ throwIfApiFailed,
122
+ buildApiFailureError,
123
+ resolveApiErrorMessage
124
+ };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @fileoverview Shared helpers for dataplane audit API responses
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { unwrapApiData } = require('../utils/external-system-readiness-core');
10
+
11
+ /**
12
+ * @param {*} res
13
+ * @throws {Error}
14
+ */
15
+ function assertAuditApiSuccess(res) {
16
+ if (!res || typeof res !== 'object') {
17
+ throw new Error('Audit API returned an empty response');
18
+ }
19
+ if (res.success === false) {
20
+ const msg =
21
+ (res.error && (res.error.formattedError || res.error.error || res.error.message)) ||
22
+ res.formattedError ||
23
+ 'Audit API request failed';
24
+ const err = new Error(msg);
25
+ if (res.status) err.status = res.status;
26
+ throw err;
27
+ }
28
+ }
29
+
30
+ /**
31
+ * @param {*} res
32
+ * @returns {{ data: Array, meta: Object|null, raw: Object|null }}
33
+ */
34
+ function unwrapPaginatedAuditList(res) {
35
+ assertAuditApiSuccess(res);
36
+ const body = unwrapApiData(res);
37
+ if (!body || typeof body !== 'object') {
38
+ return { data: [], meta: null, raw: null };
39
+ }
40
+ const data = Array.isArray(body.data)
41
+ ? body.data
42
+ : Array.isArray(body.items)
43
+ ? body.items
44
+ : [];
45
+ const meta = body.meta && typeof body.meta === 'object' ? body.meta : null;
46
+ return { data, meta, raw: body };
47
+ }
48
+
49
+ /**
50
+ * Unwrap execution sub-resource envelope `{ root: T }`.
51
+ * @param {*} res
52
+ * @returns {*|null}
53
+ */
54
+ function unwrapExecutionSubresource(res) {
55
+ assertAuditApiSuccess(res);
56
+ const body = unwrapApiData(res);
57
+ if (body === null || body === undefined) return null;
58
+ if (typeof body === 'object' && Object.prototype.hasOwnProperty.call(body, 'root')) {
59
+ return body.root;
60
+ }
61
+ return body;
62
+ }
63
+
64
+ module.exports = {
65
+ assertAuditApiSuccess,
66
+ unwrapPaginatedAuditList,
67
+ unwrapExecutionSubresource
68
+ };
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @fileoverview Dataplane audit read API (Plan 407.1 / 407.3 evidence matrix)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { createDataplaneApiClient } = require('./index');
10
+ const { unwrapPaginatedAuditList, unwrapExecutionSubresource } = require('./audit-api-helpers');
11
+
12
+ const AUDIT_BASE = '/api/v1/audit';
13
+ const DEFAULT_PAGE_SIZE = 100;
14
+
15
+ /**
16
+ * @param {string} dataplaneUrl
17
+ * @param {Object} authConfig
18
+ * @param {Object} [query]
19
+ * @returns {Promise<{ data: import('./types/audit.types').AuditExecutionListItem[], meta: import('./types/audit.types').AuditListMeta|null }>}
20
+ * @requiresPermission {Dataplane} audit:read
21
+ */
22
+ async function queryExecutions(dataplaneUrl, authConfig, query = {}) {
23
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
24
+ const res = await client.get(`${AUDIT_BASE}/executions`, {
25
+ params: {
26
+ page: 1,
27
+ pageSize: DEFAULT_PAGE_SIZE,
28
+ ...query
29
+ }
30
+ });
31
+ return unwrapPaginatedAuditList(res);
32
+ }
33
+
34
+ /**
35
+ * @requiresPermission {Dataplane} audit:read
36
+ */
37
+ async function queryRbacDecisions(dataplaneUrl, authConfig, query = {}) {
38
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
39
+ const res = await client.get(`${AUDIT_BASE}/rbac-decisions`, {
40
+ params: {
41
+ page: 1,
42
+ pageSize: DEFAULT_PAGE_SIZE,
43
+ sort: '-timestamp',
44
+ ...query
45
+ }
46
+ });
47
+ return unwrapPaginatedAuditList(res);
48
+ }
49
+
50
+ /**
51
+ * @requiresPermission {Dataplane} audit:read
52
+ */
53
+ async function queryAbacTraces(dataplaneUrl, authConfig, query = {}) {
54
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
55
+ const res = await client.get(`${AUDIT_BASE}/abac-traces`, {
56
+ params: {
57
+ page: 1,
58
+ pageSize: DEFAULT_PAGE_SIZE,
59
+ ...query
60
+ }
61
+ });
62
+ return unwrapPaginatedAuditList(res);
63
+ }
64
+
65
+ /**
66
+ * @requiresPermission {Dataplane} audit:read
67
+ */
68
+ async function getExecutionRbac(dataplaneUrl, authConfig, executionId) {
69
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
70
+ const res = await client.get(`${AUDIT_BASE}/executions/${executionId}/rbac`);
71
+ return unwrapExecutionSubresource(res);
72
+ }
73
+
74
+ /**
75
+ * @requiresPermission {Dataplane} audit:read
76
+ */
77
+ async function getExecutionAbac(dataplaneUrl, authConfig, executionId) {
78
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
79
+ const res = await client.get(`${AUDIT_BASE}/executions/${executionId}/abac`);
80
+ return unwrapExecutionSubresource(res);
81
+ }
82
+
83
+ /**
84
+ * @requiresPermission {Dataplane} audit:read
85
+ */
86
+ async function getExecutionTrace(dataplaneUrl, authConfig, executionId) {
87
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
88
+ const res = await client.get(`${AUDIT_BASE}/executions/${executionId}/trace`);
89
+ return unwrapExecutionSubresource(res);
90
+ }
91
+
92
+ /**
93
+ * @requiresPermission {Dataplane} audit:read
94
+ */
95
+ async function getExecutionSteps(dataplaneUrl, authConfig, executionId) {
96
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
97
+ const res = await client.get(`${AUDIT_BASE}/executions/${executionId}/steps`);
98
+ return unwrapExecutionSubresource(res);
99
+ }
100
+
101
+ /**
102
+ * @requiresPermission {Dataplane} audit:read
103
+ */
104
+ async function getExecutionErrors(dataplaneUrl, authConfig, executionId) {
105
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
106
+ const res = await client.get(`${AUDIT_BASE}/executions/${executionId}/errors`);
107
+ return unwrapExecutionSubresource(res);
108
+ }
109
+
110
+ module.exports = {
111
+ queryExecutions,
112
+ queryRbacDecisions,
113
+ queryAbacTraces,
114
+ getExecutionRbac,
115
+ getExecutionAbac,
116
+ getExecutionTrace,
117
+ getExecutionSteps,
118
+ getExecutionErrors
119
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Controller auth/RBAC cache API
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { ApiClient } = require('./index');
10
+
11
+ const CLEAR_PATH = '/api/v1/auth/cache/clear';
12
+ const INVALIDATE_PATH = '/api/v1/auth/cache/invalidate';
13
+
14
+ /**
15
+ * Clear all controller cache entries
16
+ * @requiresPermission {Controller} cache:admin
17
+ * @async
18
+ * @param {string} controllerUrl
19
+ * @param {Object} authConfig
20
+ * @returns {Promise<Object>}
21
+ */
22
+ async function clearAuthCache(controllerUrl, authConfig) {
23
+ const client = new ApiClient(controllerUrl, authConfig);
24
+ return await client.post(CLEAR_PATH);
25
+ }
26
+
27
+ /**
28
+ * Invalidate cache entries matching a pattern
29
+ * @requiresPermission {Controller} cache:admin
30
+ * @async
31
+ * @param {string} controllerUrl
32
+ * @param {Object} authConfig
33
+ * @param {string} pattern
34
+ * @returns {Promise<Object>}
35
+ */
36
+ async function invalidateAuthCache(controllerUrl, authConfig, pattern) {
37
+ const client = new ApiClient(controllerUrl, authConfig);
38
+ return await client.post(INVALIDATE_PATH, { body: { pattern } });
39
+ }
40
+
41
+ module.exports = {
42
+ clearAuthCache,
43
+ invalidateAuthCache
44
+ };
@@ -4,7 +4,7 @@
4
4
  * @version 2.0.0
5
5
  */
6
6
 
7
- const { ApiClient } = require('./index');
7
+ const { createDataplaneApiClient } = require('./index');
8
8
  const { normalizeDataplaneAuth } = require('./validation-run.api');
9
9
 
10
10
  /**
@@ -36,7 +36,7 @@ function dataplaneAuthForBearerGet(authConfig) {
36
36
  * @returns {Promise<Object>} API envelope `{ success, data?, status, ... }`
37
37
  */
38
38
  async function getActiveIntegrationCertificate(dataplaneUrl, authConfig, systemKey, datasourceKey) {
39
- const client = new ApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
39
+ const client = createDataplaneApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
40
40
  const path = `/api/v1/systems/${encodeURIComponent(systemKey)}/datasources/${encodeURIComponent(
41
41
  datasourceKey
42
42
  )}/certificates/active`;
@@ -54,7 +54,7 @@ async function getActiveIntegrationCertificate(dataplaneUrl, authConfig, systemK
54
54
  * @returns {Promise<Object>}
55
55
  */
56
56
  async function listIntegrationCertificates(dataplaneUrl, authConfig, params = {}) {
57
- const client = new ApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
57
+ const client = createDataplaneApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
58
58
  return await client.get('/api/v1/certificates', { params });
59
59
  }
60
60
 
@@ -69,7 +69,7 @@ async function listIntegrationCertificates(dataplaneUrl, authConfig, params = {}
69
69
  * @returns {Promise<Object>}
70
70
  */
71
71
  async function verifyIntegrationCertificate(dataplaneUrl, authConfig, body) {
72
- const client = new ApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
72
+ const client = createDataplaneApiClient(dataplaneUrl, dataplaneAuthForBearerGet(authConfig));
73
73
  return await client.post('/api/v1/certificates/verify', { body: body || {} });
74
74
  }
75
75
 
@@ -4,7 +4,7 @@
4
4
  * @version 2.0.0
5
5
  */
6
6
 
7
- const { ApiClient } = require('./index');
7
+ const { createDataplaneApiClient } = require('./index');
8
8
 
9
9
  const CREDENTIAL_SECRET_ENDPOINT = '/api/v1/credential/secret';
10
10
 
@@ -29,7 +29,7 @@ async function storeCredentialSecrets(dataplaneUrl, authConfig, items) {
29
29
  if (!items || !Array.isArray(items) || items.length === 0) {
30
30
  return { stored: 0 };
31
31
  }
32
- const client = new ApiClient(dataplaneUrl, authConfig);
32
+ const client = createDataplaneApiClient(dataplaneUrl, authConfig);
33
33
  return await client.post(CREDENTIAL_SECRET_ENDPOINT, {
34
34
  body: items
35
35
  });
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Dataplane health (public) — read dataplane `version` and optional
3
+ * `minBuilderCliVersion` for the Builder CLI compatibility gate (plan 142.0).
4
+ *
5
+ * Reads `GET /api/v1/health` first (canonical, plan 403.0) and falls back to
6
+ * `GET /health` for older dataplanes during rollout. The endpoint is public
7
+ * (`security: []`); no auth header is sent.
8
+ *
9
+ * @fileoverview Read dataplane health JSON without authentication
10
+ * @author AI Fabrix Team
11
+ * @version 2.0.0
12
+ * @requiresPermission none — public dataplane health endpoint (security: [])
13
+ */
14
+
15
+ 'use strict';
16
+
17
+ require('./types/dataplane-health.types');
18
+ const { ApiClient } = require('./index');
19
+
20
+ const PRIMARY_ENDPOINT = '/api/v1/health';
21
+ const FALLBACK_ENDPOINT = '/health';
22
+
23
+ /**
24
+ * Extract the inner JSON body from the harmonized ApiClient response shape.
25
+ * @private
26
+ * @param {Object} response
27
+ * @returns {Object|null}
28
+ */
29
+ function unwrapBody(response) {
30
+ if (!response || response.success === false || response.data === null || response.data === undefined) {
31
+ return null;
32
+ }
33
+ const outer = response.data;
34
+ if (!outer || typeof outer !== 'object') {
35
+ return null;
36
+ }
37
+ // Some dataplane shapes return `{ data: { ... } }`; the general health route
38
+ // returns the payload directly. Accept both.
39
+ const inner = outer.data !== undefined && outer.data !== null && typeof outer.data === 'object'
40
+ ? outer.data
41
+ : outer;
42
+ if (!inner || typeof inner !== 'object') {
43
+ return null;
44
+ }
45
+ return inner;
46
+ }
47
+
48
+ /**
49
+ * Parse a raw ApiClient response into a normalized health snapshot.
50
+ *
51
+ * @param {Object} response - ApiClient.get response (`{ success, data, ... }`)
52
+ * @param {string} [endpoint] - Endpoint that produced the response (recorded on snapshot)
53
+ * @returns {import('./types/dataplane-health.types').DataplaneHealthSnapshot|null}
54
+ * Snapshot, or null when the response is not parseable
55
+ */
56
+ function parseGeneralHealthResponse(response, endpoint) {
57
+ const body = unwrapBody(response);
58
+ if (!body) return null;
59
+
60
+ const status = typeof body.status === 'string' ? body.status : 'unknown';
61
+ const version = typeof body.version === 'string' && body.version.trim()
62
+ ? body.version.trim()
63
+ : undefined;
64
+
65
+ let minBuilderCliVersion;
66
+ if (typeof body.minBuilderCliVersion === 'string') {
67
+ const trimmed = body.minBuilderCliVersion.trim();
68
+ if (trimmed) minBuilderCliVersion = trimmed;
69
+ }
70
+
71
+ return {
72
+ status,
73
+ version,
74
+ minBuilderCliVersion,
75
+ endpoint: endpoint || null
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Fetch dataplane general health (public endpoint, no auth).
81
+ *
82
+ * Tries `/api/v1/health` first; on failure falls back to `/health` (compatibility
83
+ * with older dataplanes that did not expose the v1 health route during rollout).
84
+ *
85
+ * @async
86
+ * @param {string} dataplaneUrl - Dataplane base URL (e.g. `http://localhost:3201`)
87
+ * @param {Object} [options]
88
+ * @param {number} [options.timeoutMs] - Optional timeout in milliseconds
89
+ * @returns {Promise<import('./types/dataplane-health.types').DataplaneHealthSnapshot|null>}
90
+ * Snapshot, or null when both endpoints fail
91
+ * @throws {Error} When dataplaneUrl is missing or not a string
92
+ */
93
+ async function fetchDataplaneGeneralHealth(dataplaneUrl, options = {}) {
94
+ if (!dataplaneUrl || typeof dataplaneUrl !== 'string') {
95
+ throw new Error('dataplaneUrl is required and must be a string');
96
+ }
97
+ const client = new ApiClient(dataplaneUrl);
98
+ const requestOpts = {};
99
+ if (options.timeoutMs !== undefined && options.timeoutMs !== null) {
100
+ requestOpts.timeoutMs = options.timeoutMs;
101
+ }
102
+
103
+ const primary = await safeGet(client, PRIMARY_ENDPOINT, requestOpts);
104
+ const primarySnapshot = parseGeneralHealthResponse(primary, PRIMARY_ENDPOINT);
105
+ if (primarySnapshot) return primarySnapshot;
106
+
107
+ const fallback = await safeGet(client, FALLBACK_ENDPOINT, requestOpts);
108
+ const fallbackSnapshot = parseGeneralHealthResponse(fallback, FALLBACK_ENDPOINT);
109
+ if (fallbackSnapshot) return fallbackSnapshot;
110
+
111
+ return null;
112
+ }
113
+
114
+ /**
115
+ * GET that swallows transport errors (timeouts / DNS / ECONNREFUSED) so callers
116
+ * can attempt a fallback endpoint without try/catch noise.
117
+ * @private
118
+ * @async
119
+ * @param {ApiClient} client
120
+ * @param {string} endpoint
121
+ * @param {Object} options
122
+ * @returns {Promise<Object|null>}
123
+ */
124
+ async function safeGet(client, endpoint, options) {
125
+ try {
126
+ return await client.get(endpoint, options);
127
+ } catch (_error) {
128
+ return null;
129
+ }
130
+ }
131
+
132
+ module.exports = {
133
+ fetchDataplaneGeneralHealth,
134
+ parseGeneralHealthResponse,
135
+ PRIMARY_ENDPOINT,
136
+ FALLBACK_ENDPOINT
137
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Dataplane sync API (Controller)
3
+ * @author AI Fabrix Team
4
+ * @version 1.0.0
5
+ */
6
+
7
+ 'use strict';
8
+
9
+ const { ApiClient } = require('./index');
10
+
11
+ /**
12
+ * Trigger full identity sync to dataplane for an environment
13
+ * @requiresPermission {Controller} admin:sync
14
+ * @async
15
+ * @param {string} controllerUrl
16
+ * @param {Object} authConfig
17
+ * @param {string} envKey
18
+ * @returns {Promise<Object>}
19
+ */
20
+ async function fullSyncToDataplane(controllerUrl, authConfig, envKey) {
21
+ const client = new ApiClient(controllerUrl, authConfig);
22
+ return await client.post(`/api/v1/sync/dataplane/${encodeURIComponent(envKey)}/full`);
23
+ }
24
+
25
+ module.exports = {
26
+ fullSyncToDataplane
27
+ };