@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.
- package/.cursor/rules/cli-layout.mdc +2 -0
- package/.cursor/rules/cli-product-neutral.mdc +43 -0
- package/.cursor/rules/docs-rules.mdc +3 -1
- package/.cursor/rules/project-rules.mdc +1 -0
- package/README.md +43 -17
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +1 -1
- package/jest.config.default.js +2 -1
- package/jest.config.isolated.js +2 -1
- package/jest.global-live-fabrix-hooks.js +36 -0
- package/jest.isolated-projects.js +130 -0
- package/jest.projects.js +69 -121
- package/lib/api/agent-metadata-validation.api.js +93 -0
- package/lib/api/api-response-errors.js +124 -0
- package/lib/api/audit-api-helpers.js +68 -0
- package/lib/api/audit.api.js +119 -0
- package/lib/api/auth-cache.api.js +44 -0
- package/lib/api/certificates.api.js +4 -4
- package/lib/api/credential.api.js +2 -2
- package/lib/api/dataplane-health.api.js +137 -0
- package/lib/api/dataplane-sync.api.js +27 -0
- package/lib/api/datasources-core.api.js +21 -18
- package/lib/api/datasources-extended.api.js +22 -22
- package/lib/api/dimensions.api.js +3 -0
- package/lib/api/external-systems.api.js +13 -13
- package/lib/api/governance-scenario-pack.api.js +159 -0
- package/lib/api/governance-scenarios.api.js +39 -0
- package/lib/api/groups.api.js +79 -0
- package/lib/api/index.js +88 -5
- package/lib/api/lifecycle.api.js +77 -0
- package/lib/api/pipeline.api.js +7 -5
- package/lib/api/protection.api.js +157 -0
- package/lib/api/records-bulk.api.js +43 -0
- package/lib/api/records-search-parse.js +49 -0
- package/lib/api/records-search.api.js +29 -0
- package/lib/api/types/agent-metadata-validation.types.js +67 -0
- package/lib/api/types/audit.types.js +72 -0
- package/lib/api/types/dataplane-health.types.js +27 -0
- package/lib/api/types/dimensions.types.js +2 -0
- package/lib/api/types/governance-scenarios.types.js +39 -0
- package/lib/api/types/protection.types.js +69 -0
- package/lib/api/types/records-bulk.types.js +35 -0
- package/lib/api/types/records-search.types.js +28 -0
- package/lib/api/user-groups.api.js +50 -0
- package/lib/api/users.api.js +95 -0
- package/lib/api/validation-run.api.js +3 -3
- package/lib/api/validation-runner.js +5 -3
- package/lib/api/wizard-platform.api.js +3 -3
- package/lib/api/wizard.api.js +21 -21
- package/lib/app/deploy-config.js +4 -1
- package/lib/app/deploy.js +34 -19
- package/lib/app/down.js +20 -1
- package/lib/app/push.js +4 -5
- package/lib/app/register.js +7 -4
- package/lib/app/run-env-compose.js +84 -30
- package/lib/build/index.js +5 -0
- package/lib/certification/sync-system-certification.js +13 -6
- package/lib/cli/index.js +8 -2
- package/lib/cli/infra-guided-auth.js +109 -0
- package/lib/cli/infra-guided.js +91 -69
- package/lib/cli/setup-app.help.js +19 -2
- package/lib/cli/setup-app.js +58 -23
- package/lib/cli/setup-app.test-commands.js +28 -21
- package/lib/cli/setup-auth.js +55 -3
- package/lib/cli/setup-certification-commands.js +147 -0
- package/lib/cli/setup-certification.help.js +141 -0
- package/lib/cli/setup-environment.js +19 -2
- package/lib/cli/setup-external-system-help.js +62 -0
- package/lib/cli/setup-external-system.js +62 -6
- package/lib/cli/setup-infra.js +9 -1
- package/lib/cli/setup-platform.js +6 -1
- package/lib/cli/setup-secrets.js +33 -1
- package/lib/cli/setup-utility-help-after.js +65 -0
- package/lib/cli/setup-utility-repair.js +198 -0
- package/lib/cli/setup-utility-resolve.js +42 -6
- package/lib/cli/setup-utility-validate.js +197 -0
- package/lib/cli/setup-utility.js +41 -258
- package/lib/commands/auth-status-client-tokens.js +214 -0
- package/lib/commands/auth-status-dataplane-version.js +269 -0
- package/lib/commands/auth-status-display.js +94 -0
- package/lib/commands/auth-status.js +111 -53
- package/lib/commands/credential-push.js +10 -5
- package/lib/commands/datasource-load-export-cli.js +178 -0
- package/lib/commands/datasource-test-trust-cli.js +118 -0
- package/lib/commands/datasource-unified-test-cli.js +31 -20
- package/lib/commands/datasource-unified-test-cli.options.js +22 -3
- package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +5 -5
- package/lib/commands/datasource-verify-audit-cli.js +96 -0
- package/lib/commands/datasource.js +68 -1
- package/lib/commands/dev-show-display.js +8 -1
- package/lib/commands/dimension-value.js +43 -13
- package/lib/commands/dimension.js +38 -7
- package/lib/commands/governance-cli-shared.js +94 -0
- package/lib/commands/governance-command-action.js +132 -0
- package/lib/commands/governance-download-external.js +34 -0
- package/lib/commands/governance-generate-external.js +71 -0
- package/lib/commands/governance-upload-external.js +36 -0
- package/lib/commands/governance-verify-external.js +64 -0
- package/lib/commands/governance.js +144 -0
- package/lib/commands/identity-apply-sync.js +131 -0
- package/lib/commands/identity-group-cli.js +146 -0
- package/lib/commands/identity-membership-role-cache.js +175 -0
- package/lib/commands/identity-shared.js +94 -0
- package/lib/commands/identity-user-cli.js +158 -0
- package/lib/commands/identity.js +43 -0
- package/lib/commands/lifecycle-command-action.js +123 -0
- package/lib/commands/lifecycle-external.js +268 -0
- package/lib/commands/login.js +56 -17
- package/lib/commands/protection-cli-leaves.js +286 -0
- package/lib/commands/protection.js +50 -0
- package/lib/commands/repair-auth-apply.js +127 -0
- package/lib/commands/repair-changed-files.js +41 -0
- package/lib/commands/repair-datasource-keys.js +4 -1
- package/lib/commands/repair-datasource-run.js +59 -0
- package/lib/commands/repair-datasource-test-payload.js +259 -0
- package/lib/commands/repair-datasource.js +1 -51
- package/lib/commands/repair-env-template.js +64 -13
- package/lib/commands/repair-external-run.js +216 -0
- package/lib/commands/repair-openapi-sync.js +23 -0
- package/lib/commands/repair-persist.js +4 -0
- package/lib/commands/repair-rbac.js +52 -1
- package/lib/commands/repair-steps.js +145 -0
- package/lib/commands/repair.js +29 -286
- package/lib/commands/secrets-get.js +184 -0
- package/lib/commands/secrets-remove-all.js +3 -1
- package/lib/commands/setup-image-refresh.js +146 -0
- package/lib/commands/setup-modes.js +158 -162
- package/lib/commands/setup-platform-auth.js +76 -0
- package/lib/commands/setup-prompts-admin.js +244 -0
- package/lib/commands/setup-prompts-platform-mode.js +67 -0
- package/lib/commands/setup-prompts-validators.js +36 -0
- package/lib/commands/setup-prompts.js +24 -76
- package/lib/commands/setup-run-context.js +45 -0
- package/lib/commands/setup-spinners.js +39 -0
- package/lib/commands/setup.js +27 -5
- package/lib/commands/teardown.js +39 -0
- package/lib/commands/test-e2e-external.js +61 -14
- package/lib/commands/test-governance-cli-options.js +47 -0
- package/lib/commands/test-governance-external.js +67 -0
- package/lib/commands/test-trust-cli-options.js +32 -0
- package/lib/commands/test-trust-external.js +126 -0
- package/lib/commands/up-common.js +25 -13
- package/lib/commands/up-dataplane.js +50 -13
- package/lib/commands/upload-publish-context.js +75 -0
- package/lib/commands/upload-sidecar-followups.js +89 -0
- package/lib/commands/upload.js +108 -105
- package/lib/commands/verify-governance-combined-external.js +61 -0
- package/lib/commands/verify-governance-command-action.js +64 -0
- package/lib/commands/verify-governance-db.js +102 -0
- package/lib/commands/verify-governance-external.js +77 -0
- package/lib/commands/verify-governance-result-builders.js +71 -0
- package/lib/commands/verify-operations-command-action.js +68 -0
- package/lib/commands/verify-operations-external.js +268 -0
- package/lib/commands/verify-operations-persist.js +75 -0
- package/lib/commands/verify-operations-step-plan.js +68 -0
- package/lib/commands/verify-operations-steps.js +111 -0
- package/lib/commands/verify-trust-command-action.js +70 -0
- package/lib/commands/verify-trust-external.js +67 -0
- package/lib/commands/wizard-config-normalizer.js +43 -23
- package/lib/commands/wizard-core.js +5 -0
- package/lib/core/admin-password-generator.js +38 -0
- package/lib/core/admin-secrets-bundle.js +111 -0
- package/lib/core/admin-secrets-env-overlay.js +62 -0
- package/lib/core/admin-secrets.js +32 -4
- package/lib/core/config-attach-extensions.js +3 -0
- package/lib/core/config-device-dataplane.js +185 -0
- package/lib/core/config-platform-controller.js +44 -0
- package/lib/core/config-setup-installation-profile.js +42 -0
- package/lib/core/config-setup-platform-mode.js +46 -0
- package/lib/core/config.js +46 -36
- package/lib/core/secrets-admin-env.js +6 -2
- package/lib/core/secrets-ensure.js +4 -0
- package/lib/core/secrets-env-content.js +54 -48
- package/lib/core/secrets-env-write.js +10 -1
- package/lib/core/secrets-infra-placeholder-sync.js +2 -0
- package/lib/core/setup-installation-profile.js +43 -0
- package/lib/core/setup-platform-mode.js +55 -0
- package/lib/datasource/agent-trust-debug-log.js +45 -0
- package/lib/datasource/agent-trust-fetch.js +115 -0
- package/lib/datasource/agent-trust-map.js +101 -0
- package/lib/datasource/agent-trust-mock.js +44 -0
- package/lib/datasource/agent-trust-run.js +95 -0
- package/lib/datasource/agent-trust-timeout.js +25 -0
- package/lib/datasource/audit-evidence-display.js +80 -0
- package/lib/datasource/audit-evidence-extract-debug.js +115 -0
- package/lib/datasource/audit-evidence-extract.js +180 -0
- package/lib/datasource/audit-evidence-matrix-rows.js +158 -0
- package/lib/datasource/audit-evidence-operation-aliases.js +63 -0
- package/lib/datasource/audit-evidence-poll.js +109 -0
- package/lib/datasource/audit-evidence-run.js +177 -0
- package/lib/datasource/audit-evidence-verify-helpers.js +167 -0
- package/lib/datasource/audit-evidence-verify-matrix.js +205 -0
- package/lib/datasource/audit-evidence-verify.js +108 -0
- package/lib/datasource/bulk-loader-run-batches.js +100 -0
- package/lib/datasource/bulk-loader-service-retry.js +52 -0
- package/lib/datasource/bulk-loader-service.js +127 -0
- package/lib/datasource/capability/run-capability-dimension.js +2 -1
- package/lib/datasource/datasource-exporter-resolve.js +82 -0
- package/lib/datasource/datasource-exporter-service.js +144 -0
- package/lib/datasource/datasource-identifier.js +148 -0
- package/lib/datasource/datasource-load-export-context.js +95 -0
- package/lib/datasource/integration-context.js +6 -4
- package/lib/datasource/local-data-paths.js +145 -0
- package/lib/datasource/log-cleaner.js +241 -0
- package/lib/datasource/log-viewer.js +111 -6
- package/lib/datasource/record-file-parser.js +85 -0
- package/lib/datasource/record-mapper.js +129 -0
- package/lib/datasource/resolve-app.js +74 -55
- package/lib/datasource/test-e2e.js +29 -2
- package/lib/datasource/unified-validation-run-body.js +3 -1
- package/lib/datasource/unified-validation-run-resolve.js +45 -12
- package/lib/datasource/unified-validation-run.js +47 -18
- package/lib/datasource/validate.js +37 -20
- package/lib/deployment/environment-poll-status.js +138 -0
- package/lib/deployment/environment.js +42 -34
- package/lib/external-system/download.js +21 -20
- package/lib/external-system/generator.js +5 -1
- package/lib/external-system/integration-auth-context.js +45 -0
- package/lib/external-system/test-auth.js +12 -5
- package/lib/external-system/test-system-level.js +25 -4
- package/lib/external-system/test.js +9 -7
- package/lib/generator/external-controller-manifest.js +15 -0
- package/lib/governance/governance-cli-errors.js +96 -0
- package/lib/governance/governance-download-display.js +38 -0
- package/lib/governance/governance-pack-loader.js +70 -0
- package/lib/governance/governance-run-display.js +309 -0
- package/lib/identity/identity-apply-core.js +108 -0
- package/lib/identity/identity-apply-phases.js +244 -0
- package/lib/identity/identity-apply-service.js +77 -0
- package/lib/identity/identity-csv-parser.js +114 -0
- package/lib/infrastructure/admin-secrets-apply.js +84 -0
- package/lib/infrastructure/admin-secrets-ensure.js +130 -0
- package/lib/infrastructure/admin-secrets-resolve.js +95 -0
- package/lib/infrastructure/admin-secrets-sync.js +91 -0
- package/lib/infrastructure/helpers.js +23 -129
- package/lib/infrastructure/index.js +5 -6
- package/lib/infrastructure/orphan-infra-docker-teardown.js +11 -5
- package/lib/internal/fs-real-sync.js +29 -1
- package/lib/lifecycle/certification-progress.js +231 -0
- package/lib/lifecycle/dataplane-ui-url.js +145 -0
- package/lib/lifecycle/exit-codes.js +24 -0
- package/lib/lifecycle/json-envelope.js +25 -0
- package/lib/lifecycle/lifecycle-governance-options.js +51 -0
- package/lib/lifecycle/logger-quiet.js +29 -0
- package/lib/lifecycle/open-api-published.js +59 -0
- package/lib/lifecycle/operations-readiness-metrics.js +101 -0
- package/lib/lifecycle/product-model.js +196 -0
- package/lib/lifecycle/report-display.js +471 -0
- package/lib/lifecycle/scenario-upload.js +191 -0
- package/lib/lifecycle/verify-step-progress.js +87 -0
- package/lib/parameters/infra-kv-discovery.js +27 -2
- package/lib/protection/auth-context.js +51 -0
- package/lib/protection/convert-batch.js +90 -0
- package/lib/protection/load.js +41 -0
- package/lib/protection/paths.js +158 -0
- package/lib/protection/preflight-datasource-ready.js +46 -0
- package/lib/protection/protection-create-probe-lines.js +142 -0
- package/lib/protection/protection-create-probes.js +95 -0
- package/lib/protection/protection-create-scaffold.js +281 -0
- package/lib/protection/protection-display-helpers.js +445 -0
- package/lib/protection/protection-display.js +215 -0
- package/lib/protection/protection-preset-registry.js +97 -0
- package/lib/protection/report-exit.js +62 -0
- package/lib/protection/resolve.js +202 -0
- package/lib/protection/run-commands-validate.js +130 -0
- package/lib/protection/run-commands.js +216 -0
- package/lib/protection/run-protection-create-helpers.js +134 -0
- package/lib/protection/run-protection-create-probes-flow.js +43 -0
- package/lib/protection/run-protection-create.js +191 -0
- package/lib/protection/scope.js +22 -0
- package/lib/protection/sync-after-upload.js +64 -0
- package/lib/protection/upload-batch.js +127 -0
- package/lib/protection/validate-batch.js +113 -0
- package/lib/protection/validate-local.js +65 -0
- package/lib/resolvers/dimension-file.js +29 -4
- package/lib/schema/application-schema.json +1 -1
- package/lib/schema/datasource-test-run.schema.json +89 -6
- package/lib/schema/external-datasource.schema.json +2636 -2588
- package/lib/schema/external-system.schema.json +1089 -761
- package/lib/schema/flag-map-validation-run.json +2 -2
- package/lib/schema/infra.parameter.yaml +45 -0
- package/lib/schema/protection.schema.json +374 -0
- package/lib/schema/type/credential-field-registry.json +642 -0
- package/lib/schema/wizard-config.schema.json +1 -1
- package/lib/utils/agent-trust-run-display.js +231 -0
- package/lib/utils/agent-trust-run-exit.js +59 -0
- package/lib/utils/agent-trust-wait-ui.js +94 -0
- package/lib/utils/aifabrix-test-runtime-guard.js +125 -0
- package/lib/utils/api.js +55 -31
- package/lib/utils/app-relative-path-env.js +112 -0
- package/lib/utils/cli-exit-codes.js +30 -0
- package/lib/utils/cli-secrets-error-format.js +83 -21
- package/lib/utils/cli-sync-options.js +33 -0
- package/lib/utils/cli-utils.js +16 -4
- package/lib/utils/compose-generate-docker-compose.js +4 -0
- package/lib/utils/compose-traefik-ingress-base.js +16 -1
- package/lib/utils/config-secrets-path.js +46 -0
- package/lib/utils/controller-url.js +88 -1
- package/lib/utils/credential-push-ui.js +90 -0
- package/lib/utils/credential-secrets-env.js +137 -9
- package/lib/utils/dataplane-cli-version-gate.js +202 -0
- package/lib/utils/dataplane-cli-version-help.js +74 -0
- package/lib/utils/dataplane-resolver.js +129 -2
- package/lib/utils/datasource-export-display.js +137 -0
- package/lib/utils/datasource-load-display.js +174 -0
- package/lib/utils/datasource-load-export-ui.js +120 -0
- package/lib/utils/datasource-test-run-capability-scope.js +3 -3
- package/lib/utils/datasource-test-run-display.js +3 -3
- package/lib/utils/datasource-test-run-tty-log.js +5 -1
- package/lib/utils/declarative-url-ports.js +3 -3
- package/lib/utils/deployment-auth-mode.js +41 -0
- package/lib/utils/developer-volume-id.js +33 -0
- package/lib/utils/env-copy.js +14 -9
- package/lib/utils/env-kv-orphan-lines.js +43 -0
- package/lib/utils/error-formatters/network-errors.js +13 -4
- package/lib/utils/external-env-template.js +1 -0
- package/lib/utils/external-system-readiness-core.js +10 -0
- package/lib/utils/external-system-readiness-display.js +80 -23
- package/lib/utils/health-check.js +4 -1
- package/lib/utils/help-builder.js +35 -26
- package/lib/utils/keycloak-realm-ready.js +101 -0
- package/lib/utils/load-cip-capacity-display-config.js +61 -15
- package/lib/utils/manifest-source-emit.js +24 -0
- package/lib/utils/pipeline-upload-auth-retry.js +82 -0
- package/lib/utils/platform-controller-url.js +156 -0
- package/lib/utils/postgres-platform-bootstrap.js +199 -0
- package/lib/utils/postgres-wipe.js +9 -2
- package/lib/utils/resolve-env-mode.js +47 -0
- package/lib/utils/secrets-generator.js +31 -25
- package/lib/utils/secrets-missing-error.js +164 -0
- package/lib/utils/semver-compare.js +127 -0
- package/lib/utils/service-url-label.js +81 -0
- package/lib/utils/setup-quiet-output.js +25 -0
- package/lib/utils/template-helpers.js +15 -0
- package/lib/utils/token-manager-client-credentials.js +201 -0
- package/lib/utils/token-manager-messages.js +8 -0
- package/lib/utils/token-manager-refresh.js +12 -2
- package/lib/utils/token-manager.js +86 -105
- package/lib/utils/upload-pipeline-ui.js +98 -0
- package/lib/utils/upload-sync-options.js +42 -0
- package/lib/utils/url-declarative-public-base.js +21 -3
- package/lib/utils/url-declarative-vdir-inactive-env.js +14 -4
- package/lib/utils/validation-poll-ui.js +22 -7
- package/lib/utils/validation-run-stage.js +45 -0
- package/lib/validation/wizard-config-validator.js +58 -19
- package/package.json +1 -1
- package/templates/applications/dataplane/application.yaml +2 -1
- package/templates/applications/dataplane/env.template +36 -1
- package/templates/applications/dataplane/rbac.yaml +4 -0
- package/templates/applications/miso-controller/env.template +16 -0
- package/templates/external-system/README.md.hbs +116 -11
- package/templates/python/docker-compose.hbs +19 -18
- package/templates/typescript/docker-compose.hbs +18 -17
|
@@ -4,81 +4,84 @@
|
|
|
4
4
|
* @version 2.0.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
const {
|
|
7
|
+
const { createDataplaneApiClient } = require('./index');
|
|
8
8
|
|
|
9
9
|
/** @requiresPermission {Dataplane} external-system:read (datasource list) */
|
|
10
10
|
async function listDatasources(dataplaneUrl, authConfig, options = {}) {
|
|
11
|
-
const client =
|
|
11
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
12
12
|
return await client.get('/api/v1/external', { params: options });
|
|
13
13
|
}
|
|
14
14
|
/** @requiresPermission {Dataplane} external-system:create */
|
|
15
15
|
async function createDatasource(dataplaneUrl, authConfig, datasourceData) {
|
|
16
|
-
const client =
|
|
16
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
17
17
|
return await client.post('/api/v1/external', { body: datasourceData });
|
|
18
18
|
}
|
|
19
19
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
20
20
|
async function getDatasource(dataplaneUrl, sourceIdOrKey, authConfig) {
|
|
21
|
-
const client =
|
|
21
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
22
22
|
return await client.get(`/api/v1/external/${sourceIdOrKey}`);
|
|
23
23
|
}
|
|
24
24
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
25
25
|
async function updateDatasource(dataplaneUrl, sourceIdOrKey, authConfig, updateData) {
|
|
26
|
-
const client =
|
|
26
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
27
27
|
return await client.put(`/api/v1/external/${sourceIdOrKey}`, { body: updateData });
|
|
28
28
|
}
|
|
29
29
|
/** @requiresPermission {Dataplane} external-system:delete */
|
|
30
30
|
async function deleteDatasource(dataplaneUrl, sourceIdOrKey, authConfig) {
|
|
31
|
-
const client =
|
|
31
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
32
32
|
return await client.delete(`/api/v1/external/${sourceIdOrKey}`);
|
|
33
33
|
}
|
|
34
34
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
35
35
|
async function getDatasourceConfig(dataplaneUrl, sourceIdOrKey, authConfig) {
|
|
36
|
-
const client =
|
|
36
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
37
37
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/config`);
|
|
38
38
|
}
|
|
39
39
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
40
40
|
async function publishDatasource(dataplaneUrl, sourceIdOrKey, authConfig, publishData = {}) {
|
|
41
|
-
const client =
|
|
41
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
42
42
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/publish`, { body: publishData });
|
|
43
43
|
}
|
|
44
44
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
45
45
|
async function rollbackDatasource(dataplaneUrl, sourceIdOrKey, authConfig, rollbackData) {
|
|
46
|
-
const client =
|
|
46
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
47
47
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/rollback`, { body: rollbackData });
|
|
48
48
|
}
|
|
49
49
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
50
50
|
async function testDatasource(dataplaneUrl, sourceIdOrKey, authConfig, testData = {}) {
|
|
51
|
-
const client =
|
|
51
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
52
52
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/test`, { body: testData });
|
|
53
53
|
}
|
|
54
54
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
55
55
|
async function listDatasourceOpenAPIEndpoints(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
56
|
-
const client =
|
|
56
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
57
57
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/openapi-endpoints`, { params: options });
|
|
58
58
|
}
|
|
59
59
|
/** @requiresPermission {Dataplane} audit:read or external-system:read */
|
|
60
60
|
async function listExecutionLogs(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
61
|
-
const client =
|
|
61
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
62
62
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/executions`, { params: options });
|
|
63
63
|
}
|
|
64
64
|
/** @requiresPermission {Dataplane} audit:read or external-system:read */
|
|
65
65
|
async function getExecutionLog(dataplaneUrl, sourceIdOrKey, executionId, authConfig) {
|
|
66
|
-
const client =
|
|
66
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
67
67
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/executions/${executionId}`);
|
|
68
68
|
}
|
|
69
69
|
/** @requiresPermission {Dataplane} audit:read */
|
|
70
70
|
async function listAllExecutionLogs(dataplaneUrl, authConfig, options = {}) {
|
|
71
|
-
const client =
|
|
71
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
72
72
|
return await client.get('/api/v1/external/executions', { params: options });
|
|
73
73
|
}
|
|
74
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* @deprecated Prefer {@link module:lib/api/records-bulk.api.bulkSyncRecords}.
|
|
76
|
+
* @requiresPermission {Dataplane} external-data-source:sync
|
|
77
|
+
*/
|
|
75
78
|
async function bulkOperation(dataplaneUrl, sourceIdOrKey, authConfig, bulkData) {
|
|
76
|
-
const
|
|
77
|
-
return await
|
|
79
|
+
const { bulkSyncRecords } = require('./records-bulk.api');
|
|
80
|
+
return await bulkSyncRecords(dataplaneUrl, sourceIdOrKey, authConfig, bulkData);
|
|
78
81
|
}
|
|
79
82
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
80
83
|
async function getDatasourceStatus(dataplaneUrl, sourceIdOrKey, authConfig) {
|
|
81
|
-
const client =
|
|
84
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
82
85
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/status`);
|
|
83
86
|
}
|
|
84
87
|
|
|
@@ -4,107 +4,107 @@
|
|
|
4
4
|
* @version 2.0.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
const {
|
|
7
|
+
const { createDataplaneApiClient } = require('./index');
|
|
8
8
|
|
|
9
9
|
/** @requiresPermission {Dataplane} external-system:read (records) */
|
|
10
10
|
async function listRecords(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
11
|
-
const client =
|
|
11
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
12
12
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/records`, { params: options });
|
|
13
13
|
}
|
|
14
14
|
/** @requiresPermission {Dataplane} external-system:create */
|
|
15
15
|
async function createRecord(dataplaneUrl, sourceIdOrKey, authConfig, recordData) {
|
|
16
|
-
const client =
|
|
16
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
17
17
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/records`, { body: recordData });
|
|
18
18
|
}
|
|
19
19
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
20
20
|
async function getRecord(dataplaneUrl, sourceIdOrKey, recordIdOrKey, authConfig) {
|
|
21
|
-
const client =
|
|
21
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
22
22
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/records/${recordIdOrKey}`);
|
|
23
23
|
}
|
|
24
24
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
25
25
|
async function updateRecord(dataplaneUrl, sourceIdOrKey, recordIdOrKey, authConfig, updateData) {
|
|
26
|
-
const client =
|
|
26
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
27
27
|
return await client.put(`/api/v1/external/${sourceIdOrKey}/records/${recordIdOrKey}`, { body: updateData });
|
|
28
28
|
}
|
|
29
29
|
/** @requiresPermission {Dataplane} external-system:delete */
|
|
30
30
|
async function deleteRecord(dataplaneUrl, sourceIdOrKey, recordIdOrKey, authConfig) {
|
|
31
|
-
const client =
|
|
31
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
32
32
|
return await client.delete(`/api/v1/external/${sourceIdOrKey}/records/${recordIdOrKey}`);
|
|
33
33
|
}
|
|
34
34
|
/** @requiresPermission {Dataplane} external-system:read (grants) */
|
|
35
35
|
async function listGrants(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
36
|
-
const client =
|
|
36
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
37
37
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/grants`, { params: options });
|
|
38
38
|
}
|
|
39
39
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
40
40
|
async function createGrant(dataplaneUrl, sourceIdOrKey, authConfig, grantData) {
|
|
41
|
-
const client =
|
|
41
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
42
42
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/grants`, { body: grantData });
|
|
43
43
|
}
|
|
44
44
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
45
45
|
async function getGrant(dataplaneUrl, sourceIdOrKey, grantIdOrKey, authConfig) {
|
|
46
|
-
const client =
|
|
46
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
47
47
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/grants/${grantIdOrKey}`);
|
|
48
48
|
}
|
|
49
49
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
50
50
|
async function updateGrant(dataplaneUrl, sourceIdOrKey, grantIdOrKey, authConfig, updateData) {
|
|
51
|
-
const client =
|
|
51
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
52
52
|
return await client.put(`/api/v1/external/${sourceIdOrKey}/grants/${grantIdOrKey}`, { body: updateData });
|
|
53
53
|
}
|
|
54
54
|
async function deleteGrant(dataplaneUrl, sourceIdOrKey, grantIdOrKey, authConfig) {
|
|
55
|
-
const client =
|
|
55
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
56
56
|
return await client.delete(`/api/v1/external/${sourceIdOrKey}/grants/${grantIdOrKey}`);
|
|
57
57
|
}
|
|
58
58
|
/** @requiresPermission {Dataplane} external-system:read (policies) */
|
|
59
59
|
async function listPolicies(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
60
|
-
const client =
|
|
60
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
61
61
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/policies`, { params: options });
|
|
62
62
|
}
|
|
63
63
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
64
64
|
async function attachPolicy(dataplaneUrl, sourceIdOrKey, authConfig, policyData) {
|
|
65
|
-
const client =
|
|
65
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
66
66
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/policies`, { body: policyData });
|
|
67
67
|
}
|
|
68
68
|
async function detachPolicy(dataplaneUrl, sourceIdOrKey, policyIdOrKey, authConfig) {
|
|
69
|
-
const client =
|
|
69
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
70
70
|
return await client.delete(`/api/v1/external/${sourceIdOrKey}/policies/${policyIdOrKey}`);
|
|
71
71
|
}
|
|
72
72
|
/** @requiresPermission {Dataplane} external-system:read (sync) */
|
|
73
73
|
async function listSyncJobs(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
74
|
-
const client =
|
|
74
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
75
75
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/sync`, { params: options });
|
|
76
76
|
}
|
|
77
77
|
async function createSyncJob(dataplaneUrl, sourceIdOrKey, authConfig, syncData) {
|
|
78
|
-
const client =
|
|
78
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
79
79
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/sync`, { body: syncData });
|
|
80
80
|
}
|
|
81
81
|
/** @requiresPermission {Dataplane} external-system:read */
|
|
82
82
|
async function getSyncJob(dataplaneUrl, sourceIdOrKey, syncJobId, authConfig) {
|
|
83
|
-
const client =
|
|
83
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
84
84
|
return await client.get(`/api/v1/external/${sourceIdOrKey}/sync/${syncJobId}`);
|
|
85
85
|
}
|
|
86
86
|
/** @requiresPermission {Dataplane} external-system:update */
|
|
87
87
|
async function updateSyncJob(dataplaneUrl, sourceIdOrKey, syncJobId, authConfig, updateData) {
|
|
88
|
-
const client =
|
|
88
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
89
89
|
return await client.put(`/api/v1/external/${sourceIdOrKey}/sync/${syncJobId}`, { body: updateData });
|
|
90
90
|
}
|
|
91
91
|
async function executeSyncJob(dataplaneUrl, sourceIdOrKey, syncJobId, authConfig) {
|
|
92
|
-
const client =
|
|
92
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
93
93
|
return await client.post(`/api/v1/external/${sourceIdOrKey}/sync/${syncJobId}/execute`);
|
|
94
94
|
}
|
|
95
95
|
/** @requiresPermission {Dataplane} document-record or external-system scope */
|
|
96
96
|
async function validateDocuments(dataplaneUrl, sourceIdOrKey, authConfig, validateData) {
|
|
97
|
-
const client =
|
|
97
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
98
98
|
return await client.post(`/api/v1/external/data-sources/${sourceIdOrKey}/documents/validate`, { body: validateData });
|
|
99
99
|
}
|
|
100
100
|
/** @requiresPermission {Dataplane} document-record or external-system scope */
|
|
101
101
|
async function bulkDocuments(dataplaneUrl, sourceIdOrKey, authConfig, bulkData) {
|
|
102
|
-
const client =
|
|
102
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
103
103
|
return await client.post(`/api/v1/external/data-sources/${sourceIdOrKey}/documents/bulk`, { body: bulkData });
|
|
104
104
|
}
|
|
105
105
|
/** @requiresPermission {Dataplane} document-record:read or external-system:read */
|
|
106
106
|
async function listDocuments(dataplaneUrl, sourceIdOrKey, authConfig, options = {}) {
|
|
107
|
-
const client =
|
|
107
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
108
108
|
return await client.get(`/api/v1/external/data-sources/${sourceIdOrKey}/documents`, { params: options });
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -68,6 +68,9 @@ async function createDimension(controllerUrl, authConfig, body) {
|
|
|
68
68
|
displayName: body.displayName,
|
|
69
69
|
dataType: body.dataType
|
|
70
70
|
};
|
|
71
|
+
if (body.valueType !== undefined && body.valueType !== null && body.valueType !== '') {
|
|
72
|
+
payload.valueType = body.valueType;
|
|
73
|
+
}
|
|
71
74
|
if (body.description !== undefined && body.description !== null && body.description !== '') {
|
|
72
75
|
payload.description = body.description;
|
|
73
76
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @version 2.0.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
const {
|
|
7
|
+
const { createDataplaneApiClient } = require('./index');
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* List external systems
|
|
@@ -24,7 +24,7 @@ const { ApiClient } = require('./index');
|
|
|
24
24
|
* @throws {Error} If request fails
|
|
25
25
|
*/
|
|
26
26
|
async function listExternalSystems(dataplaneUrl, authConfig, options = {}) {
|
|
27
|
-
const client =
|
|
27
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
28
28
|
return await client.get('/api/v1/external/systems', {
|
|
29
29
|
params: options
|
|
30
30
|
});
|
|
@@ -43,7 +43,7 @@ async function listExternalSystems(dataplaneUrl, authConfig, options = {}) {
|
|
|
43
43
|
* @throws {Error} If creation fails
|
|
44
44
|
*/
|
|
45
45
|
async function createExternalSystem(dataplaneUrl, authConfig, systemData) {
|
|
46
|
-
const client =
|
|
46
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
47
47
|
return await client.post('/api/v1/external/systems', {
|
|
48
48
|
body: systemData
|
|
49
49
|
});
|
|
@@ -66,7 +66,7 @@ async function createExternalSystem(dataplaneUrl, authConfig, systemData) {
|
|
|
66
66
|
* @throws {Error} If request fails
|
|
67
67
|
*/
|
|
68
68
|
async function getExternalSystem(dataplaneUrl, systemIdOrKey, authConfig) {
|
|
69
|
-
const client =
|
|
69
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
70
70
|
return await client.get(`/api/v1/external/systems/${systemIdOrKey}`);
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -84,7 +84,7 @@ async function getExternalSystem(dataplaneUrl, systemIdOrKey, authConfig) {
|
|
|
84
84
|
* @throws {Error} If update fails
|
|
85
85
|
*/
|
|
86
86
|
async function updateExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, updateData) {
|
|
87
|
-
const client =
|
|
87
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
88
88
|
return await client.put(`/api/v1/external/systems/${systemIdOrKey}`, {
|
|
89
89
|
body: updateData
|
|
90
90
|
});
|
|
@@ -103,7 +103,7 @@ async function updateExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, upd
|
|
|
103
103
|
* @throws {Error} If deletion fails
|
|
104
104
|
*/
|
|
105
105
|
async function deleteExternalSystem(dataplaneUrl, systemIdOrKey, authConfig) {
|
|
106
|
-
const client =
|
|
106
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
107
107
|
return await client.delete(`/api/v1/external/systems/${systemIdOrKey}`);
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -120,7 +120,7 @@ async function deleteExternalSystem(dataplaneUrl, systemIdOrKey, authConfig) {
|
|
|
120
120
|
* @throws {Error} If request fails
|
|
121
121
|
*/
|
|
122
122
|
async function getExternalSystemConfig(dataplaneUrl, systemIdOrKey, authConfig) {
|
|
123
|
-
const client =
|
|
123
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
124
124
|
return await client.get(`/api/v1/external/systems/${systemIdOrKey}/config`);
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -140,7 +140,7 @@ async function getExternalSystemConfig(dataplaneUrl, systemIdOrKey, authConfig)
|
|
|
140
140
|
* @throws {Error} If creation fails
|
|
141
141
|
*/
|
|
142
142
|
async function createFromTemplate(dataplaneUrl, authConfig, templateData) {
|
|
143
|
-
const client =
|
|
143
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
144
144
|
return await client.post('/api/v1/external/systems/from-template', {
|
|
145
145
|
body: templateData
|
|
146
146
|
});
|
|
@@ -160,7 +160,7 @@ async function createFromTemplate(dataplaneUrl, authConfig, templateData) {
|
|
|
160
160
|
* @throws {Error} If request fails
|
|
161
161
|
*/
|
|
162
162
|
async function listOpenAPIFiles(dataplaneUrl, systemIdOrKey, authConfig, options = {}) {
|
|
163
|
-
const client =
|
|
163
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
164
164
|
return await client.get(`/api/v1/external/systems/${systemIdOrKey}/openapi-files`, {
|
|
165
165
|
params: options
|
|
166
166
|
});
|
|
@@ -180,7 +180,7 @@ async function listOpenAPIFiles(dataplaneUrl, systemIdOrKey, authConfig, options
|
|
|
180
180
|
* @throws {Error} If request fails
|
|
181
181
|
*/
|
|
182
182
|
async function listOpenAPIEndpoints(dataplaneUrl, systemIdOrKey, authConfig, options = {}) {
|
|
183
|
-
const client =
|
|
183
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
184
184
|
return await client.get(`/api/v1/external/systems/${systemIdOrKey}/openapi-endpoints`, {
|
|
185
185
|
params: options
|
|
186
186
|
});
|
|
@@ -201,7 +201,7 @@ async function listOpenAPIEndpoints(dataplaneUrl, systemIdOrKey, authConfig, opt
|
|
|
201
201
|
* @throws {Error} If publish fails
|
|
202
202
|
*/
|
|
203
203
|
async function publishExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, publishData = {}) {
|
|
204
|
-
const client =
|
|
204
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
205
205
|
return await client.post(`/api/v1/external/systems/${systemIdOrKey}/publish`, {
|
|
206
206
|
body: publishData
|
|
207
207
|
});
|
|
@@ -222,7 +222,7 @@ async function publishExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, pu
|
|
|
222
222
|
* @throws {Error} If rollback fails
|
|
223
223
|
*/
|
|
224
224
|
async function rollbackExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, rollbackData) {
|
|
225
|
-
const client =
|
|
225
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
226
226
|
return await client.post(`/api/v1/external/systems/${systemIdOrKey}/rollback`, {
|
|
227
227
|
body: rollbackData
|
|
228
228
|
});
|
|
@@ -244,7 +244,7 @@ async function rollbackExternalSystem(dataplaneUrl, systemIdOrKey, authConfig, r
|
|
|
244
244
|
* @throws {Error} If save fails
|
|
245
245
|
*/
|
|
246
246
|
async function saveAsTemplate(dataplaneUrl, systemIdOrKey, authConfig, templateData) {
|
|
247
|
-
const client =
|
|
247
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
248
248
|
return await client.post(`/api/v1/external/systems/${systemIdOrKey}/save-template`, {
|
|
249
249
|
body: templateData
|
|
250
250
|
});
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dataplane governance scenario pack CRUD + run API (419.0).
|
|
3
|
+
* @author AI Fabrix Team
|
|
4
|
+
* @version 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const { createDataplaneApiClient } = require('./index');
|
|
10
|
+
const { throwIfApiFailed } = require('./api-response-errors');
|
|
11
|
+
const { unwrapApiData } = require('../utils/external-system-readiness-core');
|
|
12
|
+
const {
|
|
13
|
+
governanceUploadSchemaHint,
|
|
14
|
+
isGovernanceCoverageSchemaError
|
|
15
|
+
} = require('../governance/governance-cli-errors');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @param {string} dataplaneUrl
|
|
19
|
+
* @param {string} datasourceKey
|
|
20
|
+
* @param {string} suffix
|
|
21
|
+
* @returns {string}
|
|
22
|
+
*/
|
|
23
|
+
function governanceScenarioEndpoint(dataplaneUrl, datasourceKey, suffix) {
|
|
24
|
+
const base = String(dataplaneUrl || '').replace(/\/$/, '');
|
|
25
|
+
return `${base}/api/v1/external/${encodeURIComponent(datasourceKey)}${suffix}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* PUT /api/v1/external/{datasourceKey}/governance-scenarios
|
|
30
|
+
* @requiresPermission {Dataplane} external-data-source:update
|
|
31
|
+
* @async
|
|
32
|
+
*/
|
|
33
|
+
async function upsertDatasourceGovernancePack(dataplaneUrl, authConfig, datasourceKey, pack) {
|
|
34
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
35
|
+
const res = await client.put(
|
|
36
|
+
`/api/v1/external/${encodeURIComponent(datasourceKey)}/governance-scenarios`,
|
|
37
|
+
{ body: { pack } }
|
|
38
|
+
);
|
|
39
|
+
if (res && res.success === false) {
|
|
40
|
+
try {
|
|
41
|
+
throwIfApiFailed(res, {
|
|
42
|
+
endpointUrl: governanceScenarioEndpoint(
|
|
43
|
+
dataplaneUrl,
|
|
44
|
+
datasourceKey,
|
|
45
|
+
'/governance-scenarios'
|
|
46
|
+
)
|
|
47
|
+
});
|
|
48
|
+
} catch (err) {
|
|
49
|
+
if (isGovernanceCoverageSchemaError(err)) {
|
|
50
|
+
err.friendlyHint = governanceUploadSchemaHint(
|
|
51
|
+
(pack && pack.spec && pack.spec.systemKey) || datasourceKey
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return unwrapApiData(res);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* GET /api/v1/external/{datasourceKey}/governance-scenarios
|
|
62
|
+
* @requiresPermission {Dataplane} external-data-source:read
|
|
63
|
+
* @async
|
|
64
|
+
*/
|
|
65
|
+
async function getDatasourceGovernancePack(dataplaneUrl, authConfig, datasourceKey) {
|
|
66
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
67
|
+
const res = await client.get(
|
|
68
|
+
`/api/v1/external/${encodeURIComponent(datasourceKey)}/governance-scenarios`
|
|
69
|
+
);
|
|
70
|
+
throwIfApiFailed(res, {
|
|
71
|
+
endpointUrl: governanceScenarioEndpoint(dataplaneUrl, datasourceKey, '/governance-scenarios')
|
|
72
|
+
});
|
|
73
|
+
return unwrapApiData(res);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* POST /api/v1/external/{datasourceKey}/governance-scenarios/run
|
|
78
|
+
* @requiresPermission {Dataplane} governance:evaluate
|
|
79
|
+
* @async
|
|
80
|
+
*/
|
|
81
|
+
async function runDatasourceGovernanceScenarios(dataplaneUrl, authConfig, datasourceKey) {
|
|
82
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
83
|
+
const res = await client.post(
|
|
84
|
+
`/api/v1/external/${encodeURIComponent(datasourceKey)}/governance-scenarios/run`,
|
|
85
|
+
{ body: {} }
|
|
86
|
+
);
|
|
87
|
+
throwIfApiFailed(res, {
|
|
88
|
+
endpointUrl: governanceScenarioEndpoint(
|
|
89
|
+
dataplaneUrl,
|
|
90
|
+
datasourceKey,
|
|
91
|
+
'/governance-scenarios/run'
|
|
92
|
+
)
|
|
93
|
+
});
|
|
94
|
+
const unwrapped = unwrapApiData(res);
|
|
95
|
+
if (!unwrapped || !unwrapped.summary) {
|
|
96
|
+
throw new Error('Governance scenario run returned an unexpected response shape');
|
|
97
|
+
}
|
|
98
|
+
return unwrapped;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* POST /api/v1/external/{datasourceKey}/governance-scenarios/generate
|
|
103
|
+
* @requiresPermission {Dataplane} external-data-source:update
|
|
104
|
+
* @async
|
|
105
|
+
*/
|
|
106
|
+
async function generateDatasourceGovernancePack(
|
|
107
|
+
dataplaneUrl,
|
|
108
|
+
authConfig,
|
|
109
|
+
datasourceKey,
|
|
110
|
+
body
|
|
111
|
+
) {
|
|
112
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
113
|
+
const res = await client.post(
|
|
114
|
+
`/api/v1/external/${encodeURIComponent(datasourceKey)}/governance-scenarios/generate`,
|
|
115
|
+
{ body }
|
|
116
|
+
);
|
|
117
|
+
const subjectEmails = Array.isArray(body.subjects)
|
|
118
|
+
? body.subjects
|
|
119
|
+
.map(entry => entry && entry.subjectEmail)
|
|
120
|
+
.filter(email => typeof email === 'string' && email.trim())
|
|
121
|
+
: [];
|
|
122
|
+
throwIfApiFailed(res, {
|
|
123
|
+
endpointUrl: governanceScenarioEndpoint(
|
|
124
|
+
dataplaneUrl,
|
|
125
|
+
datasourceKey,
|
|
126
|
+
'/governance-scenarios/generate'
|
|
127
|
+
),
|
|
128
|
+
subjectEmails
|
|
129
|
+
});
|
|
130
|
+
return unwrapApiData(res);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* GET /api/v1/external/{datasourceKey}/governance-scenarios/versions
|
|
135
|
+
* @requiresPermission {Dataplane} external-data-source:read
|
|
136
|
+
* @async
|
|
137
|
+
*/
|
|
138
|
+
async function listDatasourceGovernancePackVersions(dataplaneUrl, authConfig, datasourceKey) {
|
|
139
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
140
|
+
const res = await client.get(
|
|
141
|
+
`/api/v1/external/${encodeURIComponent(datasourceKey)}/governance-scenarios/versions`
|
|
142
|
+
);
|
|
143
|
+
throwIfApiFailed(res, {
|
|
144
|
+
endpointUrl: governanceScenarioEndpoint(
|
|
145
|
+
dataplaneUrl,
|
|
146
|
+
datasourceKey,
|
|
147
|
+
'/governance-scenarios/versions'
|
|
148
|
+
)
|
|
149
|
+
});
|
|
150
|
+
return unwrapApiData(res);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
module.exports = {
|
|
154
|
+
upsertDatasourceGovernancePack,
|
|
155
|
+
getDatasourceGovernancePack,
|
|
156
|
+
runDatasourceGovernanceScenarios,
|
|
157
|
+
generateDatasourceGovernancePack,
|
|
158
|
+
listDatasourceGovernancePackVersions
|
|
159
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Dataplane governance scenario acceptance API
|
|
3
|
+
* @author AI Fabrix Team
|
|
4
|
+
* @version 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { createDataplaneApiClient } = require('./index');
|
|
8
|
+
const { unwrapApiData } = require('../utils/external-system-readiness-core');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Run governance scenario pack (ABAC visibility proof).
|
|
12
|
+
* POST /api/v1/governance/scenarios/run
|
|
13
|
+
* @requiresPermission {Dataplane} governance:evaluate
|
|
14
|
+
* @async
|
|
15
|
+
* @param {string} dataplaneUrl
|
|
16
|
+
* @param {Object} authConfig
|
|
17
|
+
* @param {import('./types/governance-scenarios.types').GovernanceScenariosRunRequest} body
|
|
18
|
+
* @returns {Promise<import('./types/governance-scenarios.types').GovernanceScenariosRunResponse>}
|
|
19
|
+
*/
|
|
20
|
+
async function runGovernanceScenarios(dataplaneUrl, authConfig, body) {
|
|
21
|
+
const client = createDataplaneApiClient(dataplaneUrl, authConfig);
|
|
22
|
+
const res = await client.post('/api/v1/governance/scenarios/run', { body });
|
|
23
|
+
if (res && res.success === false) {
|
|
24
|
+
const msg =
|
|
25
|
+
(res.error && (res.error.formattedError || res.error.error || res.error.message)) ||
|
|
26
|
+
res.formattedError ||
|
|
27
|
+
'Governance scenario run failed';
|
|
28
|
+
throw new Error(msg);
|
|
29
|
+
}
|
|
30
|
+
const unwrapped = unwrapApiData(res);
|
|
31
|
+
if (!unwrapped || !unwrapped.summary) {
|
|
32
|
+
throw new Error('Governance scenario run returned an unexpected response shape');
|
|
33
|
+
}
|
|
34
|
+
return unwrapped;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = {
|
|
38
|
+
runGovernanceScenarios
|
|
39
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Groups API (Controller /api/v1/groups)
|
|
3
|
+
* @author AI Fabrix Team
|
|
4
|
+
* @version 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
const { ApiClient } = require('./index');
|
|
10
|
+
|
|
11
|
+
const BASE = '/api/v1/groups';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* List groups (paginated)
|
|
15
|
+
* @requiresPermission {Controller} groups:read
|
|
16
|
+
* @async
|
|
17
|
+
* @param {string} controllerUrl
|
|
18
|
+
* @param {Object} authConfig
|
|
19
|
+
* @param {Object} [options]
|
|
20
|
+
* @returns {Promise<Object>}
|
|
21
|
+
*/
|
|
22
|
+
async function listGroups(controllerUrl, authConfig, options = {}) {
|
|
23
|
+
const client = new ApiClient(controllerUrl, authConfig);
|
|
24
|
+
return await client.get(BASE, { params: options });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get group by id or name
|
|
29
|
+
* @requiresPermission {Controller} groups:read
|
|
30
|
+
* @async
|
|
31
|
+
* @param {string} controllerUrl
|
|
32
|
+
* @param {Object} authConfig
|
|
33
|
+
* @param {string} groupIdOrName
|
|
34
|
+
* @param {Object} [options]
|
|
35
|
+
* @returns {Promise<Object>}
|
|
36
|
+
*/
|
|
37
|
+
async function getGroup(controllerUrl, authConfig, groupIdOrName, options = {}) {
|
|
38
|
+
const client = new ApiClient(controllerUrl, authConfig);
|
|
39
|
+
const params = {};
|
|
40
|
+
if (options.includeMembers) {
|
|
41
|
+
params.includeMembers = 'true';
|
|
42
|
+
}
|
|
43
|
+
return await client.get(`${BASE}/${encodeURIComponent(groupIdOrName)}`, { params });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Create group
|
|
48
|
+
* @requiresPermission {Controller} groups:create
|
|
49
|
+
* @async
|
|
50
|
+
* @param {string} controllerUrl
|
|
51
|
+
* @param {Object} authConfig
|
|
52
|
+
* @param {Object} body
|
|
53
|
+
* @returns {Promise<Object>}
|
|
54
|
+
*/
|
|
55
|
+
async function createGroup(controllerUrl, authConfig, body) {
|
|
56
|
+
const client = new ApiClient(controllerUrl, authConfig);
|
|
57
|
+
return await client.post(BASE, { body });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* List group members
|
|
62
|
+
* @requiresPermission {Controller} groups:read
|
|
63
|
+
* @async
|
|
64
|
+
* @param {string} controllerUrl
|
|
65
|
+
* @param {Object} authConfig
|
|
66
|
+
* @param {string} groupIdOrName
|
|
67
|
+
* @returns {Promise<Object>}
|
|
68
|
+
*/
|
|
69
|
+
async function listGroupMembers(controllerUrl, authConfig, groupIdOrName) {
|
|
70
|
+
const client = new ApiClient(controllerUrl, authConfig);
|
|
71
|
+
return await client.get(`${BASE}/${encodeURIComponent(groupIdOrName)}/members`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
module.exports = {
|
|
75
|
+
listGroups,
|
|
76
|
+
getGroup,
|
|
77
|
+
createGroup,
|
|
78
|
+
listGroupMembers
|
|
79
|
+
};
|