@xemahq/xema 0.15.4 → 0.15.6
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/dist/appliance-owner.d.ts +18 -0
- package/dist/appliance-owner.d.ts.map +1 -0
- package/dist/appliance-owner.js +122 -0
- package/dist/appliance-owner.js.map +1 -0
- package/dist/assets/appliance-base/distribution.lock.json +272 -268
- package/dist/assets/appliance-base/images.lock.json +225 -225
- package/dist/assets/appliance-lean/distribution.lock.json +158 -154
- package/dist/assets/appliance-lean/images.lock.json +155 -155
- package/dist/assets/cloud/distribution.lock.json +349 -270
- package/dist/assets/cloud/images.lock.json +255 -226
- package/dist/assets/core/distribution.lock.json +183 -179
- package/dist/assets/core/images.lock.json +174 -174
- package/dist/assets/distribution-assets.manifest.json +29 -29
- package/dist/assets/keycloak/realm-xema.json +5 -20
- package/dist/assets/minimal/distribution.lock.json +152 -148
- package/dist/assets/minimal/images.lock.json +145 -145
- package/dist/assets/oss/distribution.lock.json +274 -270
- package/dist/assets/oss/images.lock.json +226 -226
- package/dist/assets/starter/distribution.lock.json +195 -190
- package/dist/assets/starter/images.lock.json +182 -182
- package/dist/commands/biome.d.ts.map +1 -1
- package/dist/commands/biome.js +5 -4
- package/dist/commands/biome.js.map +1 -1
- package/dist/commands/doctor.js +8 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/dev/env-defaults.d.ts.map +1 -1
- package/dist/dev/env-defaults.js +2 -1
- package/dist/dev/env-defaults.js.map +1 -1
- package/dist/runtime/biome-scaffold-manifest.d.ts +27 -0
- package/dist/runtime/biome-scaffold-manifest.d.ts.map +1 -0
- package/dist/runtime/biome-scaffold-manifest.js +159 -0
- package/dist/runtime/biome-scaffold-manifest.js.map +1 -0
- package/dist/runtime/biome-scaffold.d.ts +1 -12
- package/dist/runtime/biome-scaffold.d.ts.map +1 -1
- package/dist/runtime/biome-scaffold.js +77 -71
- package/dist/runtime/biome-scaffold.js.map +1 -1
- package/dist/runtime/browser-origins.d.ts +3 -0
- package/dist/runtime/browser-origins.d.ts.map +1 -0
- package/dist/runtime/browser-origins.js +19 -0
- package/dist/runtime/browser-origins.js.map +1 -0
- package/dist/runtime/infra/infra-runner.d.ts.map +1 -1
- package/dist/runtime/infra/infra-runner.js +2 -0
- package/dist/runtime/infra/infra-runner.js.map +1 -1
- package/dist/runtime/infra/keycloak-realm.d.ts +4 -1
- package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
- package/dist/runtime/infra/keycloak-realm.js +63 -9
- package/dist/runtime/infra/keycloak-realm.js.map +1 -1
- package/dist/runtime/launch.d.ts.map +1 -1
- package/dist/runtime/launch.js +13 -0
- package/dist/runtime/launch.js.map +1 -1
- package/dist/runtime/runner/appliance-context.d.ts +8 -0
- package/dist/runtime/runner/appliance-context.d.ts.map +1 -0
- package/dist/runtime/runner/appliance-context.js +29 -0
- package/dist/runtime/runner/appliance-context.js.map +1 -0
- package/dist/runtime/runner/chart-preflight.d.ts +34 -0
- package/dist/runtime/runner/chart-preflight.d.ts.map +1 -0
- package/dist/runtime/runner/chart-preflight.js +165 -0
- package/dist/runtime/runner/chart-preflight.js.map +1 -0
- package/dist/runtime/runner/chart-resolver.d.ts +46 -0
- package/dist/runtime/runner/chart-resolver.d.ts.map +1 -0
- package/dist/runtime/runner/chart-resolver.js +203 -0
- package/dist/runtime/runner/chart-resolver.js.map +1 -0
- package/dist/runtime/runner/chart-set-lock.d.ts +31 -0
- package/dist/runtime/runner/chart-set-lock.d.ts.map +1 -0
- package/dist/runtime/runner/chart-set-lock.js +154 -0
- package/dist/runtime/runner/chart-set-lock.js.map +1 -0
- package/dist/runtime/runner/chart-trust.d.ts +52 -0
- package/dist/runtime/runner/chart-trust.d.ts.map +1 -0
- package/dist/runtime/runner/chart-trust.js +179 -0
- package/dist/runtime/runner/chart-trust.js.map +1 -0
- package/dist/runtime/runner/helm-cli.d.ts +2 -1
- package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
- package/dist/runtime/runner/helm-cli.js +8 -1
- package/dist/runtime/runner/helm-cli.js.map +1 -1
- package/dist/runtime/runner/helm-runner.d.ts +34 -1
- package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
- package/dist/runtime/runner/helm-runner.js +98 -9
- package/dist/runtime/runner/helm-runner.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PlatformServiceTier } from '@xemahq/kernel-contracts/distribution';
|
|
2
|
+
export declare enum ApplianceOwnedDecision {
|
|
3
|
+
RealmRender = "realm-render",
|
|
4
|
+
LicenseRegistryHosts = "license-registry-hosts",
|
|
5
|
+
LicenseRegistryUsername = "license-registry-username",
|
|
6
|
+
PlatformTierOrder = "platform-tier-order",
|
|
7
|
+
ImageCoordinates = "image-coordinates"
|
|
8
|
+
}
|
|
9
|
+
export declare class ApplianceOwnerQueryError extends Error {
|
|
10
|
+
readonly usage: boolean;
|
|
11
|
+
constructor(message: string, usage?: boolean);
|
|
12
|
+
}
|
|
13
|
+
export interface ApplianceOwnerQueryIo {
|
|
14
|
+
readonly readStdin: () => string;
|
|
15
|
+
}
|
|
16
|
+
export declare function answerApplianceOwnerQuery(argv: readonly string[], io: ApplianceOwnerQueryIo): string;
|
|
17
|
+
export declare function platformTierOrder(): PlatformServiceTier[];
|
|
18
|
+
//# sourceMappingURL=appliance-owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-owner.d.ts","sourceRoot":"","sources":["../src/appliance-owner.ts"],"names":[],"mappings":"AAmCA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAC;AAe/C,oBAAY,sBAAsB;IAEhC,WAAW,iBAAiB;IAE5B,oBAAoB,2BAA2B;IAE/C,uBAAuB,8BAA8B;IAErD,iBAAiB,wBAAwB;IAEzC,gBAAgB,sBAAsB;CACvC;AAQD,qBAAa,wBAAyB,SAAQ,KAAK;IAG/C,QAAQ,CAAC,KAAK,EAAE,OAAO;gBADvB,OAAO,EAAE,MAAM,EACN,KAAK,GAAE,OAAe;CAKlC;AAaD,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC;CAClC;AAGD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,EAAE,qBAAqB,GACxB,MAAM,CA8BR;AAYD,wBAAgB,iBAAiB,IAAI,mBAAmB,EAAE,CAIzD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApplianceOwnerQueryError = exports.ApplianceOwnedDecision = void 0;
|
|
4
|
+
exports.answerApplianceOwnerQuery = answerApplianceOwnerQuery;
|
|
5
|
+
exports.platformTierOrder = platformTierOrder;
|
|
6
|
+
const distribution_1 = require("@xemahq/kernel-contracts/distribution");
|
|
7
|
+
const keycloak_realm_1 = require("./runtime/infra/keycloak-realm");
|
|
8
|
+
const registry_credential_1 = require("./runtime/license/registry-credential");
|
|
9
|
+
const lock_loader_1 = require("./runtime/lock-loader");
|
|
10
|
+
var ApplianceOwnedDecision;
|
|
11
|
+
(function (ApplianceOwnedDecision) {
|
|
12
|
+
ApplianceOwnedDecision["RealmRender"] = "realm-render";
|
|
13
|
+
ApplianceOwnedDecision["LicenseRegistryHosts"] = "license-registry-hosts";
|
|
14
|
+
ApplianceOwnedDecision["LicenseRegistryUsername"] = "license-registry-username";
|
|
15
|
+
ApplianceOwnedDecision["PlatformTierOrder"] = "platform-tier-order";
|
|
16
|
+
ApplianceOwnedDecision["ImageCoordinates"] = "image-coordinates";
|
|
17
|
+
})(ApplianceOwnedDecision || (exports.ApplianceOwnedDecision = ApplianceOwnedDecision = {}));
|
|
18
|
+
class ApplianceOwnerQueryError extends Error {
|
|
19
|
+
usage;
|
|
20
|
+
constructor(message, usage = false) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.usage = usage;
|
|
23
|
+
this.name = 'ApplianceOwnerQueryError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ApplianceOwnerQueryError = ApplianceOwnerQueryError;
|
|
27
|
+
const EXPLICIT_LOCK_EDITION = '<--images-lock>';
|
|
28
|
+
function answerApplianceOwnerQuery(argv, io) {
|
|
29
|
+
const [decision, ...rest] = argv;
|
|
30
|
+
if (decision === undefined) {
|
|
31
|
+
throw new ApplianceOwnerQueryError(`no decision requested. One of: ${Object.values(ApplianceOwnedDecision).join(', ')}.`, true);
|
|
32
|
+
}
|
|
33
|
+
switch (decision) {
|
|
34
|
+
case ApplianceOwnedDecision.RealmRender:
|
|
35
|
+
expectNoFlags(decision, rest);
|
|
36
|
+
return (0, keycloak_realm_1.renderRealm)((0, keycloak_realm_1.readRealmTemplate)(), parseRealmValues(io.readStdin()));
|
|
37
|
+
case ApplianceOwnedDecision.LicenseRegistryHosts:
|
|
38
|
+
expectNoFlags(decision, rest);
|
|
39
|
+
return lines([...registry_credential_1.LICENSE_REGISTRY_HOSTS]);
|
|
40
|
+
case ApplianceOwnedDecision.LicenseRegistryUsername:
|
|
41
|
+
expectNoFlags(decision, rest);
|
|
42
|
+
return `${registry_credential_1.LICENSE_REGISTRY_USERNAME}\n`;
|
|
43
|
+
case ApplianceOwnedDecision.PlatformTierOrder:
|
|
44
|
+
expectNoFlags(decision, rest);
|
|
45
|
+
return lines(platformTierOrder());
|
|
46
|
+
case ApplianceOwnedDecision.ImageCoordinates:
|
|
47
|
+
return lines(imageCoordinates(requireFlag(decision, rest, '--images-lock')));
|
|
48
|
+
default:
|
|
49
|
+
throw new ApplianceOwnerQueryError(`unknown decision "${decision}". One of: ` +
|
|
50
|
+
`${Object.values(ApplianceOwnedDecision).join(', ')}.`, true);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function platformTierOrder() {
|
|
54
|
+
return Object.keys(distribution_1.PLATFORM_SERVICE_TIER_RANK).sort((a, b) => distribution_1.PLATFORM_SERVICE_TIER_RANK[a] - distribution_1.PLATFORM_SERVICE_TIER_RANK[b]);
|
|
55
|
+
}
|
|
56
|
+
function parseRealmValues(stdin) {
|
|
57
|
+
if (stdin.trim().length === 0) {
|
|
58
|
+
throw new ApplianceOwnerQueryError(`${ApplianceOwnedDecision.RealmRender} reads its values as a JSON object on stdin ` +
|
|
59
|
+
'(realm, adminUsername, adminPassword, clientSecret, browserOrigins[]), and stdin ' +
|
|
60
|
+
'was empty.', true);
|
|
61
|
+
}
|
|
62
|
+
let parsed;
|
|
63
|
+
try {
|
|
64
|
+
parsed = JSON.parse(stdin);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
throw new ApplianceOwnerQueryError(`the realm render values on stdin are not JSON: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
68
|
+
}
|
|
69
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
70
|
+
throw new ApplianceOwnerQueryError('the realm render values on stdin must be a JSON object.', true);
|
|
71
|
+
}
|
|
72
|
+
const doc = parsed;
|
|
73
|
+
const origins = doc.browserOrigins;
|
|
74
|
+
if (!Array.isArray(origins) ||
|
|
75
|
+
origins.length === 0 ||
|
|
76
|
+
origins.some((entry) => typeof entry !== 'string')) {
|
|
77
|
+
throw new ApplianceOwnerQueryError('"browserOrigins" must be a non-empty array of origin strings. A realm rendered ' +
|
|
78
|
+
'without one imports with an empty redirectUris on its browser client, so every ' +
|
|
79
|
+
'login is refused with invalid_redirect_uri.', true);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
[keycloak_realm_1.RealmPlaceholder.Realm]: requireString(doc.realm, 'realm'),
|
|
83
|
+
[keycloak_realm_1.RealmPlaceholder.AdminUsername]: requireString(doc.adminUsername, 'adminUsername'),
|
|
84
|
+
[keycloak_realm_1.RealmPlaceholder.AdminPassword]: requireString(doc.adminPassword, 'adminPassword'),
|
|
85
|
+
[keycloak_realm_1.RealmPlaceholder.ClientSecret]: requireString(doc.clientSecret, 'clientSecret'),
|
|
86
|
+
[keycloak_realm_1.RealmPlaceholder.BrowserOrigin]: origins,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function requireString(value, field) {
|
|
90
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
91
|
+
throw new ApplianceOwnerQueryError(`the realm render values on stdin declare no non-empty "${field}".`, true);
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
function imageCoordinates(lockPath) {
|
|
96
|
+
const loaded = (0, lock_loader_1.loadImageLock)({ edition: EXPLICIT_LOCK_EDITION, explicit: lockPath });
|
|
97
|
+
if (loaded.resolution.source !== 'flag') {
|
|
98
|
+
throw new ApplianceOwnerQueryError(`--images-lock ${lockPath} does not exist, so the image plane was resolved from ` +
|
|
99
|
+
`${loaded.resolution.path} (${loaded.resolution.source}) instead. That is a ` +
|
|
100
|
+
'DIFFERENT distribution\'s images; refusing to answer with it.');
|
|
101
|
+
}
|
|
102
|
+
const out = [];
|
|
103
|
+
for (const [service, entry] of loaded.imagesByService) {
|
|
104
|
+
out.push(`${service}\t${entry.imageRef}\t${entry.contentHash}`);
|
|
105
|
+
}
|
|
106
|
+
return out.sort();
|
|
107
|
+
}
|
|
108
|
+
function lines(values) {
|
|
109
|
+
return values.map((value) => `${value}\n`).join('');
|
|
110
|
+
}
|
|
111
|
+
function expectNoFlags(decision, rest) {
|
|
112
|
+
if (rest.length > 0) {
|
|
113
|
+
throw new ApplianceOwnerQueryError(`${decision} takes no arguments (got ${rest.join(' ')}).`, true);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function requireFlag(decision, rest, flag) {
|
|
117
|
+
if (rest.length !== 2 || rest[0] !== flag) {
|
|
118
|
+
throw new ApplianceOwnerQueryError(`${decision} requires exactly \`${flag} <path>\` (got ${rest.length === 0 ? 'nothing' : rest.join(' ')}).`, true);
|
|
119
|
+
}
|
|
120
|
+
return rest[1];
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=appliance-owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-owner.js","sourceRoot":"","sources":["../src/appliance-owner.ts"],"names":[],"mappings":"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"}
|