@bluealba/pae-bootstrap-lib 3.2.5 → 3.3.0-feature-pillar-v4-release-647
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/src/bootstrap/apply-service-local.d.ts.map +1 -1
- package/dist/src/bootstrap/apply-service-local.js +3 -2
- package/dist/src/bootstrap/apply-service-local.js.map +1 -1
- package/dist/src/bootstrap/bootstrap-platform.d.ts +10 -0
- package/dist/src/bootstrap/bootstrap-platform.d.ts.map +1 -1
- package/dist/src/bootstrap/bootstrap-platform.js +15 -13
- package/dist/src/bootstrap/bootstrap-platform.js.map +1 -1
- package/dist/src/bootstrap/domain/domain-validation.test.js +1286 -302
- package/dist/src/bootstrap/domain/domain-validation.test.js.map +1 -1
- package/dist/src/bootstrap/entity-synchronizer.test.js +24 -0
- package/dist/src/bootstrap/entity-synchronizer.test.js.map +1 -1
- package/dist/src/bootstrap/read-bootstrap-applications.d.ts.map +1 -1
- package/dist/src/bootstrap/read-bootstrap-applications.js +344 -38
- package/dist/src/bootstrap/read-bootstrap-applications.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger.d.ts +27 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +37 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/utils/format-diff.d.ts.map +1 -1
- package/dist/src/utils/format-diff.js +2 -1
- package/dist/src/utils/format-diff.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-service-local.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apply-service-local.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAEhG,eAAO,MAAM,WAAW,QAAO,OACI,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,KAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAa/F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,KAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAG/F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,iBAAiB,KAAG,iBAoBjE,CAAC"}
|
|
@@ -12,6 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.processServiceLocal = exports.stripServiceLocal = exports.applyServiceLocal = exports.isLocalMode = void 0;
|
|
15
|
+
const logger_1 = require("../logger");
|
|
15
16
|
const isLocalMode = () => process.env.LOCAL_MODE === 'true';
|
|
16
17
|
exports.isLocalMode = isLocalMode;
|
|
17
18
|
/**
|
|
@@ -22,7 +23,7 @@ const applyServiceLocal = (module) => {
|
|
|
22
23
|
if (!serviceLocal) {
|
|
23
24
|
return rest;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
+
(0, logger_1.log)().info(`Applying serviceLocal override for module: ${module.name}`);
|
|
26
27
|
return Object.assign(Object.assign({}, rest), { service: Object.assign(Object.assign({}, rest.service), serviceLocal) });
|
|
27
28
|
};
|
|
28
29
|
exports.applyServiceLocal = applyServiceLocal;
|
|
@@ -42,7 +43,7 @@ exports.stripServiceLocal = stripServiceLocal;
|
|
|
42
43
|
const processServiceLocal = (platform) => {
|
|
43
44
|
const local = (0, exports.isLocalMode)();
|
|
44
45
|
if (local) {
|
|
45
|
-
|
|
46
|
+
(0, logger_1.log)().info('LOCAL_MODE=true: applying serviceLocal overrides');
|
|
46
47
|
}
|
|
47
48
|
const processModule = local ? exports.applyServiceLocal : exports.stripServiceLocal;
|
|
48
49
|
return Object.assign(Object.assign({}, platform), { applications: Object.fromEntries(Object.entries(platform.applications).map(([appName, app]) => [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-service-local.js","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"apply-service-local.js","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sCAAgC;AAGzB,MAAM,WAAW,GAAG,GAAY,EAAE,CACvC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;AADvB,QAAA,WAAW,eACY;AAEpC;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,MAAuB,EAAyC,EAAE;IAClG,MAAM,EAAE,YAAY,KAAc,MAAM,EAAf,IAAI,UAAK,MAAM,EAAlC,gBAAyB,CAAS,CAAC;IACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAA,YAAG,GAAE,CAAC,IAAI,CAAC,8CAA8C,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,uCACK,IAAI,KACP,OAAO,kCACF,IAAI,CAAC,OAAO,GACZ,YAAY,KAEjB;AACJ,CAAC,CAAC;AAbW,QAAA,iBAAiB,qBAa5B;AAEF;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,MAAuB,EAAyC,EAAE;IAClG,MAAM,EAAE,YAAY,EAAE,CAAC,KAAc,MAAM,EAAf,IAAI,UAAK,MAAM,EAArC,gBAA4B,CAAS,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEF;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CAAC,QAA2B,EAAqB,EAAE;IACpF,MAAM,KAAK,GAAG,IAAA,mBAAW,GAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,CAAC;QACV,IAAA,YAAG,GAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,yBAAiB,CAAC,CAAC,CAAC,yBAAiB,CAAC;IAEpE,uCACK,QAAQ,KACX,YAAY,EAAE,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;YAC5D,OAAO;4CAEF,GAAG,KACN,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;SAE1C,CAAC,CACH,IACD;AACJ,CAAC,CAAC;AApBW,QAAA,mBAAmB,uBAoB9B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BootstrapLogger } from "../logger";
|
|
1
2
|
import { BootstrapModule } from "./domain/bootstrap-sync-metadata.interface";
|
|
2
3
|
/**
|
|
3
4
|
* Optional properties to customize the bootstrapPlatform process.
|
|
@@ -49,6 +50,15 @@ export type BootstrapOptions = {
|
|
|
49
50
|
* the initial delay value.
|
|
50
51
|
*/
|
|
51
52
|
initialDelay?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Where bootstrap reports progress and failures.
|
|
55
|
+
*
|
|
56
|
+
* Defaults to `console` with a `[Bootstrap]` prefix. Pass a structured
|
|
57
|
+
* logger (e.g. `@bluealba/pillar-logger`) so bootstrap output is NDJSON like
|
|
58
|
+
* the rest of the service's — it shares stdout with every other process in
|
|
59
|
+
* the Pillar container.
|
|
60
|
+
*/
|
|
61
|
+
logger?: BootstrapLogger;
|
|
52
62
|
};
|
|
53
63
|
/**
|
|
54
64
|
* Reads the current application src/data folder assembles all the platform definitions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-platform.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap-platform.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA2B,MAAM,WAAW,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAG7E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,CAAC;IAErE;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAA;AAgBD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAgH/E,CAAC"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.bootstrapPlatform = void 0;
|
|
13
|
+
const logger_1 = require("../logger");
|
|
13
14
|
const pae_core_1 = require("@bluealba/pae-core");
|
|
14
15
|
const read_bootstrap_applications_1 = require("./read-bootstrap-applications");
|
|
15
16
|
const apply_service_local_1 = require("./apply-service-local");
|
|
@@ -31,22 +32,23 @@ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
|
31
32
|
const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
33
|
var _a, _b, _c, _d;
|
|
33
34
|
const { throwOnError = false, retries = 0, initialDelay = 0, scopedTo } = options;
|
|
35
|
+
(0, logger_1.setBootstrapLogger)(options.logger);
|
|
34
36
|
if (!scopedTo) {
|
|
35
37
|
const err = new Error('No options.scopedTo was provider neither the env var SERVICE_ACCESS_NAME is present ! Set one to identify the bootstrap as author for creating/updating entities in the platform');
|
|
36
|
-
|
|
38
|
+
(0, logger_1.log)().error(err.message);
|
|
37
39
|
if (throwOnError)
|
|
38
40
|
throw err;
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
41
43
|
let processedPlatform;
|
|
42
44
|
try {
|
|
43
|
-
|
|
45
|
+
(0, logger_1.log)().info(`Reading platform data from: ${(_a = options.path) !== null && _a !== void 0 ? _a : process.cwd()}`);
|
|
44
46
|
const platform = (0, read_bootstrap_applications_1.readPlatformBootstrapFolder)((_b = options.path) !== null && _b !== void 0 ? _b : process.cwd(), options);
|
|
45
47
|
const applications = Object.values(platform.applications);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
(0, logger_1.log)().info(`Found ${applications.length} applications`);
|
|
49
|
+
(0, logger_1.log)().info(`Found ${(_d = (_c = platform.sharedLibraries) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0} shared libraries`);
|
|
48
50
|
if (options.transformModules) {
|
|
49
|
-
|
|
51
|
+
(0, logger_1.log)().warn('[DEPRECATED] transformModules option is deprecated and will be removed in a future version.');
|
|
50
52
|
const transformedModules = options.transformModules(applications.flatMap(app => app.modules));
|
|
51
53
|
const modulesByApp = new Map();
|
|
52
54
|
transformedModules.forEach(module => {
|
|
@@ -66,7 +68,7 @@ const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, functio
|
|
|
66
68
|
}
|
|
67
69
|
catch (error) {
|
|
68
70
|
const err = error instanceof Error ? error : new Error('Bootstrap failed while reading platform data');
|
|
69
|
-
|
|
71
|
+
(0, logger_1.log)().error(`Failed to read platform data: ${err.message}`);
|
|
70
72
|
if (throwOnError)
|
|
71
73
|
throw err;
|
|
72
74
|
return;
|
|
@@ -79,17 +81,17 @@ const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, functio
|
|
|
79
81
|
}
|
|
80
82
|
catch (error) {
|
|
81
83
|
const err = error instanceof Error ? error : new Error('Bootstrap failed while reading environment variables');
|
|
82
|
-
|
|
84
|
+
(0, logger_1.log)().error(`Failed to read environment variables: ${err.message}`);
|
|
83
85
|
if (throwOnError)
|
|
84
86
|
throw err;
|
|
85
87
|
return;
|
|
86
88
|
}
|
|
87
89
|
const url = `${gatewayUrl}/bootstrap/sync`;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
(0, logger_1.log)().info(`Sending data to gateway: ${url}`);
|
|
91
|
+
(0, logger_1.log)().info(`Scoped to: ${scopedTo}`);
|
|
90
92
|
const attempt = (attemptNumber, delay) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
93
|
if (delay > 0) {
|
|
92
|
-
|
|
94
|
+
(0, logger_1.log)().info(`Waiting ${delay}ms before attempt ${attemptNumber}/${retries + 1}...`);
|
|
93
95
|
yield sleep(delay);
|
|
94
96
|
}
|
|
95
97
|
try {
|
|
@@ -107,18 +109,18 @@ const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, functio
|
|
|
107
109
|
const errorText = yield response.text();
|
|
108
110
|
throw new Error(`Bootstrap sync failed with status ${response.status}: ${errorText}`);
|
|
109
111
|
}
|
|
110
|
-
|
|
112
|
+
(0, logger_1.log)().info('Sync completed successfully');
|
|
111
113
|
}
|
|
112
114
|
catch (error) {
|
|
113
115
|
const err = error instanceof Error ? error : new Error('Bootstrap sync failed with unknown error');
|
|
114
|
-
|
|
116
|
+
(0, logger_1.log)().error(`Attempt ${attemptNumber}/${retries + 1} failed: ${err.message}`);
|
|
115
117
|
if (attemptNumber <= retries) {
|
|
116
118
|
// Backoff is always based on MIN_RETRY_DELAY, independent of initialDelay.
|
|
117
119
|
const nextDelay = Math.min(MIN_RETRY_DELAY * Math.pow(2, attemptNumber - 1), MAX_BACKOFF_DELAY);
|
|
118
120
|
return attempt(attemptNumber + 1, nextDelay);
|
|
119
121
|
}
|
|
120
122
|
if (retries > 0) {
|
|
121
|
-
|
|
123
|
+
(0, logger_1.log)().error('All retry attempts exhausted. Service will continue running without bootstrap.');
|
|
122
124
|
}
|
|
123
125
|
if (throwOnError)
|
|
124
126
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-platform.js","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAwE;AACxE,+EAA4E;AAE5E,+DAA4D;
|
|
1
|
+
{"version":3,"file":"bootstrap-platform.js","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"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"}
|