@bluealba/pae-bootstrap-lib 3.1.2 → 3.2.0-develop-272
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.
|
@@ -13,7 +13,8 @@ export type BootstrapOptions = {
|
|
|
13
13
|
*/
|
|
14
14
|
exclude?: string[];
|
|
15
15
|
/**
|
|
16
|
-
* Limit the scope of synchronization only to the elements created by the service indicated in this setting
|
|
16
|
+
* Limit the scope of synchronization only to the elements created by the service indicated in this setting.
|
|
17
|
+
* If an empty string is provided, bootstrap will log an error and exit without synchronizing.
|
|
17
18
|
*/
|
|
18
19
|
scopedTo: string;
|
|
19
20
|
/**
|
|
@@ -22,6 +23,32 @@ export type BootstrapOptions = {
|
|
|
22
23
|
* Adding and overriding some modules according to some env vars.
|
|
23
24
|
*/
|
|
24
25
|
transformModules?: (modules: BootstrapModule[]) => BootstrapModule[];
|
|
26
|
+
/**
|
|
27
|
+
* Controls whether bootstrapPlatform() propagates errors to the caller.
|
|
28
|
+
*
|
|
29
|
+
* **Default: `false` (breaking change from pre-resilience behaviour)**
|
|
30
|
+
* Previously, this function always threw on failure. Now errors are caught internally
|
|
31
|
+
* and logged without propagating, so the process stays alive. This is intentional to
|
|
32
|
+
* prevent crash loops in container environments with restart policies (Kubernetes, ECS, etc.).
|
|
33
|
+
*
|
|
34
|
+
* Set to `true` to restore the original throwing behaviour — useful when the caller
|
|
35
|
+
* manages its own error handling or retry logic.
|
|
36
|
+
*/
|
|
37
|
+
throwOnError?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Maximum number of retry attempts after the initial failure. Default: 0 (no retries).
|
|
40
|
+
* Each retry uses exponential backoff starting at MIN_RETRY_DELAY (5s), doubling on each
|
|
41
|
+
* attempt and capped at MAX_BACKOFF_DELAY (5 minutes).
|
|
42
|
+
*/
|
|
43
|
+
retries?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Delay in ms before the first attempt. Default: 0.
|
|
46
|
+
*
|
|
47
|
+
* Note: this is NOT the base for backoff calculation. The backoff base is always
|
|
48
|
+
* MIN_RETRY_DELAY (5s) to ensure a meaningful gap between retries regardless of
|
|
49
|
+
* the initial delay value.
|
|
50
|
+
*/
|
|
51
|
+
initialDelay?: number;
|
|
25
52
|
};
|
|
26
53
|
/**
|
|
27
54
|
* 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":"AAEA,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
|
|
1
|
+
{"version":3,"file":"bootstrap-platform.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"AAEA,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;CACvB,CAAA;AAgBD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CA8G/E,CAAC"}
|
|
@@ -13,72 +13,118 @@ exports.bootstrapPlatform = void 0;
|
|
|
13
13
|
const pae_core_1 = require("@bluealba/pae-core");
|
|
14
14
|
const read_bootstrap_applications_1 = require("./read-bootstrap-applications");
|
|
15
15
|
const apply_service_local_1 = require("./apply-service-local");
|
|
16
|
+
/**
|
|
17
|
+
* Maximum delay between retry attempts (5 minutes).
|
|
18
|
+
* Backoff doubles on each retry until this cap is reached.
|
|
19
|
+
*/
|
|
20
|
+
const MAX_BACKOFF_DELAY = 300000;
|
|
21
|
+
/**
|
|
22
|
+
* Minimum delay used as the base for exponential backoff between retries (5 seconds).
|
|
23
|
+
* This floor ensures a meaningful gap between retry attempts regardless of initialDelay.
|
|
24
|
+
*/
|
|
25
|
+
const MIN_RETRY_DELAY = 5000;
|
|
26
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
16
27
|
/**
|
|
17
28
|
* Reads the current application src/data folder assembles all the platform definitions
|
|
18
29
|
* and sends them to the gateway's /bootstrap/sync endpoint for synchronization.
|
|
19
30
|
*/
|
|
20
31
|
const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
32
|
var _a, _b, _c, _d;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
console.log(`[Bootstrap] Found ${applications.length} applications`);
|
|
30
|
-
console.log(`[Bootstrap] Found ${(_d = (_c = platform.sharedLibraries) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0} shared libraries`);
|
|
31
|
-
// Handle transformModules option if provided (backward compatibility)
|
|
32
|
-
if (options.transformModules) {
|
|
33
|
-
console.warn('[DEPRECATED] transformModules option is deprecated and will be removed in a future version.');
|
|
34
|
-
const transformedModules = options.transformModules(applications.flatMap(app => app.modules));
|
|
35
|
-
// Rebuild applications with transformed modules
|
|
36
|
-
// Group modules by application name
|
|
37
|
-
const modulesByApp = new Map();
|
|
38
|
-
transformedModules.forEach(module => {
|
|
39
|
-
const appName = module.application || pae_core_1.PLATFORM_APPLICATION_NAME;
|
|
40
|
-
if (!modulesByApp.has(appName)) {
|
|
41
|
-
modulesByApp.set(appName, []);
|
|
42
|
-
}
|
|
43
|
-
modulesByApp.get(appName).push(module);
|
|
44
|
-
});
|
|
45
|
-
// Update platform.applications with transformed modules
|
|
46
|
-
modulesByApp.forEach((modules, appName) => {
|
|
47
|
-
if (platform.applications[appName]) {
|
|
48
|
-
platform.applications[appName].modules = modules;
|
|
49
|
-
}
|
|
50
|
-
});
|
|
33
|
+
const { throwOnError = false, retries = 0, initialDelay = 0, scopedTo } = options;
|
|
34
|
+
if (!scopedTo) {
|
|
35
|
+
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
|
+
console.error('[Bootstrap]', err.message);
|
|
37
|
+
if (throwOnError)
|
|
38
|
+
throw err;
|
|
39
|
+
return;
|
|
51
40
|
}
|
|
52
|
-
|
|
41
|
+
let processedPlatform;
|
|
53
42
|
try {
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
console.log(`[Bootstrap]
|
|
58
|
-
console.log(`[Bootstrap]
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
43
|
+
console.log('[Bootstrap] Reading platform data from:', (_a = options.path) !== null && _a !== void 0 ? _a : process.cwd());
|
|
44
|
+
const platform = (0, read_bootstrap_applications_1.readPlatformBootstrapFolder)((_b = options.path) !== null && _b !== void 0 ? _b : process.cwd(), options);
|
|
45
|
+
const applications = Object.values(platform.applications);
|
|
46
|
+
console.log(`[Bootstrap] Found ${applications.length} applications`);
|
|
47
|
+
console.log(`[Bootstrap] Found ${(_d = (_c = platform.sharedLibraries) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0} shared libraries`);
|
|
48
|
+
if (options.transformModules) {
|
|
49
|
+
console.warn('[DEPRECATED] transformModules option is deprecated and will be removed in a future version.');
|
|
50
|
+
const transformedModules = options.transformModules(applications.flatMap(app => app.modules));
|
|
51
|
+
const modulesByApp = new Map();
|
|
52
|
+
transformedModules.forEach(module => {
|
|
53
|
+
const appName = module.application || pae_core_1.PLATFORM_APPLICATION_NAME;
|
|
54
|
+
if (!modulesByApp.has(appName)) {
|
|
55
|
+
modulesByApp.set(appName, []);
|
|
56
|
+
}
|
|
57
|
+
modulesByApp.get(appName).push(module);
|
|
58
|
+
});
|
|
59
|
+
modulesByApp.forEach((modules, appName) => {
|
|
60
|
+
if (platform.applications[appName]) {
|
|
61
|
+
platform.applications[appName].modules = modules;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
72
64
|
}
|
|
73
|
-
|
|
65
|
+
processedPlatform = (0, apply_service_local_1.processServiceLocal)(platform);
|
|
74
66
|
}
|
|
75
67
|
catch (error) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
const err = error instanceof Error ? error : new Error('Bootstrap failed while reading platform data');
|
|
69
|
+
console.error('[Bootstrap] Failed to read platform data:', err.message);
|
|
70
|
+
if (throwOnError)
|
|
71
|
+
throw err;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
let gatewayUrl;
|
|
75
|
+
let serviceAccessSecret;
|
|
76
|
+
try {
|
|
77
|
+
gatewayUrl = (0, pae_core_1.fromEnv)('GATEWAY_SERVICE_URL');
|
|
78
|
+
serviceAccessSecret = (0, pae_core_1.fromEnv)('SERVICE_ACCESS_SECRET');
|
|
81
79
|
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const err = error instanceof Error ? error : new Error('Bootstrap failed while reading environment variables');
|
|
82
|
+
console.error('[Bootstrap] Failed to read environment variables:', err.message);
|
|
83
|
+
if (throwOnError)
|
|
84
|
+
throw err;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const url = `${gatewayUrl}/bootstrap/sync`;
|
|
88
|
+
console.log(`[Bootstrap] Sending data to gateway: ${url}`);
|
|
89
|
+
console.log(`[Bootstrap] Scoped to: ${scopedTo}`);
|
|
90
|
+
const attempt = (attemptNumber, delay) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
+
if (delay > 0) {
|
|
92
|
+
console.log(`[Bootstrap] Waiting ${delay}ms before attempt ${attemptNumber}/${retries + 1}...`);
|
|
93
|
+
yield sleep(delay);
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const response = yield fetch(url, {
|
|
97
|
+
method: 'POST',
|
|
98
|
+
headers: {
|
|
99
|
+
'Authorization': `Bearer ${serviceAccessSecret}`,
|
|
100
|
+
'Accept': 'application/json',
|
|
101
|
+
'Content-Type': 'application/json',
|
|
102
|
+
'x-bootstrap-scoped-to': scopedTo,
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify(processedPlatform),
|
|
105
|
+
});
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
const errorText = yield response.text();
|
|
108
|
+
throw new Error(`Bootstrap sync failed with status ${response.status}: ${errorText}`);
|
|
109
|
+
}
|
|
110
|
+
console.log('[Bootstrap] Sync completed successfully');
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const err = error instanceof Error ? error : new Error('Bootstrap sync failed with unknown error');
|
|
114
|
+
console.error(`[Bootstrap] Attempt ${attemptNumber}/${retries + 1} failed:`, err.message);
|
|
115
|
+
if (attemptNumber <= retries) {
|
|
116
|
+
// Backoff is always based on MIN_RETRY_DELAY, independent of initialDelay.
|
|
117
|
+
const nextDelay = Math.min(MIN_RETRY_DELAY * Math.pow(2, attemptNumber - 1), MAX_BACKOFF_DELAY);
|
|
118
|
+
return attempt(attemptNumber + 1, nextDelay);
|
|
119
|
+
}
|
|
120
|
+
if (retries > 0) {
|
|
121
|
+
console.error('[Bootstrap] All retry attempts exhausted. Service will continue running without bootstrap.');
|
|
122
|
+
}
|
|
123
|
+
if (throwOnError)
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return attempt(1, initialDelay);
|
|
82
128
|
});
|
|
83
129
|
exports.bootstrapPlatform = bootstrapPlatform;
|
|
84
130
|
//# sourceMappingURL=bootstrap-platform.js.map
|
|
@@ -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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"}
|
package/package.json
CHANGED