@ankhorage/infra 4.1.10 → 5.0.0

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 (521) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +21 -32
  3. package/dist/cli/bin.d.ts +1 -8
  4. package/dist/cli/bin.d.ts.map +1 -1
  5. package/dist/cli/bin.js +2 -34
  6. package/dist/cli/bin.js.map +1 -1
  7. package/dist/cli/commands/destroy.d.ts +11 -0
  8. package/dist/cli/commands/destroy.d.ts.map +1 -0
  9. package/dist/cli/commands/destroy.js +51 -0
  10. package/dist/cli/commands/destroy.js.map +1 -0
  11. package/dist/cli/commands/down.d.ts +11 -0
  12. package/dist/cli/commands/down.d.ts.map +1 -0
  13. package/dist/cli/commands/down.js +27 -0
  14. package/dist/cli/commands/down.js.map +1 -0
  15. package/dist/cli/commands/generate.d.ts +11 -0
  16. package/dist/cli/commands/generate.d.ts.map +1 -0
  17. package/dist/cli/commands/generate.js +29 -0
  18. package/dist/cli/commands/generate.js.map +1 -0
  19. package/dist/cli/commands/outputs.d.ts +11 -0
  20. package/dist/cli/commands/outputs.d.ts.map +1 -0
  21. package/dist/cli/commands/outputs.js +25 -0
  22. package/dist/cli/commands/outputs.js.map +1 -0
  23. package/dist/cli/commands/plan.d.ts +11 -0
  24. package/dist/cli/commands/plan.d.ts.map +1 -0
  25. package/dist/cli/commands/plan.js +19 -0
  26. package/dist/cli/commands/plan.js.map +1 -0
  27. package/dist/cli/commands/status.d.ts +11 -0
  28. package/dist/cli/commands/status.d.ts.map +1 -0
  29. package/dist/cli/commands/status.js +19 -0
  30. package/dist/cli/commands/status.js.map +1 -0
  31. package/dist/cli/commands/up.d.ts +11 -0
  32. package/dist/cli/commands/up.d.ts.map +1 -0
  33. package/dist/cli/commands/up.js +28 -0
  34. package/dist/cli/commands/up.js.map +1 -0
  35. package/dist/cli/commands/validate.d.ts +11 -0
  36. package/dist/cli/commands/validate.d.ts.map +1 -0
  37. package/dist/cli/commands/validate.js +19 -0
  38. package/dist/cli/commands/validate.js.map +1 -0
  39. package/dist/cli/constants.d.ts +66 -0
  40. package/dist/cli/constants.d.ts.map +1 -0
  41. package/dist/cli/constants.js +19 -0
  42. package/dist/cli/constants.js.map +1 -0
  43. package/dist/cli/createDefaultInfraCommandContext.d.ts +4 -0
  44. package/dist/cli/createDefaultInfraCommandContext.d.ts.map +1 -0
  45. package/dist/{commandContext.js → cli/createDefaultInfraCommandContext.js} +4 -3
  46. package/dist/cli/createDefaultInfraCommandContext.js.map +1 -0
  47. package/dist/cli/createInfraRuntimeProvider.d.ts +5 -0
  48. package/dist/cli/createInfraRuntimeProvider.d.ts.map +1 -0
  49. package/dist/cli/createInfraRuntimeProvider.js +22 -0
  50. package/dist/cli/createInfraRuntimeProvider.js.map +1 -0
  51. package/dist/cli/createProviderCommandDescriptors.d.ts +4 -0
  52. package/dist/cli/createProviderCommandDescriptors.d.ts.map +1 -0
  53. package/dist/cli/createProviderCommandDescriptors.js +6 -0
  54. package/dist/cli/createProviderCommandDescriptors.js.map +1 -0
  55. package/dist/cli/findInfraCommand.d.ts +4 -0
  56. package/dist/cli/findInfraCommand.d.ts.map +1 -0
  57. package/dist/cli/findInfraCommand.js +6 -0
  58. package/dist/cli/findInfraCommand.js.map +1 -0
  59. package/dist/cli/index.d.ts +3 -8
  60. package/dist/cli/index.d.ts.map +1 -1
  61. package/dist/cli/index.js +2 -24
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/renderInfraRootHelp.d.ts +3 -0
  64. package/dist/cli/renderInfraRootHelp.d.ts.map +1 -0
  65. package/dist/cli/renderInfraRootHelp.js +21 -0
  66. package/dist/cli/renderInfraRootHelp.js.map +1 -0
  67. package/dist/cli/renderUnknownInfraCommand.d.ts +3 -0
  68. package/dist/cli/renderUnknownInfraCommand.d.ts.map +1 -0
  69. package/dist/cli/renderUnknownInfraCommand.js +5 -0
  70. package/dist/cli/renderUnknownInfraCommand.js.map +1 -0
  71. package/dist/cli/runInfraCliAsync.d.ts +10 -0
  72. package/dist/cli/runInfraCliAsync.d.ts.map +1 -0
  73. package/dist/cli/runInfraCliAsync.js +34 -0
  74. package/dist/cli/runInfraCliAsync.js.map +1 -0
  75. package/dist/cli/runInfraCommandAsync.d.ts +4 -0
  76. package/dist/cli/runInfraCommandAsync.d.ts.map +1 -0
  77. package/dist/cli/runInfraCommandAsync.js +100 -0
  78. package/dist/cli/runInfraCommandAsync.js.map +1 -0
  79. package/dist/cli/utils/prepareInfraCommandOperationAsync.d.ts +4 -0
  80. package/dist/cli/utils/prepareInfraCommandOperationAsync.d.ts.map +1 -0
  81. package/dist/cli/utils/prepareInfraCommandOperationAsync.js +45 -0
  82. package/dist/cli/utils/prepareInfraCommandOperationAsync.js.map +1 -0
  83. package/dist/cli/utils/requireInfraSuccess.d.ts +7 -0
  84. package/dist/cli/utils/requireInfraSuccess.d.ts.map +1 -0
  85. package/dist/cli/utils/requireInfraSuccess.js +17 -0
  86. package/dist/cli/utils/requireInfraSuccess.js.map +1 -0
  87. package/dist/cli/utils/resolveInfraPersistence.d.ts +4 -0
  88. package/dist/cli/utils/resolveInfraPersistence.d.ts.map +1 -0
  89. package/dist/cli/utils/resolveInfraPersistence.js +17 -0
  90. package/dist/cli/utils/resolveInfraPersistence.js.map +1 -0
  91. package/dist/cli/utils/writeInfraEnvironmentOutputs.d.ts +5 -0
  92. package/dist/cli/utils/writeInfraEnvironmentOutputs.d.ts.map +1 -0
  93. package/dist/cli/utils/writeInfraEnvironmentOutputs.js +16 -0
  94. package/dist/cli/utils/writeInfraEnvironmentOutputs.js.map +1 -0
  95. package/dist/cli/utils/writeInfraStructured.d.ts +4 -0
  96. package/dist/cli/utils/writeInfraStructured.d.ts.map +1 -0
  97. package/dist/cli/utils/writeInfraStructured.js +8 -0
  98. package/dist/cli/utils/writeInfraStructured.js.map +1 -0
  99. package/dist/constants.d.ts +10 -0
  100. package/dist/constants.d.ts.map +1 -0
  101. package/dist/{packageMetadata.js → constants.js} +6 -3
  102. package/dist/constants.js.map +1 -0
  103. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.d.ts +4 -0
  104. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.d.ts.map +1 -0
  105. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.js +35 -0
  106. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.js.map +1 -0
  107. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.d.ts +4 -0
  108. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.d.ts.map +1 -0
  109. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.js +23 -0
  110. package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.js.map +1 -0
  111. package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.d.ts +4 -0
  112. package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.d.ts.map +1 -0
  113. package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.js +9 -0
  114. package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.js.map +1 -0
  115. package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.d.ts +5 -0
  116. package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.d.ts.map +1 -0
  117. package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.js +28 -0
  118. package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.js.map +1 -0
  119. package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.d.ts +4 -0
  120. package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.d.ts.map +1 -0
  121. package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.js +7 -0
  122. package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.js.map +1 -0
  123. package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.d.ts +7 -0
  124. package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.d.ts.map +1 -0
  125. package/dist/{project.js → features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.js} +10 -34
  126. package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.js.map +1 -0
  127. package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.d.ts +5 -0
  128. package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.d.ts.map +1 -0
  129. package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.js +28 -0
  130. package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.js.map +1 -0
  131. package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.d.ts +4 -0
  132. package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.d.ts.map +1 -0
  133. package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.js +16 -0
  134. package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.js.map +1 -0
  135. package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.d.ts +9 -0
  136. package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.d.ts.map +1 -0
  137. package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.js +2 -0
  138. package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.js.map +1 -0
  139. package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.d.ts +4 -0
  140. package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.d.ts.map +1 -0
  141. package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.js +15 -0
  142. package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.js.map +1 -0
  143. package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.d.ts +4 -0
  144. package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.d.ts.map +1 -0
  145. package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.js +84 -0
  146. package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.js.map +1 -0
  147. package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.d.ts +4 -0
  148. package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.d.ts.map +1 -0
  149. package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.js +55 -0
  150. package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.js.map +1 -0
  151. package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.d.ts +4 -0
  152. package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.d.ts.map +1 -0
  153. package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.js +38 -0
  154. package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.js.map +1 -0
  155. package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.d.ts +4 -0
  156. package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.d.ts.map +1 -0
  157. package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.js +34 -0
  158. package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.js.map +1 -0
  159. package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.d.ts +4 -0
  160. package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.d.ts.map +1 -0
  161. package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.js +57 -0
  162. package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.js.map +1 -0
  163. package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.d.ts +5 -0
  164. package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.d.ts.map +1 -0
  165. package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.js +109 -0
  166. package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.js.map +1 -0
  167. package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.d.ts +6 -0
  168. package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.d.ts.map +1 -0
  169. package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js +181 -0
  170. package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js.map +1 -0
  171. package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.d.ts +4 -0
  172. package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.d.ts.map +1 -0
  173. package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js +68 -0
  174. package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js.map +1 -0
  175. package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts +4 -0
  176. package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts.map +1 -0
  177. package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.js +98 -0
  178. package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.js.map +1 -0
  179. package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.d.ts +5 -0
  180. package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.d.ts.map +1 -0
  181. package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js +17 -0
  182. package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js.map +1 -0
  183. package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.d.ts +4 -0
  184. package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.d.ts.map +1 -0
  185. package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.js +13 -0
  186. package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.js.map +1 -0
  187. package/dist/features/environment-lifecycle/composition/createInfraCommandServices.d.ts +4 -0
  188. package/dist/features/environment-lifecycle/composition/createInfraCommandServices.d.ts.map +1 -0
  189. package/dist/features/environment-lifecycle/composition/createInfraCommandServices.js +43 -0
  190. package/dist/features/environment-lifecycle/composition/createInfraCommandServices.js.map +1 -0
  191. package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.d.ts +4 -0
  192. package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.d.ts.map +1 -0
  193. package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.js +54 -0
  194. package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.js.map +1 -0
  195. package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.d.ts +5 -0
  196. package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.d.ts.map +1 -0
  197. package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.js +39 -0
  198. package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.js.map +1 -0
  199. package/dist/features/environment-lifecycle/utils/appendInfraFailure.d.ts +7 -0
  200. package/dist/features/environment-lifecycle/utils/appendInfraFailure.d.ts.map +1 -0
  201. package/dist/features/environment-lifecycle/utils/appendInfraFailure.js +5 -0
  202. package/dist/features/environment-lifecycle/utils/appendInfraFailure.js.map +1 -0
  203. package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.d.ts +5 -0
  204. package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.d.ts.map +1 -0
  205. package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.js +13 -0
  206. package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.js.map +1 -0
  207. package/dist/features/environment-lifecycle/utils/createInfraFailure.d.ts +4 -0
  208. package/dist/features/environment-lifecycle/utils/createInfraFailure.d.ts.map +1 -0
  209. package/dist/features/environment-lifecycle/utils/createInfraFailure.js +5 -0
  210. package/dist/features/environment-lifecycle/utils/createInfraFailure.js.map +1 -0
  211. package/dist/features/environment-lifecycle/utils/createInfraLedger.d.ts +12 -0
  212. package/dist/features/environment-lifecycle/utils/createInfraLedger.d.ts.map +1 -0
  213. package/dist/features/environment-lifecycle/utils/createInfraLedger.js +14 -0
  214. package/dist/features/environment-lifecycle/utils/createInfraLedger.js.map +1 -0
  215. package/dist/features/environment-lifecycle/utils/infraIdentityKey.d.ts +4 -0
  216. package/dist/features/environment-lifecycle/utils/infraIdentityKey.d.ts.map +1 -0
  217. package/dist/features/environment-lifecycle/utils/infraIdentityKey.js +5 -0
  218. package/dist/features/environment-lifecycle/utils/infraIdentityKey.js.map +1 -0
  219. package/dist/features/environment-lifecycle/utils/isInfraStoredState.d.ts +4 -0
  220. package/dist/features/environment-lifecycle/utils/isInfraStoredState.d.ts.map +1 -0
  221. package/dist/features/environment-lifecycle/utils/isInfraStoredState.js +103 -0
  222. package/dist/features/environment-lifecycle/utils/isInfraStoredState.js.map +1 -0
  223. package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.d.ts +4 -0
  224. package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.d.ts.map +1 -0
  225. package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.js +10 -0
  226. package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.js.map +1 -0
  227. package/dist/features/environment-lifecycle/utils/mergeInfraResources.d.ts +4 -0
  228. package/dist/features/environment-lifecycle/utils/mergeInfraResources.d.ts.map +1 -0
  229. package/dist/features/environment-lifecycle/utils/mergeInfraResources.js +10 -0
  230. package/dist/features/environment-lifecycle/utils/mergeInfraResources.js.map +1 -0
  231. package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.d.ts +3 -0
  232. package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.d.ts.map +1 -0
  233. package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.js +8 -0
  234. package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.js.map +1 -0
  235. package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.d.ts +4 -0
  236. package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.d.ts.map +1 -0
  237. package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.js +11 -0
  238. package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.js.map +1 -0
  239. package/dist/features/environment-lifecycle/utils/resolveProjectFile.d.ts +3 -0
  240. package/dist/features/environment-lifecycle/utils/resolveProjectFile.d.ts.map +1 -0
  241. package/dist/features/environment-lifecycle/utils/resolveProjectFile.js +19 -0
  242. package/dist/features/environment-lifecycle/utils/resolveProjectFile.js.map +1 -0
  243. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.d.ts +4 -0
  244. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.d.ts.map +1 -0
  245. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.js +6 -0
  246. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.js.map +1 -0
  247. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.d.ts +4 -0
  248. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.d.ts.map +1 -0
  249. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.js +6 -0
  250. package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.js.map +1 -0
  251. package/dist/index.d.ts +16 -6
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +14 -15
  254. package/dist/index.js.map +1 -1
  255. package/dist/metadata/index.d.ts +1 -1
  256. package/dist/metadata/index.d.ts.map +1 -1
  257. package/dist/metadata/index.js +1 -1
  258. package/dist/metadata/index.js.map +1 -1
  259. package/dist/project/index.d.ts +7 -5
  260. package/dist/project/index.d.ts.map +1 -1
  261. package/dist/project/index.js +6 -5
  262. package/dist/project/index.js.map +1 -1
  263. package/dist/readme-usage.js +17 -26
  264. package/dist/readme-usage.js.map +1 -1
  265. package/dist/testSupport.d.ts +1 -1
  266. package/dist/testSupport.d.ts.map +1 -1
  267. package/dist/testSupport.js +11 -1
  268. package/dist/testSupport.js.map +1 -1
  269. package/dist/types/infraCli.d.ts +91 -0
  270. package/dist/types/infraCli.d.ts.map +1 -0
  271. package/dist/types/infraCli.js +2 -0
  272. package/dist/types/infraCli.js.map +1 -0
  273. package/dist/types/infraOrchestration.d.ts +84 -0
  274. package/dist/types/infraOrchestration.d.ts.map +1 -0
  275. package/dist/types/infraOrchestration.js +2 -0
  276. package/dist/types/infraOrchestration.js.map +1 -0
  277. package/dist/{project.d.ts → types/infraProject.d.ts} +6 -6
  278. package/dist/types/infraProject.d.ts.map +1 -0
  279. package/dist/types/infraProject.js +2 -0
  280. package/dist/types/infraProject.js.map +1 -0
  281. package/package.json +21 -11
  282. package/src/adapterPackages.integration.test.ts +79 -0
  283. package/src/cli/bin.ts +2 -61
  284. package/src/cli/cli.test.ts +35 -126
  285. package/src/cli/commands/destroy.ts +57 -0
  286. package/src/cli/commands/down.ts +28 -0
  287. package/src/cli/commands/generate.ts +34 -0
  288. package/src/cli/commands/outputs.ts +25 -0
  289. package/src/cli/commands/plan.ts +20 -0
  290. package/src/cli/commands/status.ts +20 -0
  291. package/src/cli/commands/up.ts +29 -0
  292. package/src/cli/commands/validate.ts +20 -0
  293. package/src/cli/constants.ts +19 -0
  294. package/src/cli/createDefaultInfraCommandContext.ts +17 -0
  295. package/src/cli/createInfraRuntimeProvider.ts +35 -0
  296. package/src/cli/createProviderCommandDescriptors.ts +8 -0
  297. package/src/cli/findInfraCommand.ts +7 -0
  298. package/src/cli/index.test.ts +12 -20
  299. package/src/cli/index.ts +7 -49
  300. package/src/cli/renderInfraRootHelp.ts +23 -0
  301. package/src/cli/renderUnknownInfraCommand.ts +4 -0
  302. package/src/cli/runInfraCliAsync.ts +51 -0
  303. package/src/cli/runInfraCommandAsync.ts +114 -0
  304. package/src/cli/utils/prepareInfraCommandOperationAsync.ts +64 -0
  305. package/src/cli/utils/requireInfraSuccess.ts +24 -0
  306. package/src/cli/utils/resolveInfraPersistence.ts +22 -0
  307. package/src/cli/utils/writeInfraEnvironmentOutputs.ts +24 -0
  308. package/src/cli/utils/writeInfraStructured.ts +11 -0
  309. package/src/commands.test.ts +198 -196
  310. package/src/{packageMetadata.ts → constants.ts} +5 -2
  311. package/src/environmentLifecycle.test.ts +193 -0
  312. package/src/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.ts +52 -0
  313. package/src/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.ts +32 -0
  314. package/src/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.ts +10 -0
  315. package/src/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.ts +34 -0
  316. package/src/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.ts +12 -0
  317. package/src/{project.ts → features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.ts} +10 -45
  318. package/src/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.ts +34 -0
  319. package/src/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.ts +21 -0
  320. package/src/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.ts +10 -0
  321. package/src/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.ts +25 -0
  322. package/src/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.ts +119 -0
  323. package/src/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.ts +65 -0
  324. package/src/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.ts +51 -0
  325. package/src/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.ts +41 -0
  326. package/src/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.ts +67 -0
  327. package/src/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.ts +137 -0
  328. package/src/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.ts +257 -0
  329. package/src/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.ts +80 -0
  330. package/src/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.ts +126 -0
  331. package/src/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.ts +25 -0
  332. package/src/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.ts +21 -0
  333. package/src/features/environment-lifecycle/composition/createInfraCommandServices.ts +47 -0
  334. package/src/features/environment-lifecycle/domain/orderInfraPlanActions.ts +64 -0
  335. package/src/features/environment-lifecycle/domain/resolveInfraEnvironment.ts +62 -0
  336. package/src/features/environment-lifecycle/utils/appendInfraFailure.ts +9 -0
  337. package/src/features/environment-lifecycle/utils/createInfraExecutionContext.ts +24 -0
  338. package/src/features/environment-lifecycle/utils/createInfraFailure.ts +6 -0
  339. package/src/features/environment-lifecycle/utils/createInfraLedger.ts +30 -0
  340. package/src/features/environment-lifecycle/utils/infraIdentityKey.ts +6 -0
  341. package/src/features/environment-lifecycle/utils/isInfraStoredState.ts +141 -0
  342. package/src/features/environment-lifecycle/utils/mergeInfraOutputs.ts +14 -0
  343. package/src/features/environment-lifecycle/utils/mergeInfraResources.ts +14 -0
  344. package/src/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.ts +7 -0
  345. package/src/features/environment-lifecycle/utils/resolveInfraStatePath.ts +12 -0
  346. package/src/features/environment-lifecycle/utils/resolveProjectFile.ts +22 -0
  347. package/src/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.ts +15 -0
  348. package/src/features/environment-lifecycle/utils/retainUnchangedAdapterResources.ts +15 -0
  349. package/src/index.test.ts +22 -315
  350. package/src/index.ts +41 -53
  351. package/src/infraComposition.integration.test.ts +128 -0
  352. package/src/infraOperations.test.ts +386 -0
  353. package/src/infraUp.test.ts +260 -0
  354. package/src/metadata/index.ts +1 -1
  355. package/src/package.test.ts +4 -2
  356. package/src/project/index.test.ts +8 -188
  357. package/src/project/index.ts +7 -22
  358. package/src/project.test.ts +39 -189
  359. package/src/projectContractsParser.test.ts +2 -2
  360. package/src/projectInfrastructure.test.ts +121 -167
  361. package/src/readme-usage.ts +17 -26
  362. package/src/testSupport.ts +12 -2
  363. package/src/types/infraCli.ts +115 -0
  364. package/src/types/infraOrchestration.ts +126 -0
  365. package/src/types/infraProject.ts +15 -0
  366. package/dist/adapters/minikube/auth/index.d.ts +0 -8
  367. package/dist/adapters/minikube/auth/index.d.ts.map +0 -1
  368. package/dist/adapters/minikube/auth/index.js +0 -29
  369. package/dist/adapters/minikube/auth/index.js.map +0 -1
  370. package/dist/adapters/minikube/auth/oauthRuntime.d.ts +0 -4
  371. package/dist/adapters/minikube/auth/oauthRuntime.d.ts.map +0 -1
  372. package/dist/adapters/minikube/auth/oauthRuntime.js +0 -138
  373. package/dist/adapters/minikube/auth/oauthRuntime.js.map +0 -1
  374. package/dist/adapters/minikube/auth/supabase/index.d.ts +0 -7
  375. package/dist/adapters/minikube/auth/supabase/index.d.ts.map +0 -1
  376. package/dist/adapters/minikube/auth/supabase/index.js +0 -232
  377. package/dist/adapters/minikube/auth/supabase/index.js.map +0 -1
  378. package/dist/adapters/minikube/auth/supabase/profile.d.ts +0 -20
  379. package/dist/adapters/minikube/auth/supabase/profile.d.ts.map +0 -1
  380. package/dist/adapters/minikube/auth/supabase/profile.js +0 -452
  381. package/dist/adapters/minikube/auth/supabase/profile.js.map +0 -1
  382. package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.d.ts +0 -7
  383. package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.d.ts.map +0 -1
  384. package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.js +0 -104
  385. package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.js.map +0 -1
  386. package/dist/adapters/minikube/authz/cerbos/index.d.ts +0 -13
  387. package/dist/adapters/minikube/authz/cerbos/index.d.ts.map +0 -1
  388. package/dist/adapters/minikube/authz/cerbos/index.js +0 -382
  389. package/dist/adapters/minikube/authz/cerbos/index.js.map +0 -1
  390. package/dist/adapters/minikube/authz/index.d.ts +0 -9
  391. package/dist/adapters/minikube/authz/index.d.ts.map +0 -1
  392. package/dist/adapters/minikube/authz/index.js +0 -23
  393. package/dist/adapters/minikube/authz/index.js.map +0 -1
  394. package/dist/adapters/minikube/base/index.d.ts +0 -14
  395. package/dist/adapters/minikube/base/index.d.ts.map +0 -1
  396. package/dist/adapters/minikube/base/index.js +0 -3433
  397. package/dist/adapters/minikube/base/index.js.map +0 -1
  398. package/dist/adapters/minikube/base/supabaseMigrations.d.ts +0 -2
  399. package/dist/adapters/minikube/base/supabaseMigrations.d.ts.map +0 -1
  400. package/dist/adapters/minikube/base/supabaseMigrations.js +0 -6
  401. package/dist/adapters/minikube/base/supabaseMigrations.js.map +0 -1
  402. package/dist/adapters/minikube/contracts.d.ts +0 -34
  403. package/dist/adapters/minikube/contracts.d.ts.map +0 -1
  404. package/dist/adapters/minikube/contracts.js +0 -10
  405. package/dist/adapters/minikube/contracts.js.map +0 -1
  406. package/dist/adapters/minikube/index.d.ts +0 -3
  407. package/dist/adapters/minikube/index.d.ts.map +0 -1
  408. package/dist/adapters/minikube/index.js +0 -136
  409. package/dist/adapters/minikube/index.js.map +0 -1
  410. package/dist/adapters/minikube/secrets/index.d.ts +0 -7
  411. package/dist/adapters/minikube/secrets/index.d.ts.map +0 -1
  412. package/dist/adapters/minikube/secrets/index.js +0 -13
  413. package/dist/adapters/minikube/secrets/index.js.map +0 -1
  414. package/dist/adapters/minikube/secrets/supabase-vault/index.d.ts +0 -8
  415. package/dist/adapters/minikube/secrets/supabase-vault/index.d.ts.map +0 -1
  416. package/dist/adapters/minikube/secrets/supabase-vault/index.js +0 -118
  417. package/dist/adapters/minikube/secrets/supabase-vault/index.js.map +0 -1
  418. package/dist/adapters/minikube/storage/index.d.ts +0 -7
  419. package/dist/adapters/minikube/storage/index.d.ts.map +0 -1
  420. package/dist/adapters/minikube/storage/index.js +0 -77
  421. package/dist/adapters/minikube/storage/index.js.map +0 -1
  422. package/dist/adapters/minikube/storage/supabase/index.d.ts +0 -7
  423. package/dist/adapters/minikube/storage/supabase/index.d.ts.map +0 -1
  424. package/dist/adapters/minikube/storage/supabase/index.js +0 -82
  425. package/dist/adapters/minikube/storage/supabase/index.js.map +0 -1
  426. package/dist/authRedirects.d.ts +0 -19
  427. package/dist/authRedirects.d.ts.map +0 -1
  428. package/dist/authRedirects.js +0 -80
  429. package/dist/authRedirects.js.map +0 -1
  430. package/dist/authTargetRedirects.d.ts +0 -12
  431. package/dist/authTargetRedirects.d.ts.map +0 -1
  432. package/dist/authTargetRedirects.js +0 -32
  433. package/dist/authTargetRedirects.js.map +0 -1
  434. package/dist/commandContext.d.ts +0 -12
  435. package/dist/commandContext.d.ts.map +0 -1
  436. package/dist/commandContext.js.map +0 -1
  437. package/dist/commands.d.ts +0 -95
  438. package/dist/commands.d.ts.map +0 -1
  439. package/dist/commands.js +0 -256
  440. package/dist/commands.js.map +0 -1
  441. package/dist/infraValidation.d.ts +0 -4
  442. package/dist/infraValidation.d.ts.map +0 -1
  443. package/dist/infraValidation.js +0 -63
  444. package/dist/infraValidation.js.map +0 -1
  445. package/dist/packageMetadata.d.ts +0 -10
  446. package/dist/packageMetadata.d.ts.map +0 -1
  447. package/dist/packageMetadata.js.map +0 -1
  448. package/dist/project.d.ts.map +0 -1
  449. package/dist/project.js.map +0 -1
  450. package/dist/projectDatabase.d.ts +0 -5
  451. package/dist/projectDatabase.d.ts.map +0 -1
  452. package/dist/projectDatabase.js +0 -22
  453. package/dist/projectDatabase.js.map +0 -1
  454. package/dist/projectEnvironment.d.ts +0 -6
  455. package/dist/projectEnvironment.d.ts.map +0 -1
  456. package/dist/projectEnvironment.js +0 -45
  457. package/dist/projectEnvironment.js.map +0 -1
  458. package/dist/projectInfrastructure.d.ts +0 -38
  459. package/dist/projectInfrastructure.d.ts.map +0 -1
  460. package/dist/projectInfrastructure.js +0 -145
  461. package/dist/projectInfrastructure.js.map +0 -1
  462. package/dist/runtime.d.ts +0 -54
  463. package/dist/runtime.d.ts.map +0 -1
  464. package/dist/runtime.js +0 -151
  465. package/dist/runtime.js.map +0 -1
  466. package/dist/secretStore.d.ts +0 -19
  467. package/dist/secretStore.d.ts.map +0 -1
  468. package/dist/secretStore.js +0 -22
  469. package/dist/secretStore.js.map +0 -1
  470. package/dist/types.d.ts +0 -70
  471. package/dist/types.d.ts.map +0 -1
  472. package/dist/types.js +0 -2
  473. package/dist/types.js.map +0 -1
  474. package/src/adapters/minikube/README.md +0 -115
  475. package/src/adapters/minikube/appRuntimeServing.test.ts +0 -28
  476. package/src/adapters/minikube/auth/index.ts +0 -40
  477. package/src/adapters/minikube/auth/oauthRuntime.ts +0 -163
  478. package/src/adapters/minikube/auth/supabase/index.test.ts +0 -227
  479. package/src/adapters/minikube/auth/supabase/index.ts +0 -293
  480. package/src/adapters/minikube/auth/supabase/oauthRuntime.test.ts +0 -154
  481. package/src/adapters/minikube/auth/supabase/profile.integration.test.ts +0 -1028
  482. package/src/adapters/minikube/auth/supabase/profile.ts +0 -526
  483. package/src/adapters/minikube/auth/supabase/providerAssignments.test.ts +0 -36
  484. package/src/adapters/minikube/auth/targetAwareOAuthRuntime.test.ts +0 -83
  485. package/src/adapters/minikube/auth/targetAwareOAuthRuntime.ts +0 -136
  486. package/src/adapters/minikube/authz/cerbos/index.ts +0 -486
  487. package/src/adapters/minikube/authz/index.ts +0 -32
  488. package/src/adapters/minikube/base/appImageBuild.test.ts +0 -352
  489. package/src/adapters/minikube/base/index.test.ts +0 -693
  490. package/src/adapters/minikube/base/index.ts +0 -3763
  491. package/src/adapters/minikube/base/portForwardRuntime.test.ts +0 -624
  492. package/src/adapters/minikube/base/supabaseMigrations.test.ts +0 -168
  493. package/src/adapters/minikube/base/supabaseMigrations.ts +0 -5
  494. package/src/adapters/minikube/base/twoAppIsolation.integration.test.ts +0 -898
  495. package/src/adapters/minikube/base/upgradeReconciliation.test.ts +0 -135
  496. package/src/adapters/minikube/contracts.ts +0 -46
  497. package/src/adapters/minikube/index.ts +0 -172
  498. package/src/adapters/minikube/secrets/index.test.ts +0 -147
  499. package/src/adapters/minikube/secrets/index.ts +0 -19
  500. package/src/adapters/minikube/secrets/supabase-vault/index.ts +0 -139
  501. package/src/adapters/minikube/storage/index.ts +0 -91
  502. package/src/adapters/minikube/storage/supabase/index.ts +0 -108
  503. package/src/apiInfrastructure.test.ts +0 -69
  504. package/src/authRedirects.test.ts +0 -63
  505. package/src/authRedirects.ts +0 -113
  506. package/src/authTargetRedirects.test.ts +0 -62
  507. package/src/authTargetRedirects.ts +0 -46
  508. package/src/commandContext.ts +0 -27
  509. package/src/commands.ts +0 -404
  510. package/src/generatedApiLedgerCleanup.test.ts +0 -72
  511. package/src/infraApiValidation.test.ts +0 -42
  512. package/src/infraValidation.ts +0 -99
  513. package/src/minikubeImageLifecycle.test.ts +0 -35
  514. package/src/projectDatabase.ts +0 -27
  515. package/src/projectEnvironment.ts +0 -51
  516. package/src/projectInfrastructure.ts +0 -221
  517. package/src/runtime.test.ts +0 -124
  518. package/src/runtime.ts +0 -234
  519. package/src/secretStore.test.ts +0 -76
  520. package/src/secretStore.ts +0 -44
  521. package/src/types.ts +0 -82
