@empire-builder-kit/nx 1.0.0-beta.4

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 (185) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +25 -0
  4. package/executors.json +54 -0
  5. package/generators.json +35 -0
  6. package/migrations/standard-pre-v1-to-v1.md +11 -0
  7. package/package.json +66 -0
  8. package/src/blueprints/execution.d.ts +31 -0
  9. package/src/blueprints/execution.js +166 -0
  10. package/src/blueprints/execution.js.map +1 -0
  11. package/src/blueprints/index.d.ts +5 -0
  12. package/src/blueprints/index.js +9 -0
  13. package/src/blueprints/index.js.map +1 -0
  14. package/src/blueprints/inputs.d.ts +43 -0
  15. package/src/blueprints/inputs.js +103 -0
  16. package/src/blueprints/inputs.js.map +1 -0
  17. package/src/blueprints/manifest.d.ts +241 -0
  18. package/src/blueprints/manifest.js +369 -0
  19. package/src/blueprints/manifest.js.map +1 -0
  20. package/src/blueprints/resolver.d.ts +28 -0
  21. package/src/blueprints/resolver.js +214 -0
  22. package/src/blueprints/resolver.js.map +1 -0
  23. package/src/blueprints/transitions.d.ts +20 -0
  24. package/src/blueprints/transitions.js +61 -0
  25. package/src/blueprints/transitions.js.map +1 -0
  26. package/src/executors/deploy/deploy.d.ts +4 -0
  27. package/src/executors/deploy/deploy.js +6 -0
  28. package/src/executors/deploy/deploy.js.map +1 -0
  29. package/src/executors/dev/dev.d.ts +4 -0
  30. package/src/executors/dev/dev.js +6 -0
  31. package/src/executors/dev/dev.js.map +1 -0
  32. package/src/executors/dev-doctor/dev-doctor.d.ts +18 -0
  33. package/src/executors/dev-doctor/dev-doctor.js +145 -0
  34. package/src/executors/dev-doctor/dev-doctor.js.map +1 -0
  35. package/src/executors/dev-doctor/schema.json +17 -0
  36. package/src/executors/dev-setup/dev-setup.d.ts +11 -0
  37. package/src/executors/dev-setup/dev-setup.js +454 -0
  38. package/src/executors/dev-setup/dev-setup.js.map +1 -0
  39. package/src/executors/dev-setup/schema.json +16 -0
  40. package/src/executors/fleet/fleet.d.ts +51 -0
  41. package/src/executors/fleet/fleet.js +529 -0
  42. package/src/executors/fleet/fleet.js.map +1 -0
  43. package/src/executors/fleet/schema.json +25 -0
  44. package/src/executors/foundation-preflight/foundation-preflight.d.ts +15 -0
  45. package/src/executors/foundation-preflight/foundation-preflight.js +94 -0
  46. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -0
  47. package/src/executors/foundation-preflight/schema.json +31 -0
  48. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +13 -0
  49. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +69 -0
  50. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -0
  51. package/src/executors/foundation-remove-preflight/schema.json +17 -0
  52. package/src/executors/refresh/refresh.d.ts +4 -0
  53. package/src/executors/refresh/refresh.js +6 -0
  54. package/src/executors/refresh/refresh.js.map +1 -0
  55. package/src/executors/remove/remove.d.ts +4 -0
  56. package/src/executors/remove/remove.js +6 -0
  57. package/src/executors/remove/remove.js.map +1 -0
  58. package/src/executors/sst-lifecycle/run-sst-command.d.ts +28 -0
  59. package/src/executors/sst-lifecycle/run-sst-command.js +154 -0
  60. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -0
  61. package/src/executors/sst-lifecycle/schema.json +45 -0
  62. package/src/executors/unlock/unlock.d.ts +4 -0
  63. package/src/executors/unlock/unlock.js +6 -0
  64. package/src/executors/unlock/unlock.js.map +1 -0
  65. package/src/foundation/aurora-logical-database.d.ts +76 -0
  66. package/src/foundation/aurora-logical-database.js +419 -0
  67. package/src/foundation/aurora-logical-database.js.map +1 -0
  68. package/src/foundation/discovery.d.ts +55 -0
  69. package/src/foundation/discovery.js +55 -0
  70. package/src/foundation/discovery.js.map +1 -0
  71. package/src/foundation/index.d.ts +6 -0
  72. package/src/foundation/index.js +10 -0
  73. package/src/foundation/index.js.map +1 -0
  74. package/src/foundation/local-database-contract.d.ts +30 -0
  75. package/src/foundation/local-database-contract.js +75 -0
  76. package/src/foundation/local-database-contract.js.map +1 -0
  77. package/src/foundation/preflight.d.ts +31 -0
  78. package/src/foundation/preflight.js +114 -0
  79. package/src/foundation/preflight.js.map +1 -0
  80. package/src/foundation/provision-database-bindings.d.ts +30 -0
  81. package/src/foundation/provision-database-bindings.js +113 -0
  82. package/src/foundation/provision-database-bindings.js.map +1 -0
  83. package/src/foundation/provision-logical-database.d.ts +26 -0
  84. package/src/foundation/provision-logical-database.js +162 -0
  85. package/src/foundation/provision-logical-database.js.map +1 -0
  86. package/src/foundation/requirements.d.ts +37 -0
  87. package/src/foundation/requirements.js +141 -0
  88. package/src/foundation/requirements.js.map +1 -0
  89. package/src/foundation/stages.d.ts +14 -0
  90. package/src/foundation/stages.js +51 -0
  91. package/src/foundation/stages.js.map +1 -0
  92. package/src/generators/function/function.d.ts +13 -0
  93. package/src/generators/function/function.js +71 -0
  94. package/src/generators/function/function.js.map +1 -0
  95. package/src/generators/function/schema.d.ts +5 -0
  96. package/src/generators/function/schema.json +20 -0
  97. package/src/generators/job/job.d.ts +4 -0
  98. package/src/generators/job/job.js +5 -0
  99. package/src/generators/job/job.js.map +1 -0
  100. package/src/generators/preset/generator.d.ts +5 -0
  101. package/src/generators/preset/generator.js +41 -0
  102. package/src/generators/preset/generator.js.map +1 -0
  103. package/src/generators/preset/schema.d.ts +4 -0
  104. package/src/generators/preset/schema.json +22 -0
  105. package/src/generators/preset/workspace-files.d.ts +18 -0
  106. package/src/generators/preset/workspace-files.js +895 -0
  107. package/src/generators/preset/workspace-files.js.map +1 -0
  108. package/src/generators/service/service.d.ts +4 -0
  109. package/src/generators/service/service.js +5 -0
  110. package/src/generators/service/service.js.map +1 -0
  111. package/src/generators/slice/schema.d.ts +7 -0
  112. package/src/generators/slice/schema.json +38 -0
  113. package/src/generators/slice/slice.d.ts +26 -0
  114. package/src/generators/slice/slice.js +1676 -0
  115. package/src/generators/slice/slice.js.map +1 -0
  116. package/src/generators/upgrade/schema.d.ts +8 -0
  117. package/src/generators/upgrade/schema.json +31 -0
  118. package/src/generators/upgrade/upgrade.d.ts +27 -0
  119. package/src/generators/upgrade/upgrade.js +666 -0
  120. package/src/generators/upgrade/upgrade.js.map +1 -0
  121. package/src/generators/workload/schema.d.ts +6 -0
  122. package/src/generators/workload/schema.json +21 -0
  123. package/src/generators/workload/workload.d.ts +16 -0
  124. package/src/generators/workload/workload.js +157 -0
  125. package/src/generators/workload/workload.js.map +1 -0
  126. package/src/index.d.ts +5 -0
  127. package/src/index.js +9 -0
  128. package/src/index.js.map +1 -0
  129. package/src/local-dev/contracts.d.ts +31 -0
  130. package/src/local-dev/contracts.js +126 -0
  131. package/src/local-dev/contracts.js.map +1 -0
  132. package/src/local-dev/gateway-daemon.d.ts +4 -0
  133. package/src/local-dev/gateway-daemon.js +39 -0
  134. package/src/local-dev/gateway-daemon.js.map +1 -0
  135. package/src/local-dev/gateway.d.ts +60 -0
  136. package/src/local-dev/gateway.js +368 -0
  137. package/src/local-dev/gateway.js.map +1 -0
  138. package/src/local-dev/identity.d.ts +16 -0
  139. package/src/local-dev/identity.js +101 -0
  140. package/src/local-dev/identity.js.map +1 -0
  141. package/src/local-dev/index.d.ts +7 -0
  142. package/src/local-dev/index.js +11 -0
  143. package/src/local-dev/index.js.map +1 -0
  144. package/src/local-dev/portless.d.ts +15 -0
  145. package/src/local-dev/portless.js +115 -0
  146. package/src/local-dev/portless.js.map +1 -0
  147. package/src/local-dev/ports.d.ts +10 -0
  148. package/src/local-dev/ports.js +39 -0
  149. package/src/local-dev/ports.js.map +1 -0
  150. package/src/local-dev/proxy.d.ts +37 -0
  151. package/src/local-dev/proxy.js +271 -0
  152. package/src/local-dev/proxy.js.map +1 -0
  153. package/src/local-dev/tls.d.ts +24 -0
  154. package/src/local-dev/tls.js +294 -0
  155. package/src/local-dev/tls.js.map +1 -0
  156. package/src/ownership/composition.d.ts +16 -0
  157. package/src/ownership/composition.js +125 -0
  158. package/src/ownership/composition.js.map +1 -0
  159. package/src/ownership/foundation-record.d.ts +66 -0
  160. package/src/ownership/foundation-record.js +108 -0
  161. package/src/ownership/foundation-record.js.map +1 -0
  162. package/src/ownership/hash.d.ts +2 -0
  163. package/src/ownership/hash.js +10 -0
  164. package/src/ownership/hash.js.map +1 -0
  165. package/src/ownership/index.d.ts +6 -0
  166. package/src/ownership/index.js +10 -0
  167. package/src/ownership/index.js.map +1 -0
  168. package/src/ownership/json-ownership.d.ts +13 -0
  169. package/src/ownership/json-ownership.js +147 -0
  170. package/src/ownership/json-ownership.js.map +1 -0
  171. package/src/ownership/record.d.ts +186 -0
  172. package/src/ownership/record.js +336 -0
  173. package/src/ownership/record.js.map +1 -0
  174. package/src/ownership/workspace-record.d.ts +66 -0
  175. package/src/ownership/workspace-record.js +108 -0
  176. package/src/ownership/workspace-record.js.map +1 -0
  177. package/src/schemas/blueprint-input-schema-v1.json +23 -0
  178. package/src/schemas/blueprint-v1.json +170 -0
  179. package/src/schemas/foundation-ownership-v2.json +42 -0
  180. package/src/schemas/foundation-requirement-v1.json +32 -0
  181. package/src/schemas/generated-ownership-v2.json +117 -0
  182. package/src/schemas/workspace-ownership-v2.json +42 -0
  183. package/src/validation.d.ts +14 -0
  184. package/src/validation.js +14 -0
  185. package/src/validation.js.map +1 -0
