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

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 (243) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +34 -0
  4. package/executors.json +74 -0
  5. package/generators.json +40 -0
  6. package/migrations/standard-pre-v1-to-v1.md +11 -0
  7. package/package.json +80 -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 +281 -0
  18. package/src/blueprints/manifest.js +441 -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 +218 -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/deployment-plan/deployment-plan.d.ts +9 -0
  30. package/src/executors/deployment-plan/deployment-plan.js +50 -0
  31. package/src/executors/deployment-plan/deployment-plan.js.map +1 -0
  32. package/src/executors/deployment-plan/schema.json +24 -0
  33. package/src/executors/dev/dev.d.ts +4 -0
  34. package/src/executors/dev/dev.js +6 -0
  35. package/src/executors/dev/dev.js.map +1 -0
  36. package/src/executors/dev-doctor/dev-doctor.d.ts +31 -0
  37. package/src/executors/dev-doctor/dev-doctor.js +260 -0
  38. package/src/executors/dev-doctor/dev-doctor.js.map +1 -0
  39. package/src/executors/dev-doctor/schema.json +17 -0
  40. package/src/executors/dev-setup/dev-setup.d.ts +11 -0
  41. package/src/executors/dev-setup/dev-setup.js +454 -0
  42. package/src/executors/dev-setup/dev-setup.js.map +1 -0
  43. package/src/executors/dev-setup/schema.json +16 -0
  44. package/src/executors/fleet/fleet.d.ts +62 -0
  45. package/src/executors/fleet/fleet.js +613 -0
  46. package/src/executors/fleet/fleet.js.map +1 -0
  47. package/src/executors/fleet/schema.json +37 -0
  48. package/src/executors/foundation-preflight/foundation-preflight.d.ts +15 -0
  49. package/src/executors/foundation-preflight/foundation-preflight.js +116 -0
  50. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -0
  51. package/src/executors/foundation-preflight/schema.json +31 -0
  52. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +8 -0
  53. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +41 -0
  54. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -0
  55. package/src/executors/foundation-profile-preflight/schema.json +21 -0
  56. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +13 -0
  57. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +69 -0
  58. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -0
  59. package/src/executors/foundation-remove-preflight/schema.json +17 -0
  60. package/src/executors/github-bootstrap/github-bootstrap.d.ts +8 -0
  61. package/src/executors/github-bootstrap/github-bootstrap.js +30 -0
  62. package/src/executors/github-bootstrap/github-bootstrap.js.map +1 -0
  63. package/src/executors/github-bootstrap/schema.json +25 -0
  64. package/src/executors/refresh/refresh.d.ts +4 -0
  65. package/src/executors/refresh/refresh.js +6 -0
  66. package/src/executors/refresh/refresh.js.map +1 -0
  67. package/src/executors/remove/remove.d.ts +4 -0
  68. package/src/executors/remove/remove.js +6 -0
  69. package/src/executors/remove/remove.js.map +1 -0
  70. package/src/executors/sst-lifecycle/run-sst-command.d.ts +31 -0
  71. package/src/executors/sst-lifecycle/run-sst-command.js +226 -0
  72. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -0
  73. package/src/executors/sst-lifecycle/schema.json +45 -0
  74. package/src/executors/unlock/unlock.d.ts +4 -0
  75. package/src/executors/unlock/unlock.js +6 -0
  76. package/src/executors/unlock/unlock.js.map +1 -0
  77. package/src/executors/work-markers/schema.json +14 -0
  78. package/src/executors/work-markers/work-markers.d.ts +6 -0
  79. package/src/executors/work-markers/work-markers.js +20 -0
  80. package/src/executors/work-markers/work-markers.js.map +1 -0
  81. package/src/foundation/aurora-logical-database.d.ts +76 -0
  82. package/src/foundation/aurora-logical-database.js +419 -0
  83. package/src/foundation/aurora-logical-database.js.map +1 -0
  84. package/src/foundation/discovery.d.ts +55 -0
  85. package/src/foundation/discovery.js +55 -0
  86. package/src/foundation/discovery.js.map +1 -0
  87. package/src/foundation/index.d.ts +6 -0
  88. package/src/foundation/index.js +10 -0
  89. package/src/foundation/index.js.map +1 -0
  90. package/src/foundation/local-database-contract.d.ts +30 -0
  91. package/src/foundation/local-database-contract.js +75 -0
  92. package/src/foundation/local-database-contract.js.map +1 -0
  93. package/src/foundation/preflight.d.ts +31 -0
  94. package/src/foundation/preflight.js +114 -0
  95. package/src/foundation/preflight.js.map +1 -0
  96. package/src/foundation/provision-database-bindings.d.ts +30 -0
  97. package/src/foundation/provision-database-bindings.js +113 -0
  98. package/src/foundation/provision-database-bindings.js.map +1 -0
  99. package/src/foundation/provision-logical-database.d.ts +26 -0
  100. package/src/foundation/provision-logical-database.js +163 -0
  101. package/src/foundation/provision-logical-database.js.map +1 -0
  102. package/src/foundation/requirements.d.ts +37 -0
  103. package/src/foundation/requirements.js +141 -0
  104. package/src/foundation/requirements.js.map +1 -0
  105. package/src/foundation/stages.d.ts +14 -0
  106. package/src/foundation/stages.js +51 -0
  107. package/src/foundation/stages.js.map +1 -0
  108. package/src/generators/function/function.d.ts +13 -0
  109. package/src/generators/function/function.js +71 -0
  110. package/src/generators/function/function.js.map +1 -0
  111. package/src/generators/function/schema.d.ts +5 -0
  112. package/src/generators/function/schema.json +20 -0
  113. package/src/generators/job/job.d.ts +4 -0
  114. package/src/generators/job/job.js +5 -0
  115. package/src/generators/job/job.js.map +1 -0
  116. package/src/generators/preset/generator.d.ts +5 -0
  117. package/src/generators/preset/generator.js +41 -0
  118. package/src/generators/preset/generator.js.map +1 -0
  119. package/src/generators/preset/schema.d.ts +4 -0
  120. package/src/generators/preset/schema.json +22 -0
  121. package/src/generators/preset/workspace-files.d.ts +18 -0
  122. package/src/generators/preset/workspace-files.js +1605 -0
  123. package/src/generators/preset/workspace-files.js.map +1 -0
  124. package/src/generators/repository-policy/repository-policy.d.ts +4 -0
  125. package/src/generators/repository-policy/repository-policy.js +107 -0
  126. package/src/generators/repository-policy/repository-policy.js.map +1 -0
  127. package/src/generators/repository-policy/schema.d.ts +18 -0
  128. package/src/generators/repository-policy/schema.json +46 -0
  129. package/src/generators/service/service.d.ts +4 -0
  130. package/src/generators/service/service.js +5 -0
  131. package/src/generators/service/service.js.map +1 -0
  132. package/src/generators/slice/schema.d.ts +7 -0
  133. package/src/generators/slice/schema.json +38 -0
  134. package/src/generators/slice/slice.d.ts +26 -0
  135. package/src/generators/slice/slice.js +1698 -0
  136. package/src/generators/slice/slice.js.map +1 -0
  137. package/src/generators/upgrade/schema.d.ts +8 -0
  138. package/src/generators/upgrade/schema.json +31 -0
  139. package/src/generators/upgrade/upgrade.d.ts +27 -0
  140. package/src/generators/upgrade/upgrade.js +682 -0
  141. package/src/generators/upgrade/upgrade.js.map +1 -0
  142. package/src/generators/workload/schema.d.ts +6 -0
  143. package/src/generators/workload/schema.json +21 -0
  144. package/src/generators/workload/workload.d.ts +16 -0
  145. package/src/generators/workload/workload.js +157 -0
  146. package/src/generators/workload/workload.js.map +1 -0
  147. package/src/git-policy/action-pins.d.ts +28 -0
  148. package/src/git-policy/action-pins.js +35 -0
  149. package/src/git-policy/action-pins.js.map +1 -0
  150. package/src/git-policy/github-bootstrap.d.ts +23 -0
  151. package/src/git-policy/github-bootstrap.js +759 -0
  152. package/src/git-policy/github-bootstrap.js.map +1 -0
  153. package/src/git-policy/index.d.ts +3 -0
  154. package/src/git-policy/index.js +7 -0
  155. package/src/git-policy/index.js.map +1 -0
  156. package/src/git-policy/routing.d.ts +15 -0
  157. package/src/git-policy/routing.js +77 -0
  158. package/src/git-policy/routing.js.map +1 -0
  159. package/src/index.d.ts +8 -0
  160. package/src/index.js +12 -0
  161. package/src/index.js.map +1 -0
  162. package/src/local-dev/contracts.d.ts +31 -0
  163. package/src/local-dev/contracts.js +126 -0
  164. package/src/local-dev/contracts.js.map +1 -0
  165. package/src/local-dev/effects.d.ts +16 -0
  166. package/src/local-dev/effects.js +63 -0
  167. package/src/local-dev/effects.js.map +1 -0
  168. package/src/local-dev/gateway-daemon.d.ts +4 -0
  169. package/src/local-dev/gateway-daemon.js +39 -0
  170. package/src/local-dev/gateway-daemon.js.map +1 -0
  171. package/src/local-dev/gateway.d.ts +60 -0
  172. package/src/local-dev/gateway.js +368 -0
  173. package/src/local-dev/gateway.js.map +1 -0
  174. package/src/local-dev/identity.d.ts +16 -0
  175. package/src/local-dev/identity.js +101 -0
  176. package/src/local-dev/identity.js.map +1 -0
  177. package/src/local-dev/index.d.ts +7 -0
  178. package/src/local-dev/index.js +11 -0
  179. package/src/local-dev/index.js.map +1 -0
  180. package/src/local-dev/portless.d.ts +15 -0
  181. package/src/local-dev/portless.js +115 -0
  182. package/src/local-dev/portless.js.map +1 -0
  183. package/src/local-dev/ports.d.ts +10 -0
  184. package/src/local-dev/ports.js +39 -0
  185. package/src/local-dev/ports.js.map +1 -0
  186. package/src/local-dev/proxy.d.ts +37 -0
  187. package/src/local-dev/proxy.js +271 -0
  188. package/src/local-dev/proxy.js.map +1 -0
  189. package/src/local-dev/tls.d.ts +24 -0
  190. package/src/local-dev/tls.js +294 -0
  191. package/src/local-dev/tls.js.map +1 -0
  192. package/src/ownership/composition.d.ts +16 -0
  193. package/src/ownership/composition.js +125 -0
  194. package/src/ownership/composition.js.map +1 -0
  195. package/src/ownership/foundation-record.d.ts +66 -0
  196. package/src/ownership/foundation-record.js +108 -0
  197. package/src/ownership/foundation-record.js.map +1 -0
  198. package/src/ownership/hash.d.ts +2 -0
  199. package/src/ownership/hash.js +10 -0
  200. package/src/ownership/hash.js.map +1 -0
  201. package/src/ownership/index.d.ts +6 -0
  202. package/src/ownership/index.js +10 -0
  203. package/src/ownership/index.js.map +1 -0
  204. package/src/ownership/json-ownership.d.ts +13 -0
  205. package/src/ownership/json-ownership.js +147 -0
  206. package/src/ownership/json-ownership.js.map +1 -0
  207. package/src/ownership/record.d.ts +186 -0
  208. package/src/ownership/record.js +336 -0
  209. package/src/ownership/record.js.map +1 -0
  210. package/src/ownership/workspace-record.d.ts +66 -0
  211. package/src/ownership/workspace-record.js +108 -0
  212. package/src/ownership/workspace-record.js.map +1 -0
  213. package/src/repository-policy/aurora-preflight.d.ts +15 -0
  214. package/src/repository-policy/aurora-preflight.js +45 -0
  215. package/src/repository-policy/aurora-preflight.js.map +1 -0
  216. package/src/repository-policy/deployment-plan.d.ts +24 -0
  217. package/src/repository-policy/deployment-plan.js +124 -0
  218. package/src/repository-policy/deployment-plan.js.map +1 -0
  219. package/src/repository-policy/foundation-profile.d.ts +20 -0
  220. package/src/repository-policy/foundation-profile.js +45 -0
  221. package/src/repository-policy/foundation-profile.js.map +1 -0
  222. package/src/repository-policy/index.d.ts +4 -0
  223. package/src/repository-policy/index.js +8 -0
  224. package/src/repository-policy/index.js.map +1 -0
  225. package/src/repository-policy/policy.d.ts +59 -0
  226. package/src/repository-policy/policy.js +274 -0
  227. package/src/repository-policy/policy.js.map +1 -0
  228. package/src/schemas/blueprint-input-schema-v1.json +23 -0
  229. package/src/schemas/blueprint-v1.json +186 -0
  230. package/src/schemas/foundation-ownership-v2.json +42 -0
  231. package/src/schemas/foundation-requirement-v1.json +32 -0
  232. package/src/schemas/generated-ownership-v2.json +117 -0
  233. package/src/schemas/repository-policy-v1.json +58 -0
  234. package/src/schemas/workspace-ownership-v2.json +42 -0
  235. package/src/validation.d.ts +14 -0
  236. package/src/validation.js +14 -0
  237. package/src/validation.js.map +1 -0
  238. package/src/work-markers/index.d.ts +1 -0
  239. package/src/work-markers/index.js +5 -0
  240. package/src/work-markers/index.js.map +1 -0
  241. package/src/work-markers/work-markers.d.ts +39 -0
  242. package/src/work-markers/work-markers.js +359 -0
  243. package/src/work-markers/work-markers.js.map +1 -0
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatFleetAwsError = formatFleetAwsError;
4
+ exports.createFleetChildEnvironment = createFleetChildEnvironment;
5
+ exports.buildFleetPlan = buildFleetPlan;
6
+ exports.probeGatewayTls = probeGatewayTls;
7
+ exports.evaluatePortlessGateway = evaluatePortlessGateway;
8
+ exports.fleetRestartDelay = fleetRestartDelay;
9
+ exports.planFleetRestart = planFleetRestart;
10
+ const devkit_1 = require("@nx/devkit");
11
+ const node_child_process_1 = require("node:child_process");
12
+ const node_crypto_1 = require("node:crypto");
13
+ const node_fs_1 = require("node:fs");
14
+ const node_path_1 = require("node:path");
15
+ const preflight_js_1 = require("../../foundation/preflight.js");
16
+ const discovery_js_1 = require("../../foundation/discovery.js");
17
+ const contracts_js_1 = require("../../local-dev/contracts.js");
18
+ const gateway_js_1 = require("../../local-dev/gateway.js");
19
+ const identity_js_1 = require("../../local-dev/identity.js");
20
+ const ports_js_1 = require("../../local-dev/ports.js");
21
+ const proxy_js_1 = require("../../local-dev/proxy.js");
22
+ const tls_js_1 = require("../../local-dev/tls.js");
23
+ const effects_js_1 = require("../../local-dev/effects.js");
24
+ const dev_doctor_js_1 = require("../dev-doctor/dev-doctor.js");
25
+ function formatFleetAwsError(error, options) {
26
+ const message = error instanceof Error ? error.message : String(error);
27
+ const name = error instanceof Error ? error.name : '';
28
+ const profile = options.profile?.trim() || process.env.AWS_PROFILE?.trim() || undefined;
29
+ const region = options.region?.trim() ||
30
+ process.env.AWS_REGION?.trim() ||
31
+ process.env.AWS_DEFAULT_REGION?.trim() ||
32
+ undefined;
33
+ const withOriginalError = (guidance) => `${guidance} Original AWS error: ${message}`;
34
+ if (/region is missing/i.test(message)) {
35
+ return withOriginalError(`AWS region is not configured for local fleet discovery. Pass --region=<development-region>, set AWS_REGION, or configure a region on${profile ? ` profile ${profile}` : ' the bounded development profile'}.`);
36
+ }
37
+ if (/could not load credentials|credentialsprovidererror/i.test(`${name}: ${message}`)) {
38
+ return withOriginalError(profile
39
+ ? `AWS credentials are unavailable for development profile ${profile}. Run aws sso login --profile ${profile}, then retry the fleet command.`
40
+ : 'AWS credentials are unavailable for local fleet discovery. Pass --profile=<bounded-development-profile> or set AWS_PROFILE, complete aws sso login for that profile, and retry.');
41
+ }
42
+ if (/forbiddenexception|getrolecredentials/i.test(`${name}: ${message}`)) {
43
+ return withOriginalError(profile
44
+ ? `AWS Identity Center does not grant access through profile ${profile}. Select a currently assigned bounded development profile; signing in again does not repair a removed account or permission-set assignment.`
45
+ : 'AWS Identity Center denied access. Select a currently assigned bounded development profile with --profile or AWS_PROFILE.');
46
+ }
47
+ if (/accessdenied/i.test(`${name}: ${message}`)) {
48
+ return withOriginalError(`The selected AWS identity cannot read development Foundation discovery. The bounded development role needs ssm:GetParameters for /ebk/foundation/development/* in ${region ?? 'the configured development region'}.`);
49
+ }
50
+ return message;
51
+ }
52
+ function createFleetChildEnvironment(options, ambient = process.env) {
53
+ const environment = { ...ambient };
54
+ const profile = options.profile?.trim() || ambient.AWS_PROFILE?.trim();
55
+ const region = options.region?.trim() ||
56
+ ambient.AWS_REGION?.trim() ||
57
+ ambient.AWS_DEFAULT_REGION?.trim();
58
+ const sstMode = options.sstMode ?? 'mono';
59
+ if (sstMode !== 'mono' && sstMode !== 'multiplexer') {
60
+ throw new Error('Fleet sstMode must be mono or multiplexer.');
61
+ }
62
+ if (profile)
63
+ environment.AWS_PROFILE = profile;
64
+ if (region) {
65
+ environment.AWS_REGION = region;
66
+ environment.AWS_DEFAULT_REGION = region;
67
+ }
68
+ environment.EBK_SST_DEV_MODE = sstMode;
69
+ return environment;
70
+ }
71
+ function parseSelected(input) {
72
+ const selected = input
73
+ .split(',')
74
+ .map((value) => value.trim())
75
+ .filter(Boolean);
76
+ if (selected.length === 0) {
77
+ throw new Error('Fleet --slices must select at least one Product Slice.');
78
+ }
79
+ if (new Set(selected).size !== selected.length) {
80
+ throw new Error('Fleet --slices must not contain duplicate names.');
81
+ }
82
+ return selected;
83
+ }
84
+ function buildFleetPlan(options, context) {
85
+ const stage = (0, identity_js_1.requirePersonalFleetStage)(options.stage);
86
+ const projects = (context.projectsConfigurations?.projects ?? {});
87
+ const selected = parseSelected(options.slices);
88
+ for (const name of selected) {
89
+ if (!projects[name]?.tags?.includes('type:slice')) {
90
+ throw new Error(`Selected fleet project ${name} is not a Product Slice.`);
91
+ }
92
+ }
93
+ const sliceEntries = Object.entries(projects)
94
+ .filter(([, project]) => project.tags?.includes('type:slice'))
95
+ .filter(([, project]) => project.metadata?.ebk?.localDev !== undefined)
96
+ .flatMap(([name, project]) => {
97
+ try {
98
+ (0, contracts_js_1.validateLocalDevAdapter)(project.metadata?.ebk?.localDev);
99
+ return [{ adapter: project.metadata?.ebk?.localDev, name }];
100
+ }
101
+ catch (error) {
102
+ if (selected.includes(name)) {
103
+ throw new Error(`Selected Product Slice ${name} has an invalid metadata.ebk.localDev adapter: ${error instanceof Error ? error.message : String(error)}`);
104
+ }
105
+ return [];
106
+ }
107
+ });
108
+ const adapters = (0, contracts_js_1.validateFleetAdapters)(sliceEntries);
109
+ for (const name of selected) {
110
+ if (!adapters.has(name)) {
111
+ throw new Error(`Selected Product Slice ${name} has no valid metadata.ebk.localDev adapter.`);
112
+ }
113
+ }
114
+ const id = (0, identity_js_1.createFleetId)({
115
+ checkoutPath: context.root,
116
+ stage,
117
+ workspaceName: context.projectName ?? 'workspace',
118
+ });
119
+ return {
120
+ adapters,
121
+ hostname: (0, identity_js_1.createFleetHostname)(id, options.hostSuffix),
122
+ id,
123
+ selected,
124
+ stage,
125
+ };
126
+ }
127
+ async function developmentRouter(options) {
128
+ try {
129
+ if (options.developmentRouterUrl?.trim()) {
130
+ const url = new URL(options.developmentRouterUrl.trim());
131
+ if (url.protocol !== 'https:') {
132
+ throw new Error('developmentRouterUrl must use HTTPS.');
133
+ }
134
+ return {
135
+ region: options.region?.trim() ||
136
+ process.env.AWS_REGION?.trim() ||
137
+ process.env.AWS_DEFAULT_REGION?.trim(),
138
+ url,
139
+ };
140
+ }
141
+ const reader = (0, preflight_js_1.createFoundationParameterReader)({
142
+ profile: options.profile,
143
+ region: options.region,
144
+ });
145
+ const region = await reader.resolveRegion();
146
+ const report = await (0, preflight_js_1.evaluateFoundationPreflight)({
147
+ consumerStage: options.stage,
148
+ foundationStage: 'development',
149
+ readParameters: reader.read,
150
+ region,
151
+ requirement: discovery_js_1.STANDARD_FOUNDATION_REQUIREMENT,
152
+ });
153
+ if (!report.ok || !report.discovery) {
154
+ throw new Error(`Development Foundation preflight failed: ${report.issues.join('; ') || 'discovery unavailable'}`);
155
+ }
156
+ const url = new URL(report.discovery.routerUrl);
157
+ if (url.protocol !== 'https:') {
158
+ throw new Error(`Development Foundation Router ${url.toString()} must use HTTPS.`);
159
+ }
160
+ return { region, url };
161
+ }
162
+ catch (error) {
163
+ throw new Error(formatFleetAwsError(error, options));
164
+ }
165
+ }
166
+ function packageVersion() {
167
+ const manifest = require('../../../package.json');
168
+ return manifest.version ?? '0.0.0';
169
+ }
170
+ function registrationRequest(options) {
171
+ return {
172
+ action: 'register',
173
+ capability: options.capability,
174
+ clientFrameworkVersion: packageVersion(),
175
+ hostname: options.hostname,
176
+ protocol: {
177
+ maximum: contracts_js_1.GATEWAY_PROTOCOL_VERSION,
178
+ minimum: contracts_js_1.GATEWAY_PROTOCOL_VERSION,
179
+ },
180
+ proxyPort: options.proxyPort,
181
+ sessionId: options.sessionId,
182
+ sessionManifestVersion: contracts_js_1.SESSION_MANIFEST_VERSION,
183
+ };
184
+ }
185
+ async function waitForReadiness(route, signal, onStateChange, timeoutMs = 120_000, getFatalFailure) {
186
+ if (!route.adapter || !route.upstream)
187
+ return;
188
+ const deadline = Date.now() + timeoutMs;
189
+ const target = new URL(route.adapter.healthPath, route.upstream);
190
+ while (Date.now() < deadline && !signal.aborted) {
191
+ const fatalFailure = getFatalFailure?.();
192
+ if (fatalFailure)
193
+ throw fatalFailure;
194
+ try {
195
+ const response = await fetch(target, {
196
+ redirect: 'manual',
197
+ signal: AbortSignal.timeout(2_000),
198
+ });
199
+ if (response.ok) {
200
+ route.state = 'ready';
201
+ onStateChange?.();
202
+ return;
203
+ }
204
+ }
205
+ catch {
206
+ // The supervised child may still be starting.
207
+ }
208
+ await new Promise((resolve) => setTimeout(resolve, 500));
209
+ }
210
+ route.state = 'unavailable';
211
+ onStateChange?.();
212
+ if (!signal.aborted) {
213
+ throw new Error(`${route.name} did not become ready at ${target.toString()} within ${timeoutMs}ms.`);
214
+ }
215
+ }
216
+ async function terminateChild(child) {
217
+ if (child.exitCode !== null || child.signalCode !== null)
218
+ return;
219
+ const exited = new Promise((resolve) => child.once('exit', () => resolve()));
220
+ if (process.platform === 'win32' && child.pid) {
221
+ const killer = (0, node_child_process_1.spawn)('taskkill', ['/pid', String(child.pid), '/t', '/f'], {
222
+ stdio: 'ignore',
223
+ windowsHide: true,
224
+ });
225
+ await new Promise((resolve) => killer.once('exit', () => resolve()));
226
+ await Promise.race([
227
+ exited,
228
+ new Promise((resolve) => setTimeout(resolve, 2_000)),
229
+ ]);
230
+ return;
231
+ }
232
+ if (child.pid) {
233
+ try {
234
+ process.kill(-child.pid, 'SIGTERM');
235
+ }
236
+ catch {
237
+ child.kill('SIGTERM');
238
+ }
239
+ }
240
+ const stopped = await Promise.race([
241
+ exited.then(() => true),
242
+ new Promise((resolve) => setTimeout(() => resolve(false), 5_000)),
243
+ ]);
244
+ if (!stopped && child.pid) {
245
+ try {
246
+ process.kill(-child.pid, 'SIGKILL');
247
+ }
248
+ catch {
249
+ child.kill('SIGKILL');
250
+ }
251
+ await Promise.race([
252
+ exited,
253
+ new Promise((resolve) => setTimeout(resolve, 1_000)),
254
+ ]);
255
+ }
256
+ }
257
+ async function probeGatewayTls(options) {
258
+ await (0, effects_js_1.probeTlsEndpoint)({
259
+ ca: options.ca,
260
+ hostname: options.hostname,
261
+ port: options.port ?? 443,
262
+ timeoutMs: options.timeoutMs,
263
+ });
264
+ }
265
+ async function evaluatePortlessGateway(options, dependencies = {}) {
266
+ if (options.gatewayState?.portless !== true ||
267
+ options.gatewayState.schemaVersion !== 1 ||
268
+ options.gatewayState.hostSuffix !== options.hostSuffix) {
269
+ return { portless: false };
270
+ }
271
+ const send = dependencies.send ?? gateway_js_1.sendGatewayCommand;
272
+ let registered = false;
273
+ try {
274
+ const status = await send(options.gatewaySocket, { action: 'status', capability: options.capability });
275
+ if (status.protocolVersion !== contracts_js_1.GATEWAY_PROTOCOL_VERSION) {
276
+ return {
277
+ portless: false,
278
+ 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.`,
279
+ };
280
+ }
281
+ await send(options.gatewaySocket, options.registration);
282
+ registered = true;
283
+ await (dependencies.probe ?? probeGatewayTls)({
284
+ ca: options.rootCertificate,
285
+ hostname: options.registration.hostname,
286
+ });
287
+ return { portless: true };
288
+ }
289
+ catch (error) {
290
+ return {
291
+ portless: false,
292
+ warning: `Optional portless gateway preflight failed (${error instanceof Error ? error.message : String(error)}); using the supported explicit-port HTTPS origin.`,
293
+ };
294
+ }
295
+ finally {
296
+ if (registered) {
297
+ await send(options.gatewaySocket, {
298
+ action: 'unregister',
299
+ capability: options.capability,
300
+ hostname: options.registration.hostname,
301
+ sessionId: options.registration.sessionId,
302
+ }).catch(() => undefined);
303
+ }
304
+ }
305
+ }
306
+ function fleetRestartDelay(attempt) {
307
+ if (!Number.isInteger(attempt) || attempt < 0) {
308
+ throw new Error('Fleet restart attempt must be a non-negative integer.');
309
+ }
310
+ return Math.min(1_000 * 2 ** Math.min(attempt, 5), 30_000);
311
+ }
312
+ function planFleetRestart(completedRestartAttempts, maxRestartAttempts) {
313
+ if (completedRestartAttempts >= maxRestartAttempts) {
314
+ return { restart: false };
315
+ }
316
+ return {
317
+ delayMs: fleetRestartDelay(completedRestartAttempts),
318
+ nextAttempt: completedRestartAttempts + 1,
319
+ restart: true,
320
+ };
321
+ }
322
+ function startSlice(name, adapter, port, origin, stage, context, options) {
323
+ const executable = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm';
324
+ return (0, node_child_process_1.spawn)(executable, [
325
+ 'exec',
326
+ 'nx',
327
+ 'run',
328
+ `${name}:${adapter.target}`,
329
+ `--stage=${stage}`,
330
+ '--foundationStage=development',
331
+ ], {
332
+ cwd: context.root,
333
+ env: {
334
+ ...createFleetChildEnvironment(options),
335
+ [adapter.portEnvironment]: String(port),
336
+ EBK_AUTH_CALLBACK_URLS: JSON.stringify(adapter.auth?.callbackPaths?.map((path) => new URL(path, origin).toString()) ?? []),
337
+ EBK_AUTH_LOGOUT_URLS: JSON.stringify(adapter.auth?.logoutPaths?.map((path) => new URL(path, origin).toString()) ?? []),
338
+ EBK_CONSUMER_STAGE: stage,
339
+ EBK_FLEET_ORIGIN: origin.origin,
340
+ EBK_FOUNDATION_STAGE: 'development',
341
+ EBK_SECURE_COOKIES: 'true',
342
+ },
343
+ shell: false,
344
+ stdio: 'inherit',
345
+ windowsHide: true,
346
+ ...(process.platform === 'win32' ? {} : { detached: true }),
347
+ });
348
+ }
349
+ const executor = async (options, context) => {
350
+ const children = [];
351
+ const controller = new AbortController();
352
+ let proxy;
353
+ let fallbackGateway;
354
+ let heartbeat;
355
+ let portless = false;
356
+ let registered = false;
357
+ let capability;
358
+ let plan;
359
+ let manifestPath;
360
+ let fallbackIpcPath;
361
+ const paths = (0, tls_js_1.localTlsPaths)(options.appData);
362
+ const cleanup = async () => {
363
+ controller.abort();
364
+ if (heartbeat)
365
+ clearInterval(heartbeat);
366
+ if (registered && plan && capability) {
367
+ await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
368
+ action: 'unregister',
369
+ capability,
370
+ hostname: plan.hostname,
371
+ sessionId: plan.id,
372
+ }).catch(() => undefined);
373
+ }
374
+ for (const child of [...children].reverse())
375
+ await terminateChild(child);
376
+ await fallbackGateway?.close().catch(() => undefined);
377
+ if (fallbackIpcPath && process.platform !== 'win32')
378
+ (0, node_fs_1.rmSync)(fallbackIpcPath, { force: true });
379
+ await proxy?.close().catch(() => undefined);
380
+ if (manifestPath)
381
+ (0, node_fs_1.rmSync)(manifestPath, { force: true });
382
+ };
383
+ try {
384
+ plan = buildFleetPlan(options, context);
385
+ const doctor = await (0, dev_doctor_js_1.inspectLocalDevelopment)({ appData: options.appData, hostname: plan.hostname, stage: plan.stage }, context);
386
+ if (doctor.tls !== 'ready' ||
387
+ doctor.trust !== 'ready' ||
388
+ doctor.connectivity !== 'ready') {
389
+ throw new Error('EBK local HTTPS trust or effect-based connectivity is incomplete. Run dev-doctor, inspect the generated root, and explicitly run dev-setup --trust before fleet development.');
390
+ }
391
+ for (const required of [
392
+ paths.capability,
393
+ paths.leafCertificate,
394
+ paths.leafKey,
395
+ ]) {
396
+ try {
397
+ (0, node_fs_1.readFileSync)(required);
398
+ }
399
+ catch {
400
+ 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.');
401
+ }
402
+ }
403
+ const leaf = new node_crypto_1.X509Certificate((0, node_fs_1.readFileSync)(paths.leafCertificate));
404
+ if (!leaf.checkHost(plan.hostname)) {
405
+ throw new Error(`EBK local certificate does not cover ${plan.hostname}. Run dev-setup --upgrade --trust with --hostSuffix=${options.hostSuffix ?? 'ebk.localhost'}.`);
406
+ }
407
+ const development = await developmentRouter(options);
408
+ const childOptions = {
409
+ ...options,
410
+ region: development.region ?? options.region,
411
+ };
412
+ const remoteOrigin = development.url;
413
+ devkit_1.logger.info(`[fleet] stage=${plan.stage} profile=${options.profile?.trim() ||
414
+ process.env.AWS_PROFILE?.trim() ||
415
+ 'default-provider-chain'} region=${childOptions.region?.trim() ||
416
+ process.env.AWS_REGION?.trim() ||
417
+ process.env.AWS_DEFAULT_REGION?.trim() ||
418
+ 'default-provider-chain'} sstMode=${options.sstMode ?? 'mono'}`);
419
+ const reserved = new Set();
420
+ const proxyPort = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:proxy`, {
421
+ reserved,
422
+ });
423
+ reserved.add(proxyPort);
424
+ capability = (0, node_fs_1.readFileSync)(paths.capability, 'utf8').trim();
425
+ const registration = registrationRequest({
426
+ capability,
427
+ hostname: plan.hostname,
428
+ proxyPort,
429
+ sessionId: plan.id,
430
+ });
431
+ const gatewayState = (() => {
432
+ try {
433
+ return JSON.parse((0, node_fs_1.readFileSync)(paths.gatewayState, 'utf8'));
434
+ }
435
+ catch {
436
+ return undefined;
437
+ }
438
+ })();
439
+ const gatewayPreference = await evaluatePortlessGateway({
440
+ capability,
441
+ gatewaySocket: paths.gatewaySocket,
442
+ gatewayState,
443
+ hostSuffix: (0, identity_js_1.normalizeFleetHostSuffix)(options.hostSuffix),
444
+ registration,
445
+ rootCertificate: (0, node_fs_1.readFileSync)(paths.rootCertificate),
446
+ });
447
+ portless = gatewayPreference.portless;
448
+ if (gatewayPreference.warning)
449
+ devkit_1.logger.warn(gatewayPreference.warning);
450
+ let gatewayPort;
451
+ if (!portless) {
452
+ gatewayPort = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:gateway`, {
453
+ reserved,
454
+ });
455
+ reserved.add(gatewayPort);
456
+ }
457
+ const origin = new URL(`https://${plan.hostname}${gatewayPort ? `:${gatewayPort}` : ''}`);
458
+ const cache = (0, node_path_1.join)(context.root, '.ebk', 'cache');
459
+ (0, node_fs_1.mkdirSync)(cache, { recursive: true });
460
+ const routes = [...plan.adapters].map(([name, adapter]) => ({
461
+ adapter,
462
+ name,
463
+ selected: plan?.selected.includes(name) ?? false,
464
+ state: plan?.selected.includes(name) ? 'starting' : 'remote',
465
+ }));
466
+ for (const route of routes.filter(({ selected }) => selected)) {
467
+ const port = await (0, ports_js_1.allocateFleetPort)(`${context.root}:${plan.id}:${route.name}`, { reserved });
468
+ reserved.add(port);
469
+ route.upstream = new URL(`http://127.0.0.1:${port}`);
470
+ }
471
+ proxy = new proxy_js_1.FleetSessionProxy({
472
+ certificateExpires: doctor.certificateExpires ?? leaf.validTo,
473
+ consumerStage: plan.stage,
474
+ fleetOrigin: origin,
475
+ foundationStage: 'development',
476
+ remoteOrigin,
477
+ routes,
478
+ safeMethodFallback: options.safeMethodFallback,
479
+ });
480
+ await proxy.listen(proxyPort);
481
+ if (portless) {
482
+ await (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, registration);
483
+ registered = true;
484
+ proxy.setMode('gateway', 'registered');
485
+ heartbeat = setInterval(() => {
486
+ void (0, gateway_js_1.sendGatewayCommand)(paths.gatewaySocket, {
487
+ action: 'heartbeat',
488
+ capability,
489
+ hostname: plan?.hostname,
490
+ sessionId: plan?.id,
491
+ }).catch((error) => devkit_1.logger.warn(`Gateway heartbeat failed: ${String(error)}`));
492
+ }, 5_000);
493
+ heartbeat.unref();
494
+ }
495
+ else {
496
+ const registry = new gateway_js_1.GatewayRegistry(capability);
497
+ registry.register(registration);
498
+ fallbackGateway = new gateway_js_1.MachineGateway(registry, {
499
+ cert: (0, node_fs_1.readFileSync)(paths.leafCertificate),
500
+ key: (0, node_fs_1.readFileSync)(paths.leafKey),
501
+ });
502
+ fallbackIpcPath = (0, tls_js_1.createLocalIpcPath)((0, node_path_1.join)(context.root, '.ebk', 'cache'), plan.id);
503
+ if (process.platform !== 'win32')
504
+ (0, node_fs_1.rmSync)(fallbackIpcPath, { force: true });
505
+ await fallbackGateway.listen(gatewayPort, fallbackIpcPath);
506
+ proxy.setMode('explicit-port', 'standalone');
507
+ heartbeat = setInterval(() => {
508
+ try {
509
+ registry.heartbeat(plan?.hostname ?? '', plan?.id ?? '');
510
+ }
511
+ catch (error) {
512
+ devkit_1.logger.warn(`Explicit-port gateway heartbeat failed: ${String(error)}`);
513
+ }
514
+ }, 5_000);
515
+ heartbeat.unref();
516
+ devkit_1.logger.warn(`Optional portless gateway unavailable; using the supported explicit-port HTTPS origin at ${origin.origin}. This does not remediate resolver failures.`);
517
+ }
518
+ manifestPath = (0, node_path_1.join)(cache, `${plan.id}.json`);
519
+ const writeManifest = () => {
520
+ if (!manifestPath || !plan)
521
+ return;
522
+ (0, node_fs_1.writeFileSync)(manifestPath, `${JSON.stringify({
523
+ consumerStage: plan.stage,
524
+ fleetOrigin: origin.origin,
525
+ foundationStage: 'development',
526
+ gatewayMode: portless ? 'portless' : 'explicit-port',
527
+ hostname: plan.hostname,
528
+ routes: routes.map(({ adapter, name, selected, state, upstream }) => ({
529
+ name,
530
+ routePrefix: adapter?.routePrefix,
531
+ selected,
532
+ state,
533
+ upstream: upstream?.toString(),
534
+ })),
535
+ schemaVersion: contracts_js_1.SESSION_MANIFEST_VERSION,
536
+ }, null, 2)}\n`, { mode: 0o600 });
537
+ };
538
+ writeManifest();
539
+ const restartAttempts = new Map();
540
+ const fatalFailures = new Map();
541
+ const maxRestartAttempts = options.maxRestartAttempts ?? 3;
542
+ const launch = (route) => {
543
+ if (controller.signal.aborted)
544
+ return;
545
+ route.state = 'starting';
546
+ writeManifest();
547
+ const child = startSlice(route.name, route.adapter, Number(route.upstream?.port), origin, plan?.stage ?? options.stage, context, childOptions);
548
+ children.push(child);
549
+ child.once('exit', (code, signal) => {
550
+ const childIndex = children.indexOf(child);
551
+ if (childIndex >= 0)
552
+ children.splice(childIndex, 1);
553
+ if (controller.signal.aborted)
554
+ return;
555
+ route.state = 'unavailable';
556
+ writeManifest();
557
+ devkit_1.logger.warn(`${route.name} local process exited${signal
558
+ ? ` with signal ${signal}`
559
+ : ` with status ${code ?? 'unknown'}`}; mutating requests now fail closed while the supervisor evaluates restart.`);
560
+ const attempt = restartAttempts.get(route.name) ?? 0;
561
+ const restart = planFleetRestart(attempt, maxRestartAttempts);
562
+ if (!restart.restart) {
563
+ const failure = new Error(`${route.name} did not stay running after ${maxRestartAttempts} automatic restart attempt(s). Automatic restart stopped; inspect the first child error before retrying the fleet.`);
564
+ fatalFailures.set(route.name, failure);
565
+ devkit_1.logger.error(failure.message);
566
+ return;
567
+ }
568
+ restartAttempts.set(route.name, restart.nextAttempt);
569
+ setTimeout(() => {
570
+ if (controller.signal.aborted)
571
+ return;
572
+ launch(route);
573
+ void waitForReadiness(route, controller.signal, writeManifest, 120_000, () => fatalFailures.get(route.name))
574
+ .then(() => {
575
+ restartAttempts.set(route.name, 0);
576
+ fatalFailures.delete(route.name);
577
+ })
578
+ .catch((error) => {
579
+ route.state = 'unavailable';
580
+ writeManifest();
581
+ devkit_1.logger.error(String(error));
582
+ });
583
+ }, restart.delayMs).unref();
584
+ });
585
+ };
586
+ for (const route of routes.filter(({ selected }) => selected))
587
+ launch(route);
588
+ await Promise.all(routes
589
+ .filter(({ selected }) => selected)
590
+ .map((route) => waitForReadiness(route, controller.signal, writeManifest, 120_000, () => fatalFailures.get(route.name)).then(() => {
591
+ restartAttempts.set(route.name, 0);
592
+ fatalFailures.delete(route.name);
593
+ })));
594
+ devkit_1.logger.info(`EBK fleet ready at ${origin.origin}`);
595
+ for (const route of routes) {
596
+ devkit_1.logger.info(` ${route.adapter?.routePrefix ?? route.name}: ${route.state} (${route.selected ? route.upstream : remoteOrigin})`);
597
+ }
598
+ await new Promise((resolve) => {
599
+ const stop = () => resolve();
600
+ process.once('SIGINT', stop);
601
+ process.once('SIGTERM', stop);
602
+ });
603
+ await cleanup();
604
+ return { success: true };
605
+ }
606
+ catch (error) {
607
+ devkit_1.logger.error(`[fleet] ${error instanceof Error ? error.message : String(error)}`);
608
+ await cleanup();
609
+ return { success: false };
610
+ }
611
+ };
612
+ exports.default = executor;
613
+ //# 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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"}