@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,529 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildFleetPlan = buildFleetPlan;
4
+ exports.probeGatewayTls = probeGatewayTls;
5
+ exports.evaluatePortlessGateway = evaluatePortlessGateway;
6
+ exports.fleetRestartDelay = fleetRestartDelay;
7
+ const devkit_1 = require("@nx/devkit");
8
+ const node_child_process_1 = require("node:child_process");
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = require("node:path");
12
+ const preflight_js_1 = require("../../foundation/preflight.js");
13
+ const discovery_js_1 = require("../../foundation/discovery.js");
14
+ const contracts_js_1 = require("../../local-dev/contracts.js");
15
+ const gateway_js_1 = require("../../local-dev/gateway.js");
16
+ const identity_js_1 = require("../../local-dev/identity.js");
17
+ const ports_js_1 = require("../../local-dev/ports.js");
18
+ const proxy_js_1 = require("../../local-dev/proxy.js");
19
+ const tls_js_1 = require("../../local-dev/tls.js");
20
+ const node_tls_1 = require("node:tls");
21
+ const dev_doctor_js_1 = require("../dev-doctor/dev-doctor.js");
22
+ function parseSelected(input) {
23
+ const selected = input
24
+ .split(',')
25
+ .map((value) => value.trim())
26
+ .filter(Boolean);
27
+ if (selected.length === 0) {
28
+ throw new Error('Fleet --slices must select at least one Product Slice.');
29
+ }
30
+ if (new Set(selected).size !== selected.length) {
31
+ throw new Error('Fleet --slices must not contain duplicate names.');
32
+ }
33
+ return selected;
34
+ }
35
+ function buildFleetPlan(options, context) {
36
+ const stage = (0, identity_js_1.requirePersonalFleetStage)(options.stage);
37
+ const projects = (context.projectsConfigurations?.projects ?? {});
38
+ const selected = parseSelected(options.slices);
39
+ for (const name of selected) {
40
+ if (!projects[name]?.tags?.includes('type:slice')) {
41
+ throw new Error(`Selected fleet project ${name} is not a Product Slice.`);
42
+ }
43
+ }
44
+ const sliceEntries = Object.entries(projects)
45
+ .filter(([, project]) => project.tags?.includes('type:slice'))
46
+ .filter(([, project]) => project.metadata?.ebk?.localDev !== undefined)
47
+ .flatMap(([name, project]) => {
48
+ try {
49
+ (0, contracts_js_1.validateLocalDevAdapter)(project.metadata?.ebk?.localDev);
50
+ return [{ adapter: project.metadata?.ebk?.localDev, name }];
51
+ }
52
+ catch (error) {
53
+ if (selected.includes(name)) {
54
+ throw new Error(`Selected Product Slice ${name} has an invalid metadata.ebk.localDev adapter: ${error instanceof Error ? error.message : String(error)}`);
55
+ }
56
+ return [];
57
+ }
58
+ });
59
+ const adapters = (0, contracts_js_1.validateFleetAdapters)(sliceEntries);
60
+ for (const name of selected) {
61
+ if (!adapters.has(name)) {
62
+ throw new Error(`Selected Product Slice ${name} has no valid metadata.ebk.localDev adapter.`);
63
+ }
64
+ }
65
+ const id = (0, identity_js_1.createFleetId)({
66
+ checkoutPath: context.root,
67
+ stage,
68
+ workspaceName: context.projectName ?? 'workspace',
69
+ });
70
+ return {
71
+ adapters,
72
+ hostname: (0, identity_js_1.createFleetHostname)(id, options.hostSuffix),
73
+ id,
74
+ selected,
75
+ stage,
76
+ };
77
+ }
78
+ async function developmentRouter(options) {
79
+ if (options.developmentRouterUrl?.trim()) {
80
+ const url = new URL(options.developmentRouterUrl.trim());
81
+ if (url.protocol !== 'https:') {
82
+ throw new Error('developmentRouterUrl must use HTTPS.');
83
+ }
84
+ return url;
85
+ }
86
+ const reader = (0, preflight_js_1.createFoundationParameterReader)({
87
+ profile: options.profile,
88
+ region: options.region,
89
+ });
90
+ const region = await reader.resolveRegion();
91
+ const report = await (0, preflight_js_1.evaluateFoundationPreflight)({
92
+ consumerStage: options.stage,
93
+ foundationStage: 'development',
94
+ readParameters: reader.read,
95
+ region,
96
+ requirement: discovery_js_1.STANDARD_FOUNDATION_REQUIREMENT,
97
+ });
98
+ if (!report.ok || !report.discovery) {
99
+ throw new Error(`Development Foundation preflight failed: ${report.issues.join('; ') || 'discovery unavailable'}`);
100
+ }
101
+ const url = new URL(report.discovery.routerUrl);
102
+ if (url.protocol !== 'https:') {
103
+ throw new Error(`Development Foundation Router ${url.toString()} must use HTTPS.`);
104
+ }
105
+ return url;
106
+ }
107
+ function packageVersion() {
108
+ const manifest = require('../../../package.json');
109
+ return manifest.version ?? '0.0.0';
110
+ }
111
+ function registrationRequest(options) {
112
+ return {
113
+ action: 'register',
114
+ capability: options.capability,
115
+ clientFrameworkVersion: packageVersion(),
116
+ hostname: options.hostname,
117
+ protocol: {
118
+ maximum: contracts_js_1.GATEWAY_PROTOCOL_VERSION,
119
+ minimum: contracts_js_1.GATEWAY_PROTOCOL_VERSION,
120
+ },
121
+ proxyPort: options.proxyPort,
122
+ sessionId: options.sessionId,
123
+ sessionManifestVersion: contracts_js_1.SESSION_MANIFEST_VERSION,
124
+ };
125
+ }
126
+ async function waitForReadiness(route, signal, onStateChange, timeoutMs = 120_000) {
127
+ if (!route.adapter || !route.upstream)
128
+ return;
129
+ const deadline = Date.now() + timeoutMs;
130
+ const target = new URL(route.adapter.healthPath, route.upstream);
131
+ while (Date.now() < deadline && !signal.aborted) {
132
+ try {
133
+ const response = await fetch(target, {
134
+ redirect: 'manual',
135
+ signal: AbortSignal.timeout(2_000),
136
+ });
137
+ if (response.ok) {
138
+ route.state = 'ready';
139
+ onStateChange?.();
140
+ return;
141
+ }
142
+ }
143
+ catch {
144
+ // The supervised child may still be starting.
145
+ }
146
+ await new Promise((resolve) => setTimeout(resolve, 500));
147
+ }
148
+ route.state = 'unavailable';
149
+ onStateChange?.();
150
+ if (!signal.aborted) {
151
+ throw new Error(`${route.name} did not become ready at ${target.toString()} within ${timeoutMs}ms.`);
152
+ }
153
+ }
154
+ async function terminateChild(child) {
155
+ if (child.exitCode !== null || child.signalCode !== null)
156
+ return;
157
+ const exited = new Promise((resolve) => child.once('exit', () => resolve()));
158
+ if (process.platform === 'win32' && child.pid) {
159
+ const killer = (0, node_child_process_1.spawn)('taskkill', ['/pid', String(child.pid), '/t', '/f'], {
160
+ stdio: 'ignore',
161
+ windowsHide: true,
162
+ });
163
+ await new Promise((resolve) => killer.once('exit', () => resolve()));
164
+ await Promise.race([
165
+ exited,
166
+ new Promise((resolve) => setTimeout(resolve, 2_000)),
167
+ ]);
168
+ return;
169
+ }
170
+ if (child.pid) {
171
+ try {
172
+ process.kill(-child.pid, 'SIGTERM');
173
+ }
174
+ catch {
175
+ child.kill('SIGTERM');
176
+ }
177
+ }
178
+ const stopped = await Promise.race([
179
+ exited.then(() => true),
180
+ new Promise((resolve) => setTimeout(() => resolve(false), 5_000)),
181
+ ]);
182
+ if (!stopped && child.pid) {
183
+ try {
184
+ process.kill(-child.pid, 'SIGKILL');
185
+ }
186
+ catch {
187
+ child.kill('SIGKILL');
188
+ }
189
+ await Promise.race([
190
+ exited,
191
+ new Promise((resolve) => setTimeout(resolve, 1_000)),
192
+ ]);
193
+ }
194
+ }
195
+ async function probeGatewayTls(options) {
196
+ await new Promise((resolve, reject) => {
197
+ const socket = (0, node_tls_1.connect)({
198
+ ca: options.ca,
199
+ host: '127.0.0.1',
200
+ port: options.port ?? 443,
201
+ rejectUnauthorized: true,
202
+ servername: options.hostname,
203
+ });
204
+ let settled = false;
205
+ const finish = (error) => {
206
+ if (settled)
207
+ return;
208
+ settled = true;
209
+ socket.destroy();
210
+ if (error)
211
+ reject(error);
212
+ else
213
+ resolve();
214
+ };
215
+ socket.setTimeout(options.timeoutMs ?? 2_000, () => finish(new Error('Gateway TLS probe timed out.')));
216
+ socket.once('secureConnect', () => finish());
217
+ socket.once('error', (error) => finish(error));
218
+ });
219
+ }
220
+ async function evaluatePortlessGateway(options, dependencies = {}) {
221
+ if (options.gatewayState?.portless !== true ||
222
+ options.gatewayState.schemaVersion !== 1 ||
223
+ options.gatewayState.hostSuffix !== options.hostSuffix) {
224
+ return { portless: false };
225
+ }
226
+ const send = dependencies.send ?? gateway_js_1.sendGatewayCommand;
227
+ let registered = false;
228
+ try {
229
+ const status = await send(options.gatewaySocket, { action: 'status', capability: options.capability });
230
+ if (status.protocolVersion !== contracts_js_1.GATEWAY_PROTOCOL_VERSION) {
231
+ return {
232
+ portless: false,
233
+ warning: `Machine gateway protocol ${status.protocolVersion} is incompatible with client protocol ${contracts_js_1.GATEWAY_PROTOCOL_VERSION}; using explicit-port HTTPS without replacing the gateway.`,
234
+ };
235
+ }
236
+ await send(options.gatewaySocket, options.registration);
237
+ registered = true;
238
+ await (dependencies.probe ?? probeGatewayTls)({
239
+ ca: options.rootCertificate,
240
+ hostname: options.registration.hostname,
241
+ });
242
+ return { portless: true };
243
+ }
244
+ catch (error) {
245
+ return {
246
+ portless: false,
247
+ warning: `Portless gateway preflight failed (${error instanceof Error ? error.message : String(error)}); using the explicit-port HTTPS fallback.`,
248
+ };
249
+ }
250
+ finally {
251
+ if (registered) {
252
+ await send(options.gatewaySocket, {
253
+ action: 'unregister',
254
+ capability: options.capability,
255
+ hostname: options.registration.hostname,
256
+ sessionId: options.registration.sessionId,
257
+ }).catch(() => undefined);
258
+ }
259
+ }
260
+ }
261
+ function fleetRestartDelay(attempt) {
262
+ if (!Number.isInteger(attempt) || attempt < 0) {
263
+ throw new Error('Fleet restart attempt must be a non-negative integer.');
264
+ }
265
+ return Math.min(1_000 * 2 ** Math.min(attempt, 5), 30_000);
266
+ }
267
+ function startSlice(name, adapter, port, origin, stage, context) {
268
+ const executable = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm';
269
+ return (0, node_child_process_1.spawn)(executable, [
270
+ 'exec',
271
+ 'nx',
272
+ 'run',
273
+ `${name}:${adapter.target}`,
274
+ `--stage=${stage}`,
275
+ '--foundationStage=development',
276
+ ], {
277
+ cwd: context.root,
278
+ env: {
279
+ ...process.env,
280
+ [adapter.portEnvironment]: String(port),
281
+ EBK_AUTH_CALLBACK_URLS: JSON.stringify(adapter.auth?.callbackPaths?.map((path) => new URL(path, origin).toString()) ?? []),
282
+ EBK_AUTH_LOGOUT_URLS: JSON.stringify(adapter.auth?.logoutPaths?.map((path) => new URL(path, origin).toString()) ?? []),
283
+ EBK_CONSUMER_STAGE: stage,
284
+ EBK_FLEET_ORIGIN: origin.origin,
285
+ EBK_FOUNDATION_STAGE: 'development',
286
+ EBK_SECURE_COOKIES: 'true',
287
+ },
288
+ shell: false,
289
+ stdio: 'inherit',
290
+ windowsHide: true,
291
+ ...(process.platform === 'win32' ? {} : { detached: true }),
292
+ });
293
+ }
294
+ const executor = async (options, context) => {
295
+ const children = [];
296
+ const controller = new AbortController();
297
+ let proxy;
298
+ let fallbackGateway;
299
+ let heartbeat;
300
+ let portless = false;
301
+ let registered = false;
302
+ let capability;
303
+ let plan;
304
+ let manifestPath;
305
+ let fallbackIpcPath;
306
+ const paths = (0, tls_js_1.localTlsPaths)(options.appData);
307
+ const cleanup = async () => {
308
+ controller.abort();
309
+ if (heartbeat)
310
+ clearInterval(heartbeat);
311
+ if (registered && plan && capability) {
312
+ await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
313
+ action: 'unregister',
314
+ capability,
315
+ hostname: plan.hostname,
316
+ sessionId: plan.id,
317
+ }).catch(() => undefined);
318
+ }
319
+ for (const child of [...children].reverse())
320
+ await terminateChild(child);
321
+ await fallbackGateway?.close().catch(() => undefined);
322
+ if (fallbackIpcPath && process.platform !== 'win32')
323
+ (0, node_fs_1.rmSync)(fallbackIpcPath, { force: true });
324
+ await proxy?.close().catch(() => undefined);
325
+ if (manifestPath)
326
+ (0, node_fs_1.rmSync)(manifestPath, { force: true });
327
+ };
328
+ try {
329
+ plan = buildFleetPlan(options, context);
330
+ const doctor = await (0, dev_doctor_js_1.inspectLocalDevelopment)({ appData: options.appData, hostname: plan.hostname, stage: plan.stage }, context);
331
+ if (doctor.tls !== 'ready' || doctor.trust !== 'ready') {
332
+ throw new Error('EBK local HTTPS trust is incomplete. Run dev-doctor, inspect the generated root, and explicitly run dev-setup --trust before fleet development.');
333
+ }
334
+ for (const required of [
335
+ paths.capability,
336
+ paths.leafCertificate,
337
+ paths.leafKey,
338
+ ]) {
339
+ try {
340
+ (0, node_fs_1.readFileSync)(required);
341
+ }
342
+ catch {
343
+ throw new Error('EBK local TLS state is missing. Run the generated dev-setup target, inspect the root, and explicitly approve trust installation before fleet development.');
344
+ }
345
+ }
346
+ const leaf = new node_crypto_1.X509Certificate((0, node_fs_1.readFileSync)(paths.leafCertificate));
347
+ if (!leaf.checkHost(plan.hostname)) {
348
+ throw new Error(`EBK local certificate does not cover ${plan.hostname}. Run dev-setup --upgrade --trust with --hostSuffix=${options.hostSuffix ?? 'ebk.localhost'}.`);
349
+ }
350
+ const remoteOrigin = await developmentRouter(options);
351
+ const reserved = new Set();
352
+ const proxyPort = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:proxy`, {
353
+ reserved,
354
+ });
355
+ reserved.add(proxyPort);
356
+ capability = (0, node_fs_1.readFileSync)(paths.capability, 'utf8').trim();
357
+ const registration = registrationRequest({
358
+ capability,
359
+ hostname: plan.hostname,
360
+ proxyPort,
361
+ sessionId: plan.id,
362
+ });
363
+ const gatewayState = (() => {
364
+ try {
365
+ return JSON.parse((0, node_fs_1.readFileSync)(paths.gatewayState, 'utf8'));
366
+ }
367
+ catch {
368
+ return undefined;
369
+ }
370
+ })();
371
+ const gatewayPreference = await evaluatePortlessGateway({
372
+ capability,
373
+ gatewaySocket: paths.gatewaySocket,
374
+ gatewayState,
375
+ hostSuffix: (0, identity_js_1.normalizeFleetHostSuffix)(options.hostSuffix),
376
+ registration,
377
+ rootCertificate: (0, node_fs_1.readFileSync)(paths.rootCertificate),
378
+ });
379
+ portless = gatewayPreference.portless;
380
+ if (gatewayPreference.warning)
381
+ devkit_1.logger.warn(gatewayPreference.warning);
382
+ let gatewayPort;
383
+ if (!portless) {
384
+ gatewayPort = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:gateway`, {
385
+ reserved,
386
+ });
387
+ reserved.add(gatewayPort);
388
+ }
389
+ const origin = new URL(`https://${plan.hostname}${gatewayPort ? `:${gatewayPort}` : ''}`);
390
+ const cache = (0, node_path_1.join)(context.root, '.ebk', 'cache');
391
+ (0, node_fs_1.mkdirSync)(cache, { recursive: true });
392
+ const routes = [...plan.adapters].map(([name, adapter]) => ({
393
+ adapter,
394
+ name,
395
+ selected: plan?.selected.includes(name) ?? false,
396
+ state: plan?.selected.includes(name) ? 'starting' : 'remote',
397
+ }));
398
+ for (const route of routes.filter(({ selected }) => selected)) {
399
+ const port = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:${route.name}`, { reserved });
400
+ reserved.add(port);
401
+ route.upstream = new URL(`http://127.0.0.1:${port}`);
402
+ }
403
+ proxy = new proxy_js_1.FleetSessionProxy({
404
+ certificateExpires: doctor.certificateExpires ?? leaf.validTo,
405
+ consumerStage: plan.stage,
406
+ fleetOrigin: origin,
407
+ foundationStage: 'development',
408
+ remoteOrigin,
409
+ routes,
410
+ safeMethodFallback: options.safeMethodFallback,
411
+ });
412
+ await proxy.listen(proxyPort);
413
+ if (portless) {
414
+ await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, registration);
415
+ registered = true;
416
+ proxy.setMode('gateway', 'registered');
417
+ heartbeat = setInterval(() => {
418
+ void (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
419
+ action: 'heartbeat',
420
+ capability,
421
+ hostname: plan?.hostname,
422
+ sessionId: plan?.id,
423
+ }).catch((error) => devkit_1.logger.warn(`Gateway heartbeat failed: ${String(error)}`));
424
+ }, 5_000);
425
+ heartbeat.unref();
426
+ }
427
+ else {
428
+ const registry = new gateway_js_1.GatewayRegistry(capability);
429
+ registry.register(registration);
430
+ fallbackGateway = new gateway_js_1.MachineGateway(registry, {
431
+ cert: (0, node_fs_1.readFileSync)(paths.leafCertificate),
432
+ key: (0, node_fs_1.readFileSync)(paths.leafKey),
433
+ });
434
+ fallbackIpcPath = (0, tls_js_1.createLocalIpcPath)((0, node_path_1.join)(context.root, '.ebk', 'cache'), plan.id);
435
+ if (process.platform !== 'win32')
436
+ (0, node_fs_1.rmSync)(fallbackIpcPath, { force: true });
437
+ await fallbackGateway.listen(gatewayPort, fallbackIpcPath);
438
+ proxy.setMode('explicit-port', 'standalone');
439
+ heartbeat = setInterval(() => {
440
+ try {
441
+ registry.heartbeat(plan?.hostname ?? '', plan?.id ?? '');
442
+ }
443
+ catch (error) {
444
+ devkit_1.logger.warn(`Explicit-port gateway heartbeat failed: ${String(error)}`);
445
+ }
446
+ }, 5_000);
447
+ heartbeat.unref();
448
+ devkit_1.logger.warn(`Machine gateway unavailable; using the HTTPS explicit-port gateway fallback at ${origin.origin}. This does not remediate resolver failures.`);
449
+ }
450
+ manifestPath = (0, node_path_1.join)(cache, `${plan.id}.json`);
451
+ const writeManifest = () => {
452
+ if (!manifestPath || !plan)
453
+ return;
454
+ (0, node_fs_1.writeFileSync)(manifestPath, `${JSON.stringify({
455
+ consumerStage: plan.stage,
456
+ fleetOrigin: origin.origin,
457
+ foundationStage: 'development',
458
+ gatewayMode: portless ? 'portless' : 'explicit-port',
459
+ hostname: plan.hostname,
460
+ routes: routes.map(({ adapter, name, selected, state, upstream }) => ({
461
+ name,
462
+ routePrefix: adapter?.routePrefix,
463
+ selected,
464
+ state,
465
+ upstream: upstream?.toString(),
466
+ })),
467
+ schemaVersion: contracts_js_1.SESSION_MANIFEST_VERSION,
468
+ }, null, 2)}\n`, { mode: 0o600 });
469
+ };
470
+ writeManifest();
471
+ const restartAttempts = new Map();
472
+ const launch = (route) => {
473
+ if (controller.signal.aborted)
474
+ return;
475
+ route.state = 'starting';
476
+ writeManifest();
477
+ const child = startSlice(route.name, route.adapter, Number(route.upstream?.port), origin, plan?.stage ?? options.stage, context);
478
+ children.push(child);
479
+ child.once('exit', () => {
480
+ const childIndex = children.indexOf(child);
481
+ if (childIndex >= 0)
482
+ children.splice(childIndex, 1);
483
+ if (controller.signal.aborted)
484
+ return;
485
+ route.state = 'unavailable';
486
+ writeManifest();
487
+ devkit_1.logger.warn(`${route.name} local process exited; mutating requests now fail closed while the supervisor restarts it.`);
488
+ const attempt = restartAttempts.get(route.name) ?? 0;
489
+ const delay = fleetRestartDelay(attempt);
490
+ restartAttempts.set(route.name, attempt + 1);
491
+ setTimeout(() => {
492
+ if (controller.signal.aborted)
493
+ return;
494
+ launch(route);
495
+ void waitForReadiness(route, controller.signal, writeManifest)
496
+ .then(() => restartAttempts.set(route.name, 0))
497
+ .catch((error) => {
498
+ route.state = 'unavailable';
499
+ writeManifest();
500
+ devkit_1.logger.error(String(error));
501
+ });
502
+ }, delay).unref();
503
+ });
504
+ };
505
+ for (const route of routes.filter(({ selected }) => selected))
506
+ launch(route);
507
+ await Promise.all(routes
508
+ .filter(({ selected }) => selected)
509
+ .map((route) => waitForReadiness(route, controller.signal, writeManifest).then(() => restartAttempts.set(route.name, 0))));
510
+ devkit_1.logger.info(`EBK fleet ready at ${origin.origin}`);
511
+ for (const route of routes) {
512
+ devkit_1.logger.info(` ${route.adapter?.routePrefix ?? route.name}: ${route.state} (${route.selected ? route.upstream : remoteOrigin})`);
513
+ }
514
+ await new Promise((resolve) => {
515
+ const stop = () => resolve();
516
+ process.once('SIGINT', stop);
517
+ process.once('SIGTERM', stop);
518
+ });
519
+ await cleanup();
520
+ return { success: true };
521
+ }
522
+ catch (error) {
523
+ devkit_1.logger.error(`[fleet] ${error instanceof Error ? error.message : String(error)}`);
524
+ await cleanup();
525
+ return { success: false };
526
+ }
527
+ };
528
+ exports.default = executor;
529
+ //# sourceMappingURL=fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/executors/fleet/fleet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "version": 2,
4
+ "title": "Empire Builder Kit local fleet",
5
+ "description": "Run selected Product Slices locally behind one checkout-isolated HTTPS origin and route the rest to the development Foundation.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "appData": { "type": "string" },
10
+ "developmentRouterUrl": { "type": "string" },
11
+ "hostSuffix": { "type": "string", "default": "ebk.localhost" },
12
+ "profile": { "type": "string" },
13
+ "region": { "type": "string" },
14
+ "safeMethodFallback": { "type": "boolean", "default": false },
15
+ "slices": {
16
+ "description": "Comma-separated Product Slice names to run locally.",
17
+ "type": "string"
18
+ },
19
+ "stage": {
20
+ "type": "string",
21
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
22
+ }
23
+ },
24
+ "required": ["slices", "stage"]
25
+ }
@@ -0,0 +1,15 @@
1
+ import { type PromiseExecutor } from '@nx/devkit';
2
+ import type { FoundationRequirement } from '../../foundation/requirements.js';
3
+ interface FoundationPreflightOptions {
4
+ advisory?: boolean;
5
+ capabilities?: FoundationRequirement['capabilities'];
6
+ contract?: string;
7
+ deployIfMissing?: boolean;
8
+ foundationProject?: string;
9
+ foundationStage?: string;
10
+ profile?: string;
11
+ region?: string;
12
+ stage: string;
13
+ }
14
+ declare const executor: PromiseExecutor<FoundationPreflightOptions>;
15
+ export default executor;