@@ -0,0 +1,454 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_crypto_1 = require("node:crypto");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ const gateway_js_1 = require("../../local-dev/gateway.js");
10
+ const tls_js_1 = require("../../local-dev/tls.js");
11
+ const portless_js_1 = require("../../local-dev/portless.js");
12
+ const identity_js_1 = require("../../local-dev/identity.js");
13
+ function stopGateway(pidPath) {
14
+ if (!(0, node_fs_1.existsSync)(pidPath))
15
+ return;
16
+ const pid = Number((0, node_fs_1.readFileSync)(pidPath, 'utf8').trim());
17
+ if (Number.isInteger(pid) && pid > 1) {
18
+ try {
19
+ process.kill(pid, 'SIGTERM');
20
+ }
21
+ catch {
22
+ // A stale pid file is safe to remove.
23
+ }
24
+ }
25
+ (0, node_fs_1.rmSync)(pidPath, { force: true });
26
+ }
27
+ function gatewayIsRunning(pidPath) {
28
+ if (!(0, node_fs_1.existsSync)(pidPath))
29
+ return false;
30
+ const pid = Number((0, node_fs_1.readFileSync)(pidPath, 'utf8').trim());
31
+ if (!Number.isInteger(pid) || pid <= 1)
32
+ return false;
33
+ try {
34
+ process.kill(pid, 0);
35
+ return true;
36
+ }
37
+ catch {
38
+ (0, node_fs_1.rmSync)(pidPath, { force: true });
39
+ return false;
40
+ }
41
+ }
42
+ function certificateSha1(certificate) {
43
+ return new node_crypto_1.X509Certificate((0, node_fs_1.readFileSync)(certificate)).fingerprint.replace(/:/g, '');
44
+ }
45
+ function writeGatewayState(path, value) {
46
+ (0, node_fs_1.writeFileSync)(path, `${JSON.stringify({
47
+ ...value,
48
+ platform: process.platform,
49
+ schemaVersion: 1,
50
+ }, null, 2)}\n`, { mode: 0o600 });
51
+ }
52
+ function trustRoot(certificate) {
53
+ const fingerprint = certificateSha1(certificate);
54
+ if ((0, node_os_1.platform)() === 'darwin') {
55
+ try {
56
+ const output = (0, node_child_process_1.execFileSync)('security', [
57
+ 'find-certificate',
58
+ '-a',
59
+ '-Z',
60
+ '-c',
61
+ 'Empire Builder Kit Local Root',
62
+ (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'Keychains', 'login.keychain-db'),
63
+ ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
64
+ if (output.toUpperCase().includes(fingerprint))
65
+ return;
66
+ }
67
+ catch {
68
+ // The exact EBK root is not installed yet.
69
+ }
70
+ (0, node_child_process_1.execFileSync)('security', [
71
+ 'add-trusted-cert',
72
+ '-d',
73
+ '-r',
74
+ 'trustRoot',
75
+ '-k',
76
+ (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'Keychains', 'login.keychain-db'),
77
+ certificate,
78
+ ], { stdio: 'inherit' });
79
+ return;
80
+ }
81
+ if ((0, node_os_1.platform)() === 'win32') {
82
+ try {
83
+ (0, node_child_process_1.execFileSync)('certutil', ['-user', '-store', 'Root', fingerprint], {
84
+ stdio: 'pipe',
85
+ });
86
+ return;
87
+ }
88
+ catch {
89
+ // The exact EBK root is not installed yet.
90
+ }
91
+ (0, node_child_process_1.execFileSync)('certutil', ['-user', '-addstore', 'Root', certificate], {
92
+ stdio: 'inherit',
93
+ });
94
+ return;
95
+ }
96
+ const nssDatabase = (0, node_path_1.join)((0, node_os_1.homedir)(), '.pki', 'nssdb');
97
+ if (!(0, node_fs_1.existsSync)(nssDatabase)) {
98
+ throw new Error(`Linux browser trust requires an existing NSS database at ${nssDatabase}. Install certutil and initialize the database, then rerun dev-setup --trust. System trust remains distribution-managed.`);
99
+ }
100
+ try {
101
+ const installed = (0, node_child_process_1.execFileSync)('certutil', [
102
+ '-d',
103
+ `sql:${nssDatabase}`,
104
+ '-L',
105
+ '-n',
106
+ 'Empire Builder Kit Local Root',
107
+ '-a',
108
+ ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
109
+ if (new node_crypto_1.X509Certificate(installed).fingerprint.replace(/:/g, '') ===
110
+ fingerprint) {
111
+ return;
112
+ }
113
+ throw new Error('The NSS nickname Empire Builder Kit Local Root belongs to a different certificate; remove it deliberately before trusting this root.');
114
+ }
115
+ catch (error) {
116
+ if (error instanceof Error &&
117
+ error.message.includes('belongs to a different certificate')) {
118
+ throw error;
119
+ }
120
+ }
121
+ (0, node_child_process_1.execFileSync)('certutil', [
122
+ '-d',
123
+ `sql:${nssDatabase}`,
124
+ '-A',
125
+ '-t',
126
+ 'C,,',
127
+ '-n',
128
+ 'Empire Builder Kit Local Root',
129
+ '-i',
130
+ certificate,
131
+ ], { stdio: 'inherit' });
132
+ }
133
+ function untrustRoot(certificate) {
134
+ const fingerprint = certificateSha1(certificate);
135
+ if ((0, node_os_1.platform)() === 'darwin') {
136
+ let installed = '';
137
+ try {
138
+ installed = (0, node_child_process_1.execFileSync)('security', [
139
+ 'find-certificate',
140
+ '-a',
141
+ '-Z',
142
+ '-c',
143
+ 'Empire Builder Kit Local Root',
144
+ (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'Keychains', 'login.keychain-db'),
145
+ ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
146
+ }
147
+ catch {
148
+ return false;
149
+ }
150
+ if (!installed.toUpperCase().includes(fingerprint))
151
+ return false;
152
+ (0, node_child_process_1.execFileSync)('security', [
153
+ 'delete-certificate',
154
+ '-Z',
155
+ fingerprint,
156
+ (0, node_path_1.join)((0, node_os_1.homedir)(), 'Library', 'Keychains', 'login.keychain-db'),
157
+ ], { stdio: 'inherit' });
158
+ return true;
159
+ }
160
+ if ((0, node_os_1.platform)() === 'win32') {
161
+ try {
162
+ (0, node_child_process_1.execFileSync)('certutil', ['-user', '-store', 'Root', fingerprint], {
163
+ stdio: 'pipe',
164
+ });
165
+ }
166
+ catch {
167
+ return false;
168
+ }
169
+ (0, node_child_process_1.execFileSync)('certutil', ['-user', '-delstore', 'Root', fingerprint], {
170
+ stdio: 'inherit',
171
+ });
172
+ return true;
173
+ }
174
+ const nssDatabase = (0, node_path_1.join)((0, node_os_1.homedir)(), '.pki', 'nssdb');
175
+ let installed;
176
+ try {
177
+ installed = (0, node_child_process_1.execFileSync)('certutil', [
178
+ '-d',
179
+ `sql:${nssDatabase}`,
180
+ '-L',
181
+ '-n',
182
+ 'Empire Builder Kit Local Root',
183
+ '-a',
184
+ ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
185
+ }
186
+ catch {
187
+ return false;
188
+ }
189
+ if (new node_crypto_1.X509Certificate(installed).fingerprint.replace(/:/g, '') !== fingerprint) {
190
+ return false;
191
+ }
192
+ (0, node_child_process_1.execFileSync)('certutil', ['-d', `sql:${nssDatabase}`, '-D', '-n', 'Empire Builder Kit Local Root'], { stdio: 'inherit' });
193
+ return true;
194
+ }
195
+ async function waitForGatewayStart(pidPath, socketPath, capability, timeoutMs = 3_000) {
196
+ const deadline = Date.now() + timeoutMs;
197
+ let lastError;
198
+ while (Date.now() < deadline) {
199
+ if (gatewayIsRunning(pidPath)) {
200
+ try {
201
+ await (0, gateway_js_1.sendGatewayCommand)(socketPath, { action: 'status', capability });
202
+ return;
203
+ }
204
+ catch (error) {
205
+ lastError = error;
206
+ }
207
+ }
208
+ await new Promise((resolve) => setTimeout(resolve, 100));
209
+ }
210
+ throw new Error(`EBK gateway did not become ready within ${timeoutMs}ms${lastError instanceof Error ? `: ${lastError.message}` : ''}.`);
211
+ }
212
+ async function startGateway(appData, internalPort) {
213
+ const paths = (0, tls_js_1.localTlsPaths)(appData);
214
+ const capability = (0, node_fs_1.readFileSync)(paths.capability, 'utf8').trim();
215
+ const daemon = require.resolve('../../local-dev/gateway-daemon.js');
216
+ const child = (0, node_child_process_1.spawn)(process.execPath, [daemon, paths.appData, String(internalPort)], {
217
+ detached: true,
218
+ stdio: 'ignore',
219
+ windowsHide: true,
220
+ });
221
+ const spawnFailure = new Promise((_resolve, reject) => {
222
+ child.once('error', reject);
223
+ child.once('exit', (code, signal) => {
224
+ reject(new Error(`EBK gateway daemon exited before readiness (code ${code ?? 'none'}, signal ${signal ?? 'none'}).`));
225
+ });
226
+ });
227
+ child.unref();
228
+ await Promise.race([
229
+ waitForGatewayStart(paths.gatewayPid, paths.gatewaySocket, capability),
230
+ spawnFailure,
231
+ ]);
232
+ }
233
+ function installPortlessForward(plan) {
234
+ try {
235
+ (0, portless_js_1.applyPrivilegedCommands)(plan.install);
236
+ }
237
+ catch (error) {
238
+ try {
239
+ (0, portless_js_1.applyPrivilegedCommands)(plan.remove);
240
+ }
241
+ catch (rollbackError) {
242
+ throw new Error(`${error instanceof Error ? error.message : String(error)} Cleanup of a partially installed loopback forward also failed: ${rollbackError instanceof Error
243
+ ? rollbackError.message
244
+ : String(rollbackError)}`);
245
+ }
246
+ throw error;
247
+ }
248
+ }
249
+ const executor = async (options) => {
250
+ const paths = (0, tls_js_1.localTlsPaths)(options.appData);
251
+ const forward = (0, portless_js_1.createPortlessForwardPlan)();
252
+ let previousState;
253
+ let upgradeBackup;
254
+ let upgradeStaging;
255
+ let upgradeStoppedPrevious = false;
256
+ let previousGatewayWasRunning = false;
257
+ let upgradeSwapped = false;
258
+ let previousTrustRemoved = false;
259
+ let replacementTrustInstalled = false;
260
+ let replacementForwardInstalled = false;
261
+ try {
262
+ if (options.upgrade && !options.trust) {
263
+ throw new Error('dev-setup --upgrade requires --trust so the explicitly approved replacement root is installed with the new gateway.');
264
+ }
265
+ if (options.remove) {
266
+ const removableRoot = (0, node_fs_1.existsSync)(paths.rootCertificate)
267
+ ? paths.rootCertificate
268
+ : undefined;
269
+ if ((0, node_fs_1.existsSync)(paths.gatewayState)) {
270
+ const state = JSON.parse((0, node_fs_1.readFileSync)(paths.gatewayState, 'utf8'));
271
+ if (state.portless) {
272
+ (0, portless_js_1.applyPrivilegedCommands)((0, portless_js_1.createPortlessForwardPlan)().remove);
273
+ }
274
+ }
275
+ stopGateway(paths.gatewayPid);
276
+ if (options.trust && removableRoot && !untrustRoot(removableRoot)) {
277
+ devkit_1.logger.warn('The exact EBK root was not present in the detected user trust store.');
278
+ }
279
+ (0, tls_js_1.removeLocalTlsState)(paths.appData);
280
+ devkit_1.logger.info('Removed EBK gateway state. Trust was removed only when --trust was supplied.');
281
+ return { success: true };
282
+ }
283
+ if (options.upgrade) {
284
+ previousGatewayWasRunning = gatewayIsRunning(paths.gatewayPid);
285
+ if (previousGatewayWasRunning) {
286
+ const status = await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
287
+ action: 'status',
288
+ capability: (0, node_fs_1.readFileSync)(paths.capability, 'utf8').trim(),
289
+ });
290
+ if (status.activeSessions > 0) {
291
+ throw new Error(`Gateway upgrade refused while ${status.activeSessions} fleet session(s) are active. Stop them and retry.`);
292
+ }
293
+ }
294
+ previousState = (0, node_fs_1.existsSync)(paths.gatewayState)
295
+ ? JSON.parse((0, node_fs_1.readFileSync)(paths.gatewayState, 'utf8'))
296
+ : undefined;
297
+ upgradeStaging = `${paths.appData}.upgrade-${process.pid}`;
298
+ (0, node_fs_1.rmSync)(upgradeStaging, { force: true, recursive: true });
299
+ (0, tls_js_1.createLocalTlsState)({
300
+ appData: upgradeStaging,
301
+ capability: (0, gateway_js_1.createGatewayCapability)(),
302
+ hostSuffix: options.hostSuffix,
303
+ });
304
+ if (previousState?.portless) {
305
+ (0, portless_js_1.applyPrivilegedCommands)(forward.remove);
306
+ }
307
+ stopGateway(paths.gatewayPid);
308
+ await new Promise((resolve) => setTimeout(resolve, 500));
309
+ upgradeStoppedPrevious = true;
310
+ if ((0, node_fs_1.existsSync)(paths.rootCertificate)) {
311
+ previousTrustRemoved = untrustRoot(paths.rootCertificate);
312
+ }
313
+ upgradeBackup = `${paths.appData}.backup-${process.pid}`;
314
+ (0, node_fs_1.rmSync)(upgradeBackup, { force: true, recursive: true });
315
+ if ((0, node_fs_1.existsSync)(paths.appData)) {
316
+ (0, node_fs_1.renameSync)(paths.appData, upgradeBackup);
317
+ }
318
+ (0, node_fs_1.renameSync)(upgradeStaging, paths.appData);
319
+ upgradeStaging = undefined;
320
+ upgradeSwapped = true;
321
+ }
322
+ if (!(0, node_fs_1.existsSync)(paths.rootCertificate)) {
323
+ (0, tls_js_1.createLocalTlsState)({
324
+ appData: paths.appData,
325
+ capability: (0, gateway_js_1.createGatewayCapability)(),
326
+ hostSuffix: options.hostSuffix,
327
+ });
328
+ }
329
+ const hostSuffix = (0, identity_js_1.normalizeFleetHostSuffix)(options.hostSuffix);
330
+ const leaf = new node_crypto_1.X509Certificate((0, node_fs_1.readFileSync)(paths.leafCertificate));
331
+ if (!leaf.checkHost(`gateway.${hostSuffix}`)) {
332
+ throw new Error(`Existing gateway certificate does not cover *.${hostSuffix}. Use dev-setup --upgrade --trust with the desired hostSuffix.`);
333
+ }
334
+ if (options.trust) {
335
+ trustRoot(paths.rootCertificate);
336
+ replacementTrustInstalled = options.upgrade === true;
337
+ }
338
+ if (gatewayIsRunning(paths.gatewayPid)) {
339
+ const state = (0, node_fs_1.existsSync)(paths.gatewayState)
340
+ ? JSON.parse((0, node_fs_1.readFileSync)(paths.gatewayState, 'utf8'))
341
+ : {};
342
+ if (state.hostSuffix !== hostSuffix ||
343
+ Boolean(state.portless) !== Boolean(options.portless)) {
344
+ const status = await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
345
+ action: 'status',
346
+ capability: (0, node_fs_1.readFileSync)(paths.capability, 'utf8').trim(),
347
+ });
348
+ if (status.activeSessions > 0) {
349
+ throw new Error(`Gateway reconfiguration refused while ${status.activeSessions} fleet session(s) are active.`);
350
+ }
351
+ if (state.portless)
352
+ (0, portless_js_1.applyPrivilegedCommands)(forward.remove);
353
+ if (options.portless)
354
+ installPortlessForward(forward);
355
+ writeGatewayState(paths.gatewayState, {
356
+ hostSuffix,
357
+ internalPort: forward.internalPort,
358
+ portless: options.portless === true,
359
+ });
360
+ devkit_1.logger.info('Reconfigured the idle EBK gateway installation model.');
361
+ return { success: true };
362
+ }
363
+ devkit_1.logger.info('The compatible EBK machine gateway is already running.');
364
+ return { success: true };
365
+ }
366
+ if (options.portless) {
367
+ installPortlessForward(forward);
368
+ replacementForwardInstalled = options.upgrade === true;
369
+ }
370
+ writeGatewayState(paths.gatewayState, {
371
+ hostSuffix,
372
+ internalPort: forward.internalPort,
373
+ portless: options.portless === true,
374
+ });
375
+ try {
376
+ await startGateway(paths.appData, forward.internalPort);
377
+ }
378
+ catch (error) {
379
+ stopGateway(paths.gatewayPid);
380
+ (0, node_fs_1.rmSync)(paths.gatewayState, { force: true });
381
+ if (options.portless && !options.upgrade) {
382
+ try {
383
+ (0, portless_js_1.applyPrivilegedCommands)(forward.remove);
384
+ }
385
+ catch (rollbackError) {
386
+ devkit_1.logger.error(`Gateway startup failed and the loopback forwarding rule could not be rolled back: ${rollbackError instanceof Error
387
+ ? rollbackError.message
388
+ : String(rollbackError)}`);
389
+ }
390
+ }
391
+ throw error;
392
+ }
393
+ if (upgradeBackup) {
394
+ (0, node_fs_1.rmSync)(upgradeBackup, { force: true, recursive: true });
395
+ upgradeBackup = undefined;
396
+ }
397
+ devkit_1.logger.info(options.portless
398
+ ? 'EBK gateway started with a loopback-only port-443 forward.'
399
+ : `EBK gateway runtime started on internal loopback port ${forward.internalPort}; fleet sessions will use explicit-port HTTPS until dev-setup --trust --portless is approved.`);
400
+ if (!options.trust) {
401
+ devkit_1.logger.warn('The root certificate was created but not trusted. Review it and rerun dev-setup --trust to explicitly approve user trust installation.');
402
+ }
403
+ return { success: true };
404
+ }
405
+ catch (error) {
406
+ if (upgradeStaging) {
407
+ (0, node_fs_1.rmSync)(upgradeStaging, { force: true, recursive: true });
408
+ }
409
+ if (options.upgrade && upgradeStoppedPrevious) {
410
+ try {
411
+ stopGateway(paths.gatewayPid);
412
+ if (replacementForwardInstalled || options.portless) {
413
+ try {
414
+ (0, portless_js_1.applyPrivilegedCommands)(forward.remove);
415
+ }
416
+ catch (forwardRollbackError) {
417
+ devkit_1.logger.warn(`Loopback-forward rollback needs manual verification: ${forwardRollbackError instanceof Error
418
+ ? forwardRollbackError.message
419
+ : String(forwardRollbackError)}`);
420
+ }
421
+ }
422
+ if (replacementTrustInstalled && (0, node_fs_1.existsSync)(paths.rootCertificate)) {
423
+ untrustRoot(paths.rootCertificate);
424
+ }
425
+ if (upgradeBackup && (0, node_fs_1.existsSync)(upgradeBackup)) {
426
+ if (upgradeSwapped) {
427
+ (0, node_fs_1.rmSync)(paths.appData, { force: true, recursive: true });
428
+ }
429
+ (0, node_fs_1.renameSync)(upgradeBackup, paths.appData);
430
+ upgradeBackup = undefined;
431
+ }
432
+ if (previousTrustRemoved && (0, node_fs_1.existsSync)(paths.rootCertificate)) {
433
+ trustRoot(paths.rootCertificate);
434
+ }
435
+ if (previousState?.portless) {
436
+ installPortlessForward(forward);
437
+ }
438
+ if (previousState && previousGatewayWasRunning) {
439
+ await startGateway(paths.appData, previousState.internalPort ?? forward.internalPort);
440
+ }
441
+ devkit_1.logger.warn('The gateway upgrade failed and the previous gateway state was restored.');
442
+ }
443
+ catch (rollbackError) {
444
+ devkit_1.logger.error(`The gateway upgrade failed and rollback also needs manual recovery: ${rollbackError instanceof Error
445
+ ? rollbackError.message
446
+ : String(rollbackError)}`);
447
+ }
448
+ }
449
+ devkit_1.logger.error(error instanceof Error ? error.message : String(error));
450
+ return { success: false };
451
+ }
452
+ };
453
+ exports.default = executor;
454
+ //# sourceMappingURL=dev-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-setup.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/executors/dev-setup/dev-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "version": 2,
4
+ "title": "Empire Builder Kit local development setup",
5
+ "description": "Explicitly create, upgrade, trust, or remove per-user EBK HTTPS gateway state.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "appData": { "type": "string" },
10
+ "hostSuffix": { "type": "string", "default": "ebk.localhost" },
11
+ "portless": { "type": "boolean", "default": false },
12
+ "remove": { "type": "boolean", "default": false },
13
+ "trust": { "type": "boolean", "default": false },
14
+ "upgrade": { "type": "boolean", "default": false }
15
+ }
16
+ }
@@ -0,0 +1,51 @@
1
+ import { type ExecutorContext, type PromiseExecutor } from '@nx/devkit';
2
+ import { type LocalDevAdapter } from '../../local-dev/contracts.js';
3
+ import { sendGatewayCommand, type GatewayRegistrationRequest } from '../../local-dev/gateway.js';
4
+ interface FleetOptions {
5
+ appData?: string;
6
+ developmentRouterUrl?: string;
7
+ hostSuffix?: string;
8
+ profile?: string;
9
+ region?: string;
10
+ safeMethodFallback?: boolean;
11
+ slices: string;
12
+ stage: string;
13
+ }
14
+ export interface FleetPlan {
15
+ adapters: ReadonlyMap<string, LocalDevAdapter>;
16
+ hostname: string;
17
+ id: string;
18
+ selected: string[];
19
+ stage: string;
20
+ }
21
+ export declare function buildFleetPlan(options: FleetOptions, context: Pick<ExecutorContext, 'projectName' | 'projectsConfigurations' | 'root'>): FleetPlan;
22
+ export declare function probeGatewayTls(options: {
23
+ ca: string | Buffer;
24
+ hostname: string;
25
+ port?: number;
26
+ timeoutMs?: number;
27
+ }): Promise<void>;
28
+ export interface FleetGatewayPreferenceOptions {
29
+ capability: string;
30
+ gatewaySocket: string;
31
+ gatewayState?: {
32
+ hostSuffix?: string;
33
+ portless?: boolean;
34
+ schemaVersion?: number;
35
+ };
36
+ hostSuffix: string;
37
+ registration: GatewayRegistrationRequest & {
38
+ action: 'register';
39
+ };
40
+ rootCertificate: string | Buffer;
41
+ }
42
+ export declare function evaluatePortlessGateway(options: FleetGatewayPreferenceOptions, dependencies?: {
43
+ probe?: typeof probeGatewayTls;
44
+ send?: typeof sendGatewayCommand;
45
+ }): Promise<{
46
+ portless: boolean;
47
+ warning?: string;
48
+ }>;
49
+ export declare function fleetRestartDelay(attempt: number): number;
50
+ declare const executor: PromiseExecutor<FleetOptions>;
51
+ export default executor;