@empire-builder-kit/nx 1.0.0-rc.30 → 1.0.0-rc.31

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 (261) hide show
  1. package/executors.json +8 -3
  2. package/package.json +10 -7
  3. package/src/aws/child-environment.d.ts +10 -0
  4. package/src/aws/child-environment.js +77 -0
  5. package/src/aws/child-environment.js.map +1 -0
  6. package/src/aws/identity.d.ts +13 -0
  7. package/src/aws/identity.js +41 -0
  8. package/src/aws/identity.js.map +1 -0
  9. package/src/aws-authority/index.d.ts +1 -0
  10. package/src/aws-authority/index.js +5 -0
  11. package/src/aws-authority/index.js.map +1 -0
  12. package/src/aws-authority/stage-authority.d.ts +238 -0
  13. package/src/aws-authority/stage-authority.js +2836 -0
  14. package/src/aws-authority/stage-authority.js.map +1 -0
  15. package/src/developer-agent/generator-planning.js +4 -4
  16. package/src/developer-agent/generator-planning.js.map +1 -1
  17. package/src/developer-agent/operation-registry.js +14 -6
  18. package/src/developer-agent/operation-registry.js.map +1 -1
  19. package/src/executors/deployment-plan/deployment-plan.js +1 -1
  20. package/src/executors/deployment-plan/deployment-plan.js.map +1 -1
  21. package/src/executors/foundation-preflight/foundation-preflight.d.ts +0 -1
  22. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -1
  23. package/src/executors/foundation-preflight/schema.json +0 -5
  24. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +12 -3
  25. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -32
  26. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -1
  27. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +64 -0
  28. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +221 -0
  29. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +1 -0
  30. package/src/executors/foundation-profile-preflight/schema.json +1 -6
  31. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  32. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +44 -21
  33. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -1
  34. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  35. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +25 -369
  36. package/src/executors/infrastructure-plan/infrastructure-plan.js +222 -5472
  37. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +1 -1
  38. package/src/executors/infrastructure-plan/schema.json +8 -64
  39. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  40. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  41. package/src/executors/local-deploy/federated-credential-transport.js.map +1 -0
  42. package/src/executors/local-deploy/local-approval.d.ts +4 -9
  43. package/src/executors/local-deploy/local-approval.js +3 -7
  44. package/src/executors/local-deploy/local-approval.js.map +1 -1
  45. package/src/executors/local-deploy/local-deploy.d.ts +58 -43
  46. package/src/executors/local-deploy/local-deploy.js +938 -804
  47. package/src/executors/local-deploy/local-deploy.js.map +1 -1
  48. package/src/executors/local-deploy/schema.json +3 -20
  49. package/src/executors/refresh/refresh.js +2 -2
  50. package/src/executors/refresh/refresh.js.map +1 -1
  51. package/src/executors/remove/remove.js +2 -2
  52. package/src/executors/remove/remove.js.map +1 -1
  53. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +25 -1
  54. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +905 -22
  55. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +1 -1
  56. package/src/executors/router-waf-rehearsal/schema.json +17 -2
  57. package/src/executors/secret-initialize/schema.json +42 -0
  58. package/src/executors/secret-initialize/secret-initialize.d.ts +30 -0
  59. package/src/executors/secret-initialize/secret-initialize.js +229 -0
  60. package/src/executors/secret-initialize/secret-initialize.js.map +1 -0
  61. package/src/executors/secret-metadata/secret-metadata.d.ts +2 -1
  62. package/src/executors/secret-metadata/secret-metadata.js +62 -29
  63. package/src/executors/secret-metadata/secret-metadata.js.map +1 -1
  64. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  65. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  66. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +1 -0
  67. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +46 -0
  68. package/src/executors/sst-lifecycle/governed-native-operation.js +153 -0
  69. package/src/executors/sst-lifecycle/governed-native-operation.js.map +1 -0
  70. package/src/executors/sst-lifecycle/run-sst-command.d.ts +25 -7
  71. package/src/executors/sst-lifecycle/run-sst-command.js +459 -89
  72. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -1
  73. package/src/executors/sst-lifecycle/schema.json +0 -5
  74. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  75. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  76. package/src/executors/sst-lifecycle/secret-preflight.js.map +1 -1
  77. package/src/executors/unlock/unlock.js +2 -2
  78. package/src/executors/unlock/unlock.js.map +1 -1
  79. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  80. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  81. package/src/foundation/router-waf-rate-rehearsal.js.map +1 -0
  82. package/src/foundation/router-waf.d.ts +59 -9
  83. package/src/foundation/router-waf.js +427 -32
  84. package/src/foundation/router-waf.js.map +1 -1
  85. package/src/foundation/stages.d.ts +1 -0
  86. package/src/foundation/stages.js +11 -0
  87. package/src/foundation/stages.js.map +1 -1
  88. package/src/generators/formatting.d.ts +8 -0
  89. package/src/generators/formatting.js +118 -0
  90. package/src/generators/formatting.js.map +1 -0
  91. package/src/generators/function/function.js +37 -17
  92. package/src/generators/function/function.js.map +1 -1
  93. package/src/generators/post-generation-install.js +2 -2
  94. package/src/generators/post-generation-install.js.map +1 -1
  95. package/src/generators/preset/generator.js +22 -7
  96. package/src/generators/preset/generator.js.map +1 -1
  97. package/src/generators/preset/workspace-files-developer-agent.js +15 -7
  98. package/src/generators/preset/workspace-files-developer-agent.js.map +1 -1
  99. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  100. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  101. package/src/generators/preset/workspace-files-ecr-inspector.js.map +1 -0
  102. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  103. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  104. package/src/generators/preset/workspace-files-performance-cost.js.map +1 -1
  105. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  106. package/src/generators/preset/workspace-files-performance-load.js +8 -12
  107. package/src/generators/preset/workspace-files-performance-load.js.map +1 -1
  108. package/src/generators/preset/workspace-files-stage-authority.d.ts +4 -0
  109. package/src/generators/preset/workspace-files-stage-authority.js +275 -0
  110. package/src/generators/preset/workspace-files-stage-authority.js.map +1 -0
  111. package/src/generators/preset/workspace-files-thin-deploy.d.ts +35 -0
  112. package/src/generators/preset/workspace-files-thin-deploy.js +1434 -0
  113. package/src/generators/preset/workspace-files-thin-deploy.js.map +1 -0
  114. package/src/generators/preset/workspace-files-thin-docs.d.ts +5 -0
  115. package/src/generators/preset/workspace-files-thin-docs.js +224 -0
  116. package/src/generators/preset/workspace-files-thin-docs.js.map +1 -0
  117. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  118. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  119. package/src/generators/preset/workspace-files-thin-release.js.map +1 -0
  120. package/src/generators/preset/workspace-files.d.ts +1 -1
  121. package/src/generators/preset/workspace-files.js +373 -223
  122. package/src/generators/preset/workspace-files.js.map +1 -1
  123. package/src/generators/slice/built-in-plan-api-files.js +1 -0
  124. package/src/generators/slice/built-in-plan-api-files.js.map +1 -1
  125. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +4 -0
  126. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +1 -1
  127. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  128. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +1 -1
  129. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  130. package/src/generators/slice/built-in-plan-data-files.js +89 -30
  131. package/src/generators/slice/built-in-plan-data-files.js.map +1 -1
  132. package/src/generators/slice/built-in-plan-foundation-files.js +3 -5
  133. package/src/generators/slice/built-in-plan-foundation-files.js.map +1 -1
  134. package/src/generators/slice/built-in-plan-frontend-files.js +5 -1
  135. package/src/generators/slice/built-in-plan-frontend-files.js.map +1 -1
  136. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  137. package/src/generators/slice/built-in-plan-infrastructure-files.js +199 -188
  138. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +1 -1
  139. package/src/generators/slice/built-in-plan-metadata-files.js +13 -0
  140. package/src/generators/slice/built-in-plan-metadata-files.js.map +1 -1
  141. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  142. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +307 -0
  143. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +1 -0
  144. package/src/generators/slice/built-in-plan-operations-files.js +43 -49
  145. package/src/generators/slice/built-in-plan-operations-files.js.map +1 -1
  146. package/src/generators/slice/built-in-plan-performance-files.js +37 -19
  147. package/src/generators/slice/built-in-plan-performance-files.js.map +1 -1
  148. package/src/generators/slice/built-in-plan-project-files.js +9 -68
  149. package/src/generators/slice/built-in-plan-project-files.js.map +1 -1
  150. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  151. package/src/generators/slice/built-in-plan-secret-runtime-files.js +74 -76
  152. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +1 -1
  153. package/src/generators/slice/built-in-plan-testing-files.js +74 -47
  154. package/src/generators/slice/built-in-plan-testing-files.js.map +1 -1
  155. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  156. package/src/generators/slice/built-in-plan-thin-release-files.js +129 -0
  157. package/src/generators/slice/built-in-plan-thin-release-files.js.map +1 -0
  158. package/src/generators/slice/built-in-plan-verification-files.js +6 -2
  159. package/src/generators/slice/built-in-plan-verification-files.js.map +1 -1
  160. package/src/generators/slice/built-in-plan-web-files.js +4 -2
  161. package/src/generators/slice/built-in-plan-web-files.js.map +1 -1
  162. package/src/generators/slice/built-in-plan-workload-role-files.js +26 -4
  163. package/src/generators/slice/built-in-plan-workload-role-files.js.map +1 -1
  164. package/src/generators/slice/built-in-plan.d.ts +1 -0
  165. package/src/generators/slice/built-in-plan.js +28 -11
  166. package/src/generators/slice/built-in-plan.js.map +1 -1
  167. package/src/generators/slice/slice.js +27 -29
  168. package/src/generators/slice/slice.js.map +1 -1
  169. package/src/generators/upgrade/upgrade.d.ts +1 -1
  170. package/src/generators/upgrade/upgrade.js +224 -69
  171. package/src/generators/upgrade/upgrade.js.map +1 -1
  172. package/src/generators/workload/performance-registration.d.ts +1 -0
  173. package/src/generators/workload/performance-registration.js +6 -4
  174. package/src/generators/workload/performance-registration.js.map +1 -1
  175. package/src/generators/workload/service-performance-files.d.ts +1 -0
  176. package/src/generators/workload/service-performance-files.js +27 -7
  177. package/src/generators/workload/service-performance-files.js.map +1 -1
  178. package/src/generators/workload/workload.d.ts +1 -1
  179. package/src/generators/workload/workload.js +55 -28
  180. package/src/generators/workload/workload.js.map +1 -1
  181. package/src/git-policy/github-bootstrap.d.ts +19 -6
  182. package/src/git-policy/github-bootstrap.js +103 -157
  183. package/src/git-policy/github-bootstrap.js.map +1 -1
  184. package/src/local-dev/private-state.d.ts +3 -0
  185. package/src/local-dev/private-state.js +17 -5
  186. package/src/local-dev/private-state.js.map +1 -1
  187. package/src/performance/cost-collection.d.ts +1 -1
  188. package/src/performance/cost-collection.js +4 -2
  189. package/src/performance/cost-collection.js.map +1 -1
  190. package/src/performance/cost-controls.d.ts +3 -1
  191. package/src/performance/cost-controls.js +9 -4
  192. package/src/performance/cost-controls.js.map +1 -1
  193. package/src/performance/evidence.d.ts +1 -1
  194. package/src/performance/evidence.js +5 -3
  195. package/src/performance/evidence.js.map +1 -1
  196. package/src/performance/load-safety.js +5 -3
  197. package/src/performance/load-safety.js.map +1 -1
  198. package/src/performance/model.d.ts +2 -2
  199. package/src/performance/model.js +4 -3
  200. package/src/performance/model.js.map +1 -1
  201. package/src/release/index.d.ts +0 -2
  202. package/src/release/index.js +0 -2
  203. package/src/release/index.js.map +1 -1
  204. package/src/release/source-authority.d.ts +4 -5
  205. package/src/release/source-authority.js +13 -123
  206. package/src/release/source-authority.js.map +1 -1
  207. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  208. package/src/repository-policy/aurora-preflight.js +4 -1
  209. package/src/repository-policy/aurora-preflight.js.map +1 -1
  210. package/src/repository-policy/policy.d.ts +5 -1
  211. package/src/repository-policy/policy.js +64 -13
  212. package/src/repository-policy/policy.js.map +1 -1
  213. package/src/schemas/performance-policy-v1.json +3 -1
  214. package/src/secrets/adapters.d.ts +5 -1
  215. package/src/secrets/adapters.js +22 -1
  216. package/src/secrets/adapters.js.map +1 -1
  217. package/src/secrets/aws-control-plane.d.ts +10 -1
  218. package/src/secrets/aws-control-plane.js +67 -0
  219. package/src/secrets/aws-control-plane.js.map +1 -1
  220. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  221. package/src/secrets/generated-aws-control-plane.js +259 -0
  222. package/src/secrets/generated-aws-control-plane.js.map +1 -0
  223. package/src/secrets/metadata.js +38 -10
  224. package/src/secrets/metadata.js.map +1 -1
  225. package/src/secrets/model.d.ts +8 -1
  226. package/src/secrets/model.js +24 -3
  227. package/src/secrets/model.js.map +1 -1
  228. package/src/secrets/operator.d.ts +89 -3
  229. package/src/secrets/operator.js +422 -9
  230. package/src/secrets/operator.js.map +1 -1
  231. package/src/secrets/registry.d.ts +2 -1
  232. package/src/secrets/registry.js +18 -1
  233. package/src/secrets/registry.js.map +1 -1
  234. package/src/secrets/workload-access.js +10 -2
  235. package/src/secrets/workload-access.js.map +1 -1
  236. package/src/supply-chain/action-pins.js +61 -7
  237. package/src/supply-chain/action-pins.js.map +1 -1
  238. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  239. package/src/supply-chain/build-output-bounds.js +12 -0
  240. package/src/supply-chain/build-output-bounds.js.map +1 -0
  241. package/src/supply-chain/build-output.js +2 -4
  242. package/src/supply-chain/build-output.js.map +1 -1
  243. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  244. package/src/supply-chain/ecr-scanning.js +11 -7
  245. package/src/supply-chain/ecr-scanning.js.map +1 -1
  246. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  247. package/src/supply-chain/ecs-deployed-image.js +6 -4
  248. package/src/supply-chain/ecs-deployed-image.js.map +1 -1
  249. package/src/supply-chain/generated-container-release-command.js +816 -34
  250. package/src/supply-chain/generated-container-release-command.js.map +1 -1
  251. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  252. package/src/supply-chain/generated-ecr-collector-command.js +188 -91
  253. package/src/supply-chain/generated-ecr-collector-command.js.map +1 -1
  254. package/src/supply-chain/generated-files.js +4 -3
  255. package/src/supply-chain/generated-files.js.map +1 -1
  256. package/src/supply-chain/index.d.ts +1 -1
  257. package/src/supply-chain/index.js +2 -1
  258. package/src/supply-chain/index.js.map +1 -1
  259. package/src/workload-roles/index.d.ts +10 -17
  260. package/src/workload-roles/index.js +5 -18
  261. package/src/workload-roles/index.js.map +1 -1
