@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.40

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 (791) hide show
  1. package/README.md +18 -0
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.js +21 -9
  16. package/src/blueprints/manifest.d.ts +1 -1
  17. package/src/blueprints/resolver.js +28 -15
  18. package/src/cli/bootstrap.d.ts +1 -1
  19. package/src/cli/deploy-runtime.d.ts +6 -0
  20. package/src/cli/deploy-runtime.js +58 -0
  21. package/src/cli/dev-command.d.ts +16 -4
  22. package/src/cli/dev-command.js +63 -0
  23. package/src/cli/main.d.ts +9 -1
  24. package/src/cli/main.js +139 -20
  25. package/src/cli/output.d.ts +1 -1
  26. package/src/cli/output.js +1 -1
  27. package/src/developer-agent/context.js +41 -9
  28. package/src/developer-agent/generator-planning.js +20 -6
  29. package/src/developer-agent/git-inspection.d.ts +6 -2
  30. package/src/developer-agent/git-inspection.js +78 -6
  31. package/src/developer-agent/model.d.ts +5 -3
  32. package/src/developer-agent/model.js +4 -4
  33. package/src/developer-agent/operation-registry.d.ts +5 -0
  34. package/src/developer-agent/operation-registry.js +286 -40
  35. package/src/developer-agent/planning.js +16 -13
  36. package/src/developer-agent/preview-changes.d.ts +2 -0
  37. package/src/developer-agent/preview-changes.js +14 -2
  38. package/src/developer-agent/preview-source.js +3 -0
  39. package/src/developer-agent/validation.js +25 -9
  40. package/src/developer-agent/workspace-inspection.js +60 -5
  41. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  42. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  43. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  44. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  45. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  46. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  47. package/src/executors/dev-task-cleanup/schema.json +9 -0
  48. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  49. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  50. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  51. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  52. package/src/executors/fleet/fleet.js +1 -1
  53. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  54. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  55. package/src/executors/foundation-preflight/schema.json +5 -0
  56. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  57. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  58. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  59. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  60. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  61. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  62. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  63. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  64. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  65. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  66. package/src/executors/github-bootstrap/schema.json +7 -1
  67. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  68. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  69. package/src/executors/infrastructure-plan/schema.json +12 -52
  70. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  71. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  72. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  73. package/src/executors/local-deploy/local-approval.js +39 -0
  74. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  75. package/src/executors/local-deploy/local-deploy.js +1404 -0
  76. package/src/executors/local-deploy/schema.json +70 -0
  77. package/src/executors/refresh/refresh.js +2 -2
  78. package/src/executors/remove/remove.js +2 -2
  79. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  80. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  81. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  82. package/src/executors/secret-initialize/schema.json +42 -0
  83. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  84. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  85. package/src/executors/secret-metadata/schema.json +5 -0
  86. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  87. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  88. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  89. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  90. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  91. package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
  92. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  93. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  94. package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
  95. package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
  96. package/src/executors/sst-lifecycle/schema.json +8 -1
  97. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  98. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  99. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  100. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  101. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  102. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  103. package/src/executors/unlock/unlock.js +2 -2
  104. package/src/foundation/capability-plan.d.ts +43 -0
  105. package/src/foundation/capability-plan.js +168 -0
  106. package/src/foundation/discovery.d.ts +14 -11
  107. package/src/foundation/discovery.js +32 -6
  108. package/src/foundation/index.d.ts +4 -0
  109. package/src/foundation/index.js +11 -0
  110. package/src/foundation/local-database-contract.d.ts +20 -0
  111. package/src/foundation/local-database-contract.js +262 -13
  112. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  113. package/src/foundation/local-private-smoke-access.js +197 -0
  114. package/src/foundation/logging-preflight.js +1 -1
  115. package/src/foundation/logging.d.ts +3 -1
  116. package/src/foundation/logging.js +1 -1
  117. package/src/foundation/partial-state.d.ts +10 -0
  118. package/src/foundation/partial-state.js +21 -0
  119. package/src/foundation/preflight.js +37 -18
  120. package/src/foundation/private-smoke-access.d.ts +25 -0
  121. package/src/foundation/private-smoke-access.js +135 -0
  122. package/src/foundation/private-smoke-admission.d.ts +45 -0
  123. package/src/foundation/private-smoke-admission.js +180 -0
  124. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  125. package/src/foundation/private-smoke-control-plane.js +184 -0
  126. package/src/foundation/provision-database-bindings.d.ts +5 -0
  127. package/src/foundation/provision-database-bindings.js +41 -8
  128. package/src/foundation/provision-logical-database.js +15 -8
  129. package/src/foundation/requirements.d.ts +3 -3
  130. package/src/foundation/requirements.js +24 -12
  131. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  132. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  133. package/src/foundation/router-waf.d.ts +149 -0
  134. package/src/foundation/router-waf.js +809 -0
  135. package/src/foundation/stages.d.ts +1 -0
  136. package/src/foundation/stages.js +11 -0
  137. package/src/generators/blueprint/blueprint.d.ts +5 -0
  138. package/src/generators/blueprint/blueprint.js +102 -0
  139. package/src/generators/blueprint/files.d.ts +6 -0
  140. package/src/generators/blueprint/files.js +217 -0
  141. package/src/generators/blueprint/schema.d.ts +4 -0
  142. package/src/generators/blueprint/schema.json +18 -0
  143. package/src/generators/formatting.d.ts +8 -0
  144. package/src/generators/formatting.js +141 -0
  145. package/src/generators/function/function.js +38 -17
  146. package/src/generators/logging-registry.d.ts +2 -0
  147. package/src/generators/logging-registry.js +22 -0
  148. package/src/generators/post-generation-install.js +2 -2
  149. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  150. package/src/generators/preset/dependency-overrides.js +55 -0
  151. package/src/generators/preset/generator.js +43 -3
  152. package/src/generators/preset/schema.d.ts +10 -0
  153. package/src/generators/preset/schema.json +47 -0
  154. package/src/generators/preset/tool-versions.d.ts +2 -0
  155. package/src/generators/preset/tool-versions.js +3 -1
  156. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  157. package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
  158. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  159. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  160. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  161. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  162. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  163. package/src/generators/preset/workspace-files-developer-agent.js +90 -28
  164. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  165. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  166. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  167. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  168. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  169. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  170. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  171. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  172. package/src/generators/preset/workspace-files-stage-authority.js +518 -0
  173. package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
  174. package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
  175. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  176. package/src/generators/preset/workspace-files-thin-docs.js +352 -0
  177. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  178. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  179. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  180. package/src/generators/preset/workspace-files.d.ts +18 -2
  181. package/src/generators/preset/workspace-files.js +1504 -608
  182. package/src/generators/repository-policy/repository-policy.js +235 -5
  183. package/src/generators/repository-policy/schema.d.ts +10 -0
  184. package/src/generators/repository-policy/schema.json +80 -4
  185. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  186. package/src/generators/repository-policy/tree-policy.js +25 -0
  187. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  188. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  189. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  190. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  191. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  192. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
  193. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  194. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  195. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  196. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  197. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  198. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  199. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  200. package/src/generators/slice/built-in-plan-data-files.js +163 -1196
  201. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  202. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  203. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  204. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  205. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  206. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  207. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  208. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  209. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  210. package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
  211. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  212. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
  213. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
  214. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  215. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  216. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  217. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  218. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  219. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  220. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  221. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  222. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  223. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  224. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  225. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  226. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  227. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  228. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  229. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  230. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  231. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  232. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  233. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  234. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  235. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  236. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  237. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  238. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  239. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  240. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  241. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  242. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  243. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  244. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  246. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  247. package/src/generators/slice/built-in-plan-metadata-files.js +157 -28
  248. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  249. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  250. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  251. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  252. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  253. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  254. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  255. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  257. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  258. package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
  259. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  261. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  262. package/src/generators/slice/built-in-plan-shared.js +41 -19
  263. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  264. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  265. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  266. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  267. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  268. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  269. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  270. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  271. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  272. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  273. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  274. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  276. package/src/generators/slice/built-in-plan.d.ts +11 -1
  277. package/src/generators/slice/built-in-plan.js +80 -29
  278. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  279. package/src/generators/slice/data-policy-review-seed.js +22 -0
  280. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  281. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  282. package/src/generators/slice/local-source-identity.d.ts +2 -0
  283. package/src/generators/slice/local-source-identity.js +31 -0
  284. package/src/generators/slice/persistence-contract.d.ts +14 -0
  285. package/src/generators/slice/persistence-contract.js +32 -0
  286. package/src/generators/slice/slice.js +61 -50
  287. package/src/generators/sql/schema.d.ts +7 -0
  288. package/src/generators/sql/schema.json +38 -0
  289. package/src/generators/sql/sql.d.ts +6 -0
  290. package/src/generators/sql/sql.js +53 -0
  291. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  292. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  293. package/src/generators/upgrade/upgrade.d.ts +15 -1
  294. package/src/generators/upgrade/upgrade.js +435 -44
  295. package/src/generators/workload/performance-registration.d.ts +1 -0
  296. package/src/generators/workload/performance-registration.js +9 -11
  297. package/src/generators/workload/service-performance-files.d.ts +1 -0
  298. package/src/generators/workload/service-performance-files.js +27 -7
  299. package/src/generators/workload/workload.d.ts +1 -1
  300. package/src/generators/workload/workload.js +105 -29
  301. package/src/git-policy/action-pins.d.ts +5 -0
  302. package/src/git-policy/action-pins.js +5 -0
  303. package/src/git-policy/github-bootstrap.d.ts +39 -8
  304. package/src/git-policy/github-bootstrap.js +329 -175
  305. package/src/git-policy/routing.d.ts +7 -1
  306. package/src/git-policy/routing.js +62 -1
  307. package/src/index.d.ts +1 -0
  308. package/src/index.js +1 -0
  309. package/src/infrastructure-change/local-capability.d.ts +73 -0
  310. package/src/infrastructure-change/local-capability.js +114 -0
  311. package/src/infrastructure-change/model.d.ts +25 -4
  312. package/src/infrastructure-change/model.js +1 -0
  313. package/src/infrastructure-change/normalize.d.ts +4 -0
  314. package/src/infrastructure-change/normalize.js +47 -7
  315. package/src/infrastructure-change/plan.d.ts +30 -3
  316. package/src/infrastructure-change/plan.js +323 -13
  317. package/src/infrastructure-change/risk.d.ts +3 -1
  318. package/src/infrastructure-change/risk.js +96 -16
  319. package/src/local-dev/browser-verification.d.ts +37 -0
  320. package/src/local-dev/browser-verification.js +281 -0
  321. package/src/local-dev/contracts.d.ts +10 -1
  322. package/src/local-dev/contracts.js +114 -13
  323. package/src/local-dev/dev-command-core.js +24 -5
  324. package/src/local-dev/docker-credential-health.d.ts +14 -0
  325. package/src/local-dev/docker-credential-health.js +94 -0
  326. package/src/local-dev/environment-inspector.d.ts +7 -0
  327. package/src/local-dev/environment-inspector.js +42 -15
  328. package/src/local-dev/environment-state.js +2 -2
  329. package/src/local-dev/errors.d.ts +1 -1
  330. package/src/local-dev/errors.js +2 -0
  331. package/src/local-dev/fleet-client.js +2 -2
  332. package/src/local-dev/fleet-configuration.js +57 -25
  333. package/src/local-dev/fleet-inventory.js +46 -18
  334. package/src/local-dev/fleet-ipc.d.ts +7 -0
  335. package/src/local-dev/fleet-ipc.js +14 -2
  336. package/src/local-dev/fleet-launcher.d.ts +6 -0
  337. package/src/local-dev/fleet-launcher.js +14 -2
  338. package/src/local-dev/fleet-logs.js +50 -22
  339. package/src/local-dev/fleet-process.d.ts +20 -1
  340. package/src/local-dev/fleet-process.js +197 -41
  341. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  342. package/src/local-dev/fleet-runner-evidence.js +56 -0
  343. package/src/local-dev/fleet-runtime.js +268 -229
  344. package/src/local-dev/fleet-session.d.ts +2 -0
  345. package/src/local-dev/fleet-session.js +28 -11
  346. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  347. package/src/local-dev/fleet-state.d.ts +5 -2
  348. package/src/local-dev/fleet-state.js +25 -4
  349. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  350. package/src/local-dev/fleet-supervisor.js +66 -11
  351. package/src/local-dev/fleet-web-start.d.ts +12 -0
  352. package/src/local-dev/fleet-web-start.js +48 -0
  353. package/src/local-dev/identity.js +3 -14
  354. package/src/local-dev/index.d.ts +1 -0
  355. package/src/local-dev/index.js +1 -0
  356. package/src/local-dev/native-completion.d.ts +9 -0
  357. package/src/local-dev/native-completion.js +130 -0
  358. package/src/local-dev/nx-workspace.d.ts +4 -2
  359. package/src/local-dev/nx-workspace.js +11 -6
  360. package/src/local-dev/personal-stage.d.ts +4 -5
  361. package/src/local-dev/personal-stage.js +6 -54
  362. package/src/local-dev/port-claims.d.ts +13 -0
  363. package/src/local-dev/port-claims.js +46 -0
  364. package/src/local-dev/ports.d.ts +14 -2
  365. package/src/local-dev/ports.js +78 -3
  366. package/src/local-dev/private-state.d.ts +11 -0
  367. package/src/local-dev/private-state.js +146 -40
  368. package/src/local-dev/process-group.d.ts +4 -0
  369. package/src/local-dev/process-group.js +29 -0
  370. package/src/local-dev/process-identity.d.ts +8 -0
  371. package/src/local-dev/process-identity.js +31 -1
  372. package/src/local-dev/proxy.js +11 -12
  373. package/src/local-dev/runtime-paths.js +1 -1
  374. package/src/local-dev/slice-claim.js +1 -1
  375. package/src/local-dev/slice-runner.d.ts +15 -6
  376. package/src/local-dev/slice-runner.js +189 -54
  377. package/src/local-dev/task-attachment.d.ts +17 -0
  378. package/src/local-dev/task-attachment.js +73 -0
  379. package/src/local-dev/task-authority.d.ts +10 -0
  380. package/src/local-dev/task-authority.js +27 -0
  381. package/src/local-dev/task-identity.d.ts +33 -0
  382. package/src/local-dev/task-identity.js +418 -0
  383. package/src/local-dev/task-native-writer.d.ts +18 -0
  384. package/src/local-dev/task-native-writer.js +329 -0
  385. package/src/local-dev/tls.js +8 -2
  386. package/src/local-dev/web-launch.d.ts +9 -0
  387. package/src/local-dev/web-launch.js +130 -0
  388. package/src/ownership/composition.d.ts +2 -1
  389. package/src/ownership/composition.js +1 -0
  390. package/src/performance/cost-collection.d.ts +1 -1
  391. package/src/performance/cost-collection.js +4 -2
  392. package/src/performance/cost-controls.d.ts +8 -4
  393. package/src/performance/cost-controls.js +39 -28
  394. package/src/performance/evidence.d.ts +1 -1
  395. package/src/performance/evidence.js +5 -3
  396. package/src/performance/load-safety.js +5 -3
  397. package/src/performance/model.d.ts +4 -4
  398. package/src/performance/model.js +4 -5
  399. package/src/performance/scenario.d.ts +22 -0
  400. package/src/performance/scenario.js +100 -92
  401. package/src/release/index.d.ts +0 -2
  402. package/src/release/index.js +0 -2
  403. package/src/release/source-authority.d.ts +5 -5
  404. package/src/release/source-authority.js +141 -124
  405. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  406. package/src/repository-policy/aurora-preflight.js +4 -1
  407. package/src/repository-policy/capacity-migration.d.ts +3 -0
  408. package/src/repository-policy/capacity-migration.js +21 -0
  409. package/src/repository-policy/deployment-plan.d.ts +4 -1
  410. package/src/repository-policy/deployment-plan.js +9 -0
  411. package/src/repository-policy/foundation-profile.js +10 -1
  412. package/src/repository-policy/policy.d.ts +57 -3
  413. package/src/repository-policy/policy.js +497 -11
  414. package/src/schemas/blueprint-v1.json +5 -4
  415. package/src/schemas/foundation-requirement-v1.json +5 -4
  416. package/src/schemas/performance-policy-v1.json +3 -3
  417. package/src/schemas/repository-policy-v1.json +130 -6
  418. package/src/schemas/testing-evidence-result-v1.json +1 -1
  419. package/src/secrets/adapters.d.ts +7 -2
  420. package/src/secrets/adapters.js +34 -3
  421. package/src/secrets/aws-control-plane.d.ts +10 -1
  422. package/src/secrets/aws-control-plane.js +67 -0
  423. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  424. package/src/secrets/generated-aws-control-plane.js +259 -0
  425. package/src/secrets/metadata.js +38 -10
  426. package/src/secrets/model.d.ts +8 -1
  427. package/src/secrets/model.js +24 -3
  428. package/src/secrets/operator.d.ts +91 -3
  429. package/src/secrets/operator.js +463 -13
  430. package/src/secrets/registry.d.ts +2 -1
  431. package/src/secrets/registry.js +18 -1
  432. package/src/secrets/verification.js +9 -1
  433. package/src/secrets/workload-access.js +10 -2
  434. package/src/sst-environment-source-format.d.ts +6 -0
  435. package/src/sst-environment-source-format.js +199 -0
  436. package/src/supply-chain/action-pins.js +61 -7
  437. package/src/supply-chain/blueprint-trust-git.js +85 -24
  438. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  439. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  440. package/src/supply-chain/build-output-bounds.js +12 -0
  441. package/src/supply-chain/build-output.d.ts +7 -1
  442. package/src/supply-chain/build-output.js +177 -24
  443. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  444. package/src/supply-chain/ecr-scanning.js +11 -7
  445. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  446. package/src/supply-chain/ecs-deployed-image.js +6 -4
  447. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  448. package/src/supply-chain/generated-command.js +1 -0
  449. package/src/supply-chain/generated-container-release-command.js +1285 -124
  450. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  451. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  452. package/src/supply-chain/generated-files.js +25 -14
  453. package/src/supply-chain/generated-scanner-command.js +2 -1
  454. package/src/supply-chain/index.d.ts +1 -1
  455. package/src/supply-chain/index.js +2 -1
  456. package/src/supply-chain/sbom.d.ts +1 -1
  457. package/src/supply-chain/sbom.js +30 -5
  458. package/src/supply-chain/scanner.js +3 -0
  459. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  460. package/src/testing-evidence/fixture-scope.js +4 -2
  461. package/src/testing-evidence/result.d.ts +2 -1
  462. package/src/testing-evidence/result.js +18 -4
  463. package/src/workload-roles/account-baseline.d.ts +11 -0
  464. package/src/workload-roles/account-baseline.js +253 -16
  465. package/src/workload-roles/authority.d.ts +3 -1
  466. package/src/workload-roles/authority.js +48 -2
  467. package/src/workload-roles/aws-s3-state.js +27 -0
  468. package/src/workload-roles/boundary.d.ts +2 -1
  469. package/src/workload-roles/boundary.js +9 -2
  470. package/src/workload-roles/handler.js +52 -24
  471. package/src/workload-roles/index.d.ts +10 -17
  472. package/src/workload-roles/index.js +5 -18
  473. package/src/workload-roles/injection.js +1 -1
  474. package/src/workload-roles/provisioner.js +12 -4
  475. package/src/workload-roles/registration.d.ts +1 -0
  476. package/src/workload-roles/registration.js +5 -0
  477. package/src/workload-roles/stage-boundary.js +1 -1
  478. package/src/workload-roles/standard-slice.js +3 -3
  479. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  480. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  481. package/src/workspace-deployment/identity.d.ts +3 -0
  482. package/src/workspace-deployment/identity.js +22 -0
  483. package/src/workspace-deployment/index.d.ts +4 -0
  484. package/src/workspace-deployment/index.js +8 -0
  485. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  486. package/src/workspace-deployment/migration-evidence.js +83 -0
  487. package/src/workspace-deployment/migration.d.ts +27 -0
  488. package/src/workspace-deployment/migration.js +109 -0
  489. package/src/workspace-deployment/ownership.d.ts +81 -0
  490. package/src/workspace-deployment/ownership.js +381 -0
  491. package/src/api-contract/baseline-update.js.map +0 -1
  492. package/src/api-contract/compatibility.js.map +0 -1
  493. package/src/api-contract/contract-graph.js.map +0 -1
  494. package/src/api-contract/evidence.js.map +0 -1
  495. package/src/api-contract/index.js.map +0 -1
  496. package/src/api-contract/model.fixtures.d.ts +0 -2
  497. package/src/api-contract/model.fixtures.js +0 -81
  498. package/src/api-contract/model.fixtures.js.map +0 -1
  499. package/src/api-contract/model.js.map +0 -1
  500. package/src/api-contract/rollout.js.map +0 -1
  501. package/src/authorization/compatibility.js.map +0 -1
  502. package/src/authorization/index.js.map +0 -1
  503. package/src/blueprints/execution.js.map +0 -1
  504. package/src/blueprints/external-sandbox.js.map +0 -1
  505. package/src/blueprints/index.js.map +0 -1
  506. package/src/blueprints/inputs.js.map +0 -1
  507. package/src/blueprints/manifest.js.map +0 -1
  508. package/src/blueprints/resolver.js.map +0 -1
  509. package/src/blueprints/transitions.js.map +0 -1
  510. package/src/cli/agent-command.js.map +0 -1
  511. package/src/cli/agent-runtime.js.map +0 -1
  512. package/src/cli/blueprint-authority.js.map +0 -1
  513. package/src/cli/blueprint-command.js.map +0 -1
  514. package/src/cli/bootstrap.js.map +0 -1
  515. package/src/cli/dev-command.js.map +0 -1
  516. package/src/cli/main.js.map +0 -1
  517. package/src/cli/output.js.map +0 -1
  518. package/src/cli/personal-secret-runtime.js.map +0 -1
  519. package/src/cli/secret-terminal.js.map +0 -1
  520. package/src/container-images.js.map +0 -1
  521. package/src/data-lifecycle/index.js.map +0 -1
  522. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  523. package/src/data-lifecycle/model.fixtures.js +0 -244
  524. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  525. package/src/data-lifecycle/model.js.map +0 -1
  526. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  527. package/src/data-lifecycle/validation.js.map +0 -1
  528. package/src/database-retirement/contract.js.map +0 -1
  529. package/src/database-retirement/index.js.map +0 -1
  530. package/src/deterministic-order.js.map +0 -1
  531. package/src/developer-agent/context.js.map +0 -1
  532. package/src/developer-agent/generator-planning.js.map +0 -1
  533. package/src/developer-agent/generator-preview.js.map +0 -1
  534. package/src/developer-agent/git-inspection.js.map +0 -1
  535. package/src/developer-agent/handoff.js.map +0 -1
  536. package/src/developer-agent/index.js.map +0 -1
  537. package/src/developer-agent/model.js.map +0 -1
  538. package/src/developer-agent/operation-registry.js.map +0 -1
  539. package/src/developer-agent/ordering.js.map +0 -1
  540. package/src/developer-agent/planning.js.map +0 -1
  541. package/src/developer-agent/preview-changes.js.map +0 -1
  542. package/src/developer-agent/preview-source.js.map +0 -1
  543. package/src/developer-agent/validation.js.map +0 -1
  544. package/src/developer-agent/workspace-inspection.js.map +0 -1
  545. package/src/developer-agent/workspace-path.js.map +0 -1
  546. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  547. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  548. package/src/executors/deploy/deploy.js.map +0 -1
  549. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  550. package/src/executors/dev/dev.js.map +0 -1
  551. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  552. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  553. package/src/executors/developer-context/developer-context.js.map +0 -1
  554. package/src/executors/fleet/fleet.js.map +0 -1
  555. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  556. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  557. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  558. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  559. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  560. package/src/executors/refresh/refresh.js.map +0 -1
  561. package/src/executors/remove/remove.js.map +0 -1
  562. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  563. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  564. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  565. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  566. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  567. package/src/executors/unlock/unlock.js.map +0 -1
  568. package/src/executors/work-markers/work-markers.js.map +0 -1
  569. package/src/foundation/discovery.js.map +0 -1
  570. package/src/foundation/index.js.map +0 -1
  571. package/src/foundation/local-database-contract.js.map +0 -1
  572. package/src/foundation/logging-preflight.js.map +0 -1
  573. package/src/foundation/logging.js.map +0 -1
  574. package/src/foundation/preflight.js.map +0 -1
  575. package/src/foundation/provision-database-bindings.js.map +0 -1
  576. package/src/foundation/provision-logical-database.js.map +0 -1
  577. package/src/foundation/requirements.js.map +0 -1
  578. package/src/foundation/router-origin-proof.js.map +0 -1
  579. package/src/foundation/stages.js.map +0 -1
  580. package/src/frontend-security/index.js.map +0 -1
  581. package/src/frontend-security/security-headers.js.map +0 -1
  582. package/src/generators/feature-registry.js.map +0 -1
  583. package/src/generators/function/function.js.map +0 -1
  584. package/src/generators/job/job.js.map +0 -1
  585. package/src/generators/logging-registry.js.map +0 -1
  586. package/src/generators/post-generation-install.js.map +0 -1
  587. package/src/generators/preset/generator.js.map +0 -1
  588. package/src/generators/preset/tool-versions.js.map +0 -1
  589. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  590. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  591. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  592. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  593. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  594. package/src/generators/preset/workspace-files.js.map +0 -1
  595. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  596. package/src/generators/service/service.js.map +0 -1
  597. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  598. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  599. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  600. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  601. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  602. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  603. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  604. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  605. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  606. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  607. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  608. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  609. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  610. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan.js.map +0 -1
  629. package/src/generators/slice/slice.js.map +0 -1
  630. package/src/generators/upgrade/upgrade.js.map +0 -1
  631. package/src/generators/workload/frozen-container.js.map +0 -1
  632. package/src/generators/workload/performance-registration.js.map +0 -1
  633. package/src/generators/workload/reliability-registration.js.map +0 -1
  634. package/src/generators/workload/service-performance-files.js.map +0 -1
  635. package/src/generators/workload/workload.js.map +0 -1
  636. package/src/git-policy/action-pins.js.map +0 -1
  637. package/src/git-policy/github-bootstrap.js.map +0 -1
  638. package/src/git-policy/index.js.map +0 -1
  639. package/src/git-policy/routing.js.map +0 -1
  640. package/src/index.js.map +0 -1
  641. package/src/infrastructure-change/convergence.js.map +0 -1
  642. package/src/infrastructure-change/drift.js.map +0 -1
  643. package/src/infrastructure-change/index.js.map +0 -1
  644. package/src/infrastructure-change/model.js.map +0 -1
  645. package/src/infrastructure-change/normalize.js.map +0 -1
  646. package/src/infrastructure-change/plan.js.map +0 -1
  647. package/src/infrastructure-change/risk.js.map +0 -1
  648. package/src/infrastructure-change/summary.js.map +0 -1
  649. package/src/local-dev/context-discovery.js.map +0 -1
  650. package/src/local-dev/contract-validation.js.map +0 -1
  651. package/src/local-dev/contracts.js.map +0 -1
  652. package/src/local-dev/control-contract.js.map +0 -1
  653. package/src/local-dev/dev-command-core.js.map +0 -1
  654. package/src/local-dev/effects.js.map +0 -1
  655. package/src/local-dev/environment-inspector.js.map +0 -1
  656. package/src/local-dev/environment-state.js.map +0 -1
  657. package/src/local-dev/errors.js.map +0 -1
  658. package/src/local-dev/fleet-client.js.map +0 -1
  659. package/src/local-dev/fleet-configuration.js.map +0 -1
  660. package/src/local-dev/fleet-inventory.js.map +0 -1
  661. package/src/local-dev/fleet-ipc.js.map +0 -1
  662. package/src/local-dev/fleet-launcher.js.map +0 -1
  663. package/src/local-dev/fleet-lock.js.map +0 -1
  664. package/src/local-dev/fleet-logs.js.map +0 -1
  665. package/src/local-dev/fleet-process.js.map +0 -1
  666. package/src/local-dev/fleet-runtime.js.map +0 -1
  667. package/src/local-dev/fleet-session.js.map +0 -1
  668. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  669. package/src/local-dev/fleet-startup.js.map +0 -1
  670. package/src/local-dev/fleet-state.js.map +0 -1
  671. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  672. package/src/local-dev/fleet-supervisor.js.map +0 -1
  673. package/src/local-dev/gateway-daemon.js.map +0 -1
  674. package/src/local-dev/gateway.js.map +0 -1
  675. package/src/local-dev/identity.js.map +0 -1
  676. package/src/local-dev/index.js.map +0 -1
  677. package/src/local-dev/local-context.js.map +0 -1
  678. package/src/local-dev/nx-workspace.js.map +0 -1
  679. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  680. package/src/local-dev/personal-stage.js.map +0 -1
  681. package/src/local-dev/portless.js.map +0 -1
  682. package/src/local-dev/ports.js.map +0 -1
  683. package/src/local-dev/private-state.js.map +0 -1
  684. package/src/local-dev/process-identity.js.map +0 -1
  685. package/src/local-dev/proxy.js.map +0 -1
  686. package/src/local-dev/runtime-paths.js.map +0 -1
  687. package/src/local-dev/secret-slice-claim.js.map +0 -1
  688. package/src/local-dev/slice-claim.js.map +0 -1
  689. package/src/local-dev/slice-runner.js.map +0 -1
  690. package/src/local-dev/tls.js.map +0 -1
  691. package/src/ownership/composition.js.map +0 -1
  692. package/src/ownership/foundation-record.js.map +0 -1
  693. package/src/ownership/hash.js.map +0 -1
  694. package/src/ownership/index.js.map +0 -1
  695. package/src/ownership/json-ownership.js.map +0 -1
  696. package/src/ownership/record.js.map +0 -1
  697. package/src/ownership/workspace-record.js.map +0 -1
  698. package/src/performance/cost-collection.js.map +0 -1
  699. package/src/performance/cost-controls.js.map +0 -1
  700. package/src/performance/evidence.js.map +0 -1
  701. package/src/performance/index.js.map +0 -1
  702. package/src/performance/load-safety.js.map +0 -1
  703. package/src/performance/model.js.map +0 -1
  704. package/src/performance/pr-artifact-budget.js.map +0 -1
  705. package/src/performance/runner.js.map +0 -1
  706. package/src/performance/scenario-endpoint.js.map +0 -1
  707. package/src/performance/scenario.js.map +0 -1
  708. package/src/performance/test-fixtures.d.ts +0 -7
  709. package/src/performance/test-fixtures.js +0 -169
  710. package/src/performance/test-fixtures.js.map +0 -1
  711. package/src/performance/unit-cost.js.map +0 -1
  712. package/src/release/index.js.map +0 -1
  713. package/src/release/lifecycle.js.map +0 -1
  714. package/src/release/manifest.js.map +0 -1
  715. package/src/release/rollout.js.map +0 -1
  716. package/src/release/source-authority.js.map +0 -1
  717. package/src/repository-policy/aurora-preflight.js.map +0 -1
  718. package/src/repository-policy/deployment-plan.js.map +0 -1
  719. package/src/repository-policy/foundation-profile.js.map +0 -1
  720. package/src/repository-policy/index.js.map +0 -1
  721. package/src/repository-policy/policy.js.map +0 -1
  722. package/src/secrets/adapters.js.map +0 -1
  723. package/src/secrets/aws-control-plane.js.map +0 -1
  724. package/src/secrets/declaration-verification.js.map +0 -1
  725. package/src/secrets/guardrails.js.map +0 -1
  726. package/src/secrets/index.js.map +0 -1
  727. package/src/secrets/metadata.js.map +0 -1
  728. package/src/secrets/model.js.map +0 -1
  729. package/src/secrets/operator.js.map +0 -1
  730. package/src/secrets/permissions.js.map +0 -1
  731. package/src/secrets/personal-command.js.map +0 -1
  732. package/src/secrets/personal-ledger.js.map +0 -1
  733. package/src/secrets/registry.js.map +0 -1
  734. package/src/secrets/verification.js.map +0 -1
  735. package/src/secrets/workload-access.js.map +0 -1
  736. package/src/supply-chain/action-pins.js.map +0 -1
  737. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  738. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  739. package/src/supply-chain/blueprint-trust.js.map +0 -1
  740. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  741. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  742. package/src/supply-chain/build-output.js.map +0 -1
  743. package/src/supply-chain/common.js.map +0 -1
  744. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  745. package/src/supply-chain/container-release.js.map +0 -1
  746. package/src/supply-chain/ecr-applicability.js.map +0 -1
  747. package/src/supply-chain/ecr-scanning.js.map +0 -1
  748. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  749. package/src/supply-chain/errors.js.map +0 -1
  750. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  751. package/src/supply-chain/generated-command.js.map +0 -1
  752. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  753. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  754. package/src/supply-chain/generated-files.js.map +0 -1
  755. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  756. package/src/supply-chain/index.js.map +0 -1
  757. package/src/supply-chain/inventory.js.map +0 -1
  758. package/src/supply-chain/license-expression.js.map +0 -1
  759. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  760. package/src/supply-chain/policy.js.map +0 -1
  761. package/src/supply-chain/publication.js.map +0 -1
  762. package/src/supply-chain/sbom.js.map +0 -1
  763. package/src/supply-chain/scanner.js.map +0 -1
  764. package/src/supply-chain/vendored-source.js.map +0 -1
  765. package/src/testing-evidence/fixture-scope.js.map +0 -1
  766. package/src/testing-evidence/index.js.map +0 -1
  767. package/src/testing-evidence/quarantine.js.map +0 -1
  768. package/src/testing-evidence/result.js.map +0 -1
  769. package/src/testing-evidence/runner-adapter.js.map +0 -1
  770. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  771. package/src/validation.js.map +0 -1
  772. package/src/work-markers/index.js.map +0 -1
  773. package/src/work-markers/work-markers.js.map +0 -1
  774. package/src/workload-roles/account-baseline.js.map +0 -1
  775. package/src/workload-roles/authority.js.map +0 -1
  776. package/src/workload-roles/aws-adapter.js.map +0 -1
  777. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  778. package/src/workload-roles/aws-s3-state.js.map +0 -1
  779. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  780. package/src/workload-roles/boundary.js.map +0 -1
  781. package/src/workload-roles/convergence.js.map +0 -1
  782. package/src/workload-roles/effective-policy.js.map +0 -1
  783. package/src/workload-roles/handler.js.map +0 -1
  784. package/src/workload-roles/history.js.map +0 -1
  785. package/src/workload-roles/index.js.map +0 -1
  786. package/src/workload-roles/injection.js.map +0 -1
  787. package/src/workload-roles/manifest.js.map +0 -1
  788. package/src/workload-roles/provisioner.js.map +0 -1
  789. package/src/workload-roles/registration.js.map +0 -1
  790. package/src/workload-roles/stage-boundary.js.map +0 -1
  791. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -0,0 +1,809 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ROUTER_WAF_REQUIRED_MANAGED_RULES = exports.ROUTER_WAF_LIVE_EVIDENCE_SCHEMA_VERSION = exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION = exports.ROUTER_WAF_CONTRACT_SCHEMA_VERSION = exports.ROUTER_WAF_SCHEMA_VERSION = exports.ROUTER_WAF_REHEARSAL_KIND = exports.ROUTER_WAF_POLICY_KIND = void 0;