@@ -0,0 +1,52 @@
1
+ import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';
2
+
3
+ import { createInfraFailure } from '../../utils/createInfraFailure.js';
4
+ import { normalizeInfraEnvironmentKey } from '../../utils/normalizeInfraEnvironmentKey.js';
5
+
6
+ /*** Resolve execution-only control-plane credentials from exact-name or prefixed environment data. */
7
+ export function createEnvironmentInfraCredentialPort(
8
+ environment: Readonly<Record<string, string | undefined>>,
9
+ ): InfraExecutionContext['credentials'] {
10
+ return {
11
+ resolveAsync(reference) {
12
+ const prefixedName = `ANKH_INFRA_CREDENTIAL_${normalizeInfraEnvironmentKey(reference.name)}`;
13
+ const rawValue =
14
+ Reflect.get(environment, reference.name) ?? Reflect.get(environment, prefixedName);
15
+ if (rawValue === undefined || rawValue.length === 0) {
16
+ return Promise.resolve(
17
+ createInfraFailure(
18
+ 'infra-control-plane-credential-missing',
19
+ `Control-plane credential ${reference.name} is unavailable. Set ${reference.name} or ${prefixedName}.`,
20
+ ),
21
+ );
22
+ }
23
+ return Promise.resolve(parseCredentialBundle(reference.name, rawValue));
24
+ },
25
+ };
26
+ }
27
+
28
+ /*** Parse JSON credential bundles; token variables also support their conventional scalar form. */
29
+ function parseCredentialBundle(
30
+ name: string,
31
+ rawValue: string,
32
+ ): InfraResult<Readonly<Record<string, string>>> {
33
+ try {
34
+ const parsed: unknown = JSON.parse(rawValue);
35
+ if (isRecord(parsed) && Object.values(parsed).every((value) => typeof value === 'string')) {
36
+ return { ok: true, value: parsed as Readonly<Record<string, string>>, diagnostics: [] };
37
+ }
38
+ } catch {
39
+ if (name.endsWith('_TOKEN')) {
40
+ return { ok: true, value: { token: rawValue, apiToken: rawValue }, diagnostics: [] };
41
+ }
42
+ }
43
+ return createInfraFailure(
44
+ 'infra-control-plane-credential-invalid',
45
+ `Control-plane credential ${name} must be a JSON object containing string fields.`,
46
+ );
47
+ }
48
+
49
+ /*** Narrow JSON credential bundles. */
50
+ function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
51
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
52
+ }
@@ -0,0 +1,32 @@
1
+ import type { InfraExecutionContext } from '@ankhorage/contracts/infra';
2
+
3
+ import { createInfraFailure } from '../../utils/createInfraFailure.js';
4
+ import { normalizeInfraEnvironmentKey } from '../../utils/normalizeInfraEnvironmentKey.js';
5
+
6
+ /*** Resolve explicitly addressed secret values from environment data without serializing them. */
7
+ export function createEnvironmentInfraSecretPort(
8
+ environment: Readonly<Record<string, string | undefined>>,
9
+ ): InfraExecutionContext['secrets'] {
10
+ return {
11
+ resolveAsync(reference) {
12
+ const variable = [
13
+ 'ANKH_INFRA_SECRET',
14
+ reference.projectId,
15
+ reference.environment,
16
+ reference.ref,
17
+ reference.key,
18
+ ]
19
+ .map(normalizeInfraEnvironmentKey)
20
+ .join('_');
21
+ const value: unknown = Reflect.get(environment, variable);
22
+ return Promise.resolve(
23
+ typeof value !== 'string' || value.length === 0
24
+ ? createInfraFailure(
25
+ 'infra-secret-unavailable',
26
+ `Secret reference ${reference.ref}/${reference.key} is unavailable. Set ${variable}.`,
27
+ )
28
+ : { ok: true, value, diagnostics: [] },
29
+ );
30
+ },
31
+ };
32
+ }
@@ -0,0 +1,10 @@
1
+ import type { InfraAdapterPackageResolver } from '../../application/ports/outbound/infraAdapterPackage.js';
2
+
3
+ /*** Load only a catalog-selected package through the host module resolver. */
4
+ export function createNodeInfraAdapterPackageResolver(): InfraAdapterPackageResolver {
5
+ return {
6
+ loadAsync(packageName) {
7
+ return import(packageName);
8
+ },
9
+ };
10
+ }
@@ -0,0 +1,34 @@
1
+ import type { AppEnvironmentId } from '@ankhorage/contracts/environments';
2
+ import { promises as fs } from 'fs';
3
+
4
+ import type { InfraStoredState } from '../../../../types/infraOrchestration.js';
5
+ import { isInfraStoredState } from '../../utils/isInfraStoredState.js';
6
+ import { resolveInfraStatePath } from '../../utils/resolveInfraStatePath.js';
7
+
8
+ /*** Read exact environment state; malformed ownership state fails closed rather than disappearing. */
9
+ export async function readStoredInfraStateAsync(
10
+ projectPath: string,
11
+ environment: AppEnvironmentId,
12
+ ): Promise<InfraStoredState | null> {
13
+ const statePath = resolveInfraStatePath(projectPath, environment);
14
+ try {
15
+ const parsed: unknown = JSON.parse(await fs.readFile(statePath, 'utf8'));
16
+ if (!isInfraStoredState(parsed)) {
17
+ throw new Error(`Stored Infra state has an invalid shape: ${statePath}`);
18
+ }
19
+ return parsed;
20
+ } catch (error) {
21
+ if (isMissingFile(error)) return null;
22
+ throw error;
23
+ }
24
+ }
25
+
26
+ /*** Recognize only the filesystem's absent-file failure. */
27
+ function isMissingFile(error: unknown): boolean {
28
+ return isRecord(error) && error.code === 'ENOENT';
29
+ }
30
+
31
+ /*** Narrow filesystem error values. */
32
+ function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
33
+ return typeof value === 'object' && value !== null;
34
+ }
@@ -0,0 +1,12 @@
1
+ import type { AppEnvironmentId } from '@ankhorage/contracts/environments';
2
+ import { promises as fs } from 'fs';
3
+
4
+ import { resolveInfraStatePath } from '../../utils/resolveInfraStatePath.js';
5
+
6
+ /*** Remove only the exact selected environment state after a complete destroy. */
7
+ export async function removeStoredInfraStateAsync(
8
+ projectPath: string,
9
+ environment: AppEnvironmentId,
10
+ ): Promise<void> {
11
+ await fs.rm(resolveInfraStatePath(projectPath, environment), { force: true });
12
+ }
@@ -2,16 +2,10 @@ import { type AppManifest, isAppManifest } from '@ankhorage/contracts';
2
2
  import { promises as fs } from 'fs';