@@ -0,0 +1,48 @@
1
+ import { type PrivateStateSecurity } from '../../local-dev/private-state.js';
2
+ declare const CHILD_PROFILE = "ebk-sst-federated";
3
+ declare const GOVERNED_SIGNALS: readonly ["SIGINT", "SIGTERM"];
4
+ type GovernedSignal = (typeof GOVERNED_SIGNALS)[number];
5
+ interface GovernedSignalCleanup {
6
+ readonly priority: number;
7
+ run(signal: GovernedSignal): Promise<void> | void;
8
+ }
9
+ /** Coordinate an exact child shutdown or private-state cleanup before the
10
+ * current process preserves its normal SIGINT/SIGTERM behavior. Higher
11
+ * priorities run first so mutation children stop before credentials vanish. */
12
+ export declare function registerGovernedSignalCleanup(run: GovernedSignalCleanup['run'], priority?: number): () => void;
13
+ export declare function governedSignalCleanupInProgress(): boolean;
14
+ interface FederatedCredentialIdentity {
15
+ accessKeyId: string;
16
+ expiration?: Date;
17
+ secretAccessKey: string;
18
+ sessionToken?: string;
19
+ }
20
+ export interface LocalFederatedCredentialTransport {
21
+ readonly profile: typeof CHILD_PROFILE;
22
+ childEnvironment(ambient: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
23
+ cleanup(): void;
24
+ refresh(): Promise<{
25
+ actorArn: string;
26
+ expiresAt: string;
27
+ }>;
28
+ }
29
+ export interface LocalFederatedCredentialTransportInput {
30
+ account: string;
31
+ expectedRoleArn: string;
32
+ profile?: string;
33
+ region: string;
34
+ }
35
+ export interface LocalFederatedCredentialTransportDependencies {
36
+ identify?: (credentials: FederatedCredentialIdentity, region: string) => Promise<{
37
+ Account?: string;
38
+ Arn?: string;
39
+ }>;
40
+ now?: () => Date;
41
+ removeDirectory?: (path: string) => void;
42
+ resolve?: () => Promise<FederatedCredentialIdentity>;
43
+ security?: PrivateStateSecurity;
44
+ }
45
+ /** Materialize temporary federated credentials for tools that cannot resolve a
46
+ * modern IAM Identity Center source-profile chain themselves. */
47
+ export declare function createLocalFederatedCredentialTransport(input: LocalFederatedCredentialTransportInput, dependencies?: LocalFederatedCredentialTransportDependencies): Promise<LocalFederatedCredentialTransport>;
48
+ export {};
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGovernedSignalCleanup = registerGovernedSignalCleanup;
4
+ exports.governedSignalCleanupInProgress = governedSignalCleanupInProgress;
5
+ exports.createLocalFederatedCredentialTransport = createLocalFederatedCredentialTransport;
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 client_sts_1 = require("@aws-sdk/client-sts");
10
+ const credential_providers_1 = require("@aws-sdk/credential-providers");
11
+ const child_environment_js_1 = require("../../aws/child-environment.js");
12
+ const identity_js_1 = require("../../aws/identity.js");
13
+ const private_state_js_1 = require("../../local-dev/private-state.js");
14
+ const CHILD_PROFILE = 'ebk-sst-federated';
15
+ const MINIMUM_REMAINING_LIFETIME_MS = 30 * 60 * 1000;
16
+ const PROFILE = /^[A-Za-z0-9_+=,.@-]{1,128}$/u;
17
+ const REGION = /^[a-z]{2}(?:-gov)?-[a-z]+-\d$/u;
18
+ const ROLE = /^arn:(aws|aws-us-gov|aws-cn):iam::\d{12}:role\/[A-Za-z0-9+=,.@_/-]{1,512}$/u;
19
+ const AMBIENT_CREDENTIAL_KEYS = [
20
+ 'AWS_ACCESS_KEY_ID',
21
+ 'AWS_SECRET_ACCESS_KEY',
22
+ 'AWS_SESSION_TOKEN',
23
+ 'AWS_SECURITY_TOKEN',
24
+ 'AWS_ROLE_ARN',
25
+ 'AWS_ROLE_SESSION_NAME',
26
+ 'AWS_WEB_IDENTITY_TOKEN_FILE',
27
+ 'AWS_CONTAINER_AUTHORIZATION_TOKEN',
28
+ 'AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE',
29
+ 'AWS_CONTAINER_CREDENTIALS_FULL_URI',
30
+ 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI',
31
+ 'AWS_CONFIG_FILE',
32
+ 'AWS_CREDENTIAL_EXPIRATION',
33
+ 'AWS_DEFAULT_PROFILE',
34
+ 'AWS_DEFAULT_REGION',
35
+ 'AWS_SHARED_CREDENTIALS_FILE',
36
+ 'AWS_PROFILE',
37
+ 'AWS_REGION',
38
+ 'EBK_GOVERNED_PROCESS_GROUP',
39
+ ];
40
+ const GOVERNED_SIGNALS = ['SIGINT', 'SIGTERM'];
41
+ const governedSignalCleanups = new Set();
42
+ const governedSignalHandlers = new Map();
43
+ let governedSignalInProgress;
44
+ function removeGovernedSignalHandlers() {
45
+ if (governedSignalCleanups.size > 0 || governedSignalInProgress)
46
+ return;
47
+ for (const [signal, handler] of governedSignalHandlers) {
48
+ process.removeListener(signal, handler);
49
+ }
50
+ governedSignalHandlers.clear();
51
+ }
52
+ async function handleGovernedSignal(signal, handler) {
53
+ if (governedSignalInProgress)
54
+ return;
55
+ governedSignalInProgress = signal;
56
+ const hasExternalListener = process
57
+ .listeners(signal)
58
+ .some((listener) => listener !== handler);
59
+ let cleanupFailed = false;
60
+ for (const cleanup of [...governedSignalCleanups].sort((left, right) => right.priority - left.priority)) {
61
+ try {
62
+ await cleanup.run(signal);
63
+ }
64
+ catch {
65
+ cleanupFailed = true;
66
+ }
67
+ }
68
+ governedSignalInProgress = undefined;
69
+ removeGovernedSignalHandlers();
70
+ if (cleanupFailed) {
71
+ process.stderr.write('Governed signal cleanup failed; private recovery evidence was retained.\n');
72
+ }
73
+ if (!hasExternalListener) {
74
+ const retainedHandler = governedSignalHandlers.get(signal);
75
+ if (retainedHandler) {
76
+ process.removeListener(signal, retainedHandler);
77
+ governedSignalHandlers.delete(signal);
78
+ }
79
+ process.kill(process.pid, signal);
80
+ }
81
+ }
82
+ function ensureGovernedSignalHandlers() {
83
+ for (const signal of GOVERNED_SIGNALS) {
84
+ if (governedSignalHandlers.has(signal))
85
+ continue;
86
+ const handler = () => {
87
+ void handleGovernedSignal(signal, handler);
88
+ };
89
+ governedSignalHandlers.set(signal, handler);
90
+ process.prependListener(signal, handler);
91
+ }
92
+ }
93
+ /** Coordinate an exact child shutdown or private-state cleanup before the
94
+ * current process preserves its normal SIGINT/SIGTERM behavior. Higher
95
+ * priorities run first so mutation children stop before credentials vanish. */
96
+ function registerGovernedSignalCleanup(run, priority = 0) {
97
+ const cleanup = { priority, run };
98
+ governedSignalCleanups.add(cleanup);
99
+ ensureGovernedSignalHandlers();
100
+ let registered = true;
101
+ return () => {
102
+ if (!registered)
103
+ return;
104
+ registered = false;
105
+ governedSignalCleanups.delete(cleanup);
106
+ removeGovernedSignalHandlers();
107
+ };
108
+ }
109
+ function governedSignalCleanupInProgress() {
110
+ return governedSignalInProgress !== undefined;
111
+ }
112
+ function requireCredentialValue(value, label) {
113
+ if (!value || value !== value.trim() || /[\r\n]/u.test(value)) {
114
+ throw new Error(`Temporary federated ${label} is missing or malformed.`);
115
+ }
116
+ return value;
117
+ }
118
+ function credentialsFile(identity) {
119
+ return `[${CHILD_PROFILE}]\naws_access_key_id = ${requireCredentialValue(identity.accessKeyId, 'access key')}\naws_secret_access_key = ${requireCredentialValue(identity.secretAccessKey, 'secret key')}\naws_session_token = ${requireCredentialValue(identity.sessionToken, 'session token')}\n`;
120
+ }
121
+ function configFile(region) {
122
+ return `[profile ${CHILD_PROFILE}]\nregion = ${region}\noutput = json\n`;
123
+ }
124
+ /** Materialize temporary federated credentials for tools that cannot resolve a
125
+ * modern IAM Identity Center source-profile chain themselves. */
126
+ async function createLocalFederatedCredentialTransport(input, dependencies = {}) {
127
+ if (!/^\d{12}$/u.test(input.account) ||
128
+ !ROLE.test(input.expectedRoleArn) ||
129
+ (input.profile !== undefined && !PROFILE.test(input.profile)) ||
130
+ !REGION.test(input.region)) {
131
+ throw new Error('Local federated credential transport input is invalid.');
132
+ }
133
+ const security = dependencies.security ?? {};
134
+ const directory = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'ebk-sst-federated-'));
135
+ const configurationPath = (0, node_path_1.join)(directory, 'config');
136
+ const credentialsPath = (0, node_path_1.join)(directory, 'credentials');
137
+ let closed = false;
138
+ let disposed = false;
139
+ let actorArn = '';
140
+ let expiresAt = '';
141
+ let unregisterSignalCleanup = () => undefined;
142
+ (0, private_state_js_1.hardenPrivatePath)(directory, 'directory', security);
143
+ (0, private_state_js_1.assertPrivatePath)(directory, 'directory', security);
144
+ const cleanupFiles = (signalCoordinator = false) => {
145
+ if (disposed)
146
+ return true;
147
+ closed = true;
148
+ if (governedSignalInProgress && !signalCoordinator)
149
+ return false;
150
+ try {
151
+ (dependencies.removeDirectory ??
152
+ ((path) => (0, node_fs_1.rmSync)(path, { force: true, recursive: true })))(directory);
153
+ disposed = true;
154
+ unregisterSignalCleanup();
155
+ return true;
156
+ }
157
+ catch {
158
+ throw new Error('Local federated credential transport cleanup failed.');
159
+ }
160
+ };
161
+ const onExit = () => {
162
+ try {
163
+ cleanupFiles(true);
164
+ }
165
+ catch {
166
+ // Credentials are temporary and the directory remains user-private if
167
+ // process-exit cleanup itself cannot report an error.
168
+ }
169
+ };
170
+ unregisterSignalCleanup = registerGovernedSignalCleanup(() => {
171
+ cleanupFiles(true);
172
+ process.removeListener('exit', onExit);
173
+ });
174
+ process.once('exit', onExit);
175
+ const resolve = dependencies.resolve ??
176
+ (input.profile
177
+ ? (0, credential_providers_1.fromIni)({ profile: input.profile })
178
+ : (0, credential_providers_1.fromNodeProviderChain)());
179
+ const identify = dependencies.identify ??
180
+ (async (credentials, region) => new client_sts_1.STSClient({
181
+ credentials,
182
+ endpoint: (0, identity_js_1.canonicalStsEndpoint)(region),
183
+ region,
184
+ }).send(new client_sts_1.GetCallerIdentityCommand({})));
185
+ const refresh = async () => {
186
+ if (closed || disposed) {
187
+ throw new Error('Local federated credential transport is already closed.');
188
+ }
189
+ const identity = await resolve();
190
+ requireCredentialValue(identity.accessKeyId, 'access key');
191
+ requireCredentialValue(identity.secretAccessKey, 'secret key');
192
+ requireCredentialValue(identity.sessionToken, 'session token');
193
+ const expiration = identity.expiration;
194
+ const now = (dependencies.now ?? (() => new Date()))();
195
+ if (!(expiration instanceof Date) ||
196
+ !Number.isFinite(expiration.getTime()) ||
197
+ expiration.getTime() - now.getTime() < MINIMUM_REMAINING_LIFETIME_MS) {
198
+ throw new Error('Local deployment requires temporary federated credentials with at least 30 minutes remaining.');
199
+ }
200
+ const caller = await identify(identity, input.region);
201
+ const callerArn = caller.Arn?.trim() ?? '';
202
+ if (caller.Account?.trim() !== input.account ||
203
+ !(0, identity_js_1.matchesExpectedAssumedRoleArn)(input.account, callerArn, input.expectedRoleArn)) {
204
+ throw new Error('Temporary SST child credentials do not match the committed account and exact assumed role.');
205
+ }
206
+ (0, private_state_js_1.atomicWritePrivateFile)(configurationPath, configFile(input.region), security);
207
+ (0, private_state_js_1.atomicWritePrivateFile)(credentialsPath, credentialsFile(identity), security);
208
+ (0, private_state_js_1.assertPrivatePath)(directory, 'directory', security);
209
+ (0, private_state_js_1.assertPrivatePath)(configurationPath, 'file', security);
210
+ (0, private_state_js_1.assertPrivatePath)(credentialsPath, 'file', security);
211
+ actorArn = callerArn;
212
+ expiresAt = expiration.toISOString();
213
+ return { actorArn, expiresAt };
214
+ };
215
+ try {
216
+ await refresh();
217
+ }
218
+ catch (error) {
219
+ if (cleanupFiles())
220
+ process.removeListener('exit', onExit);
221
+ throw error;
222
+ }
223
+ return {
224
+ profile: CHILD_PROFILE,
225
+ childEnvironment(ambient) {
226
+ if (closed || disposed || !expiresAt) {
227
+ throw new Error('Local federated credential transport is unavailable.');
228
+ }
229
+ (0, private_state_js_1.assertPrivatePath)(directory, 'directory', security);
230
+ (0, private_state_js_1.assertPrivatePath)(configurationPath, 'file', security);
231
+ (0, private_state_js_1.assertPrivatePath)(credentialsPath, 'file', security);
232
+ const environment = (0, child_environment_js_1.sanitizeGovernedAwsChildEnvironment)(ambient);
233
+ for (const key of AMBIENT_CREDENTIAL_KEYS)
234
+ delete environment[key];
235
+ return {
236
+ ...environment,
237
+ AWS_CONFIG_FILE: configurationPath,
238
+ AWS_DEFAULT_REGION: input.region,
239
+ AWS_PROFILE: CHILD_PROFILE,
240
+ AWS_REGION: input.region,
241
+ AWS_SDK_LOAD_CONFIG: '1',
242
+ AWS_SHARED_CREDENTIALS_FILE: credentialsPath,
243
+ };
244
+ },
245
+ cleanup() {
246
+ if (cleanupFiles())
247
+ process.removeListener('exit', onExit);
248
+ },
249
+ refresh,
250
+ };
251
+ }
252
+ //# sourceMappingURL=federated-credential-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federated-credential-transport.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/executors/local-deploy/federated-credential-transport.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  import type { ReadStream, WriteStream } from 'node:tty';
2
2
  export interface LocalMutationApprovalRequest {
3
- action: 'deploy' | 'refresh';
3
+ action: 'deploy';
4
4
  challenge: string;
5
- planDigest: string;
6
- project: string;
7
- stage: 'development' | 'staging' | 'production';
5
+ sourceCommit: string;
6
+ stage: 'production' | 'staging';
8
7
  }