4
+ exports.normalizeRouterWafPolicy = normalizeRouterWafPolicy;
5
+ exports.routerWafPolicyDigest = routerWafPolicyDigest;
6
+ exports.normalizeRouterWafBlockingRehearsal = normalizeRouterWafBlockingRehearsal;
7
+ exports.validateRouterWafLiveEvidenceSeed = validateRouterWafLiveEvidenceSeed;
8
+ exports.createRouterWafBlockingRehearsal = createRouterWafBlockingRehearsal;
9
+ exports.reconcileRouterWafBlockingRehearsal = reconcileRouterWafBlockingRehearsal;
10
+ exports.createRouterWafStagePlan = createRouterWafStagePlan;
11
+ exports.createRouterWafRules = createRouterWafRules;
12
+ exports.routerWafContractDigest = routerWafContractDigest;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const node_net_1 = require("node:net");
15
+ const stages_js_1 = require("./stages.js");
16
+ const policy_js_1 = require("../repository-policy/policy.js");
17
+ const router_waf_rate_rehearsal_js_1 = require("./router-waf-rate-rehearsal.js");
18
+ exports.ROUTER_WAF_POLICY_KIND = 'ebk-router-waf-policy';
19
+ exports.ROUTER_WAF_REHEARSAL_KIND = 'ebk-router-waf-blocking-rehearsal';
20
+ exports.ROUTER_WAF_SCHEMA_VERSION = 1;
21
+ exports.ROUTER_WAF_CONTRACT_SCHEMA_VERSION = 1;
22
+ exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION = 4;
23
+ exports.ROUTER_WAF_LIVE_EVIDENCE_SCHEMA_VERSION = 4;
24
+ exports.ROUTER_WAF_REQUIRED_MANAGED_RULES = [
25
+ 'AWSManagedRulesCommonRuleSet',
26
+ 'AWSManagedRulesKnownBadInputsRuleSet',
27
+ 'AWSManagedRulesAmazonIpReputationList',
28
+ ];
29
+ const POLICY_KEYS = [
30
+ 'deploymentProfile',
31
+ 'kind',
32
+ 'logging',
33
+ 'rateLimitPerIp',
34
+ 'schemaVersion',
35
+ 'stages',
36
+ ];
37
+ const LOGGING_KEYS = ['enabled', 'retention'];
38
+ const STAGE_KEYS = ['access', 'allowedCidrs', 'mode'];
39
+ const REHEARSAL_KEYS = [
40
+ 'accountId',
41
+ 'completedAt',
42
+ 'deploymentRoleArn',
43
+ 'evidenceDigest',
44
+ 'kind',
45
+ 'mode',
46
+ 'policyDigest',
47
+ 'region',
48
+ 'schemaVersion',
49
+ 'stage',
50
+ 'status',
51
+ 'wafContractDigest',
52
+ 'workspace',
53
+ ];
54
+ const LIVE_EVIDENCE_KEYS = [
55
+ 'accountId',
56
+ 'completedAt',
57
+ 'deploymentRoleArn',
58
+ 'distributionId',
59
+ 'kind',
60
+ 'mode',
61
+ 'policyDigest',
62
+ 'probes',
63
+ 'region',
64
+ 'requiredRules',
65
+ 'result',
66
+ 'schemaVersion',
67
+ 'sourceCommit',
68
+ 'stage',
69
+ 'startedAt',
70
+ 'webAclArn',
71
+ 'webAclScope',
72
+ 'wafContractDigest',
73
+ 'workspace',
74
+ ];
75
+ const LIVE_PROBE_KEYS = [
76
+ 'allowedRequestStatus',
77
+ 'cloudWatchMetricsObserved',
78
+ 'countModeTuningObserved',
79
+ 'managedRule',
80
+ 'nonAllowlisted',
81
+ 'rateLimit',
82
+ 'sampledRequestsObserved',
83
+ ];
84
+ const OPERATOR_BLOCK_KEYS = [
85
+ 'blockedAt',
86
+ 'marker',
87
+ 'method',
88
+ 'path',
89
+ 'ruleName',
90
+ 'status',
91
+ ];
92
+ const RATE_EVIDENCE_KEYS = [
93
+ 'blockedAt',
94
+ 'blockedRequestStatus',
95
+ 'blockedSequence',
96
+ 'burstRequests',
97
+ 'concurrency',
98
+ 'followUpIntervalMs',
99
+ 'followUpRequests',
100
+ 'maximumRequests',
101
+ 'metric',
102
+ 'observationPolls',
103
+ 'requestsSent',
104
+ 'ruleMetricName',
105
+ 'ruleName',
106
+ 'sample',
107
+ 'upstream429Responses',
108
+ ];
109
+ const RATE_METRIC_KEYS = [
110
+ 'name',
111
+ 'namespace',
112
+ 'timestamp',
113
+ 'value',
114
+ 'webAclMetricName',
115
+ ];
116
+ const RATE_SAMPLE_KEYS = [
117
+ 'action',
118
+ 'markerDigest',
119
+ 'method',
120
+ 'timestamp',
121
+ 'uri',
122
+ ];
123
+ const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
124
+ function record(value, label) {
125
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
126
+ throw new Error(`${label} must be an object.`);
127
+ }
128
+ return value;
129
+ }
130
+ function exactKeys(value, expected, label) {
131
+ const observed = Object.keys(value).sort();
132
+ const required = [...expected].sort();
133
+ if (JSON.stringify(observed) !== JSON.stringify(required)) {
134
+ throw new Error(`${label} must contain exactly ${required.join(', ')}.`);
135
+ }
136
+ }
137
+ function canonical(value) {
138
+ if (Array.isArray(value))
139
+ return `[${value.map(canonical).join(',')}]`;
140
+ if (value && typeof value === 'object') {
141
+ return `{${Object.entries(value)
142
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
143
+ .map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`)
144
+ .join(',')}}`;
145
+ }
146
+ const encoded = JSON.stringify(value);
147
+ if (encoded === undefined) {
148
+ throw new Error('Router WAF authority contains an unsupported value.');
149
+ }
150
+ return encoded;
151
+ }
152
+ function integerInRange(value, minimum, maximum) {
153
+ return (typeof value === 'number' &&
154
+ Number.isSafeInteger(value) &&
155
+ value >= minimum &&
156
+ value <= maximum);
157
+ }
158
+ function sameUtcMinute(left, right) {
159
+ return Math.floor(left / 60_000) === Math.floor(right / 60_000);
160
+ }
161
+ function normalizeRouterWafRateEvidence(input) {
162
+ const candidate = record(input.value, 'Router WAF rate-limit evidence');
163
+ exactKeys(candidate, RATE_EVIDENCE_KEYS, 'Router WAF rate-limit evidence');
164
+ const metric = record(candidate.metric, 'Router WAF rate-limit metric evidence');
165
+ exactKeys(metric, RATE_METRIC_KEYS, 'Router WAF rate-limit metric evidence');
166
+ const sample = record(candidate.sample, 'Router WAF rate-limit sample evidence');
167
+ exactKeys(sample, RATE_SAMPLE_KEYS, 'Router WAF rate-limit sample evidence');
168
+ const blockedAt = typeof candidate.blockedAt === 'string'
169
+ ? Date.parse(candidate.blockedAt)
170
+ : Number.NaN;
171
+ const sampleAt = typeof sample.timestamp === 'string'
172
+ ? Date.parse(sample.timestamp)
173
+ : Number.NaN;
174
+ const metricAt = typeof metric.timestamp === 'string'
175
+ ? Date.parse(metric.timestamp)
176
+ : Number.NaN;
177
+ const expectedRuleMetricName = (0, router_waf_rate_rehearsal_js_1.routerWafRateRuleMetricName)(input.stage);
178
+ const expectedWebAclMetricName = input.webAclName;
179
+ const maximumBurst = Math.min(input.rateLimitPerIp + 160, router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_REQUESTS -
180
+ router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_FOLLOW_UP_REQUESTS);
181
+ if (candidate.blockedRequestStatus !== 403 ||
182
+ !integerInRange(candidate.blockedSequence, 1, router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_REQUESTS) ||
183
+ !Number.isFinite(blockedAt) ||
184
+ blockedAt < input.startedAt ||
185
+ blockedAt > input.completedAt ||
186
+ !integerInRange(candidate.burstRequests, 1, maximumBurst) ||
187
+ candidate.concurrency !== router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_CONCURRENCY ||
188
+ candidate.followUpIntervalMs !==
189
+ router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_FOLLOW_UP_INTERVAL_MS ||
190
+ !integerInRange(candidate.followUpRequests, 0, router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_FOLLOW_UP_REQUESTS) ||
191
+ candidate.maximumRequests !== router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_REQUESTS ||
192
+ !integerInRange(candidate.observationPolls, 1, router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_OBSERVATION_POLLS) ||
193
+ !integerInRange(candidate.requestsSent, 1, router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_REQUESTS) ||
194
+ candidate.requestsSent !==
195
+ candidate.burstRequests + candidate.followUpRequests ||
196
+ candidate.blockedSequence > candidate.requestsSent ||
197
+ candidate.ruleName !== router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_RULE_NAME ||
198
+ candidate.ruleMetricName !== expectedRuleMetricName ||
199
+ !integerInRange(candidate.upstream429Responses, 0, candidate.requestsSent) ||
200
+ sample.action !== 'BLOCK' ||
201
+ typeof sample.markerDigest !== 'string' ||
202
+ !DIGEST_PATTERN.test(sample.markerDigest) ||
203
+ sample.method !== 'GET' ||
204
+ typeof sample.uri !== 'string' ||
205
+ !/^\/[a-z0-9]+(?:-[a-z0-9]+)*\/api\/health$/.test(sample.uri) ||
206
+ !Number.isFinite(sampleAt) ||
207
+ sampleAt < input.startedAt ||
208
+ sampleAt > input.completedAt ||
209
+ metric.name !== 'BlockedRequests' ||
210
+ metric.namespace !== 'AWS/WAFV2' ||
211
+ typeof expectedWebAclMetricName !== 'string' ||
212
+ metric.webAclMetricName !== expectedWebAclMetricName ||
213
+ typeof metric.value !== 'number' ||
214
+ !Number.isFinite(metric.value) ||
215
+ metric.value <= 0 ||
216
+ !Number.isFinite(metricAt) ||
217
+ !sameUtcMinute(sampleAt, metricAt)) {
218
+ throw new Error('Router WAF rate-limit evidence lacks one bounded exact RateLimitPerIP BLOCK sample and correlated AWS/WAFV2 metric.');
219
+ }
220
+ return candidate;
221
+ }
222
+ function canonicalIpv6(address, prefix) {
223
+ const halves = address.toLowerCase().split('::');
224
+ if (halves.length > 2)
225
+ return null;
226
+ const left = halves[0] ? halves[0].split(':') : [];
227
+ const right = halves[1] ? halves[1].split(':') : [];
228
+ if ([...left, ...right].some((part) => !/^[a-f0-9]{1,4}$/.test(part)) ||
229
+ (halves.length === 1 && left.length !== 8) ||
230
+ (halves.length === 2 && left.length + right.length >= 8)) {
231
+ return null;
232
+ }
233
+ const groups = [
234
+ ...left,
235
+ ...Array.from({ length: 8 - left.length - right.length }, () => '0'),
236
+ ...right,
237
+ ].map((part) => Number.parseInt(part, 16));
238
+ let numeric = groups.reduce((result, group) => (result << 16n) | BigInt(group), 0n);
239
+ numeric &= ((1n << BigInt(prefix)) - 1n) << BigInt(128 - prefix);
240
+ const network = Array.from({ length: 8 }, (_, index) => Number((numeric >> BigInt((7 - index) * 16)) & 0xffffn));
241
+ let bestStart = -1;
242
+ let bestLength = 0;
243
+ for (let index = 0; index < network.length;) {
244
+ if (network[index] !== 0) {
245
+ index += 1;
246
+ continue;
247
+ }
248
+ let end = index;
249
+ while (end < network.length && network[end] === 0)
250
+ end += 1;
251
+ if (end - index > bestLength && end - index >= 2) {
252
+ bestStart = index;
253
+ bestLength = end - index;
254
+ }
255
+ index = end;
256
+ }
257
+ const parts = network.map((group) => group.toString(16));
258
+ const rendered = bestStart === -1
259
+ ? parts.join(':')
260
+ : `${parts.slice(0, bestStart).join(':')}::${parts
261
+ .slice(bestStart + bestLength)
262
+ .join(':')}`;
263
+ return `${rendered}/${prefix}`;
264
+ }
265
+ function cidr(value, label) {
266
+ if (typeof value !== 'string' || value !== value.trim()) {
267
+ throw new Error(`${label} must be a canonical IPv4 or IPv6 CIDR.`);
268
+ }
269
+ const match = /^([^/]+)\/(\d{1,3})$/.exec(value);
270
+ if (!match) {
271
+ throw new Error(`${label} must be a canonical IPv4 or IPv6 CIDR.`);
272
+ }
273
+ const address = match[1] ?? '';
274
+ const prefix = Number(match[2]);
275
+ const family = (0, node_net_1.isIP)(address);
276
+ if (family === 0 ||
277
+ prefix === 0 ||
278
+ !Number.isInteger(prefix) ||
279
+ (family === 4 && prefix > 32) ||
280
+ (family === 6 && prefix > 128)) {
281
+ throw new Error(`${label} must be a canonical IPv4 or IPv6 CIDR.`);
282
+ }
283
+ let canonical = null;
284
+ if (family === 4) {
285
+ const octets = address.split('.').map(Number);
286
+ const numeric = octets.reduce((result, octet) => (result << 8) | octet, 0) >>> 0;
287
+ const mask = prefix === 32 ? 0xffffffff : (0xffffffff << (32 - prefix)) >>> 0;
288
+ const network = (numeric & mask) >>> 0;
289
+ canonical = `${[24, 16, 8, 0]
290
+ .map((shift) => (network >>> shift) & 255)
291
+ .join('.')}/${prefix}`;
292
+ }
293
+ else {
294
+ canonical = canonicalIpv6(address, prefix);
295
+ }
296
+ if (canonical !== value) {
297
+ throw new Error(`${label} must use its canonical network address.`);
298
+ }
299
+ return canonical;
300
+ }
301
+ function stagePolicy(value, stage) {
302
+ const candidate = record(value, `Router WAF ${stage} policy`);
303
+ exactKeys(candidate, STAGE_KEYS, `Router WAF ${stage} policy`);
304
+ if (candidate.access !== 'allowlist' && candidate.access !== 'public') {
305
+ throw new Error(`Router WAF ${stage} access is invalid.`);
306
+ }
307
+ if (candidate.mode !== 'block' && candidate.mode !== 'count') {
308
+ throw new Error(`Router WAF ${stage} mode is invalid.`);
309
+ }
310
+ if (!Array.isArray(candidate.allowedCidrs)) {
311
+ throw new Error(`Router WAF ${stage} allowedCidrs must be an array.`);
312
+ }
313
+ const allowedCidrs = candidate.allowedCidrs.map((value, index) => cidr(value, `Router WAF ${stage} allowedCidrs[${index}]`));
314
+ if (new Set(allowedCidrs).size !== allowedCidrs.length) {
315
+ throw new Error(`Router WAF ${stage} allowedCidrs must be unique.`);
316
+ }
317
+ if (candidate.access === 'public' && allowedCidrs.length > 0) {
318
+ throw new Error(`Router WAF ${stage} public access cannot carry an unused allowlist.`);
319
+ }
320
+ return {
321
+ access: candidate.access,
322
+ allowedCidrs,
323
+ mode: candidate.mode,
324
+ };
325
+ }
326
+ function normalizeRouterWafPolicy(value) {
327
+ const candidate = record(value, 'Router WAF policy');
328
+ exactKeys(candidate, POLICY_KEYS, 'Router WAF policy');
329
+ if (candidate.kind !== exports.ROUTER_WAF_POLICY_KIND ||
330
+ candidate.schemaVersion !== exports.ROUTER_WAF_SCHEMA_VERSION) {
331
+ throw new Error('Router WAF policy kind or schemaVersion is invalid.');
332
+ }
333
+ if (candidate.deploymentProfile !== 'starter' &&
334
+ candidate.deploymentProfile !== 'production-isolated' &&
335
+ candidate.deploymentProfile !== 'fully-isolated') {
336
+ throw new Error('Router WAF deploymentProfile is invalid.');
337
+ }
338
+ if (typeof candidate.rateLimitPerIp !== 'number' ||
339
+ !Number.isSafeInteger(candidate.rateLimitPerIp) ||
340
+ candidate.rateLimitPerIp < 100 ||
341
+ candidate.rateLimitPerIp > router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_RATE_LIMIT) {
342
+ throw new Error(`Router WAF rateLimitPerIp must be an integer from 100 through ${router_waf_rate_rehearsal_js_1.ROUTER_WAF_RATE_REHEARSAL_MAX_RATE_LIMIT}, the exact bounded rehearsal maximum.`);
343
+ }
344
+ const logging = record(candidate.logging, 'Router WAF logging policy');
345
+ exactKeys(logging, LOGGING_KEYS, 'Router WAF logging policy');
346
+ if (typeof logging.enabled !== 'boolean') {
347
+ throw new Error('Router WAF logging enabled must be boolean.');
348
+ }
349
+ if (logging.retention !== '1 day' &&
350
+ logging.retention !== '3 days' &&
351
+ logging.retention !== '5 days' &&
352
+ logging.retention !== '1 week' &&
353
+ logging.retention !== '2 weeks') {
354
+ throw new Error('Router WAF logging retention is invalid or unbounded.');
355
+ }
356
+ const stages = record(candidate.stages, 'Router WAF stages');
357
+ const deploymentProfile = candidate.deploymentProfile;
358
+ const activeStages = (0, policy_js_1.activeDeploymentStages)(deploymentProfile);
359
+ exactKeys(stages, activeStages, 'Router WAF stages');
360
+ return {
361
+ deploymentProfile,
362
+ kind: exports.ROUTER_WAF_POLICY_KIND,
363
+ logging: {
364
+ enabled: logging.enabled,
365
+ retention: logging.retention,
366
+ },
367
+ rateLimitPerIp: candidate.rateLimitPerIp,
368
+ schemaVersion: exports.ROUTER_WAF_SCHEMA_VERSION,
369
+ stages: {
370
+ development: stagePolicy(stages.development, 'development'),
371
+ production: stagePolicy(stages.production, 'production'),
372
+ ...(activeStages.includes('staging')
373
+ ? { staging: stagePolicy(stages.staging, 'staging') }
374
+ : {}),
375
+ },
376
+ };
377
+ }
378
+ function routerWafPolicyDigest(policy) {
379
+ return `sha256:${(0, node_crypto_1.createHash)('sha256').update(canonical(policy)).digest('hex')}`;
380
+ }
381
+ function normalizeRouterWafBlockingRehearsal(value) {
382
+ const candidate = record(value, 'Router WAF blocking rehearsal');
383
+ if (candidate.status === 'pending') {
384
+ exactKeys(candidate, ['kind', 'schemaVersion', 'status'], 'Pending Router WAF blocking rehearsal');
385
+ if (candidate.kind !== exports.ROUTER_WAF_REHEARSAL_KIND ||
386
+ candidate.schemaVersion !== exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION) {
387
+ throw new Error('Pending Router WAF blocking rehearsal kind or schemaVersion is invalid.');
388
+ }
389
+ return null;
390
+ }
391
+ exactKeys(candidate, REHEARSAL_KEYS, 'Router WAF blocking rehearsal');
392
+ if (candidate.kind !== exports.ROUTER_WAF_REHEARSAL_KIND ||
393
+ candidate.schemaVersion !== exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION ||
394
+ candidate.status !== 'passed' ||
395
+ (candidate.stage !== 'development' && candidate.stage !== 'staging') ||
396
+ candidate.mode !== 'block' ||
397
+ typeof candidate.accountId !== 'string' ||
398
+ !/^\d{12}$/.test(candidate.accountId) ||
399
+ typeof candidate.region !== 'string' ||
400
+ !/^[a-z]{2}(?:-gov)?-[a-z]+-\d$/.test(candidate.region) ||
401
+ typeof candidate.deploymentRoleArn !== 'string' ||
402
+ !new RegExp(`^arn:(?:aws|aws-us-gov):iam::${candidate.accountId}:role/[A-Za-z0-9+=,.@_/-]{1,512}$`).test(candidate.deploymentRoleArn) ||
403
+ typeof candidate.workspace !== 'string' ||
404
+ !/^[a-z0-9][a-z0-9-]{0,127}$/.test(candidate.workspace) ||
405
+ typeof candidate.completedAt !== 'string' ||
406
+ !Number.isFinite(Date.parse(candidate.completedAt)) ||
407
+ typeof candidate.evidenceDigest !== 'string' ||
408
+ !DIGEST_PATTERN.test(candidate.evidenceDigest) ||
409
+ typeof candidate.policyDigest !== 'string' ||
410
+ !DIGEST_PATTERN.test(candidate.policyDigest) ||
411
+ typeof candidate.wafContractDigest !== 'string' ||
412
+ !DIGEST_PATTERN.test(candidate.wafContractDigest)) {
413
+ throw new Error('Router WAF blocking rehearsal is invalid.');
414
+ }
415
+ return candidate;
416
+ }
417
+ function operatorBlockEvidence(input) {
418
+ const candidate = record(input.value, `Router WAF ${input.expected} operator evidence`);
419
+ exactKeys(candidate, OPERATOR_BLOCK_KEYS, `Router WAF ${input.expected} operator evidence`);
420
+ const blockedAt = typeof candidate.blockedAt === 'string'
421
+ ? Date.parse(candidate.blockedAt)
422
+ : Number.NaN;
423
+ const expectedRule = input.expected === 'nonallowlisted'
424
+ ? candidate.ruleName === 'StageIpAllowlist'
425
+ : candidate.ruleName ===
426
+ 'AWSManagedRulesCommonRuleSet#NoUserAgent_HEADER';
427
+ if (candidate.status !== 403 ||
428
+ candidate.method !== 'GET' ||
429
+ typeof candidate.path !== 'string' ||
430
+ !/^\/[a-z0-9]+(?:-[a-z0-9]+)*\/api\/health$/.test(candidate.path) ||
431
+ typeof candidate.marker !== 'string' ||
432
+ !/^[a-f0-9]{64}:(?:managed|nonallowlisted)$/.test(candidate.marker) ||
433
+ !candidate.marker.endsWith(`:${input.expected}`) ||
434
+ !expectedRule ||
435
+ !Number.isFinite(blockedAt) ||
436
+ blockedAt < input.startedAt ||
437
+ blockedAt > input.completedAt) {
438
+ throw new Error(`Router WAF ${input.expected} operator evidence is not one bounded exact BLOCK request.`);
439
+ }
440
+ return candidate;
441
+ }
442
+ function validateRouterWafLiveEvidenceSeed(input) {
443
+ const evidence = record(input.evidence, 'Router WAF live evidence');
444
+ exactKeys(evidence, LIVE_EVIDENCE_KEYS, 'Router WAF live evidence');
445
+ const probes = record(evidence.probes, 'Router WAF live evidence probes');
446
+ exactKeys(probes, LIVE_PROBE_KEYS, 'Router WAF live evidence probes');
447
+ const policyDigest = routerWafPolicyDigest(input.policy);
448
+ const wafContractDigest = routerWafContractDigest(input.policy);
449
+ const startedAt = typeof evidence.startedAt === 'string'
450
+ ? Date.parse(evidence.startedAt)
451
+ : Number.NaN;
452
+ const completedAt = typeof evidence.completedAt === 'string'
453
+ ? Date.parse(evidence.completedAt)
454
+ : Number.NaN;
455
+ const expectedRules = [
456
+ 'StageIpAllowlist',
457
+ 'RateLimitPerIP',
458
+ ...exports.ROUTER_WAF_REQUIRED_MANAGED_RULES,
459
+ ];
460
+ const rehearsalStage = (0, policy_js_1.productionRehearsalStage)(input.policy.deploymentProfile);
461
+ const rehearsalStagePolicy = input.policy.stages[rehearsalStage];
462
+ const webAclIdentity = typeof evidence.webAclArn === 'string'
463
+ ? /^arn:(?:aws|aws-us-gov):wafv2:us-east-1:(\d{12}):global\/webacl\/([A-Za-z0-9_-]{1,128})\/[a-f0-9-]{36}$/.exec(evidence.webAclArn)
464
+ : null;
465
+ if (!rehearsalStagePolicy ||
466
+ rehearsalStagePolicy.mode !== 'block' ||
467
+ rehearsalStagePolicy.access !== 'allowlist' ||
468
+ rehearsalStagePolicy.allowedCidrs.length === 0 ||
469
+ evidence.kind !== 'ebk-router-waf-live-evidence' ||
470
+ evidence.schemaVersion !== exports.ROUTER_WAF_LIVE_EVIDENCE_SCHEMA_VERSION ||
471
+ evidence.stage !== rehearsalStage ||
472
+ evidence.mode !== 'block' ||
473
+ evidence.result !== 'passed' ||
474
+ evidence.webAclScope !== 'CLOUDFRONT' ||
475
+ evidence.policyDigest !== policyDigest ||
476
+ evidence.wafContractDigest !== wafContractDigest ||
477
+ typeof evidence.accountId !== 'string' ||
478
+ !/^\d{12}$/.test(evidence.accountId) ||
479
+ typeof evidence.deploymentRoleArn !== 'string' ||
480
+ !new RegExp(`^arn:(?:aws|aws-us-gov):iam::${evidence.accountId}:role/[A-Za-z0-9+=,.@_/-]{1,512}$`).test(evidence.deploymentRoleArn) ||
481
+ typeof evidence.region !== 'string' ||
482
+ !/^[a-z]{2}(?:-gov)?-[a-z]+-\d$/.test(evidence.region) ||
483
+ typeof evidence.sourceCommit !== 'string' ||
484
+ !/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(evidence.sourceCommit) ||
485
+ typeof evidence.workspace !== 'string' ||
486
+ !/^[a-z0-9][a-z0-9-]{0,127}$/.test(evidence.workspace) ||
487
+ typeof evidence.distributionId !== 'string' ||
488
+ !/^[A-Z0-9]{8,32}$/.test(evidence.distributionId) ||
489
+ !webAclIdentity ||
490
+ webAclIdentity[1] !== evidence.accountId ||
491
+ !Number.isFinite(startedAt) ||
492
+ !Number.isFinite(completedAt) ||
493
+ completedAt < startedAt ||
494
+ completedAt - startedAt > 4 * 60 * 60 * 1_000 ||
495
+ !Array.isArray(evidence.requiredRules) ||
496
+ JSON.stringify(evidence.requiredRules) !== JSON.stringify(expectedRules) ||
497
+ typeof probes.allowedRequestStatus !== 'number' ||
498
+ probes.allowedRequestStatus < 200 ||
499
+ probes.allowedRequestStatus > 399 ||
500
+ probes.cloudWatchMetricsObserved !== true ||
501
+ typeof probes.countModeTuningObserved !== 'boolean' ||
502
+ probes.sampledRequestsObserved !== true) {
503
+ throw new Error(`Router WAF live evidence does not prove the exact ${rehearsalStage} blocking baseline.`);
504
+ }
505
+ operatorBlockEvidence({
506
+ completedAt,
507
+ expected: 'managed',
508
+ startedAt,
509
+ value: probes.managedRule,
510
+ });
511
+ operatorBlockEvidence({
512
+ completedAt,
513
+ expected: 'nonallowlisted',
514
+ startedAt,
515
+ value: probes.nonAllowlisted,
516
+ });
517
+ return {
518
+ accountId: evidence.accountId,
519
+ completedAt,
520
+ deploymentRoleArn: evidence.deploymentRoleArn,
521
+ distributionId: evidence.distributionId,
522
+ probes,
523
+ region: evidence.region,
524
+ stage: rehearsalStage,
525
+ startedAt,
526
+ wafContractDigest,
527
+ webAclArn: evidence.webAclArn,
528
+ webAclName: webAclIdentity[2],
529
+ workspace: evidence.workspace,
530
+ };
531
+ }
532
+ function createRouterWafBlockingRehearsal(input) {
533
+ const seed = validateRouterWafLiveEvidenceSeed(input);
534
+ const evidence = input.evidence;
535
+ let rateLimitEvidence;
536
+ try {
537
+ rateLimitEvidence = normalizeRouterWafRateEvidence({
538
+ completedAt: seed.completedAt,
539
+ rateLimitPerIp: input.policy.rateLimitPerIp,
540
+ stage: seed.stage,
541
+ startedAt: seed.startedAt,
542
+ value: seed.probes.rateLimit,
543
+ webAclName: seed.webAclName,
544
+ });
545
+ }
546
+ catch {
547
+ throw new Error(`Router WAF live evidence does not prove the exact ${seed.stage} blocking baseline.`);
548
+ }
549
+ if (rateLimitEvidence.blockedRequestStatus !== 403) {
550
+ throw new Error(`Router WAF live evidence does not prove the exact ${seed.stage} blocking baseline.`);
551
+ }
552
+ const policyDigest = routerWafPolicyDigest(input.policy);
553
+ const authorityEvidence = { ...evidence };
554
+ const evidenceDigest = `sha256:${(0, node_crypto_1.createHash)('sha256')
555
+ .update(canonical(authorityEvidence))
556
+ .digest('hex')}`;
557
+ return {
558
+ accountId: seed.accountId,
559
+ completedAt: evidence.completedAt,
560
+ deploymentRoleArn: seed.deploymentRoleArn,
561
+ evidenceDigest,
562
+ kind: exports.ROUTER_WAF_REHEARSAL_KIND,
563
+ mode: 'block',
564
+ policyDigest,
565
+ region: seed.region,
566
+ schemaVersion: exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION,
567
+ stage: seed.stage,
568
+ status: 'passed',
569
+ wafContractDigest: seed.wafContractDigest,
570
+ workspace: seed.workspace,
571
+ };
572
+ }
573
+ function reconcileRouterWafBlockingRehearsal(input) {
574
+ const retained = normalizeRouterWafBlockingRehearsal(input.receipt);
575
+ if (!retained)
576
+ return null;
577
+ const observed = createRouterWafBlockingRehearsal({
578
+ evidence: input.evidence,
579
+ policy: input.policy,
580
+ });
581
+ for (const key of [
582
+ 'accountId',
583
+ 'deploymentRoleArn',
584
+ 'region',
585
+ 'stage',
586
+ 'wafContractDigest',
587
+ 'workspace',
588
+ ]) {
589
+ if (observed[key] !== input.expected[key]) {
590
+ throw new Error(`Router WAF blocking rehearsal ${key} does not match committed production reconciliation authority.`);
591
+ }
592
+ }
593
+ if (canonical(retained) !== canonical(observed)) {
594
+ throw new Error('Router WAF blocking rehearsal receipt does not match its exact live evidence.');
595
+ }
596
+ return retained;
597
+ }
598
+ function createRouterWafStagePlan(input) {
599
+ const stage = (0, stages_js_1.requireFoundationStage)(input.stage);
600
+ if (!(0, policy_js_1.isActiveDeploymentStage)(input.policy.deploymentProfile, stage)) {
601
+ throw new Error(`Router WAF stage ${stage} is inactive for the ${input.policy.deploymentProfile} deployment profile.`);
602
+ }
603
+ const stagePolicy = input.policy.stages[stage];
604
+ if (!stagePolicy) {
605
+ throw new Error(`Router WAF ${stage} policy is missing.`);
606
+ }
607
+ const policyDigest = routerWafPolicyDigest(input.policy);
608
+ if (stagePolicy.access === 'allowlist' &&
609
+ stagePolicy.allowedCidrs.length === 0) {
610
+ throw new Error(`Router WAF ${stage} allowlist requires at least one explicit CIDR before deployment.`);
611
+ }
612
+ if (stage === 'production') {
613
+ if (stagePolicy.mode !== 'block') {
614
+ throw new Error('Production Router WAF must deploy in blocking mode.');
615
+ }
616
+ if (!input.rehearsal ||
617
+ input.rehearsal.policyDigest !== policyDigest ||
618
+ input.rehearsal.wafContractDigest !==
619
+ routerWafContractDigest(input.policy)) {
620
+ throw new Error(`Production Router WAF requires a passed ${(0, policy_js_1.productionRehearsalStage)(input.policy.deploymentProfile)} blocking rehearsal for the exact policy digest.`);
621
+ }
622
+ }
623
+ return {
624
+ access: stagePolicy.access,
625
+ ipv4Cidrs: stagePolicy.allowedCidrs.filter((value) => (0, node_net_1.isIP)(value.split('/')[0] ?? '') === 4),
626
+ ipv6Cidrs: stagePolicy.allowedCidrs.filter((value) => (0, node_net_1.isIP)(value.split('/')[0] ?? '') === 6),
627
+ logging: input.policy.logging.enabled
628
+ ? {
629
+ include: 'blocked',
630
+ redact: {
631
+ headers: ['authorization', 'cookie', 'x-api-key'],
632
+ queryString: true,
633
+ },
634
+ retention: input.policy.logging.retention,
635
+ }
636
+ : false,
637
+ mode: stagePolicy.mode,
638
+ policyDigest,
639
+ rateLimitPerIp: input.policy.rateLimitPerIp,
640
+ stage,
641
+ };
642
+ }
643
+ function visibility(metricName) {
644
+ return {
645
+ cloudwatchMetricsEnabled: true,
646
+ metricName,
647
+ sampledRequestsEnabled: true,
648
+ };
649
+ }
650
+ function createRouterWafRules(plan, ipSets) {
651
+ const prefix = `Ebk${plan.stage[0]?.toUpperCase()}${plan.stage.slice(1)}`;
652
+ const rules = [];
653
+ let priority = 0;
654
+ if (plan.access === 'allowlist') {
655
+ if (ipSets.ipv4Arn === undefined && ipSets.ipv6Arn === undefined) {
656
+ throw new Error('Router WAF allowlist is missing its exact IP set ARN.');
657
+ }
658
+ const references = [ipSets.ipv4Arn, ipSets.ipv6Arn, ipSets.smokeArn]
659
+ .filter((value) => value !== undefined)
660
+ .map((arn) => ({ ipSetReferenceStatement: { arn } }));
661
+ if (references.length === 0) {
662
+ throw new Error('Router WAF allowlist is missing its exact IP set ARN.');
663
+ }
664
+ rules.push({
665
+ action: plan.mode === 'block' ? { block: {} } : { count: {} },
666
+ name: 'StageIpAllowlist',
667
+ priority: priority++,
668
+ statement: {
669
+ notStatement: {
670
+ statement: references.length === 1
671
+ ? references[0]
672
+ : { orStatement: { statements: references } },
673
+ },
674
+ },
675
+ visibilityConfig: visibility(`${prefix}StageIpAllowlist`),
676
+ });
677
+ }
678
+ rules.push({
679
+ action: plan.mode === 'block' ? { block: {} } : { count: {} },
680
+ name: 'RateLimitPerIP',
681
+ priority: priority++,
682
+ statement: {
683
+ rateBasedStatement: {
684
+ aggregateKeyType: 'IP',
685
+ limit: plan.rateLimitPerIp,
686
+ },
687
+ },
688
+ visibilityConfig: visibility(`${prefix}RateLimitPerIP`),
689
+ });
690
+ for (const name of exports.ROUTER_WAF_REQUIRED_MANAGED_RULES) {
691
+ rules.push({
692
+ name,
693
+ overrideAction: plan.mode === 'block' ? { none: {} } : { count: {} },
694
+ priority: priority++,
695
+ statement: {
696
+ managedRuleGroupStatement: {
697
+ name,
698
+ ...(name === 'AWSManagedRulesCommonRuleSet'
699
+ ? {
700
+ // Preserve SST's safe baseline for legitimate request bodies
701
+ // larger than WAF's managed-rule inspection limit.
702
+ ruleActionOverrides: [
703
+ {
704
+ actionToUse: { count: {} },
705
+ name: 'SizeRestrictions_BODY',
706
+ },
707
+ ],
708
+ }
709
+ : {}),
710
+ vendorName: 'AWS',
711
+ },
712
+ },
713
+ visibilityConfig: visibility(`${prefix}${name}`),
714
+ });
715
+ }
716
+ return rules;
717
+ }
718
+ function contractStagePlan(policy, stage) {
719
+ const stagePolicy = policy.stages[stage];
720
+ if (!stagePolicy) {
721
+ throw new Error(`Router WAF ${stage} contract policy is missing.`);
722
+ }
723
+ return {
724
+ access: stagePolicy.access,
725
+ ipv4Cidrs: stagePolicy.allowedCidrs.filter((value) => (0, node_net_1.isIP)(value.split('/')[0] ?? '') === 4),
726
+ ipv6Cidrs: stagePolicy.allowedCidrs.filter((value) => (0, node_net_1.isIP)(value.split('/')[0] ?? '') === 6),
727
+ logging: policy.logging.enabled
728
+ ? {
729
+ include: 'blocked',
730
+ redact: {
731
+ headers: ['authorization', 'cookie', 'x-api-key'],
732
+ queryString: true,
733
+ },
734
+ retention: policy.logging.retention,
735
+ }
736
+ : false,
737
+ mode: stagePolicy.mode,
738
+ policyDigest: routerWafPolicyDigest(policy),
739
+ rateLimitPerIp: policy.rateLimitPerIp,
740
+ stage,
741
+ };
742
+ }
743
+ function routerWafContractDigest(policy) {
744
+ const stages = (0, policy_js_1.activeDeploymentStages)(policy.deploymentProfile).map((stage) => {
745
+ const plan = contractStagePlan(policy, stage);
746
+ return {
747
+ plan,
748
+ rules: createRouterWafRules(plan, {
749
+ ...(plan.ipv4Cidrs.length > 0
750
+ ? { ipv4Arn: `<ipv4-ip-set:${stage}>` }
751
+ : {}),
752
+ ...(plan.ipv6Cidrs.length > 0
753
+ ? { ipv6Arn: `<ipv6-ip-set:${stage}>` }
754
+ : {}),
755
+ ...(plan.access === 'allowlist'
756
+ ? { smokeArn: `<smoke-ip-set:${stage}>` }
757
+ : {}),
758
+ }),
759
+ };
760
+ });
761
+ const implementation = {
762
+ cloudFront: {
763
+ enabled: true,
764
+ identityTags: [
765
+ 'ebk:managed-by',
766
+ 'ebk:owner',
767
+ 'ebk:stage',
768
+ 'ebk:workspace',
769
+ ],
770
+ staging: false,
771
+ webAclAttachment: 'exact-arn',
772
+ },
773
+ evidenceSchemaVersion: exports.ROUTER_WAF_LIVE_EVIDENCE_SCHEMA_VERSION,
774
+ kind: 'ebk-router-waf-generated-contract',
775
+ receiptSchemaVersion: exports.ROUTER_WAF_REHEARSAL_SCHEMA_VERSION,
776
+ schemaVersion: exports.ROUTER_WAF_CONTRACT_SCHEMA_VERSION,
777
+ stages,
778
+ webAcl: {
779
+ defaultAction: 'allow',
780
+ identityTags: [
781
+ 'ebk:managed-by',
782
+ 'ebk:owner',
783
+ 'ebk:policy-digest',
784
+ 'ebk:stage',
785
+ 'ebk:workspace',
786
+ ],
787
+ ipSetTags: [
788
+ 'ebk:managed-by',
789
+ 'ebk:owner',
790
+ 'ebk:policy-digest',
791
+ 'ebk:stage',
792
+ 'ebk:workspace',
793
+ ],
794
+ smokeIpSetTags: [
795
+ 'ebk:managed-by',
796
+ 'ebk:owner',
797
+ 'ebk:purpose',
798
+ 'ebk:stage',
799
+ 'ebk:workspace',
800
+ ],
801
+ logging: policy.logging,
802
+ scope: 'CLOUDFRONT',
803
+ },
804
+ };
805
+ return `sha256:${(0, node_crypto_1.createHash)('sha256')
806
+ .update(canonical({ implementation, policy }))
807
+ .digest('hex')}`;
808
+ }
809
+ //# sourceMappingURL=router-waf.js.map