3
3
  import path from 'path';
4
4
 
5
- export interface ResolvedInfraProject {
6
- readonly appsRoot: string;
7
- readonly manifest: AppManifest;
8
- readonly manifestPath: string;
9
- readonly projectId: string;
10
- readonly projectPath: string;
11
- readonly workspaceRoot: string;
12
- }
5
+ import type { ResolvedInfraProject } from '../../../../types/infraProject.js';
13
6
 
14
- export async function resolveInfraProject(options: {
7
+ /*** Resolve one manifest-backed Infra project from the workspace and optional project selector. */
8
+ export async function resolveInfraProjectAsync(options: {
15
9
  readonly cwd: string;
16
10
  readonly projectId?: string;
17
11
  }): Promise<ResolvedInfraProject> {
@@ -37,7 +31,7 @@ export async function resolveInfraProject(options: {
37
31
  }
38
32
 
39
33
  const manifestPath = path.join(projectPath, 'ankh.config.json');
40
- const manifest = await readProjectManifest({ manifestPath, projectId });
34
+ const manifest = await readProjectManifest(manifestPath);
41
35
 
42
36
  return {
43
37
  appsRoot,
@@ -60,54 +54,25 @@ function resolveProjectPath(appsRoot: string, projectId: string): string {
60
54
  return projectPath;
61
55
  }
62
56
 
63
- function createFallbackManifest(projectId: string): AppManifest {
64
- return {
65
- metadata: {
66
- name: projectId,
67
- slug: projectId,
68
- version: '0.0.0',
69
- category: 'developer_tools',
70
- themeId: 'default',
71
- },
72
- themes: [],
73
- activeThemeId: 'default',
74
- infra: { modules: [] },
75
- navigator: {
76
- type: 'stack',
77
- routes: [{ name: 'index', screenId: 'index' }],
78
- },
79
- screens: {},
80
- settings: {
81
- localization: {
82
- defaultLocale: 'en',
83
- locales: ['en'],
84
- },
85
- },
86
- };
87
- }
88
-
89
- async function readProjectManifest(args: {
90
- readonly manifestPath: string;
91
- readonly projectId: string;
92
- }): Promise<AppManifest> {
93
- if (!(await pathExists(args.manifestPath))) {
94
- return createFallbackManifest(args.projectId);
57
+ async function readProjectManifest(manifestPath: string): Promise<AppManifest> {
58
+ if (!(await pathExists(manifestPath))) {
59
+ throw new Error(`Project manifest not found: ${manifestPath}`);
95
60
  }
96
61
 
97
- const rawManifest = await fs.readFile(args.manifestPath, 'utf8');
62
+ const rawManifest = await fs.readFile(manifestPath, 'utf8');
98
63
  let parsed: unknown;
99
64
 
100
65
  try {
101
66
  parsed = JSON.parse(rawManifest);
102
67
  } catch (error) {
103
68
  throw new Error(
104
- `Project manifest is not valid JSON: ${args.manifestPath}: ${getErrorMessage(error)}`,
69
+ `Project manifest is not valid JSON: ${manifestPath}: ${getErrorMessage(error)}`,
105
70
  { cause: error },
106
71
  );
107
72
  }
108
73
 
109
74
  if (!isAppManifest(parsed)) {
110
- throw new Error(`Project manifest has an invalid shape: ${args.manifestPath}`);
75
+ throw new Error(`Project manifest has an invalid shape: ${manifestPath}`);
111
76
  }
112
77
 
113
78
  return parsed;
@@ -0,0 +1,34 @@
1
+ import type { InfraGeneratedArtifact, InfraLedger } from '@ankhorage/contracts/infra';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
4
+
5
+ import type { InfraArtifactWriteResult } from '../../../../types/infraProject.js';
6
+ import { resolveProjectFile } from '../../utils/resolveProjectFile.js';
7
+
8
+ /*** Write validated generated artifacts and remove only stale paths from the prior ledger. */
9
+ export async function writeInfraGeneratedArtifactsAsync(
10
+ projectPath: string,
11
+ artifacts: readonly InfraGeneratedArtifact[],
12
+ previous: InfraLedger | undefined,
13
+ ): Promise<InfraArtifactWriteResult> {
14
+ const nextPaths = new Set<string>();
15
+ const validated = artifacts.map((artifact) => {
16
+ if (nextPaths.has(artifact.path)) {
17
+ throw new Error(`Duplicate generated Infra artifact path: ${artifact.path}`);
18
+ }
19
+ nextPaths.add(artifact.path);
20
+ return { artifact, outputPath: resolveProjectFile(projectPath, artifact.path) };
21
+ });
22
+ for (const { artifact, outputPath } of validated) {
23
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
24
+ await fs.writeFile(outputPath, artifact.content, 'utf8');
25
+ if (artifact.executable === true) await fs.chmod(outputPath, 0o755);
26
+ }
27
+ const stalePaths = (previous?.artifacts ?? [])
28
+ .map(({ path: artifactPath }) => artifactPath)
29
+ .filter((artifactPath) => !nextPaths.has(artifactPath));
30
+ for (const stalePath of stalePaths) {
31
+ await fs.rm(resolveProjectFile(projectPath, stalePath), { force: true });
32
+ }
33
+ return { written: validated.length, removed: stalePaths.length };
34
+ }
@@ -0,0 +1,21 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+
4
+ import type { InfraStoredState } from '../../../../types/infraOrchestration.js';
5
+ import { isInfraStoredState } from '../../utils/isInfraStoredState.js';
6
+ import { resolveInfraStatePath } from '../../utils/resolveInfraStatePath.js';
7
+
8
+ /*** Persist serializable desired identity plus a secret-safe canonical ledger atomically. */
9
+ export async function writeStoredInfraStateAsync(
10
+ projectPath: string,
11
+ state: InfraStoredState,
12
+ ): Promise<void> {
13
+ if (!isInfraStoredState(state)) {
14
+ throw new Error('Refusing to persist invalid or cross-scoped Infra ownership state.');
15
+ }
16
+ const statePath = resolveInfraStatePath(projectPath, state.ledger.environment);
17
+ const temporaryPath = `${statePath}.tmp`;
18
+ await fs.mkdir(path.dirname(statePath), { recursive: true });
19
+ await fs.writeFile(temporaryPath, `${JSON.stringify(state, null, 2)}\n`, 'utf8');
20
+ await fs.rename(temporaryPath, statePath);
21
+ }
@@ -0,0 +1,10 @@
1
+ import type { InfraAdapterDescriptor } from '@ankhorage/contracts/infra';
2
+
3
+ export interface InfraAdapterPackageResolver {
4
+ loadAsync(packageName: string): Promise<unknown>;
5
+ }
6
+
7
+ export interface InfraAdapterPackageModule {
8
+ readonly infraAdapterDescriptor: InfraAdapterDescriptor;
9
+ readonly createInfraAdapter: () => unknown;
10
+ }
@@ -0,0 +1,25 @@
1
+ import type {
2
+ InfraDiagnostic,
3
+ InfraExecutionContext,
4
+ InfraResult,
5
+ InfraServiceAdapter,
6
+ InfraWorkloadSpec,
7
+ } from '@ankhorage/contracts/infra';
8
+
9
+ import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
10
+
11
+ /*** Collect each service workload graph once in deterministic adapter order. */
12
+ export async function collectInfraWorkloadsAsync(
13
+ context: InfraExecutionContext,
14
+ services: readonly InfraServiceAdapter[],
15
+ ): Promise<InfraResult<readonly InfraWorkloadSpec[]>> {
16
+ const workloads: InfraWorkloadSpec[] = [];
17
+ const diagnostics: InfraDiagnostic[] = [];
18
+ for (const service of services) {
19
+ const desired = await service.desiredWorkloadsAsync(context);
20
+ if (!desired.ok) return appendInfraFailure(diagnostics, desired);
21
+ workloads.push(...desired.value);
22
+ diagnostics.push(...desired.diagnostics);
23
+ }
24
+ return { ok: true, value: workloads, diagnostics };
25
+ }
@@ -0,0 +1,119 @@
1
+ import type {
2
+ InfraDestroyRequest,
3
+ InfraDiagnostic,
4
+ InfraOutput,
5
+ InfraOwnedResource,
6
+ InfraResult,
7
+ } from '@ankhorage/contracts/infra';
8
+
9
+ import type {
10
+ InfraDestroyOperationRequest,
11
+ InfraDestroyOperationResult,
12
+ InfraOrchestrationDependencies,
13
+ } from '../../../../types/infraOrchestration.js';
14
+ import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
15
+ import { createInfraLedger } from '../../utils/createInfraLedger.js';
16
+ import { infraIdentityKey } from '../../utils/infraIdentityKey.js';
17
+ import { mergeInfraOutputs } from '../../utils/mergeInfraOutputs.js';
18
+ import { mergeInfraResources } from '../../utils/mergeInfraResources.js';
19
+ import { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';
20
+
21
+ /*** Destroy exact owned resources in reverse dependency order behind explicit scope confirmation. */
22
+ export async function destroyInfraEnvironmentAsync(
23
+ request: InfraDestroyOperationRequest,
24
+ dependencies: InfraOrchestrationDependencies,
25
+ ): Promise<InfraDestroyOperationResult> {
26
+ const prepared = await prepareInfraOperationAsync(request, 'destroy', dependencies);
27
+ if (!prepared.ok) return prepared;
28
+ const destroyRequest: InfraDestroyRequest = {
29
+ projectId: request.projectId,
30
+ environment: prepared.value.environment.id,
31
+ confirmation: request.confirmation,
32
+ persistence: request.persistence,
33
+ };
34
+ const safety = validateDestroyRequest(destroyRequest, request.previous?.resources ?? []);
35
+ if (!safety.ok) return safety;
36
+ const diagnostics: InfraDiagnostic[] = [...prepared.diagnostics];
37
+ const resources: InfraOwnedResource[] = [];
38
+ const outputs: InfraOutput[] = [];
39
+ for (const service of [...prepared.value.adapters.services].reverse()) {
40
+ const result = await service.destroyAsync(prepared.value.context, destroyRequest);
41
+ if (!result.ok) return appendInfraFailure(diagnostics, result);
42
+ resources.push(...result.value.resources);
43
+ outputs.push(...result.value.outputs);
44
+ diagnostics.push(...result.diagnostics);
45
+ }
46
+ if (prepared.value.runtimeDesired.targets.length > 0) {
47
+ const runtime = await prepared.value.adapters.runtime.destroyAsync(
48
+ prepared.value.context,
49
+ prepared.value.runtimeDesired,
50
+ destroyRequest,
51
+ );
52
+ if (!runtime.ok) return appendInfraFailure(diagnostics, runtime);
53
+ resources.push(...runtime.value.resources);
54
+ outputs.push(...runtime.value.outputs);
55
+ diagnostics.push(...runtime.diagnostics);
56
+ }
57
+ const compute = await prepared.value.adapters.compute.destroyAsync(
58
+ prepared.value.context,
59
+ destroyRequest,
60
+ );
61
+ if (!compute.ok) return appendInfraFailure(diagnostics, compute);
62
+ resources.push(...compute.value.resources);
63
+ outputs.push(...compute.value.outputs);
64
+ diagnostics.push(...compute.diagnostics);
65
+ const remainingResources = mergeInfraResources(resources);
66
+ const remainingOutputs = mergeInfraOutputs(outputs);
67
+ const ledger =
68
+ remainingResources.length === 0 && remainingOutputs.length === 0
69
+ ? null
70
+ : createInfraLedger({
71
+ projectId: request.projectId,
72
+ environment: prepared.value.environment.id,
73
+ targets: [],
74
+ resources: remainingResources,
75
+ outputs: remainingOutputs,
76
+ });
77
+ return {
78
+ ok: true,
79
+ value: { environment: prepared.value.environment.id, ledger },
80
+ diagnostics,
81
+ };
82
+ }
83
+
84
+ /*** Refuse cross-project confirmation and unowned persistent deletion before any mutation. */
85
+ function validateDestroyRequest(
86
+ request: InfraDestroyRequest,
87
+ previous: readonly InfraOwnedResource[],
88
+ ): InfraResult<null> {
89
+ if (
90
+ request.confirmation.projectId !== request.projectId ||
91
+ request.confirmation.environment !== request.environment
92
+ ) {
93
+ return destroyFailure(
94
+ 'infra-destroy-confirmation-mismatch',
95
+ 'Infra destroy confirmation must exactly match the selected project and environment.',
96
+ );
97
+ }
98
+ if (request.persistence.policy === 'retain') {
99
+ return { ok: true, value: null, diagnostics: [] };
100
+ }
101
+ const owned = new Set(previous.map(({ identity }) => infraIdentityKey(identity)));
102
+ const invalid = request.persistence.confirmedResources.some(
103
+ (identity) =>
104
+ identity.projectId !== request.projectId ||
105
+ identity.environment !== request.environment ||
106
+ !owned.has(infraIdentityKey(identity)),
107
+ );
108
+ return invalid
109
+ ? destroyFailure(
110
+ 'infra-destroy-resource-unowned',
111
+ 'Persistent deletion confirmation contains a resource outside the stored Infra scope.',
112
+ )
113
+ : { ok: true, value: null, diagnostics: [] };
114
+ }
115
+
116
+ /*** Create one stable non-provider-specific destroy safety failure. */
117
+ function destroyFailure(code: string, message: string): InfraResult<never> {
118
+ return { ok: false, diagnostics: [{ severity: 'error', code, message }] };
119
+ }
@@ -0,0 +1,65 @@
1
+ import type { InfraDiagnostic, InfraOutput, InfraOwnedResource } from '@ankhorage/contracts/infra';
2
+
3
+ import type {
4
+ InfraDownOperationResult,
5
+ InfraOperationRequest,
6
+ InfraOrchestrationDependencies,
7
+ } from '../../../../types/infraOrchestration.js';
8
+ import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
9
+ import { createInfraLedger } from '../../utils/createInfraLedger.js';
10
+ import { retainUnchangedAdapterOutputs } from '../../utils/retainUnchangedAdapterOutputs.js';
11
+ import { retainUnchangedAdapterResources } from '../../utils/retainUnchangedAdapterResources.js';
12
+ import { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';
13
+
14
+ /*** Reversibly suspend services and runtime while retaining compute and persistent data. */
15
+ export async function downInfraEnvironmentAsync(
16
+ request: InfraOperationRequest,
17
+ dependencies: InfraOrchestrationDependencies,
18
+ ): Promise<InfraDownOperationResult> {
19
+ const prepared = await prepareInfraOperationAsync(request, 'down', dependencies);
20
+ if (!prepared.ok) return prepared;
21
+ const diagnostics: InfraDiagnostic[] = [...prepared.diagnostics];
22
+ const resources: InfraOwnedResource[] = [];
23
+ const outputs: InfraOutput[] = [];
24
+ const replacedAdapters = new Set<string>();
25
+ for (const service of [...prepared.value.adapters.services].reverse()) {
26
+ if (service.suspendAsync === undefined) continue;
27
+ const result = await service.suspendAsync(prepared.value.context);
28
+ if (!result.ok) return appendInfraFailure(diagnostics, result);
29
+ replacedAdapters.add(service.descriptor.id);
30
+ resources.push(...result.value.resources);
31
+ outputs.push(...result.value.outputs);
32
+ diagnostics.push(...result.diagnostics);
33
+ }
34
+ if (prepared.value.runtimeDesired.targets.length > 0) {
35
+ const runtime = await prepared.value.adapters.runtime.suspendAsync(
36
+ prepared.value.context,
37
+ prepared.value.runtimeDesired,
38
+ );
39
+ if (!runtime.ok) return appendInfraFailure(diagnostics, runtime);
40
+ replacedAdapters.add(prepared.value.adapters.runtime.descriptor.id);
41
+ resources.push(...runtime.value.resources);
42
+ outputs.push(...runtime.value.outputs);
43
+ diagnostics.push(...runtime.diagnostics);
44
+ }
45
+ const previousResources = request.previous?.resources ?? [];
46
+ const previousOutputs = request.previous?.outputs ?? [];
47
+ return {
48
+ ok: true,
49
+ value: {
50
+ environment: prepared.value.environment.id,
51
+ ledger: createInfraLedger({
52
+ projectId: request.projectId,
53
+ environment: prepared.value.environment.id,
54
+ targets:
55
+ prepared.value.compute.targets.length > 0
56
+ ? prepared.value.compute.targets
57
+ : (request.previous?.targets ?? []),
58
+ resources: retainUnchangedAdapterResources(previousResources, resources, replacedAdapters),
59
+ outputs: retainUnchangedAdapterOutputs(previousOutputs, outputs, replacedAdapters),
60
+ previous: request.previous,
61
+ }),
62
+ },
63
+ diagnostics,
64
+ };
65
+ }
@@ -0,0 +1,51 @@
1
+ import type { InfraDiagnostic } from '@ankhorage/contracts/infra';
2
+
3
+ import type {
4
+ InfraGenerateOperationResult,
5
+ InfraOperationRequest,
6
+ InfraOrchestrationDependencies,
7
+ } from '../../../../types/infraOrchestration.js';
8
+ import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
9
+ import { createInfraLedger } from '../../utils/createInfraLedger.js';
10
+ import { mergeInfraOutputs } from '../../utils/mergeInfraOutputs.js';
11
+ import { mergeInfraResources } from '../../utils/mergeInfraResources.js';
12
+ import { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';
13
+
14
+ /*** Generate deterministic review artifacts without mutating local or remote infrastructure. */
15
+ export async function generateInfraEnvironmentAsync(
16
+ request: InfraOperationRequest,
17
+ dependencies: InfraOrchestrationDependencies,
18
+ ): Promise<InfraGenerateOperationResult> {
19
+ const prepared = await prepareInfraOperationAsync(request, 'generate', dependencies);
20
+ if (!prepared.ok) return prepared;
21
+ const diagnostics: InfraDiagnostic[] = [...prepared.diagnostics];
22
+ const { runtime } = prepared.value.adapters;
23
+ const artifacts =
24
+ runtime.generateAsync === undefined || prepared.value.runtimeDesired.targets.length === 0
25
+ ? { ok: true as const, value: [], diagnostics: [] }
26
+ : await runtime.generateAsync(prepared.value.context, prepared.value.runtimeDesired);
27
+ if (!artifacts.ok) return appendInfraFailure(diagnostics, artifacts);
28
+ diagnostics.push(...artifacts.diagnostics);
29
+ return {
30
+ ok: true,
31
+ value: {
32
+ environment: prepared.value.environment.id,
33
+ artifacts: artifacts.value,
34
+ ledger: createInfraLedger({
35
+ projectId: request.projectId,
36
+ environment: prepared.value.environment.id,
37
+ targets:
38
+ prepared.value.compute.targets.length > 0
39
+ ? prepared.value.compute.targets
40
+ : (request.previous?.targets ?? []),
41
+ resources: mergeInfraResources(
42
+ request.previous?.resources ?? [],
43
+ prepared.value.compute.resources,
44
+ ),
45
+ outputs: mergeInfraOutputs(request.previous?.outputs ?? [], prepared.value.compute.outputs),
46
+ artifacts: artifacts.value,
47
+ }),
48
+ },
49
+ diagnostics,
50
+ };
51
+ }
@@ -0,0 +1,41 @@
1
+ import type {
2
+ InfraOperationRequest,
3
+ InfraOutputsOperationResult,
4
+ } from '../../../../types/infraOrchestration.js';
5
+ import { resolveInfraEnvironment } from '../../domain/resolveInfraEnvironment.js';
6
+
7
+ /*** Return only safe serialized public outputs and secret references from the canonical ledger. */
8
+ export function getInfraEnvironmentOutputs(
9
+ request: InfraOperationRequest,
10
+ ): InfraOutputsOperationResult {
11
+ const environment = resolveInfraEnvironment({
12
+ manifest: request.manifest,
13
+ environment: request.environment,
14
+ operation: 'outputs',
15
+ });
16
+ if (!environment.ok) return environment;
17
+ if (
18
+ request.previous !== undefined &&
19
+ (request.previous.projectId !== request.projectId ||
20
+ request.previous.environment !== environment.value.id)
21
+ ) {
22
+ return {
23
+ ok: false,
24
+ diagnostics: [
25
+ {
26
+ severity: 'error',
27
+ code: 'infra-ledger-scope-mismatch',
28
+ message: 'Stored Infra state does not belong to the selected project and environment.',
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ return {
34
+ ok: true,
35
+ value: {
36
+ environment: environment.value.id,
37
+ outputs: request.previous?.outputs ?? [],
38
+ },
39
+ diagnostics: environment.diagnostics,
40
+ };
41
+ }