9
8
  export type LocalMutationApprover = (request: LocalMutationApprovalRequest) => Promise<boolean>;
10
9
  export declare class LocalMutationApprovalUnavailableError extends Error {
@@ -14,10 +13,6 @@ interface LocalApprovalTerminal {
14
13
  input: ReadStream;
15
14
  output: WriteStream;
16
15
  }
17
- /**
18
- * Creates the public, non-secret operator acknowledgement used by deploy-local
19
- * and refresh-local. This is an active-operator boundary, not an independent
20
- * human-review claim: an authorized agent controlling a real TTY may answer it.
21
- */
16
+ /** Active operator acknowledgement, not an independent-review claim. */
22
17
  export declare function createTtyLocalMutationApprover(terminal?: LocalApprovalTerminal): LocalMutationApprover;
23
18
  export {};
@@ -5,16 +5,12 @@ exports.createTtyLocalMutationApprover = createTtyLocalMutationApprover;
5
5
  const promises_1 = require("node:readline/promises");
6
6
  class LocalMutationApprovalUnavailableError extends Error {
7
7
  constructor() {
8
- super('Local infrastructure mutation requires an interactive TTY operated by a human or authorized agent.');
8
+ super('Local protected-stage mutation requires an interactive TTY operated by a human or authorized agent.');
9
9
  this.name = 'LocalMutationApprovalUnavailableError';
10
10
  }
11
11
  }
12
12
  exports.LocalMutationApprovalUnavailableError = LocalMutationApprovalUnavailableError;
13
- /**
14
- * Creates the public, non-secret operator acknowledgement used by deploy-local
15
- * and refresh-local. This is an active-operator boundary, not an independent
16
- * human-review claim: an authorized agent controlling a real TTY may answer it.
17
- */
13
+ /** Active operator acknowledgement, not an independent-review claim. */
18
14
  function createTtyLocalMutationApprover(terminal = {
19
15
  input: process.stdin,
20
16
  output: process.stderr,
@@ -29,7 +25,7 @@ function createTtyLocalMutationApprover(terminal = {
29
25
  terminal: true,
30
26
  });
31
27
  try {
32
- const response = await prompt.question(`Type ${challenge} to acknowledge the current plan: `);
28
+ const response = await prompt.question(`Type ${challenge} to continue: `);
33
29
  return response === challenge;
34
30
  }
35
31
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"local-approval.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/executors/local-deploy/local-approval.ts"],"names":[],"mappings":";;;AAkCA,wEA0BC;AA5DD,qDAAyD;AAezD,MAAa,qCAAsC,SAAQ,KAAK;IAC9D;QACE,KAAK,CACH,oGAAoG,CACrG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF;AAPD,sFAOC;AAOD;;;;GAIG;AACH,SAAgB,8BAA8B,CAC5C,WAAkC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB;IAED,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,qCAAqC,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CACpC,QAAQ,SAAS,oCAAoC,CACtD,CAAC;YACF,OAAO,QAAQ,KAAK,SAAS,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,qCAAqC,EAAE,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"local-approval.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/executors/local-deploy/local-approval.ts"],"names":[],"mappings":";;;AA6BA,wEAwBC;AArDD,qDAAyD;AAczD,MAAa,qCAAsC,SAAQ,KAAK;IAC9D;QACE,KAAK,CACH,qGAAqG,CACtG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACtD,CAAC;CACF;AAPD,sFAOC;AAOD,wEAAwE;AACxE,SAAgB,8BAA8B,CAC5C,WAAkC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB;IAED,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,qCAAqC,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,SAAS,gBAAgB,CAAC,CAAC;YAC1E,OAAO,QAAQ,KAAK,SAAS,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,qCAAqC,EAAE,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,67 +1,82 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { GetParameterCommand, PutParameterCommand } from '@aws-sdk/client-ssm';
1
+ import { spawn, spawnSync } from 'node:child_process';
3
2
  import { type ExecutorContext, type PromiseExecutor } from '@nx/devkit';
4
- import { type InfrastructurePlanV1 } from '../../infrastructure-change/index.js';
5
- import { type CanonicalDeploymentStage } from '../../repository-policy/index.js';
3
+ import { type CanonicalDeploymentStage, type RepositoryOperatingPolicy } from '../../repository-policy/index.js';
4
+ import { attestProductionDatabaseLifecycle } from '../foundation-profile-preflight/production-database-safeguard.js';
5
+ import { createLocalFederatedCredentialTransport } from './federated-credential-transport.js';
6
6
  import { type LocalMutationApprover } from './local-approval.js';
7
7
  interface LocalDeployOptions {
8
- action?: 'deploy' | 'refresh';
9
- confirmation?: string;
10
8
  expectedRoleArn: string;
11
- phase?: 'foundation-bootstrap' | 'full-stage';
12
9
  profile?: string;
13
10
  stage: CanonicalDeploymentStage;
14
11
  }
15
12
  interface LocalDeployDependencies {
16
13
  approve?: LocalMutationApprover;
17
- backend?: (input: {
18
- account: string;
19
- applications: readonly string[];
20
- profile?: string;
21
- region: string;
22
- stage: CanonicalDeploymentStage;
23
- }) => Promise<LocalSstBackendAuthority>;
24
- now?: () => Date;
25
- run?: typeof spawnSync;
26
- caller?: (region: string) => Promise<{
14
+ attestContainerBinding?: typeof attestLocalContainerBinding;
15
+ attestProductionDatabase?: typeof attestProductionDatabaseLifecycle;
16
+ createTransport?: typeof createLocalFederatedCredentialTransport;
17
+ identifyGithubCaller?: (region: string) => Promise<{
27
18
  Account?: string;
28
19
  Arn?: string;
29
20
  }>;
21
+ now?: () => Date;
22
+ platform?: NodeJS.Platform;
23
+ run?: typeof spawnSync;
24
+ spawnChild?: typeof spawn;
30
25
  }
31
- interface LocalSstBackendAuthority {
32
- authorityDigest: string;
33
- createdApplications: readonly string[];
34
- stateBucketArn: string;
26
+ interface ProjectDescriptor {
27
+ name: string;
28
+ root: string;
29
+ tags: readonly string[];
30
+ targets: Readonly<Record<string, unknown>>;
35
31
  }
36
- /** @internal */
37
- export declare function prepareLocalSstBackend(input: {
32
+ interface ChildReceipt {
33
+ completedAt: string;
34
+ outcome: 'failed' | 'succeeded';
35
+ project: string;
36
+ startedAt: string;
37
+ target: 'container-release-amd64' | 'container-release-arm64' | 'container-release-assemble' | 'deploy' | 'production-database-final-postflight' | 'production-database-postflight' | 'profile-preflight' | 'release-candidate' | 'smoke-deployed';
38
+ }
39
+ export interface DeploymentReceipt {
38
40
  account: string;
39
- applications: readonly string[];
40
- profile?: string;
41
+ actor: string;
42
+ authority: 'github' | 'local';
43
+ children: readonly ChildReceipt[];
44
+ completedAt: string;
45
+ frameworkVersion: string;
46
+ kind: 'ebk-deployment-receipt';
47
+ migrations: Readonly<Record<string, 'completed-by-deploy-target' | 'not-applicable'>>;
48
+ outcome: 'failed' | 'review-required' | 'succeeded';
49
+ profile: RepositoryOperatingPolicy['deploymentProfile'];
41
50
  region: string;
51
+ schemaVersion: 1;
52
+ smoke: Readonly<Record<string, 'not-applicable' | 'passed'>>;
53
+ source: {
54
+ clean: boolean;
55
+ commit: string;
56
+ workingTreeDigest: string;
57
+ };
42
58
  stage: CanonicalDeploymentStage;
43
- }, dependencies?: {
44
- passphrase?: () => string;
45
- send?: (command: GetParameterCommand | PutParameterCommand) => Promise<{
46
- Parameter?: {
47
- Name?: string;
48
- Type?: string;
49
- Value?: string;
50
- Version?: number;
51
- };
52
- }>;
53
- }): Promise<LocalSstBackendAuthority>;
54
- /** @internal */
55
- export declare function localPlanSummaryDigest(input: {
56
- action?: 'deploy' | 'refresh';
59
+ startedAt: string;
60
+ }
61
+ /** Bind a development deployment to the exact tracked diff and untracked
62
+ * source bytes without requiring a commit. Ignored caches and build output are
63
+ * intentionally outside this identity. */
64
+ export declare function localWorkingTreeDigest(root: string, run?: typeof spawnSync): {
65
+ clean: boolean;
66
+ commit: string;
67
+ digest: string;
68
+ };
69
+ declare function attestLocalContainerBinding(input: {
57
70
  account: string;
58
- orderedProjects: readonly string[];
59
- phase: 'foundation-bootstrap' | 'full-stage';
60
- plans: Readonly<Record<string, InfrastructurePlanV1>>;
71
+ project: ProjectDescriptor;
61
72
  region: string;
73
+ root: string;
62
74
  sourceCommit: string;
63
75
  stage: CanonicalDeploymentStage;
64
- }): string;
76
+ }): void;
77
+ /** Determine the one native deployment order. Foundation is always first and
78
+ * production Slice admission remains a committed policy decision. */
79
+ export declare function localDeploymentProjectOrder(policy: RepositoryOperatingPolicy, context: ExecutorContext, stage: CanonicalDeploymentStage): string[];
65
80
  export declare function runLocalDeploy(options: LocalDeployOptions, context: ExecutorContext, dependencies?: LocalDeployDependencies): Promise<{
66
81
  success: boolean;
67
82
  }>;