@aifabrix/builder 2.43.0 → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/anchor-docs.mdc +15 -0
- package/README.md +1 -1
- package/anchor-docs/README.md +10 -0
- package/anchor-docs/_TEMPLATE +24 -0
- package/bin/aifabrix.js +13 -4
- package/integration/hubspot-test/README.md +31 -0
- package/integration/hubspot-test/create-hubspot.js +5 -5
- package/integration/hubspot-test/hubspot-test-datasource-company.json +58 -462
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +61 -555
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +63 -506
- package/integration/hubspot-test/hubspot-test-datasource-users.json +42 -83
- package/integration/hubspot-test/hubspot-test-deploy.json +3 -3
- package/integration/hubspot-test/test-dataplane-down-tests.js +1 -7
- package/integration/hubspot-test/test-dataplane-down.js +3 -3
- package/integration/hubspot-test/test.js +35 -43
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +23 -0
- package/integration/roundtrip-test-local/README.md +144 -0
- package/integration/roundtrip-test-local/application.yaml +13 -0
- package/integration/roundtrip-test-local/env.template +15 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +14 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +61 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +25 -0
- package/integration/roundtrip-test-local2/README.md +144 -0
- package/integration/roundtrip-test-local2/application.yaml +13 -0
- package/integration/roundtrip-test-local2/env.template +15 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +31 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +86 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +25 -0
- package/integration/test/wizard.yaml +8 -0
- package/jest.config.default.js +10 -0
- package/jest.config.integration.fixtures.js +22 -0
- package/jest.config.integration.js +21 -18
- package/jest.config.isolated.js +10 -0
- package/jest.projects.js +288 -0
- package/lib/api/datasources-core.api.js +3 -3
- package/lib/api/dev-mtls-request.js +110 -0
- package/lib/api/dev-server-https.js +145 -0
- package/lib/api/dev.api.js +133 -144
- package/lib/api/index.js +0 -1
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/types/dev.types.js +4 -3
- package/lib/api/types/pipeline.types.js +8 -5
- package/lib/api/types/validation-run.types.js +56 -0
- package/lib/api/validation-run.api.js +99 -0
- package/lib/api/validation-runner.js +99 -0
- package/lib/app/config.js +1 -1
- package/lib/app/deploy-status-display.js +2 -2
- package/lib/app/deploy.js +7 -6
- package/lib/app/display.js +2 -1
- package/lib/app/dockerfile.js +3 -2
- package/lib/app/down.js +2 -1
- package/lib/app/helpers.js +6 -5
- package/lib/app/index.js +27 -8
- package/lib/app/list.js +7 -6
- package/lib/app/push.js +4 -3
- package/lib/app/register.js +16 -7
- package/lib/app/rotate-secret.js +14 -13
- package/lib/app/run-container-start.js +184 -0
- package/lib/app/run-docker-fallback.js +108 -0
- package/lib/app/run-env-compose.js +30 -42
- package/lib/app/run-helpers.js +49 -126
- package/lib/app/run-infra-requirements.js +30 -0
- package/lib/app/run-resolve-image.js +21 -0
- package/lib/app/run.js +74 -21
- package/lib/app/show-display.js +1 -1
- package/lib/app/show.js +1 -1
- package/lib/build/index.js +13 -10
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +57 -121
- package/lib/cli/setup-app.test-commands.js +179 -0
- package/lib/cli/setup-auth.js +19 -5
- package/lib/cli/setup-credential-deployment.js +22 -8
- package/lib/cli/setup-dev-path-commands.js +124 -0
- package/lib/cli/setup-dev.js +170 -113
- package/lib/cli/setup-environment.js +7 -1
- package/lib/cli/setup-external-system.js +62 -22
- package/lib/cli/setup-infra.js +126 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +106 -8
- package/lib/cli/setup-service-user.js +1 -1
- package/lib/cli/setup-utility.js +36 -20
- package/lib/commands/app-down.js +5 -7
- package/lib/commands/app-install.js +14 -7
- package/lib/commands/app-logs.js +13 -10
- package/lib/commands/app-shell.js +4 -1
- package/lib/commands/app-test.js +25 -19
- package/lib/commands/app.js +22 -10
- package/lib/commands/auth-config.js +6 -6
- package/lib/commands/auth-status.js +4 -3
- package/lib/commands/credential-env.js +4 -3
- package/lib/commands/credential-list.js +5 -4
- package/lib/commands/credential-push.js +4 -3
- package/lib/commands/datasource-unified-test-cli.js +495 -0
- package/lib/commands/datasource-unified-test-cli.options.js +149 -0
- package/lib/commands/datasource-validation-cli.js +129 -0
- package/lib/commands/datasource.js +105 -98
- package/lib/commands/deployment-list.js +6 -5
- package/lib/commands/dev-cli-handlers.js +122 -18
- package/lib/commands/dev-down.js +4 -3
- package/lib/commands/dev-init.js +231 -116
- package/lib/commands/dev-show-display.js +473 -0
- package/lib/commands/login-credentials.js +3 -2
- package/lib/commands/login-device.js +4 -3
- package/lib/commands/login.js +5 -4
- package/lib/commands/logout.js +8 -7
- package/lib/commands/parameters-validate.js +54 -0
- package/lib/commands/repair-datasource.js +314 -68
- package/lib/commands/repair-env-template.js +2 -2
- package/lib/commands/repair.js +21 -3
- package/lib/commands/secrets-list.js +23 -12
- package/lib/commands/secrets-remove-all.js +220 -0
- package/lib/commands/secrets-remove.js +21 -12
- package/lib/commands/secrets-set.js +21 -12
- package/lib/commands/secrets-validate.js +4 -4
- package/lib/commands/secure.js +10 -9
- package/lib/commands/service-user.js +26 -25
- package/lib/commands/test-e2e-external.js +27 -1
- package/lib/commands/up-common.js +3 -2
- package/lib/commands/up-dataplane.js +29 -16
- package/lib/commands/up-miso.js +19 -29
- package/lib/commands/upload.js +138 -39
- package/lib/commands/wizard-core-helpers.js +1 -1
- package/lib/commands/wizard-dataplane.js +4 -3
- package/lib/commands/wizard-helpers.js +3 -3
- package/lib/commands/wizard.js +2 -2
- package/lib/core/admin-secrets.js +14 -5
- package/lib/core/audit-logger.js +12 -4
- package/lib/core/config-attach-extensions.js +46 -0
- package/lib/core/config-runtime-paths.js +29 -0
- package/lib/core/config.js +55 -56
- package/lib/core/diff.js +3 -2
- package/lib/core/ensure-encryption-key.js +1 -1
- package/lib/core/secrets-ensure-infra.js +77 -0
- package/lib/core/secrets-ensure.js +120 -64
- package/lib/core/secrets-env-write.js +35 -7
- package/lib/core/secrets-infra-placeholder-sync.js +61 -0
- package/lib/core/secrets.js +200 -37
- package/lib/core/templates-env.js +4 -3
- package/lib/datasource/abac-validator.js +1 -10
- package/lib/datasource/deploy.js +75 -53
- package/lib/datasource/field-reference-validator.js +9 -6
- package/lib/datasource/integration-context.js +63 -0
- package/lib/datasource/list.js +8 -7
- package/lib/datasource/log-viewer.js +84 -53
- package/lib/datasource/resolve-app.js +4 -4
- package/lib/datasource/test-e2e.js +95 -146
- package/lib/datasource/test-integration.js +114 -122
- package/lib/datasource/unified-validation-run-body.js +65 -0
- package/lib/datasource/unified-validation-run-post.js +23 -0
- package/lib/datasource/unified-validation-run-resolve.js +43 -0
- package/lib/datasource/unified-validation-run.js +92 -0
- package/lib/datasource/validate.js +157 -13
- package/lib/deployment/deployer.js +4 -3
- package/lib/deployment/environment.js +7 -6
- package/lib/deployment/push.js +17 -8
- package/lib/external-system/delete.js +4 -3
- package/lib/external-system/deploy.js +131 -53
- package/lib/external-system/download-helpers.js +1 -1
- package/lib/external-system/download.js +7 -6
- package/lib/external-system/generator.js +92 -6
- package/lib/external-system/integration-test-dispatch.js +26 -0
- package/lib/external-system/test-execution.js +5 -1
- package/lib/external-system/test-helpers.js +0 -4
- package/lib/external-system/test-system-level-helpers.js +110 -0
- package/lib/external-system/test-system-level.js +83 -44
- package/lib/external-system/test.js +59 -8
- package/lib/generator/builders.js +23 -11
- package/lib/generator/deploy-manifest-azure-kv.js +81 -0
- package/lib/generator/external.js +16 -4
- package/lib/generator/helpers.js +58 -3
- package/lib/generator/index.js +4 -0
- package/lib/generator/split-readme.js +12 -7
- package/lib/generator/split-variables.js +2 -1
- package/lib/generator/split.js +1 -1
- package/lib/generator/wizard-readme.js +3 -3
- package/lib/generator/wizard.js +8 -8
- package/lib/infrastructure/compose.js +60 -6
- package/lib/infrastructure/helpers.js +201 -29
- package/lib/infrastructure/index.js +28 -17
- package/lib/infrastructure/services.js +21 -15
- package/lib/internal/fs-real-sync.js +104 -0
- package/lib/internal/node-fs.js +98 -0
- package/lib/parameters/database-secret-values.js +173 -0
- package/lib/parameters/infra-kv-discovery.js +121 -0
- package/lib/parameters/infra-parameter-catalog.js +458 -0
- package/lib/parameters/infra-parameter-validate.js +64 -0
- package/lib/schema/application-schema.json +37 -17
- package/lib/schema/datasource-test-run.schema.json +493 -0
- package/lib/schema/deployment-rules.yaml +102 -63
- package/lib/schema/external-datasource.schema.json +1200 -442
- package/lib/schema/external-system.schema.json +181 -5
- package/lib/schema/flag-map-validation-run.json +31 -0
- package/lib/schema/infra-parameter.schema.json +106 -0
- package/lib/schema/infra.parameter.yaml +421 -0
- package/lib/schema/type/credential-auth-templates.json +40 -0
- package/lib/schema/type/document-storage.json +213 -0
- package/lib/schema/type/message-service.json +123 -0
- package/lib/schema/type/vector-store.json +88 -0
- package/lib/utils/aifabrix-runtime-config-dir.js +132 -0
- package/lib/utils/api-error-handler.js +2 -2
- package/lib/utils/api.js +49 -14
- package/lib/utils/app-register-api.js +3 -2
- package/lib/utils/app-register-auth.js +1 -1
- package/lib/utils/app-register-config.js +4 -4
- package/lib/utils/app-register-display.js +3 -2
- package/lib/utils/app-register-validator.js +3 -2
- package/lib/utils/app-run-containers.js +26 -22
- package/lib/utils/app-scoped-config.js +31 -0
- package/lib/utils/app-service-env-from-builder.js +164 -0
- package/lib/utils/build-copy.js +1 -1
- package/lib/utils/build-helpers.js +20 -20
- package/lib/utils/build-resolve-image.js +165 -0
- package/lib/utils/cli-layout-chalk.js +8 -0
- package/lib/utils/cli-test-layout-chalk.js +267 -0
- package/lib/utils/cli-utils.js +88 -11
- package/lib/utils/compose-db-passwords.js +138 -0
- package/lib/utils/compose-generate-docker-compose.js +216 -0
- package/lib/utils/compose-generator.js +197 -291
- package/lib/utils/compose-miso-env.js +18 -0
- package/lib/utils/compose-traefik-ingress-base.js +158 -0
- package/lib/utils/config-paths.js +166 -7
- package/lib/utils/config-scoped-resources-preference.js +41 -0
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/dataplane-pipeline-warning.js +4 -3
- package/lib/utils/datasource-test-run-capability-scope.js +43 -0
- package/lib/utils/datasource-test-run-debug-display.js +137 -0
- package/lib/utils/datasource-test-run-debug-slice.js +93 -0
- package/lib/utils/datasource-test-run-display.js +442 -0
- package/lib/utils/datasource-test-run-exit.js +58 -0
- package/lib/utils/datasource-test-run-legacy-adapter.js +93 -0
- package/lib/utils/datasource-test-run-report-version.js +51 -0
- package/lib/utils/datasource-test-run-schema-sync.js +59 -0
- package/lib/utils/datasource-test-run-tty-log.js +81 -0
- package/lib/utils/datasource-validation-watch.js +266 -0
- package/lib/utils/declarative-url-ports.js +47 -0
- package/lib/utils/derive-env-key-from-client-id.js +41 -0
- package/lib/utils/dev-ca-install.js +185 -23
- package/lib/utils/dev-cert-helper.js +266 -17
- package/lib/utils/dev-hosts-helper.js +307 -0
- package/lib/utils/dev-init-cert-hints.js +37 -0
- package/lib/utils/dev-init-health-messages.js +52 -0
- package/lib/utils/dev-init-resolve.js +86 -0
- package/lib/utils/dev-init-ssh-merge.js +65 -0
- package/lib/utils/dev-ssh-config-helper.js +196 -0
- package/lib/utils/dev-user-groups.js +93 -0
- package/lib/utils/docker-build.js +42 -17
- package/lib/utils/docker-exec.js +28 -0
- package/lib/utils/docker-manifest-public-port.js +116 -0
- package/lib/utils/docker-not-running-hint.js +52 -0
- package/lib/utils/docker.js +98 -11
- package/lib/utils/ensure-dev-certs-for-remote-docker.js +192 -0
- package/lib/utils/env-config-loader.js +10 -91
- package/lib/utils/env-copy.js +19 -10
- package/lib/utils/env-map.js +35 -8
- package/lib/utils/env-template.js +2 -2
- package/lib/utils/environment-scoped-resources.js +144 -0
- package/lib/utils/error-formatter.js +92 -13
- package/lib/utils/error-formatters/http-status-errors.js +6 -5
- package/lib/utils/error-formatters/network-errors.js +2 -1
- package/lib/utils/error-formatters/permission-errors.js +2 -1
- package/lib/utils/error-formatters/validation-errors.js +2 -1
- package/lib/utils/external-readme.js +8 -1
- package/lib/utils/external-system-display.js +234 -136
- package/lib/utils/external-system-local-test-tty.js +389 -0
- package/lib/utils/external-system-readiness-core.js +377 -0
- package/lib/utils/external-system-readiness-deploy-display.js +270 -0
- package/lib/utils/external-system-readiness-display-internals.js +150 -0
- package/lib/utils/external-system-readiness-display.js +186 -0
- package/lib/utils/external-system-test-helpers.js +24 -6
- package/lib/utils/external-system-validators.js +30 -12
- package/lib/utils/health-check-url.js +119 -0
- package/lib/utils/health-check.js +59 -25
- package/lib/utils/help-builder.js +11 -8
- package/lib/utils/image-version.js +4 -8
- package/lib/utils/infra-containers.js +4 -7
- package/lib/utils/infra-env-defaults.js +162 -0
- package/lib/utils/infra-status-display.js +167 -0
- package/lib/utils/infra-status.js +16 -8
- package/lib/utils/local-secrets.js +3 -4
- package/lib/utils/paths.js +134 -47
- package/lib/utils/port-resolver.js +10 -23
- package/lib/utils/redis-env-scope.js +62 -0
- package/lib/utils/register-aifabrix-shell-env.js +204 -0
- package/lib/utils/remote-builder-validation.js +99 -0
- package/lib/utils/remote-dev-auth.js +117 -21
- package/lib/utils/remote-docker-env.js +67 -15
- package/lib/utils/remote-secrets-loader.js +13 -4
- package/lib/utils/resolve-docker-image-ref.js +124 -0
- package/lib/utils/schema-loader.js +22 -9
- package/lib/utils/secrets-bash-kv.js +25 -0
- package/lib/utils/secrets-generator.js +169 -49
- package/lib/utils/secrets-helpers.js +70 -59
- package/lib/utils/secrets-kv-scope.js +60 -0
- package/lib/utils/secrets-utils.js +32 -38
- package/lib/utils/secrets-validation.js +3 -1
- package/lib/utils/secrets-yaml-preserve.js +109 -0
- package/lib/utils/ssh-key-helper.js +4 -2
- package/lib/utils/template-helpers.js +2 -2
- package/lib/utils/test-log-writer.js +3 -3
- package/lib/utils/token-manager.js +1 -2
- package/lib/utils/url-declarative-public-base.js +188 -0
- package/lib/utils/url-declarative-resolve-build.js +493 -0
- package/lib/utils/url-declarative-resolve-load-doc.js +51 -0
- package/lib/utils/url-declarative-resolve.js +220 -0
- package/lib/utils/url-declarative-token-parse.js +74 -0
- package/lib/utils/url-declarative-url-flags.js +50 -0
- package/lib/utils/url-declarative-vdir-inactive-env.js +99 -0
- package/lib/utils/url-public-path-prefix.js +34 -0
- package/lib/utils/urls-local-registry.js +220 -0
- package/lib/utils/validation-report-tty-kit.js +77 -0
- package/lib/utils/validation-run-poll.js +89 -0
- package/lib/utils/validation-run-post-retry.js +73 -0
- package/lib/utils/validation-run-request.js +98 -0
- package/lib/utils/variable-transformer.js +21 -4
- package/lib/utils/yaml-preserve.js +33 -14
- package/lib/validation/datasource-warnings.js +56 -0
- package/lib/validation/env-template-auth.js +1 -1
- package/lib/validation/external-manifest-validator.js +27 -7
- package/lib/validation/validate-display.js +37 -31
- package/lib/validation/validate.js +4 -13
- package/lib/validation/validator-unresolved-placeholders.js +98 -0
- package/lib/validation/validator.js +22 -65
- package/lib/validation/wizard-config-validator.js +2 -1
- package/package.json +7 -3
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +304 -55
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +75 -17
- package/templates/applications/dataplane/rbac.yaml +8 -0
- package/templates/applications/keycloak/application.yaml +9 -1
- package/templates/applications/keycloak/env.template +15 -6
- package/templates/applications/miso-controller/application.yaml +10 -2
- package/templates/applications/miso-controller/env.template +42 -12
- package/templates/applications/miso-controller/rbac.yaml +5 -0
- package/templates/external-system/README.md.hbs +20 -7
- package/templates/external-system/deploy.js.hbs +5 -5
- package/templates/external-system/external-datasource.yaml.hbs +197 -118
- package/templates/infra/compose.yaml.hbs +20 -4
- package/templates/python/docker-compose.hbs +16 -0
- package/templates/typescript/docker-compose.hbs +16 -0
- package/lib/api/external-test.api.js +0 -111
- package/lib/schema/env-config.yaml +0 -60
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview CLI action handlers for dev list/add/update/pin/delete (remote Builder Server)
|
|
3
4
|
* @author AI Fabrix Team
|
|
@@ -9,6 +10,12 @@ const config = require('../core/config');
|
|
|
9
10
|
const logger = require('../utils/logger');
|
|
10
11
|
const devApi = require('../api/dev.api');
|
|
11
12
|
const { getRemoteDevAuth } = require('../utils/remote-dev-auth');
|
|
13
|
+
const { isValidIpv4 } = require('../utils/dev-hosts-helper');
|
|
14
|
+
const {
|
|
15
|
+
parseDevGroupsOption,
|
|
16
|
+
validateDevGroups,
|
|
17
|
+
augmentDevUserGroupsServerError
|
|
18
|
+
} = require('../utils/dev-user-groups');
|
|
12
19
|
|
|
13
20
|
const REMOTE_NOT_CONFIGURED_MSG = 'Remote server is not configured. Set remote-server and run "aifabrix dev init" first.';
|
|
14
21
|
|
|
@@ -39,7 +46,7 @@ async function handleDevList() {
|
|
|
39
46
|
logger.log(chalk.yellow(REMOTE_NOT_CONFIGURED_MSG));
|
|
40
47
|
return;
|
|
41
48
|
}
|
|
42
|
-
const users = await devApi.listUsers(auth.serverUrl, auth.clientCertPem);
|
|
49
|
+
const users = await devApi.listUsers(auth.serverUrl, auth.clientCertPem, auth.serverCaPem || undefined);
|
|
43
50
|
if (users.length === 0) {
|
|
44
51
|
logger.log(chalk.gray('No developers registered.'));
|
|
45
52
|
return;
|
|
@@ -71,14 +78,23 @@ async function handleDevList() {
|
|
|
71
78
|
async function handleDevAdd(options) {
|
|
72
79
|
const auth = await getRemoteDevAuth();
|
|
73
80
|
if (!auth) throw new Error(REMOTE_NOT_CONFIGURED_MSG);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
let groups = parseDevGroupsOption(
|
|
82
|
+
options.groups !== undefined && options.groups !== null ? options.groups : 'developer'
|
|
83
|
+
);
|
|
84
|
+
if (groups.length === 0) groups = ['developer'];
|
|
85
|
+
validateDevGroups(groups);
|
|
86
|
+
try {
|
|
87
|
+
const user = await devApi.createUser(auth.serverUrl, auth.clientCertPem, {
|
|
88
|
+
developerId: options.developerId,
|
|
89
|
+
name: options.name,
|
|
90
|
+
email: options.email,
|
|
91
|
+
groups
|
|
92
|
+
}, auth.serverCaPem || undefined);
|
|
93
|
+
logger.log(formatSuccessLine(`Developer ${user.id} created. Use "aifabrix dev pin ${user.id}" to create a PIN for onboarding.`));
|
|
94
|
+
} catch (err) {
|
|
95
|
+
augmentDevUserGroupsServerError(err, groups);
|
|
96
|
+
throw err;
|
|
97
|
+
}
|
|
82
98
|
}
|
|
83
99
|
|
|
84
100
|
/**
|
|
@@ -95,27 +111,115 @@ async function handleDevUpdate(developerId, options) {
|
|
|
95
111
|
const body = {};
|
|
96
112
|
if (options.name) body.name = options.name;
|
|
97
113
|
if (options.email) body.email = options.email;
|
|
98
|
-
if (options.groups)
|
|
114
|
+
if (options.groups) {
|
|
115
|
+
const groups = parseDevGroupsOption(options.groups);
|
|
116
|
+
if (groups.length === 0) {
|
|
117
|
+
throw new Error('--groups must list at least one valid group');
|
|
118
|
+
}
|
|
119
|
+
validateDevGroups(groups);
|
|
120
|
+
body.groups = groups;
|
|
121
|
+
}
|
|
99
122
|
if (Object.keys(body).length === 0) {
|
|
100
123
|
throw new Error('Provide at least one of --name, --email, --groups');
|
|
101
124
|
}
|
|
102
|
-
|
|
103
|
-
|
|
125
|
+
try {
|
|
126
|
+
await devApi.updateUser(auth.serverUrl, auth.clientCertPem, id, body, auth.serverCaPem || undefined);
|
|
127
|
+
logger.log(formatSuccessLine(`Developer ${id} updated.`));
|
|
128
|
+
} catch (err) {
|
|
129
|
+
augmentDevUserGroupsServerError(err, body.groups);
|
|
130
|
+
throw err;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function logPinHostsVariantLines(baseInit, id, hostsIp) {
|
|
135
|
+
logger.log(
|
|
136
|
+
chalk.cyan('2) Hosts file / administrator')
|
|
137
|
+
+ chalk.gray(
|
|
138
|
+
' — use when the hostname does not resolve and your organisation does not publish DNS for it. '
|
|
139
|
+
+ 'Run in an elevated terminal so the hosts file can be updated, or add the entry manually:'
|
|
140
|
+
)
|
|
141
|
+
);
|
|
142
|
+
if (hostsIp) {
|
|
143
|
+
logger.log(` ${baseInit} --add-hosts --hosts-ip ${hostsIp}`);
|
|
144
|
+
} else {
|
|
145
|
+
logger.log(` ${baseInit} --add-hosts --hosts-ip <server-LAN-IPv4>`);
|
|
146
|
+
logger.log(
|
|
147
|
+
chalk.gray(
|
|
148
|
+
` Replace <server-LAN-IPv4> with the Builder Server IPv4, or re-run: aifabrix dev pin ${id} --hosts-ip <ip>`
|
|
149
|
+
)
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Log copy-paste dev init commands for the developer (standard vs hosts-file).
|
|
156
|
+
* @param {Object} p
|
|
157
|
+
* @param {string} p.id - Developer ID
|
|
158
|
+
* @param {string} p.serverUrl - Builder Server base URL
|
|
159
|
+
* @param {string} p.pin - One-time PIN
|
|
160
|
+
* @param {string} p.expiresAt - PIN expiry (API string)
|
|
161
|
+
* @param {string} [p.hostsIp] - Optional IPv4 for the hosts variant
|
|
162
|
+
* @returns {void}
|
|
163
|
+
*/
|
|
164
|
+
function logDevPinShareInstructions(p) {
|
|
165
|
+
const { id, serverUrl, pin, expiresAt, hostsIp } = p;
|
|
166
|
+
const baseInit = `aifabrix dev init --developer-id ${id} --server ${serverUrl} --pin ${pin}`;
|
|
167
|
+
const pinOnly = `aifabrix dev init --pin ${pin}`;
|
|
168
|
+
logger.log(formatSuccessLine(`PIN created for ${id}, expires ${expiresAt}.`));
|
|
169
|
+
logger.log('');
|
|
170
|
+
logger.log(
|
|
171
|
+
chalk.bold('Share with the developer — they run one command (the PIN is one-time):')
|
|
172
|
+
);
|
|
173
|
+
logger.log('');
|
|
174
|
+
logger.log(
|
|
175
|
+
chalk.cyan('1) Standard')
|
|
176
|
+
+ chalk.gray(' — use when this machine can resolve the server hostname (DNS or hosts already set):')
|
|
177
|
+
);
|
|
178
|
+
logger.log(` ${baseInit}`);
|
|
179
|
+
logger.log('');
|
|
180
|
+
logPinHostsVariantLines(baseInit, id, hostsIp);
|
|
181
|
+
logger.log('');
|
|
182
|
+
logger.log(
|
|
183
|
+
chalk.cyan('3) Config already has remote-server + developer-id')
|
|
184
|
+
+ chalk.gray(
|
|
185
|
+
' — e.g. second machine / SSH session after settings were merged; same onboarding, PIN only:'
|
|
186
|
+
)
|
|
187
|
+
);
|
|
188
|
+
logger.log(` ${pinOnly}`);
|
|
189
|
+
logger.log('');
|
|
104
190
|
}
|
|
105
191
|
|
|
106
192
|
/**
|
|
107
193
|
* Handle dev pin – create/regenerate PIN (remote only).
|
|
108
194
|
* @param {string} [developerId] - Developer ID (optional; uses config if omitted)
|
|
195
|
+
* @param {Object} [options] - Commander options
|
|
196
|
+
* @param {string} [options.hostsIp] - From --hosts-ip (embeds IPv4 in the hosts variant)
|
|
109
197
|
* @returns {Promise<void>}
|
|
110
198
|
*/
|
|
111
|
-
async function handleDevPin(developerId) {
|
|
199
|
+
async function handleDevPin(developerId, options = {}) {
|
|
112
200
|
const auth = await getRemoteDevAuth();
|
|
113
201
|
if (!auth) throw new Error(REMOTE_NOT_CONFIGURED_MSG);
|
|
114
202
|
const id = developerId || await config.getDeveloperId();
|
|
115
203
|
if (!id) throw new Error('developerId is required (argument or set developer-id in config)');
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
204
|
+
const rawHostsIp = options.hostsIp ?? options['hosts-ip'];
|
|
205
|
+
let hostsIp = '';
|
|
206
|
+
if (rawHostsIp !== undefined && rawHostsIp !== null) {
|
|
207
|
+
const trimmed = String(rawHostsIp).trim();
|
|
208
|
+
if (trimmed !== '') {
|
|
209
|
+
if (!isValidIpv4(trimmed)) {
|
|
210
|
+
throw new Error('Invalid --hosts-ip (use an IPv4 address, e.g. 192.168.1.25)');
|
|
211
|
+
}
|
|
212
|
+
hostsIp = trimmed;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const res = await devApi.createPin(auth.serverUrl, auth.clientCertPem, id, auth.serverCaPem || undefined);
|
|
216
|
+
logDevPinShareInstructions({
|
|
217
|
+
id,
|
|
218
|
+
serverUrl: auth.serverUrl,
|
|
219
|
+
pin: res.pin,
|
|
220
|
+
expiresAt: res.expiresAt,
|
|
221
|
+
hostsIp: hostsIp || undefined
|
|
222
|
+
});
|
|
119
223
|
}
|
|
120
224
|
|
|
121
225
|
/**
|
|
@@ -128,8 +232,8 @@ async function handleDevDelete(developerId) {
|
|
|
128
232
|
if (!auth) throw new Error(REMOTE_NOT_CONFIGURED_MSG);
|
|
129
233
|
const id = developerId;
|
|
130
234
|
if (!id) throw new Error('Developer ID is required (positional argument or --developer-id).');
|
|
131
|
-
await devApi.deleteUser(auth.serverUrl, auth.clientCertPem, id);
|
|
132
|
-
logger.log(
|
|
235
|
+
await devApi.deleteUser(auth.serverUrl, auth.clientCertPem, id, auth.serverCaPem || undefined);
|
|
236
|
+
logger.log(formatSuccessLine(`Developer ${id} removed.`));
|
|
133
237
|
}
|
|
134
238
|
|
|
135
239
|
module.exports = {
|
package/lib/commands/dev-down.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { formatSuccessParagraph } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* dev down – stop Mutagen sync sessions and optionally app containers for this developer.
|
|
3
4
|
*
|
|
@@ -38,7 +39,7 @@ async function stopMutagenSessions(developerId) {
|
|
|
38
39
|
const toTerminate = sessions.filter(name => name.startsWith(prefix));
|
|
39
40
|
for (const name of toTerminate) {
|
|
40
41
|
await execAsync(`"${mutagenPath}" sync terminate "${name}"`, { timeout: 5000 });
|
|
41
|
-
logger.log(chalk.green(`
|
|
42
|
+
logger.log(chalk.green(` ✔ Stopped sync session: ${name}`));
|
|
42
43
|
}
|
|
43
44
|
if (toTerminate.length === 0 && sessions.length > 0) {
|
|
44
45
|
logger.log(chalk.gray('No sync sessions for this developer.'));
|
|
@@ -98,7 +99,7 @@ async function handleDevDown(options = {}) {
|
|
|
98
99
|
if (!appName) continue;
|
|
99
100
|
try {
|
|
100
101
|
await appLib.downApp(appName, {});
|
|
101
|
-
logger.log(chalk.green(`
|
|
102
|
+
logger.log(chalk.green(` ✔ Stopped app: ${appName}`));
|
|
102
103
|
} catch (err) {
|
|
103
104
|
logger.log(chalk.yellow(` ⚠ Could not stop ${appName}: ${err.message}`));
|
|
104
105
|
}
|
|
@@ -108,7 +109,7 @@ async function handleDevDown(options = {}) {
|
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
logger.log(
|
|
112
|
+
logger.log(formatSuccessParagraph('dev down complete.\n'));
|
|
112
113
|
}
|
|
113
114
|
|
|
114
115
|
module.exports = { handleDevDown };
|