@xemahq/xema 0.12.0 → 0.14.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/README.md +68 -20
- package/dist/assets/boot-graph.json +57 -15
- package/dist/assets/core/distribution.lock.json +668 -297
- package/dist/assets/core/images.lock.json +136 -136
- package/dist/assets/oss/distribution.lock.json +1532 -444
- package/dist/assets/oss/images.lock.json +423 -188
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +1 -1
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/biome-dev.d.ts +3 -0
- package/dist/commands/biome-dev.d.ts.map +1 -0
- package/dist/commands/biome-dev.js +176 -0
- package/dist/commands/biome-dev.js.map +1 -0
- package/dist/commands/biome-validate.d.ts +10 -0
- package/dist/commands/biome-validate.d.ts.map +1 -0
- package/dist/commands/biome-validate.js +49 -0
- package/dist/commands/biome-validate.js.map +1 -0
- package/dist/commands/biome.d.ts.map +1 -1
- package/dist/commands/biome.js +359 -25
- package/dist/commands/biome.js.map +1 -1
- package/dist/commands/canopy.d.ts +3 -0
- package/dist/commands/canopy.d.ts.map +1 -0
- package/dist/commands/canopy.js +214 -0
- package/dist/commands/canopy.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +78 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +71 -21
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/dist.js +1 -1
- package/dist/commands/dist.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +40 -6
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +1 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/installation.d.ts +3 -0
- package/dist/commands/installation.d.ts.map +1 -0
- package/dist/commands/installation.js +101 -0
- package/dist/commands/installation.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +6 -14
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/objects.d.ts.map +1 -1
- package/dist/commands/objects.js +85 -6
- package/dist/commands/objects.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +1 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +61 -9
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +33 -13
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/shell.d.ts.map +1 -1
- package/dist/commands/shell.js +190 -6
- package/dist/commands/shell.js.map +1 -1
- package/dist/commands/source.d.ts +3 -0
- package/dist/commands/source.d.ts.map +1 -0
- package/dist/commands/source.js +120 -0
- package/dist/commands/source.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +29 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +55 -5
- package/dist/commands/up.js.map +1 -1
- package/dist/dev/env-defaults.d.ts.map +1 -1
- package/dist/dev/env-defaults.js +33 -11
- package/dist/dev/env-defaults.js.map +1 -1
- package/dist/dev/forked-worker.d.ts +15 -0
- package/dist/dev/forked-worker.d.ts.map +1 -1
- package/dist/dev/forked-worker.js +72 -14
- package/dist/dev/forked-worker.js.map +1 -1
- package/dist/dev/infra-preflight.d.ts +2 -1
- package/dist/dev/infra-preflight.d.ts.map +1 -1
- package/dist/dev/infra-preflight.js +10 -0
- package/dist/dev/infra-preflight.js.map +1 -1
- package/dist/dev/opa-policies.d.ts +3 -0
- package/dist/dev/opa-policies.d.ts.map +1 -0
- package/dist/dev/opa-policies.js +64 -0
- package/dist/dev/opa-policies.js.map +1 -0
- package/dist/lib/cli-errors.d.ts +7 -0
- package/dist/lib/cli-errors.d.ts.map +1 -0
- package/dist/lib/cli-errors.js +30 -0
- package/dist/lib/cli-errors.js.map +1 -0
- package/dist/lib/control-plane.d.ts.map +1 -1
- package/dist/lib/control-plane.js +5 -2
- package/dist/lib/control-plane.js.map +1 -1
- package/dist/lib/exit-codes.d.ts +3 -4
- package/dist/lib/exit-codes.d.ts.map +1 -1
- package/dist/lib/exit-codes.js +3 -4
- package/dist/lib/exit-codes.js.map +1 -1
- package/dist/lib/http-error.d.ts +2 -0
- package/dist/lib/http-error.d.ts.map +1 -0
- package/dist/lib/http-error.js +51 -0
- package/dist/lib/http-error.js.map +1 -0
- package/dist/lib/roster-profile.d.ts +10 -0
- package/dist/lib/roster-profile.d.ts.map +1 -0
- package/dist/lib/roster-profile.js +44 -0
- package/dist/lib/roster-profile.js.map +1 -0
- package/dist/runtime/biome-dev.d.ts +28 -0
- package/dist/runtime/biome-dev.d.ts.map +1 -0
- package/dist/runtime/biome-dev.js +131 -0
- package/dist/runtime/biome-dev.js.map +1 -0
- package/dist/runtime/biome-local-install.d.ts +29 -0
- package/dist/runtime/biome-local-install.d.ts.map +1 -0
- package/dist/runtime/biome-local-install.js +243 -0
- package/dist/runtime/biome-local-install.js.map +1 -0
- package/dist/runtime/biome-publish.d.ts +34 -0
- package/dist/runtime/biome-publish.d.ts.map +1 -0
- package/dist/runtime/biome-publish.js +214 -0
- package/dist/runtime/biome-publish.js.map +1 -0
- package/dist/runtime/biome-scaffold.d.ts +35 -0
- package/dist/runtime/biome-scaffold.d.ts.map +1 -0
- package/dist/runtime/biome-scaffold.js +153 -0
- package/dist/runtime/biome-scaffold.js.map +1 -0
- package/dist/runtime/biome-validate.d.ts +28 -0
- package/dist/runtime/biome-validate.d.ts.map +1 -0
- package/dist/runtime/biome-validate.js +450 -0
- package/dist/runtime/biome-validate.js.map +1 -0
- package/dist/runtime/boot-graph-loader.d.ts +1 -0
- package/dist/runtime/boot-graph-loader.d.ts.map +1 -1
- package/dist/runtime/boot-graph-loader.js +99 -7
- package/dist/runtime/boot-graph-loader.js.map +1 -1
- package/dist/runtime/canopy-refs.d.ts +8 -0
- package/dist/runtime/canopy-refs.d.ts.map +1 -0
- package/dist/runtime/canopy-refs.js +51 -0
- package/dist/runtime/canopy-refs.js.map +1 -0
- package/dist/runtime/canopy-replies.d.ts +14 -0
- package/dist/runtime/canopy-replies.d.ts.map +1 -0
- package/dist/runtime/canopy-replies.js +39 -0
- package/dist/runtime/canopy-replies.js.map +1 -0
- package/dist/runtime/capability-invoke.d.ts +35 -0
- package/dist/runtime/capability-invoke.d.ts.map +1 -0
- package/dist/runtime/capability-invoke.js +119 -0
- package/dist/runtime/capability-invoke.js.map +1 -0
- package/dist/runtime/config/dev-mode.d.ts +8 -0
- package/dist/runtime/config/dev-mode.d.ts.map +1 -0
- package/dist/runtime/config/dev-mode.js +84 -0
- package/dist/runtime/config/dev-mode.js.map +1 -0
- package/dist/runtime/config/init-presets.d.ts +1 -1
- package/dist/runtime/config/init-presets.d.ts.map +1 -1
- package/dist/runtime/config/init-presets.js +63 -11
- package/dist/runtime/config/init-presets.js.map +1 -1
- package/dist/runtime/config/loader.d.ts +1 -0
- package/dist/runtime/config/loader.d.ts.map +1 -1
- package/dist/runtime/config/loader.js +41 -5
- package/dist/runtime/config/loader.js.map +1 -1
- package/dist/runtime/config/schema.d.ts +27 -12
- package/dist/runtime/config/schema.d.ts.map +1 -1
- package/dist/runtime/config/schema.js +113 -8
- package/dist/runtime/config/schema.js.map +1 -1
- package/dist/runtime/config/sources-config.d.ts +14 -0
- package/dist/runtime/config/sources-config.d.ts.map +1 -0
- package/dist/runtime/config/sources-config.js +79 -0
- package/dist/runtime/config/sources-config.js.map +1 -0
- package/dist/runtime/distribution/compose.d.ts.map +1 -1
- package/dist/runtime/distribution/compose.js +3 -1
- package/dist/runtime/distribution/compose.js.map +1 -1
- package/dist/runtime/env-seeder.d.ts +5 -0
- package/dist/runtime/env-seeder.d.ts.map +1 -1
- package/dist/runtime/env-seeder.js +120 -17
- package/dist/runtime/env-seeder.js.map +1 -1
- package/dist/runtime/foreground.d.ts +4 -0
- package/dist/runtime/foreground.d.ts.map +1 -1
- package/dist/runtime/foreground.js +11 -0
- package/dist/runtime/foreground.js.map +1 -1
- package/dist/runtime/infra/infra-catalog.d.ts +1 -0
- package/dist/runtime/infra/infra-catalog.d.ts.map +1 -1
- package/dist/runtime/infra/infra-catalog.js +2 -1
- package/dist/runtime/infra/infra-catalog.js.map +1 -1
- package/dist/runtime/infra/infra-runner.d.ts +5 -0
- package/dist/runtime/infra/infra-runner.d.ts.map +1 -1
- package/dist/runtime/infra/infra-runner.js +82 -13
- package/dist/runtime/infra/infra-runner.js.map +1 -1
- package/dist/runtime/installation/compiler.d.ts +37 -0
- package/dist/runtime/installation/compiler.d.ts.map +1 -0
- package/dist/runtime/installation/compiler.js +190 -0
- package/dist/runtime/installation/compiler.js.map +1 -0
- package/dist/runtime/installation/contract.d.ts +125 -0
- package/dist/runtime/installation/contract.d.ts.map +1 -0
- package/dist/runtime/installation/contract.js +182 -0
- package/dist/runtime/installation/contract.js.map +1 -0
- package/dist/runtime/installation/diagnostics.d.ts +16 -0
- package/dist/runtime/installation/diagnostics.d.ts.map +1 -0
- package/dist/runtime/installation/diagnostics.js +21 -0
- package/dist/runtime/installation/diagnostics.js.map +1 -0
- package/dist/runtime/installation/diff.d.ts +17 -0
- package/dist/runtime/installation/diff.d.ts.map +1 -0
- package/dist/runtime/installation/diff.js +99 -0
- package/dist/runtime/installation/diff.js.map +1 -0
- package/dist/runtime/installation/format.d.ts +3 -0
- package/dist/runtime/installation/format.d.ts.map +1 -0
- package/dist/runtime/installation/format.js +22 -0
- package/dist/runtime/installation/format.js.map +1 -0
- package/dist/runtime/installation/from-current-config.d.ts +8 -0
- package/dist/runtime/installation/from-current-config.d.ts.map +1 -0
- package/dist/runtime/installation/from-current-config.js +75 -0
- package/dist/runtime/installation/from-current-config.js.map +1 -0
- package/dist/runtime/installation/index.d.ts +13 -0
- package/dist/runtime/installation/index.d.ts.map +1 -0
- package/dist/runtime/installation/index.js +29 -0
- package/dist/runtime/installation/index.js.map +1 -0
- package/dist/runtime/installation/lifecycle.d.ts +23 -0
- package/dist/runtime/installation/lifecycle.d.ts.map +1 -0
- package/dist/runtime/installation/lifecycle.js +70 -0
- package/dist/runtime/installation/lifecycle.js.map +1 -0
- package/dist/runtime/installation/serialization.d.ts +3 -0
- package/dist/runtime/installation/serialization.d.ts.map +1 -0
- package/dist/runtime/installation/serialization.js +39 -0
- package/dist/runtime/installation/serialization.js.map +1 -0
- package/dist/runtime/installation/state-store.d.ts +20 -0
- package/dist/runtime/installation/state-store.d.ts.map +1 -0
- package/dist/runtime/installation/state-store.js +257 -0
- package/dist/runtime/installation/state-store.js.map +1 -0
- package/dist/runtime/installation/status.d.ts +30 -0
- package/dist/runtime/installation/status.d.ts.map +1 -0
- package/dist/runtime/installation/status.js +138 -0
- package/dist/runtime/installation/status.js.map +1 -0
- package/dist/runtime/installation/support-bundle.d.ts +30 -0
- package/dist/runtime/installation/support-bundle.d.ts.map +1 -0
- package/dist/runtime/installation/support-bundle.js +130 -0
- package/dist/runtime/installation/support-bundle.js.map +1 -0
- package/dist/runtime/installation/validation.d.ts +8 -0
- package/dist/runtime/installation/validation.d.ts.map +1 -0
- package/dist/runtime/installation/validation.js +39 -0
- package/dist/runtime/installation/validation.js.map +1 -0
- package/dist/runtime/installation/validators/common.d.ts +4 -0
- package/dist/runtime/installation/validators/common.d.ts.map +1 -0
- package/dist/runtime/installation/validators/common.js +29 -0
- package/dist/runtime/installation/validators/common.js.map +1 -0
- package/dist/runtime/installation/validators/infrastructure.d.ts +4 -0
- package/dist/runtime/installation/validators/infrastructure.d.ts.map +1 -0
- package/dist/runtime/installation/validators/infrastructure.js +78 -0
- package/dist/runtime/installation/validators/infrastructure.js.map +1 -0
- package/dist/runtime/installation/validators/operational.d.ts +4 -0
- package/dist/runtime/installation/validators/operational.d.ts.map +1 -0
- package/dist/runtime/installation/validators/operational.js +126 -0
- package/dist/runtime/installation/validators/operational.js.map +1 -0
- package/dist/runtime/installation/validators/profile.d.ts +4 -0
- package/dist/runtime/installation/validators/profile.d.ts.map +1 -0
- package/dist/runtime/installation/validators/profile.js +78 -0
- package/dist/runtime/installation/validators/profile.js.map +1 -0
- package/dist/runtime/installation/validators/secrets.d.ts +4 -0
- package/dist/runtime/installation/validators/secrets.d.ts.map +1 -0
- package/dist/runtime/installation/validators/secrets.js +68 -0
- package/dist/runtime/installation/validators/secrets.js.map +1 -0
- package/dist/runtime/launch-plan-format.d.ts +3 -0
- package/dist/runtime/launch-plan-format.d.ts.map +1 -0
- package/dist/runtime/launch-plan-format.js +57 -0
- package/dist/runtime/launch-plan-format.js.map +1 -0
- package/dist/runtime/launch.d.ts +25 -3
- package/dist/runtime/launch.d.ts.map +1 -1
- package/dist/runtime/launch.js +264 -24
- package/dist/runtime/launch.js.map +1 -1
- package/dist/runtime/object-registry-client.d.ts +31 -0
- package/dist/runtime/object-registry-client.d.ts.map +1 -0
- package/dist/runtime/object-registry-client.js +54 -0
- package/dist/runtime/object-registry-client.js.map +1 -0
- package/dist/runtime/paths.d.ts +1 -0
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.js +2 -0
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/roster.d.ts +11 -4
- package/dist/runtime/roster.d.ts.map +1 -1
- package/dist/runtime/roster.js +78 -7
- package/dist/runtime/roster.js.map +1 -1
- package/dist/runtime/run-manifest.d.ts +23 -0
- package/dist/runtime/run-manifest.d.ts.map +1 -0
- package/dist/runtime/run-manifest.js +273 -0
- package/dist/runtime/run-manifest.js.map +1 -0
- package/dist/runtime/runner/container-runner.d.ts +6 -0
- package/dist/runtime/runner/container-runner.d.ts.map +1 -1
- package/dist/runtime/runner/container-runner.js +25 -6
- package/dist/runtime/runner/container-runner.js.map +1 -1
- package/dist/runtime/runner/docker-cli.d.ts +6 -1
- package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
- package/dist/runtime/runner/docker-cli.js +47 -6
- package/dist/runtime/runner/docker-cli.js.map +1 -1
- package/dist/runtime/runner/native-runner.d.ts.map +1 -1
- package/dist/runtime/runner/native-runner.js +21 -14
- package/dist/runtime/runner/native-runner.js.map +1 -1
- package/dist/runtime/secrets/managed-local-store.d.ts +26 -0
- package/dist/runtime/secrets/managed-local-store.d.ts.map +1 -0
- package/dist/runtime/secrets/managed-local-store.js +202 -0
- package/dist/runtime/secrets/managed-local-store.js.map +1 -0
- package/dist/runtime/secrets/resolver.d.ts +23 -0
- package/dist/runtime/secrets/resolver.d.ts.map +1 -0
- package/dist/runtime/secrets/resolver.js +265 -0
- package/dist/runtime/secrets/resolver.js.map +1 -0
- package/dist/runtime/secrets/url-security.d.ts +3 -0
- package/dist/runtime/secrets/url-security.d.ts.map +1 -0
- package/dist/runtime/secrets/url-security.js +13 -0
- package/dist/runtime/secrets/url-security.js.map +1 -0
- package/dist/runtime/sources/credentials.d.ts.map +1 -1
- package/dist/runtime/sources/credentials.js +2 -1
- package/dist/runtime/sources/credentials.js.map +1 -1
- package/dist/runtime/sources/kinds/git.d.ts +6 -3
- package/dist/runtime/sources/kinds/git.d.ts.map +1 -1
- package/dist/runtime/sources/kinds/git.js +99 -22
- package/dist/runtime/sources/kinds/git.js.map +1 -1
- package/dist/runtime/sources/resolve-context.d.ts +7 -0
- package/dist/runtime/sources/resolve-context.d.ts.map +1 -0
- package/dist/runtime/sources/resolve-context.js +3 -0
- package/dist/runtime/sources/resolve-context.js.map +1 -0
- package/dist/runtime/sources/resolver.d.ts +2 -2
- package/dist/runtime/sources/resolver.d.ts.map +1 -1
- package/dist/runtime/sources/resolver.js +11 -5
- package/dist/runtime/sources/resolver.js.map +1 -1
- package/dist/runtime/store-client.d.ts +59 -0
- package/dist/runtime/store-client.d.ts.map +1 -0
- package/dist/runtime/store-client.js +71 -0
- package/dist/runtime/store-client.js.map +1 -0
- package/dist/runtime/supervisor.d.ts +6 -0
- package/dist/runtime/supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor.js +37 -5
- package/dist/runtime/supervisor.js.map +1 -1
- package/dist/runtime/waves.d.ts +1 -1
- package/dist/runtime/waves.d.ts.map +1 -1
- package/dist/runtime/waves.js +86 -19
- package/dist/runtime/waves.js.map +1 -1
- package/examples/01-local-native.yaml +4 -1
- package/examples/03-byo-infra.yaml +17 -7
- package/examples/05-appliance-helm.yaml +1 -1
- package/examples/06-biome-sources.yaml +4 -1
- package/package.json +6 -5
- package/xema.config.example.yaml +22 -18
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSupportBundle = createSupportBundle;
|
|
4
|
+
exports.writeSupportBundle = writeSupportBundle;
|
|
5
|
+
exports.verifySupportBundle = verifySupportBundle;
|
|
6
|
+
exports.redactSupportValue = redactSupportValue;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const serialization_1 = require("./serialization");
|
|
10
|
+
const url_security_1 = require("../secrets/url-security");
|
|
11
|
+
function createSupportBundle(config, desiredPlan, status, createdAt = new Date().toISOString()) {
|
|
12
|
+
const payload = {
|
|
13
|
+
config: redactSupportValue(config),
|
|
14
|
+
desiredPlan: redactSupportValue(desiredPlan),
|
|
15
|
+
status,
|
|
16
|
+
logMetadata: {
|
|
17
|
+
includedContent: false,
|
|
18
|
+
workloads: status.observed.workloads,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
schemaVersion: 1,
|
|
23
|
+
createdAt,
|
|
24
|
+
payload,
|
|
25
|
+
manifest: {
|
|
26
|
+
algorithm: 'sha256',
|
|
27
|
+
payloadHash: (0, serialization_1.hashInstallation)(payload),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function writeSupportBundle(outputPath, bundle, opts = {}) {
|
|
32
|
+
const directory = (0, node_path_1.dirname)(outputPath);
|
|
33
|
+
(0, node_fs_1.mkdirSync)(directory, { recursive: true, mode: 0o700 });
|
|
34
|
+
const temporary = (0, node_path_1.join)(directory, `.support-bundle.${String(process.pid)}.${Date.now().toString(36)}.tmp`);
|
|
35
|
+
const fd = (0, node_fs_1.openSync)(temporary, 'wx', 0o600);
|
|
36
|
+
try {
|
|
37
|
+
(0, node_fs_1.writeFileSync)(fd, `${(0, serialization_1.serializeInstallation)(bundle)}\n`, 'utf8');
|
|
38
|
+
(0, node_fs_1.fsyncSync)(fd);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
(0, node_fs_1.closeSync)(fd);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
if (opts.overwrite === true) {
|
|
45
|
+
(0, node_fs_1.renameSync)(temporary, outputPath);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
try {
|
|
49
|
+
(0, node_fs_1.linkSync)(temporary, outputPath);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error.code === 'EEXIST') {
|
|
53
|
+
throw new Error(`Support bundle output already exists at ${outputPath}; pass --force to replace it.`);
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
(0, node_fs_1.rmSync)(temporary);
|
|
58
|
+
}
|
|
59
|
+
const directoryFd = (0, node_fs_1.openSync)(directory, 'r');
|
|
60
|
+
try {
|
|
61
|
+
(0, node_fs_1.fsyncSync)(directoryFd);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
(0, node_fs_1.closeSync)(directoryFd);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
(0, node_fs_1.rmSync)(temporary, { force: true });
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function verifySupportBundle(bundle) {
|
|
73
|
+
return bundle.manifest.payloadHash === (0, serialization_1.hashInstallation)(bundle.payload);
|
|
74
|
+
}
|
|
75
|
+
function redactSupportValue(value, parentKey = '') {
|
|
76
|
+
if (typeof value === 'string') {
|
|
77
|
+
if (parentKey === 'locator' ||
|
|
78
|
+
parentKey === 'env' ||
|
|
79
|
+
parentKey === 'path') {
|
|
80
|
+
return '<redacted-reference>';
|
|
81
|
+
}
|
|
82
|
+
return redactUrlCredentials(value);
|
|
83
|
+
}
|
|
84
|
+
if (Array.isArray(value)) {
|
|
85
|
+
return value.map((entry) => redactSupportValue(entry, parentKey));
|
|
86
|
+
}
|
|
87
|
+
if (value === null || typeof value !== 'object') {
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
91
|
+
key,
|
|
92
|
+
sensitiveKey(key) ? '<redacted>' : redactSupportValue(child, key),
|
|
93
|
+
]));
|
|
94
|
+
}
|
|
95
|
+
function sensitiveKey(key) {
|
|
96
|
+
if (/^secretRefs?$/i.test(key) || key === 'secrets') {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return (0, url_security_1.isSensitiveCredentialKey)(key);
|
|
100
|
+
}
|
|
101
|
+
function redactUrlCredentials(value) {
|
|
102
|
+
let parsed;
|
|
103
|
+
try {
|
|
104
|
+
parsed = new URL(value);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
let redacted = false;
|
|
110
|
+
if (parsed.username.length > 0) {
|
|
111
|
+
parsed.username = '<redacted>';
|
|
112
|
+
redacted = true;
|
|
113
|
+
}
|
|
114
|
+
if (parsed.password.length > 0) {
|
|
115
|
+
parsed.password = '<redacted>';
|
|
116
|
+
redacted = true;
|
|
117
|
+
}
|
|
118
|
+
for (const key of [...parsed.searchParams.keys()]) {
|
|
119
|
+
if (sensitiveKey(key)) {
|
|
120
|
+
parsed.searchParams.set(key, '<redacted>');
|
|
121
|
+
redacted = true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!redacted) {
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
parsed.hash = '';
|
|
128
|
+
return parsed.toString();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=support-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-bundle.js","sourceRoot":"","sources":["../../../src/runtime/installation/support-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ParsedXemaInstallation } from './contract';
|
|
2
|
+
import { type InstallationIssue } from './diagnostics';
|
|
3
|
+
export interface InstallationValidation {
|
|
4
|
+
readonly installation?: ParsedXemaInstallation;
|
|
5
|
+
readonly issues: readonly InstallationIssue[];
|
|
6
|
+
}
|
|
7
|
+
export declare function validateXemaInstallation(raw: unknown): InstallationValidation;
|
|
8
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/runtime/installation/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAO9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CA2B7E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateXemaInstallation = validateXemaInstallation;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const diagnostics_1 = require("./diagnostics");
|
|
7
|
+
const common_1 = require("./validators/common");
|
|
8
|
+
const infrastructure_1 = require("./validators/infrastructure");
|
|
9
|
+
const operational_1 = require("./validators/operational");
|
|
10
|
+
const profile_1 = require("./validators/profile");
|
|
11
|
+
const secrets_1 = require("./validators/secrets");
|
|
12
|
+
function validateXemaInstallation(raw) {
|
|
13
|
+
let installation;
|
|
14
|
+
try {
|
|
15
|
+
installation = contract_1.XemaInstallationSchema.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (!(error instanceof zod_1.ZodError)) {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
issues: error.issues.map((issue) => ({
|
|
23
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
24
|
+
code: 'SCHEMA_INVALID',
|
|
25
|
+
path: issue.path.join('.'),
|
|
26
|
+
message: issue.message,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const issues = [
|
|
31
|
+
...(0, common_1.validateUniqueEntries)(installation),
|
|
32
|
+
...(0, infrastructure_1.validateInfrastructure)(installation),
|
|
33
|
+
...(0, secrets_1.validateSecretReferences)(installation),
|
|
34
|
+
...(0, profile_1.validateProfile)(installation),
|
|
35
|
+
...(0, operational_1.validateOperationalPolicy)(installation),
|
|
36
|
+
];
|
|
37
|
+
return { installation, issues };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/runtime/installation/validation.ts"],"names":[],"mappings":";;AAkBA,4DA2BC;AA7CD,6BAA+B;AAE/B,yCAGoB;AACpB,+CAA8E;AAC9E,gDAA4D;AAC5D,gEAAqE;AACrE,0DAAqE;AACrE,kDAAuD;AACvD,kDAAgE;AAOhE,SAAgB,wBAAwB,CAAC,GAAY;IACnD,IAAI,YAAoC,CAAC;IACzC,IAAI,CAAC;QACH,YAAY,GAAG,iCAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,cAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,GAAG,IAAA,8BAAqB,EAAC,YAAY,CAAC;QACtC,GAAG,IAAA,uCAAsB,EAAC,YAAY,CAAC;QACvC,GAAG,IAAA,kCAAwB,EAAC,YAAY,CAAC;QACzC,GAAG,IAAA,yBAAe,EAAC,YAAY,CAAC;QAChC,GAAG,IAAA,uCAAyB,EAAC,YAAY,CAAC;KAC3C,CAAC;IAEF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,sBAAsB,GACnC,SAAS,iBAAiB,EAAE,CAyB9B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateUniqueEntries = validateUniqueEntries;
|
|
4
|
+
const diagnostics_1 = require("../diagnostics");
|
|
5
|
+
function validateUniqueEntries(installation) {
|
|
6
|
+
return [
|
|
7
|
+
...duplicateIssues(installation.infrastructure.map((binding) => binding.component), 'infrastructure', 'DUPLICATE_INFRASTRUCTURE_COMPONENT'),
|
|
8
|
+
...duplicateIssues(installation.secrets.map((secret) => secret.name), 'secrets', 'DUPLICATE_SECRET_REFERENCE'),
|
|
9
|
+
...duplicateIssues(installation.domains.map((domain) => `${domain.purpose}:${domain.hostname}`), 'domains', 'DUPLICATE_DOMAIN'),
|
|
10
|
+
...duplicateIssues(installation.deployment.regions ?? [], 'deployment.regions', 'DUPLICATE_REGION'),
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
function duplicateIssues(values, path, code) {
|
|
14
|
+
const seen = new Set();
|
|
15
|
+
const duplicates = new Set();
|
|
16
|
+
for (const value of values) {
|
|
17
|
+
if (seen.has(value)) {
|
|
18
|
+
duplicates.add(value);
|
|
19
|
+
}
|
|
20
|
+
seen.add(value);
|
|
21
|
+
}
|
|
22
|
+
return [...duplicates].sort().map((value) => ({
|
|
23
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
24
|
+
code,
|
|
25
|
+
path,
|
|
26
|
+
message: `contains duplicate entry "${value}"`,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/common.ts"],"names":[],"mappings":";;AAIA,sDA2BC;AA/BD,gDAA+E;AAI/E,SAAgB,qBAAqB,CACnC,YAAoC;IAEpC,OAAO;QACL,GAAG,eAAe,CAChB,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAC/D,gBAAgB,EAChB,oCAAoC,CACrC;QACD,GAAG,eAAe,CAChB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EACjD,SAAS,EACT,4BAA4B,CAC7B;QACD,GAAG,eAAe,CAChB,YAAY,CAAC,OAAO,CAAC,GAAG,CACtB,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CACnD,EACD,SAAS,EACT,kBAAkB,CACnB;QACD,GAAG,eAAe,CAChB,YAAY,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,EACrC,oBAAoB,EACpB,kBAAkB,CACnB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,MAAyB,EACzB,IAAY,EACZ,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,mCAAqB,CAAC,OAAO;QACnC,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,6BAA6B,KAAK,GAAG;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type InstallationIssue } from '../diagnostics';
|
|
2
|
+
import type { ParsedXemaInstallation } from '../contract';
|
|
3
|
+
export declare function validateInfrastructure(installation: ParsedXemaInstallation): readonly InstallationIssue[];
|
|
4
|
+
//# sourceMappingURL=infrastructure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/infrastructure.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,sBAAsB,GACnC,SAAS,iBAAiB,EAAE,CAuD9B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateInfrastructure = validateInfrastructure;
|
|
4
|
+
const schema_1 = require("../../config/schema");
|
|
5
|
+
const infra_catalog_1 = require("../../infra/infra-catalog");
|
|
6
|
+
const url_security_1 = require("../../secrets/url-security");
|
|
7
|
+
const diagnostics_1 = require("../diagnostics");
|
|
8
|
+
function validateInfrastructure(installation) {
|
|
9
|
+
const issues = [];
|
|
10
|
+
for (const binding of installation.infrastructure) {
|
|
11
|
+
const path = `infrastructure.${binding.component}`;
|
|
12
|
+
if (binding.ownership === schema_1.InfraMode.External &&
|
|
13
|
+
binding.endpoint === undefined) {
|
|
14
|
+
issues.push({
|
|
15
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
16
|
+
code: 'EXTERNAL_ENDPOINT_REQUIRED',
|
|
17
|
+
path: `${path}.endpoint`,
|
|
18
|
+
message: 'external infrastructure requires an endpoint',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (binding.component === schema_1.InfraComponent.Postgres &&
|
|
22
|
+
binding.ownership === schema_1.InfraMode.External &&
|
|
23
|
+
binding.secretRefs.length !== 1) {
|
|
24
|
+
issues.push({
|
|
25
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
26
|
+
code: 'POSTGRES_SECRET_REFERENCE_REQUIRED',
|
|
27
|
+
path: `${path}.secretRefs`,
|
|
28
|
+
message: 'external PostgreSQL requires exactly one password secret reference',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (binding.ownership !== schema_1.InfraMode.External &&
|
|
32
|
+
binding.endpoint !== undefined) {
|
|
33
|
+
issues.push({
|
|
34
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
35
|
+
code: 'ENDPOINT_NOT_ALLOWED',
|
|
36
|
+
path: `${path}.endpoint`,
|
|
37
|
+
message: `endpoint is not allowed for ${binding.ownership} infrastructure`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (binding.ownership === schema_1.InfraMode.Disabled &&
|
|
41
|
+
infra_catalog_1.INFRA_CATALOG[binding.component].mandatory) {
|
|
42
|
+
issues.push({
|
|
43
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
44
|
+
code: 'MANDATORY_INFRASTRUCTURE_DISABLED',
|
|
45
|
+
path: `${path}.ownership`,
|
|
46
|
+
message: 'mandatory infrastructure cannot be disabled',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (binding.endpoint !== undefined) {
|
|
50
|
+
validateEndpoint(binding.endpoint, `${path}.endpoint`, issues);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return issues;
|
|
54
|
+
}
|
|
55
|
+
function validateEndpoint(endpoint, path, issues) {
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = new URL(endpoint);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
issues.push({
|
|
62
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
63
|
+
code: 'ENDPOINT_INVALID',
|
|
64
|
+
path,
|
|
65
|
+
message: 'must be an absolute URL',
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if ((0, url_security_1.urlContainsCredentialMaterial)(parsed)) {
|
|
70
|
+
issues.push({
|
|
71
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
72
|
+
code: 'SECRET_VALUE_IN_ENDPOINT',
|
|
73
|
+
path,
|
|
74
|
+
message: 'must reference credentials through secretRefs, never inline values',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=infrastructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/infrastructure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ParsedXemaInstallation } from '../contract';
|
|
2
|
+
import { type InstallationIssue } from '../diagnostics';
|
|
3
|
+
export declare function validateOperationalPolicy(installation: ParsedXemaInstallation): readonly InstallationIssue[];
|
|
4
|
+
//# sourceMappingURL=operational.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operational.d.ts","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/operational.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,sBAAsB,GACnC,SAAS,iBAAiB,EAAE,CAM9B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateOperationalPolicy = validateOperationalPolicy;
|
|
4
|
+
const contract_1 = require("../contract");
|
|
5
|
+
const diagnostics_1 = require("../diagnostics");
|
|
6
|
+
function validateOperationalPolicy(installation) {
|
|
7
|
+
return [
|
|
8
|
+
...validateStorage(installation),
|
|
9
|
+
...validateCapacity(installation),
|
|
10
|
+
...validateUpgrade(installation),
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
function validateStorage(installation) {
|
|
14
|
+
const issues = [];
|
|
15
|
+
if (installation.storage.class === contract_1.StorageClass.External &&
|
|
16
|
+
installation.storage.externalBinding === undefined) {
|
|
17
|
+
issues.push({
|
|
18
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
19
|
+
code: 'EXTERNAL_STORAGE_BINDING_REQUIRED',
|
|
20
|
+
path: 'storage.externalBinding',
|
|
21
|
+
message: 'external storage requires a binding reference',
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (installation.storage.class !== contract_1.StorageClass.External &&
|
|
25
|
+
installation.storage.externalBinding !== undefined) {
|
|
26
|
+
issues.push({
|
|
27
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
28
|
+
code: 'EXTERNAL_STORAGE_BINDING_NOT_ALLOWED',
|
|
29
|
+
path: 'storage.externalBinding',
|
|
30
|
+
message: 'externalBinding is only valid for external storage',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (installation.storage.backup.mode === contract_1.BackupMode.Disabled &&
|
|
34
|
+
installation.storage.backup.destinationSecretRef !== undefined) {
|
|
35
|
+
issues.push({
|
|
36
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
37
|
+
code: 'BACKUP_DESTINATION_NOT_ALLOWED',
|
|
38
|
+
path: 'storage.backup.destinationSecretRef',
|
|
39
|
+
message: 'a disabled backup policy cannot declare a destination',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (installation.deployment.profile ===
|
|
43
|
+
contract_1.InstallationDeploymentProfile.Regulated &&
|
|
44
|
+
installation.storage.backup.mode !== undefined &&
|
|
45
|
+
installation.storage.backup.mode !== contract_1.BackupMode.Continuous) {
|
|
46
|
+
issues.push({
|
|
47
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
48
|
+
code: 'REGULATED_BACKUP_REQUIRED',
|
|
49
|
+
path: 'storage.backup.mode',
|
|
50
|
+
message: 'regulated installations require continuous backup',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (installation.deployment.profile ===
|
|
54
|
+
contract_1.InstallationDeploymentProfile.Regulated &&
|
|
55
|
+
installation.domains.some((domain) => domain.tls.mode === contract_1.TlsMode.Disabled)) {
|
|
56
|
+
issues.push({
|
|
57
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
58
|
+
code: 'REGULATED_TLS_REQUIRED',
|
|
59
|
+
path: 'domains',
|
|
60
|
+
message: 'regulated installation domains require TLS',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
for (const domain of installation.domains) {
|
|
64
|
+
const path = `domains.${domain.purpose}.${domain.hostname}.tls.secretRef`;
|
|
65
|
+
if (domain.tls.mode === contract_1.TlsMode.External &&
|
|
66
|
+
domain.tls.secretRef === undefined) {
|
|
67
|
+
issues.push({
|
|
68
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
69
|
+
code: 'EXTERNAL_TLS_SECRET_REQUIRED',
|
|
70
|
+
path,
|
|
71
|
+
message: 'external TLS requires a certificate secret reference',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (domain.tls.mode !== contract_1.TlsMode.External &&
|
|
75
|
+
domain.tls.secretRef !== undefined) {
|
|
76
|
+
issues.push({
|
|
77
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
78
|
+
code: 'TLS_SECRET_NOT_ALLOWED',
|
|
79
|
+
path,
|
|
80
|
+
message: `a ${domain.tls.mode} TLS policy cannot declare an external certificate secret`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return issues;
|
|
85
|
+
}
|
|
86
|
+
function validateCapacity(installation) {
|
|
87
|
+
const { minReplicas, maxReplicas } = installation.capacity;
|
|
88
|
+
if (minReplicas !== undefined &&
|
|
89
|
+
maxReplicas !== undefined &&
|
|
90
|
+
minReplicas > maxReplicas) {
|
|
91
|
+
return [
|
|
92
|
+
{
|
|
93
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
94
|
+
code: 'CAPACITY_RANGE_INVALID',
|
|
95
|
+
path: 'capacity',
|
|
96
|
+
message: 'minReplicas cannot exceed maxReplicas',
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
function validateUpgrade(installation) {
|
|
103
|
+
const { channel, releaseRef } = installation.upgrade;
|
|
104
|
+
if (channel === contract_1.UpgradeChannel.Pinned && releaseRef === undefined) {
|
|
105
|
+
return [
|
|
106
|
+
{
|
|
107
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
108
|
+
code: 'PINNED_RELEASE_REQUIRED',
|
|
109
|
+
path: 'upgrade.releaseRef',
|
|
110
|
+
message: 'pinned upgrade channel requires a releaseRef',
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
if (channel !== contract_1.UpgradeChannel.Pinned && releaseRef !== undefined) {
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
118
|
+
code: 'RELEASE_REF_NOT_ALLOWED',
|
|
119
|
+
path: 'upgrade.releaseRef',
|
|
120
|
+
message: 'releaseRef is only valid for the pinned upgrade channel',
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
}
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=operational.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operational.js","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/operational.ts"],"names":[],"mappings":";;AAUA,8DAQC;AAlBD,0CAOqB;AACrB,gDAA+E;AAE/E,SAAgB,yBAAyB,CACvC,YAAoC;IAEpC,OAAO;QACL,GAAG,eAAe,CAAC,YAAY,CAAC;QAChC,GAAG,gBAAgB,CAAC,YAAY,CAAC;QACjC,GAAG,eAAe,CAAC,YAAY,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,YAAoC;IAEpC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,IACE,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,uBAAY,CAAC,QAAQ;QACpD,YAAY,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,EAClD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAqB,CAAC,UAAU;YACtC,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAC;IACL,CAAC;IACD,IACE,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,uBAAY,CAAC,QAAQ;QACpD,YAAY,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,EAClD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAqB,CAAC,OAAO;YACnC,IAAI,EAAE,sCAAsC;YAC5C,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,IACE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,qBAAU,CAAC,QAAQ;QACxD,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAC9D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAqB,CAAC,OAAO;YACnC,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,qCAAqC;YAC3C,OAAO,EAAE,uDAAuD;SACjE,CAAC,CAAC;IACL,CAAC;IACD,IACE,YAAY,CAAC,UAAU,CAAC,OAAO;QAC7B,wCAA6B,CAAC,SAAS;QACzC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;QAC9C,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,qBAAU,CAAC,UAAU,EAC1D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAqB,CAAC,OAAO;YACnC,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,mDAAmD;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,IACE,YAAY,CAAC,UAAU,CAAC,OAAO;QAC7B,wCAA6B,CAAC,SAAS;QACzC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAO,CAAC,QAAQ,CAAC,EAC3E,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAqB,CAAC,OAAO;YACnC,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,4CAA4C;SACtD,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,WAAW,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,gBAAgB,CAAC;QAC1E,IACE,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAO,CAAC,QAAQ;YACpC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,EAClC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,mCAAqB,CAAC,UAAU;gBACtC,IAAI,EAAE,8BAA8B;gBACpC,IAAI;gBACJ,OAAO,EAAE,sDAAsD;aAChE,CAAC,CAAC;QACL,CAAC;QACD,IACE,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAO,CAAC,QAAQ;YACpC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,EAClC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,IAAI,EAAE,wBAAwB;gBAC9B,IAAI;gBACJ,OAAO,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,2DAA2D;aACzF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,YAAoC;IAEpC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC;IAC3D,IACE,WAAW,KAAK,SAAS;QACzB,WAAW,KAAK,SAAS;QACzB,WAAW,GAAG,WAAW,EACzB,CAAC;QACD,OAAO;YACL;gBACE,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,uCAAuC;aACjD;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CACtB,YAAoC;IAEpC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC;IACrD,IAAI,OAAO,KAAK,yBAAc,CAAC,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAClE,OAAO;YACL;gBACE,IAAI,EAAE,mCAAqB,CAAC,UAAU;gBACtC,IAAI,EAAE,yBAAyB;gBAC/B,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,8CAA8C;aACxD;SACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,yBAAc,CAAC,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAClE,OAAO;YACL;gBACE,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,IAAI,EAAE,yBAAyB;gBAC/B,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,yDAAyD;aACnE;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,wBAAgB,eAAe,CAC7B,YAAY,EAAE,sBAAsB,GACnC,SAAS,iBAAiB,EAAE,CA6E9B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateProfile = validateProfile;
|
|
4
|
+
const contract_1 = require("../contract");
|
|
5
|
+
const diagnostics_1 = require("../diagnostics");
|
|
6
|
+
function validateProfile(installation) {
|
|
7
|
+
const issues = [];
|
|
8
|
+
const { profile, substrate } = installation.deployment;
|
|
9
|
+
const regions = installation.deployment.regions ?? [];
|
|
10
|
+
if (profile === contract_1.InstallationDeploymentProfile.MultiRegion) {
|
|
11
|
+
issues.push({
|
|
12
|
+
kind: diagnostics_1.InstallationIssueKind.Unsupported,
|
|
13
|
+
code: 'MULTI_REGION_NOT_EXECUTABLE',
|
|
14
|
+
path: 'deployment.profile',
|
|
15
|
+
message: 'multi-region is accepted as declared intent but this compiler version cannot produce an executable plan',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
if (profile === contract_1.InstallationDeploymentProfile.Developer &&
|
|
19
|
+
substrate !== undefined &&
|
|
20
|
+
substrate !== contract_1.InstallationSubstrate.Local) {
|
|
21
|
+
issues.push(profileSubstrateIssue(profile, contract_1.InstallationSubstrate.Local));
|
|
22
|
+
}
|
|
23
|
+
if (profile === contract_1.InstallationDeploymentProfile.StarterPme &&
|
|
24
|
+
substrate === contract_1.InstallationSubstrate.Cluster) {
|
|
25
|
+
issues.push({
|
|
26
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
27
|
+
code: 'PROFILE_SUBSTRATE_MISMATCH',
|
|
28
|
+
path: 'deployment.substrate',
|
|
29
|
+
message: 'starter-pme supports local or single-node substrate',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if ((profile === contract_1.InstallationDeploymentProfile.HighAvailability ||
|
|
33
|
+
profile === contract_1.InstallationDeploymentProfile.Regulated ||
|
|
34
|
+
profile === contract_1.InstallationDeploymentProfile.MultiRegion) &&
|
|
35
|
+
substrate !== undefined &&
|
|
36
|
+
substrate !== contract_1.InstallationSubstrate.Cluster) {
|
|
37
|
+
issues.push(profileSubstrateIssue(profile, contract_1.InstallationSubstrate.Cluster));
|
|
38
|
+
}
|
|
39
|
+
if (profile !== contract_1.InstallationDeploymentProfile.MultiRegion &&
|
|
40
|
+
installation.deployment.regions !== undefined &&
|
|
41
|
+
regions.length !== 1) {
|
|
42
|
+
issues.push({
|
|
43
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
44
|
+
code: 'PROFILE_REGION_MISMATCH',
|
|
45
|
+
path: 'deployment.regions',
|
|
46
|
+
message: `${profile} requires exactly one explicitly declared region when regions are overridden`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (profile === contract_1.InstallationDeploymentProfile.MultiRegion &&
|
|
50
|
+
regions.length > 0 &&
|
|
51
|
+
regions.length < 2) {
|
|
52
|
+
issues.push({
|
|
53
|
+
kind: diagnostics_1.InstallationIssueKind.Unresolved,
|
|
54
|
+
code: 'MULTI_REGION_REQUIRES_REGIONS',
|
|
55
|
+
path: 'deployment.regions',
|
|
56
|
+
message: 'multi-region requires at least two regions',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (profile === contract_1.InstallationDeploymentProfile.Regulated &&
|
|
60
|
+
installation.tenancy.isolation === contract_1.TenantIsolation.Shared) {
|
|
61
|
+
issues.push({
|
|
62
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
63
|
+
code: 'REGULATED_SHARED_ISOLATION',
|
|
64
|
+
path: 'tenancy.isolation',
|
|
65
|
+
message: 'regulated installations cannot use shared tenant isolation',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return issues;
|
|
69
|
+
}
|
|
70
|
+
function profileSubstrateIssue(profile, required) {
|
|
71
|
+
return {
|
|
72
|
+
kind: diagnostics_1.InstallationIssueKind.Invalid,
|
|
73
|
+
code: 'PROFILE_SUBSTRATE_MISMATCH',
|
|
74
|
+
path: 'deployment.substrate',
|
|
75
|
+
message: `${profile} requires ${required} substrate`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ParsedXemaInstallation } from '../contract';
|
|
2
|
+
import { type InstallationIssue } from '../diagnostics';
|
|
3
|
+
export declare function validateSecretReferences(installation: ParsedXemaInstallation): readonly InstallationIssue[];
|
|
4
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../../src/runtime/installation/validators/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,sBAAsB,GACnC,SAAS,iBAAiB,EAAE,CAsC9B"}
|