@bluealba/pae-bootstrap-lib 2.1.3 → 3.0.0-develop-119

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.
Files changed (134) hide show
  1. package/README.md +2 -1
  2. package/dist/src/bootstrap/apply-service-local.d.ts +17 -0
  3. package/dist/src/bootstrap/apply-service-local.d.ts.map +1 -0
  4. package/dist/src/bootstrap/apply-service-local.js +54 -0
  5. package/dist/src/bootstrap/apply-service-local.js.map +1 -0
  6. package/dist/src/bootstrap/apply-service-local.test.d.ts +2 -0
  7. package/dist/src/bootstrap/apply-service-local.test.d.ts.map +1 -0
  8. package/dist/src/bootstrap/apply-service-local.test.js +125 -0
  9. package/dist/src/bootstrap/apply-service-local.test.js.map +1 -0
  10. package/dist/src/bootstrap/bootstrap-platform.d.ts +0 -4
  11. package/dist/src/bootstrap/bootstrap-platform.d.ts.map +1 -1
  12. package/dist/src/bootstrap/bootstrap-platform.js +15 -21
  13. package/dist/src/bootstrap/bootstrap-platform.js.map +1 -1
  14. package/dist/src/bootstrap/domain/bootstrap-sync-metadata.interface.d.ts +24 -8
  15. package/dist/src/bootstrap/domain/bootstrap-sync-metadata.interface.d.ts.map +1 -1
  16. package/dist/src/bootstrap/domain/domain-validation.test.js +180 -68
  17. package/dist/src/bootstrap/domain/domain-validation.test.js.map +1 -1
  18. package/dist/src/bootstrap/entity-synchronizer.js.map +1 -1
  19. package/dist/src/bootstrap/read-bootstrap-applications.d.ts +1 -1
  20. package/dist/src/bootstrap/read-bootstrap-applications.d.ts.map +1 -1
  21. package/dist/src/bootstrap/read-bootstrap-applications.js +408 -54
  22. package/dist/src/bootstrap/read-bootstrap-applications.js.map +1 -1
  23. package/dist/src/expression-language/expression-engine.d.ts +3 -0
  24. package/dist/src/expression-language/expression-engine.d.ts.map +1 -0
  25. package/dist/src/expression-language/expression-engine.js +80 -0
  26. package/dist/src/expression-language/expression-engine.js.map +1 -0
  27. package/dist/src/expression-language/expression-engine.test.d.ts +2 -0
  28. package/dist/src/expression-language/expression-engine.test.d.ts.map +1 -0
  29. package/dist/src/expression-language/expression-engine.test.js +107 -0
  30. package/dist/src/expression-language/expression-engine.test.js.map +1 -0
  31. package/dist/src/expression-language/index.d.ts +5 -0
  32. package/dist/src/expression-language/index.d.ts.map +1 -0
  33. package/dist/src/expression-language/index.js +14 -0
  34. package/dist/src/expression-language/index.js.map +1 -0
  35. package/dist/src/expression-language/resolve-deep.d.ts +2 -0
  36. package/dist/src/expression-language/resolve-deep.d.ts.map +1 -0
  37. package/dist/src/expression-language/resolve-deep.js +21 -0
  38. package/dist/src/expression-language/resolve-deep.js.map +1 -0
  39. package/dist/src/expression-language/resolve-deep.test.d.ts +2 -0
  40. package/dist/src/expression-language/resolve-deep.test.d.ts.map +1 -0
  41. package/dist/src/expression-language/resolve-deep.test.js +117 -0
  42. package/dist/src/expression-language/resolve-deep.test.js.map +1 -0
  43. package/dist/src/expression-language/resolvers/env.resolver.d.ts +3 -0
  44. package/dist/src/expression-language/resolvers/env.resolver.d.ts.map +1 -0
  45. package/dist/src/expression-language/resolvers/env.resolver.js +14 -0
  46. package/dist/src/expression-language/resolvers/env.resolver.js.map +1 -0
  47. package/dist/src/expression-language/resolvers/env.resolver.test.d.ts +2 -0
  48. package/dist/src/expression-language/resolvers/env.resolver.test.d.ts.map +1 -0
  49. package/dist/src/expression-language/resolvers/env.resolver.test.js +23 -0
  50. package/dist/src/expression-language/resolvers/env.resolver.test.js.map +1 -0
  51. package/dist/src/expression-language/resolvers/index.d.ts +8 -0
  52. package/dist/src/expression-language/resolvers/index.d.ts.map +1 -0
  53. package/dist/src/expression-language/resolvers/index.js +12 -0
  54. package/dist/src/expression-language/resolvers/index.js.map +1 -0
  55. package/dist/src/expression-language/resolvers/resolver.interface.d.ts +5 -0
  56. package/dist/src/expression-language/resolvers/resolver.interface.d.ts.map +1 -0
  57. package/dist/src/{bootstrap/synchronizers/sync-entity-options.js → expression-language/resolvers/resolver.interface.js} +1 -1
  58. package/dist/src/expression-language/resolvers/resolver.interface.js.map +1 -0
  59. package/dist/src/index.d.ts +3 -1
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +8 -1
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/utils/io.d.ts +1 -1
  64. package/dist/src/utils/io.d.ts.map +1 -1
  65. package/dist/src/utils/io.js +4 -1
  66. package/dist/src/utils/io.js.map +1 -1
  67. package/package.json +1 -1
  68. package/dist/src/bootstrap/fix-created-by.d.ts +0 -10
  69. package/dist/src/bootstrap/fix-created-by.d.ts.map +0 -1
  70. package/dist/src/bootstrap/fix-created-by.js +0 -36
  71. package/dist/src/bootstrap/fix-created-by.js.map +0 -1
  72. package/dist/src/bootstrap/initialize-pae-client.d.ts +0 -7
  73. package/dist/src/bootstrap/initialize-pae-client.d.ts.map +0 -1
  74. package/dist/src/bootstrap/initialize-pae-client.js +0 -24
  75. package/dist/src/bootstrap/initialize-pae-client.js.map +0 -1
  76. package/dist/src/bootstrap/run-bootstrap-sync.service.d.ts +0 -4
  77. package/dist/src/bootstrap/run-bootstrap-sync.service.d.ts.map +0 -1
  78. package/dist/src/bootstrap/run-bootstrap-sync.service.js +0 -29
  79. package/dist/src/bootstrap/run-bootstrap-sync.service.js.map +0 -1
  80. package/dist/src/bootstrap/synchronizers/sync-applications.d.ts +0 -4
  81. package/dist/src/bootstrap/synchronizers/sync-applications.d.ts.map +0 -1
  82. package/dist/src/bootstrap/synchronizers/sync-applications.js +0 -53
  83. package/dist/src/bootstrap/synchronizers/sync-applications.js.map +0 -1
  84. package/dist/src/bootstrap/synchronizers/sync-authz-entities.d.ts +0 -11
  85. package/dist/src/bootstrap/synchronizers/sync-authz-entities.d.ts.map +0 -1
  86. package/dist/src/bootstrap/synchronizers/sync-authz-entities.js +0 -58
  87. package/dist/src/bootstrap/synchronizers/sync-authz-entities.js.map +0 -1
  88. package/dist/src/bootstrap/synchronizers/sync-catalog.d.ts +0 -5
  89. package/dist/src/bootstrap/synchronizers/sync-catalog.d.ts.map +0 -1
  90. package/dist/src/bootstrap/synchronizers/sync-catalog.js +0 -95
  91. package/dist/src/bootstrap/synchronizers/sync-catalog.js.map +0 -1
  92. package/dist/src/bootstrap/synchronizers/sync-entities/performDeletes.d.ts +0 -11
  93. package/dist/src/bootstrap/synchronizers/sync-entities/performDeletes.d.ts.map +0 -1
  94. package/dist/src/bootstrap/synchronizers/sync-entities/performDeletes.js +0 -38
  95. package/dist/src/bootstrap/synchronizers/sync-entities/performDeletes.js.map +0 -1
  96. package/dist/src/bootstrap/synchronizers/sync-entities/performUpdates.d.ts +0 -12
  97. package/dist/src/bootstrap/synchronizers/sync-entities/performUpdates.d.ts.map +0 -1
  98. package/dist/src/bootstrap/synchronizers/sync-entities/performUpdates.js +0 -43
  99. package/dist/src/bootstrap/synchronizers/sync-entities/performUpdates.js.map +0 -1
  100. package/dist/src/bootstrap/synchronizers/sync-entities.d.ts +0 -19
  101. package/dist/src/bootstrap/synchronizers/sync-entities.d.ts.map +0 -1
  102. package/dist/src/bootstrap/synchronizers/sync-entities.js +0 -59
  103. package/dist/src/bootstrap/synchronizers/sync-entities.js.map +0 -1
  104. package/dist/src/bootstrap/synchronizers/sync-entities.test.d.ts +0 -2
  105. package/dist/src/bootstrap/synchronizers/sync-entities.test.d.ts.map +0 -1
  106. package/dist/src/bootstrap/synchronizers/sync-entities.test.js +0 -158
  107. package/dist/src/bootstrap/synchronizers/sync-entities.test.js.map +0 -1
  108. package/dist/src/bootstrap/synchronizers/sync-entity-options.d.ts +0 -11
  109. package/dist/src/bootstrap/synchronizers/sync-entity-options.d.ts.map +0 -1
  110. package/dist/src/bootstrap/synchronizers/sync-entity-options.js.map +0 -1
  111. package/dist/src/bootstrap/synchronizers/sync-feature-flags.d.ts +0 -8
  112. package/dist/src/bootstrap/synchronizers/sync-feature-flags.d.ts.map +0 -1
  113. package/dist/src/bootstrap/synchronizers/sync-feature-flags.js +0 -67
  114. package/dist/src/bootstrap/synchronizers/sync-feature-flags.js.map +0 -1
  115. package/dist/src/bootstrap/synchronizers/sync-modules-config.d.ts +0 -4
  116. package/dist/src/bootstrap/synchronizers/sync-modules-config.d.ts.map +0 -1
  117. package/dist/src/bootstrap/synchronizers/sync-modules-config.js +0 -28
  118. package/dist/src/bootstrap/synchronizers/sync-modules-config.js.map +0 -1
  119. package/dist/src/bootstrap/synchronizers/sync-operations.d.ts +0 -5
  120. package/dist/src/bootstrap/synchronizers/sync-operations.d.ts.map +0 -1
  121. package/dist/src/bootstrap/synchronizers/sync-operations.js +0 -41
  122. package/dist/src/bootstrap/synchronizers/sync-operations.js.map +0 -1
  123. package/dist/src/bootstrap/synchronizers/sync-role-operations.d.ts +0 -8
  124. package/dist/src/bootstrap/synchronizers/sync-role-operations.d.ts.map +0 -1
  125. package/dist/src/bootstrap/synchronizers/sync-role-operations.js +0 -74
  126. package/dist/src/bootstrap/synchronizers/sync-role-operations.js.map +0 -1
  127. package/dist/src/bootstrap/synchronizers/sync-roles.d.ts +0 -5
  128. package/dist/src/bootstrap/synchronizers/sync-roles.d.ts.map +0 -1
  129. package/dist/src/bootstrap/synchronizers/sync-roles.js +0 -41
  130. package/dist/src/bootstrap/synchronizers/sync-roles.js.map +0 -1
  131. package/dist/src/bootstrap/synchronizers/sync-shared-libraries.d.ts +0 -4
  132. package/dist/src/bootstrap/synchronizers/sync-shared-libraries.d.ts.map +0 -1
  133. package/dist/src/bootstrap/synchronizers/sync-shared-libraries.js +0 -32
  134. package/dist/src/bootstrap/synchronizers/sync-shared-libraries.js.map +0 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ bootstrapPlatform({
14
14
  # Folder & Files conventions
15
15
 
16
16
  Each folder potentially represents an application if it has an `application.json` file.
17
- Each folder might optionally contain definition files that must follow the names: `(modules | operations | roles).json`
17
+ Each folder might optionally contain definition files that must follow the names: `(modules | operations | roles | jobs).json`
18
18
  If it defines an `application.json` then all resources declared in the previously mentioned files will be automatically
19
19
  created scoped to that application.
20
20
  Otherwise a folder that doesn't have `application.json` might define resources as well but they will be created
@@ -30,6 +30,7 @@ At the top there are platform defitions such as `shared-libraries.json`
30
30
  modules.json
31
31
  operations.json
32
32
  roles.json
33
+ jobs.json (optional)
33
34
  - another-application
34
35
  application.json
35
36
  modules.json
@@ -0,0 +1,17 @@
1
+ import { BootstrapModule, BootstrapPlatform } from "./domain/bootstrap-sync-metadata.interface";
2
+ export declare const isLocalMode: () => boolean;
3
+ /**
4
+ * Shallow-merges `serviceLocal` into `service` and strips `serviceLocal` from the module.
5
+ */
6
+ export declare const applyServiceLocal: (module: BootstrapModule) => Omit<BootstrapModule, "serviceLocal">;
7
+ /**
8
+ * Removes `serviceLocal` from the module without merging it into `service`.
9
+ */
10
+ export declare const stripServiceLocal: (module: BootstrapModule) => Omit<BootstrapModule, "serviceLocal">;
11
+ /**
12
+ * Processes all modules in the platform:
13
+ * - If LOCAL_MODE=true, merges `serviceLocal` into `service` for each module that has it.
14
+ * - Always strips `serviceLocal` before sending to the gateway.
15
+ */
16
+ export declare const processServiceLocal: (platform: BootstrapPlatform) => BootstrapPlatform;
17
+ //# sourceMappingURL=apply-service-local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-service-local.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":"AAAA,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"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.processServiceLocal = exports.stripServiceLocal = exports.applyServiceLocal = exports.isLocalMode = void 0;
15
+ const isLocalMode = () => process.env.LOCAL_MODE === 'true';
16
+ exports.isLocalMode = isLocalMode;
17
+ /**
18
+ * Shallow-merges `serviceLocal` into `service` and strips `serviceLocal` from the module.
19
+ */
20
+ const applyServiceLocal = (module) => {
21
+ const { serviceLocal } = module, rest = __rest(module, ["serviceLocal"]);
22
+ if (!serviceLocal) {
23
+ return rest;
24
+ }
25
+ console.log(`[Bootstrap] Applying serviceLocal override for module: ${module.name}`);
26
+ return Object.assign(Object.assign({}, rest), { service: Object.assign(Object.assign({}, rest.service), serviceLocal) });
27
+ };
28
+ exports.applyServiceLocal = applyServiceLocal;
29
+ /**
30
+ * Removes `serviceLocal` from the module without merging it into `service`.
31
+ */
32
+ const stripServiceLocal = (module) => {
33
+ const { serviceLocal: _ } = module, rest = __rest(module, ["serviceLocal"]);
34
+ return rest;
35
+ };
36
+ exports.stripServiceLocal = stripServiceLocal;
37
+ /**
38
+ * Processes all modules in the platform:
39
+ * - If LOCAL_MODE=true, merges `serviceLocal` into `service` for each module that has it.
40
+ * - Always strips `serviceLocal` before sending to the gateway.
41
+ */
42
+ const processServiceLocal = (platform) => {
43
+ const local = (0, exports.isLocalMode)();
44
+ if (local) {
45
+ console.log('[Bootstrap] LOCAL_MODE=true: applying serviceLocal overrides');
46
+ }
47
+ const processModule = local ? exports.applyServiceLocal : exports.stripServiceLocal;
48
+ return Object.assign(Object.assign({}, platform), { applications: Object.fromEntries(Object.entries(platform.applications).map(([appName, app]) => [
49
+ appName,
50
+ Object.assign(Object.assign({}, app), { modules: app.modules.map(processModule) }),
51
+ ])) });
52
+ };
53
+ exports.processServiceLocal = processServiceLocal;
54
+ //# sourceMappingURL=apply-service-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-service-local.js","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEO,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,OAAO,CAAC,GAAG,CAAC,0DAA0D,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,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,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC9E,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=apply-service-local.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-service-local.test.d.ts","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const apply_service_local_1 = require("./apply-service-local");
4
+ const makeModule = (overrides = {}) => (Object.assign({ name: '@bluealba/my-service', displayName: 'My Service', type: 'service', baseUrl: '/my-service', service: { host: 'my-service', port: 80 }, dependsOn: [] }, overrides));
5
+ const makePlatform = (modules) => ({
6
+ sharedLibraries: [],
7
+ applications: {
8
+ 'test-app': {
9
+ name: 'test-app',
10
+ displayName: 'Test App',
11
+ description: '',
12
+ allowedByDefault: false,
13
+ modules,
14
+ operations: [],
15
+ roles: [],
16
+ modulesConfig: [],
17
+ jobs: [],
18
+ },
19
+ },
20
+ });
21
+ describe('isLocalMode()', () => {
22
+ afterEach(() => {
23
+ delete process.env.LOCAL_MODE;
24
+ });
25
+ it('returns true when LOCAL_MODE=true', () => {
26
+ process.env.LOCAL_MODE = 'true';
27
+ expect((0, apply_service_local_1.isLocalMode)()).toBe(true);
28
+ });
29
+ it('returns false when LOCAL_MODE=false', () => {
30
+ process.env.LOCAL_MODE = 'false';
31
+ expect((0, apply_service_local_1.isLocalMode)()).toBe(false);
32
+ });
33
+ it('returns false when LOCAL_MODE is not set', () => {
34
+ expect((0, apply_service_local_1.isLocalMode)()).toBe(false);
35
+ });
36
+ it('is case-sensitive (TRUE does not count)', () => {
37
+ process.env.LOCAL_MODE = 'TRUE';
38
+ expect((0, apply_service_local_1.isLocalMode)()).toBe(false);
39
+ });
40
+ });
41
+ describe('applyServiceLocal()', () => {
42
+ it('fully merges serviceLocal into service', () => {
43
+ const module = makeModule({
44
+ serviceLocal: { host: 'localhost', port: 3001 },
45
+ });
46
+ const result = (0, apply_service_local_1.applyServiceLocal)(module);
47
+ expect(result.service).toEqual({ host: 'localhost', port: 3001 });
48
+ });
49
+ it('partially overrides: only specified fields are replaced', () => {
50
+ const module = makeModule({
51
+ service: { host: 'my-service', port: 80, protocol: 'http' },
52
+ serviceLocal: { port: 3001 },
53
+ });
54
+ const result = (0, apply_service_local_1.applyServiceLocal)(module);
55
+ expect(result.service).toEqual({ host: 'my-service', port: 3001, protocol: 'http' });
56
+ });
57
+ it('strips serviceLocal from the result', () => {
58
+ const module = makeModule({ serviceLocal: { host: 'localhost' } });
59
+ const result = (0, apply_service_local_1.applyServiceLocal)(module);
60
+ expect(result).not.toHaveProperty('serviceLocal');
61
+ });
62
+ it('strips serviceLocal even when it is absent', () => {
63
+ const module = makeModule();
64
+ const result = (0, apply_service_local_1.applyServiceLocal)(module);
65
+ expect(result).not.toHaveProperty('serviceLocal');
66
+ });
67
+ it('is immutable - does not modify the original module', () => {
68
+ const module = makeModule({ serviceLocal: { host: 'localhost', port: 3001 } });
69
+ const originalService = Object.assign({}, module.service);
70
+ (0, apply_service_local_1.applyServiceLocal)(module);
71
+ expect(module.service).toEqual(originalService);
72
+ expect(module).toHaveProperty('serviceLocal');
73
+ });
74
+ });
75
+ describe('stripServiceLocal()', () => {
76
+ it('removes serviceLocal without merging into service', () => {
77
+ const module = makeModule({ serviceLocal: { host: 'localhost', port: 3001 } });
78
+ const result = (0, apply_service_local_1.stripServiceLocal)(module);
79
+ expect(result).not.toHaveProperty('serviceLocal');
80
+ expect(result.service).toEqual({ host: 'my-service', port: 80 });
81
+ });
82
+ it('works when serviceLocal is absent', () => {
83
+ const module = makeModule();
84
+ const result = (0, apply_service_local_1.stripServiceLocal)(module);
85
+ expect(result).not.toHaveProperty('serviceLocal');
86
+ expect(result.service).toEqual({ host: 'my-service', port: 80 });
87
+ });
88
+ });
89
+ describe('processServiceLocal()', () => {
90
+ afterEach(() => {
91
+ delete process.env.LOCAL_MODE;
92
+ });
93
+ it('merges serviceLocal into service when LOCAL_MODE=true', () => {
94
+ process.env.LOCAL_MODE = 'true';
95
+ const platform = makePlatform([
96
+ makeModule({ serviceLocal: { host: 'localhost', port: 3001 } }),
97
+ ]);
98
+ const result = (0, apply_service_local_1.processServiceLocal)(platform);
99
+ expect(result.applications['test-app'].modules[0].service).toEqual({ host: 'localhost', port: 3001 });
100
+ expect(result.applications['test-app'].modules[0]).not.toHaveProperty('serviceLocal');
101
+ });
102
+ it('strips serviceLocal without merging when LOCAL_MODE is not set', () => {
103
+ const platform = makePlatform([
104
+ makeModule({ serviceLocal: { host: 'localhost', port: 3001 } }),
105
+ ]);
106
+ const result = (0, apply_service_local_1.processServiceLocal)(platform);
107
+ expect(result.applications['test-app'].modules[0].service).toEqual({ host: 'my-service', port: 80 });
108
+ expect(result.applications['test-app'].modules[0]).not.toHaveProperty('serviceLocal');
109
+ });
110
+ it('leaves modules without serviceLocal unchanged', () => {
111
+ process.env.LOCAL_MODE = 'true';
112
+ const platform = makePlatform([makeModule()]);
113
+ const result = (0, apply_service_local_1.processServiceLocal)(platform);
114
+ expect(result.applications['test-app'].modules[0].service).toEqual({ host: 'my-service', port: 80 });
115
+ });
116
+ it('is immutable - does not modify the original platform', () => {
117
+ process.env.LOCAL_MODE = 'true';
118
+ const module = makeModule({ serviceLocal: { host: 'localhost', port: 3001 } });
119
+ const platform = makePlatform([module]);
120
+ (0, apply_service_local_1.processServiceLocal)(platform);
121
+ expect(platform.applications['test-app'].modules[0]).toHaveProperty('serviceLocal');
122
+ expect(platform.applications['test-app'].modules[0].service).toEqual({ host: 'my-service', port: 80 });
123
+ });
124
+ });
125
+ //# sourceMappingURL=apply-service-local.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-service-local.test.js","sourceRoot":"","sources":["../../../src/bootstrap/apply-service-local.test.ts"],"names":[],"mappings":"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"}
@@ -26,10 +26,6 @@ export type BootstrapOptions = {
26
26
  /**
27
27
  * Reads the current application src/data folder assembles all the platform definitions
28
28
  * and sends them to the gateway's /bootstrap/sync endpoint for synchronization.
29
- *
30
- * @deprecated The synchronization logic has been moved to the gateway service for centralization.
31
- * This function now acts as a client that delegates to the gateway endpoint.
32
- * The function signature remains unchanged for backward compatibility.
33
29
  */
34
30
  export declare const bootstrapPlatform: (options: BootstrapOptions) => Promise<void>;
35
31
  //# sourceMappingURL=bootstrap-platform.d.ts.map
@@ -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;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,CAAC;CACtE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,kBAuEhE,CAAC"}
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;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,CAAC;CACtE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,kBAwEhE,CAAC"}
@@ -8,35 +8,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.bootstrapPlatform = void 0;
16
- const read_bootstrap_applications_1 = require("./read-bootstrap-applications");
17
13
  const pae_core_1 = require("@bluealba/pae-core");
18
- const initialize_pae_client_1 = __importDefault(require("./initialize-pae-client"));
14
+ const read_bootstrap_applications_1 = require("./read-bootstrap-applications");
15
+ const apply_service_local_1 = require("./apply-service-local");
19
16
  /**
20
17
  * Reads the current application src/data folder assembles all the platform definitions
21
18
  * and sends them to the gateway's /bootstrap/sync endpoint for synchronization.
22
- *
23
- * @deprecated The synchronization logic has been moved to the gateway service for centralization.
24
- * This function now acts as a client that delegates to the gateway endpoint.
25
- * The function signature remains unchanged for backward compatibility.
26
19
  */
27
20
  const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, function* () {
28
- var _a, _b, _c;
21
+ var _a, _b, _c, _d;
29
22
  if (!options.scopedTo) {
30
23
  throw 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');
31
24
  }
32
25
  console.log('[Bootstrap] Reading platform data from:', (_a = options.path) !== null && _a !== void 0 ? _a : process.cwd());
33
- // init PAE
34
- const pae = yield (0, initialize_pae_client_1.default)();
35
26
  // Read all files from filesystem (maintains current logic)
36
27
  const platform = (0, read_bootstrap_applications_1.readPlatformBootstrapFolder)((_b = options.path) !== null && _b !== void 0 ? _b : process.cwd(), options);
37
28
  const applications = Object.values(platform.applications);
38
29
  console.log(`[Bootstrap] Found ${applications.length} applications`);
39
- console.log(`[Bootstrap] Found ${(_c = platform.sharedLibraries) === null || _c === void 0 ? void 0 : _c.length} shared libraries`);
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`);
40
31
  // Handle transformModules option if provided (backward compatibility)
41
32
  if (options.transformModules) {
42
33
  console.warn('[DEPRECATED] transformModules option is deprecated and will be removed in a future version.');
@@ -45,7 +36,7 @@ const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, functio
45
36
  // Group modules by application name
46
37
  const modulesByApp = new Map();
47
38
  transformedModules.forEach(module => {
48
- const appName = module.application || pae_core_1.GLOBAL_APPLICATION_NAME;
39
+ const appName = module.application || pae_core_1.PLATFORM_APPLICATION_NAME;
49
40
  if (!modulesByApp.has(appName)) {
50
41
  modulesByApp.set(appName, []);
51
42
  }
@@ -58,19 +49,22 @@ const bootstrapPlatform = (options) => __awaiter(void 0, void 0, void 0, functio
58
49
  }
59
50
  });
60
51
  }
61
- // Get gateway URL from environment
62
- const gatewayUrl = (0, pae_core_1.fromEnv)('GATEWAY_SERVICE_URL');
63
- const url = `${gatewayUrl}/bootstrap/sync`;
64
- console.log(`[Bootstrap] Sending data to gateway: ${url}`);
65
- console.log(`[Bootstrap] Scoped to: ${options.scopedTo}`);
52
+ const processedPlatform = (0, apply_service_local_1.processServiceLocal)(platform);
66
53
  try {
67
- const response = yield pae.invoke("/bootstrap/sync", {
54
+ // Get gateway URL from environment
55
+ const gatewayUrl = (0, pae_core_1.fromEnv)('GATEWAY_SERVICE_URL');
56
+ const url = `${gatewayUrl}/bootstrap/sync`;
57
+ console.log(`[Bootstrap] Sending data to gateway: ${url}`);
58
+ console.log(`[Bootstrap] Scoped to: ${options.scopedTo}`);
59
+ const response = yield fetch(url, {
68
60
  method: 'POST',
69
61
  headers: {
62
+ 'Authorization': `Bearer ${(0, pae_core_1.fromEnv)("SERVICE_ACCESS_SECRET")}`,
63
+ 'Accept': 'application/json',
70
64
  'Content-Type': 'application/json',
71
65
  'x-bootstrap-scoped-to': options.scopedTo,
72
66
  },
73
- body: JSON.stringify(platform),
67
+ body: JSON.stringify(processedPlatform),
74
68
  });
75
69
  if (!response.ok) {
76
70
  const errorText = yield response.text();
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-platform.js","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap-platform.js","sourceRoot":"","sources":["../../../src/bootstrap/bootstrap-platform.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,24 @@
1
- import { CreateOperationDTO } from "@bluealba/pae-core/dist/src/authorization/dto/create-operation.dto";
2
- import { CreateSharedLibraryDTO } from "@bluealba/pae-core/dist/src/orchestrator/dto/create-shared-library.dto";
3
- import { CreateOrUpdateModule } from "@bluealba/pae-core";
4
- import { CreateApplicationDTO } from "@bluealba/pae-core/dist/src/authorization/dto/create-application.dto";
5
- import { CreateRoleDTO } from "@bluealba/pae-core/dist/src/authorization/dto/create-role.dto";
6
- import { UpdateModuleUIConfigDTO } from "@bluealba/pae-core/dist/src/catalog/dto/update-module-ui-config.dto";
1
+ import type { CreateApplicationDTO, CreateOperationDTO, CreateOrUpdateModule, CreateRoleDTO, CreateSharedLibraryDTO, ServiceConfig, UpdateModuleUIConfigDTO } from "@bluealba/pae-core";
7
2
  import { BootstrapOptions } from "../bootstrap-platform";
8
3
  export interface BootstrapFeatureFlag {
9
4
  name: string;
10
5
  description?: string;
11
6
  enabled?: boolean;
7
+ applicationName?: string;
12
8
  constraints?: Array<{
13
9
  contextName: string;
14
10
  operator: string;
15
11
  values?: string[];
16
12
  }>;
17
13
  }
14
+ export interface BootstrapJob {
15
+ name: string;
16
+ description?: string;
17
+ enabled?: boolean;
18
+ pattern: string;
19
+ taskType: string;
20
+ taskConfig: Record<string, any>;
21
+ }
18
22
  export interface OperationAuthzBootstrap extends Omit<CreateOperationDTO, 'applicationName'>, Partial<Pick<CreateOperationDTO, 'applicationName'>> {
19
23
  roles?: string[];
20
24
  }
@@ -22,6 +26,14 @@ export interface ModuleConfig {
22
26
  name: string;
23
27
  config: Record<string, any>;
24
28
  }
29
+ export interface BootstrapJob {
30
+ name: string;
31
+ description?: string;
32
+ enabled?: boolean;
33
+ pattern: string;
34
+ taskType: string;
35
+ taskConfig: Record<string, any>;
36
+ }
25
37
  export interface BootstrapSyncMetadata {
26
38
  syncConfig: {
27
39
  scopedTo: BootstrapOptions['scopedTo'];
@@ -34,12 +46,16 @@ export interface BootstrapSyncMetadata {
34
46
  operationsAuthz?: OperationAuthzBootstrap[];
35
47
  modulesConfig?: UpdateModuleUIConfigDTO[];
36
48
  }
37
- export type BootstrapModule = CreateOrUpdateModule;
49
+ export type BootstrapModule = CreateOrUpdateModule & {
50
+ serviceLocal?: Partial<ServiceConfig>;
51
+ };
38
52
  export type BootstrapApplication = CreateApplicationDTO & {
39
53
  modules: BootstrapModule[];
40
- operations: CreateOperationDTO[];
54
+ operations: OperationAuthzBootstrap[];
41
55
  roles: CreateRoleDTO[];
42
56
  modulesConfig: ModuleConfig[];
57
+ jobs: BootstrapJob[];
58
+ featureFlags?: BootstrapFeatureFlag[];
43
59
  };
44
60
  export type BootstrapPlatform = {
45
61
  sharedLibraries: CreateSharedLibraryDTO[];
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-sync-metadata.interface.d.ts","sourceRoot":"","sources":["../../../../src/bootstrap/domain/bootstrap-sync-metadata.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,wEAAwE,CAAC;AAChH,OAAO,EAAE,oBAAoB,EAAkB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sEAAsE,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,+DAA+D,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qEAAqE,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,uBAAwB,SACvC,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,EAC3C,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE;QACV,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;KACxC,CAAC;IACF,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC3C,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC5C,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC3C;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAA;AAElD,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,GAAG;IACxD,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACpD,CAAA"}
1
+ {"version":3,"file":"bootstrap-sync-metadata.interface.d.ts","sourceRoot":"","sources":["../../../../src/bootstrap/domain/bootstrap-sync-metadata.interface.ts"],"names":[],"mappings":"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"}