alchemy 2.0.0-beta.59 → 2.0.0-beta.60

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 (697) hide show
  1. package/README.md +1 -1
  2. package/bin/exec.js +684 -758
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/AuthProvider.d.ts.map +1 -1
  5. package/lib/AWS/AuthProvider.js +22 -9
  6. package/lib/AWS/AuthProvider.js.map +1 -1
  7. package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
  8. package/lib/AWS/AutoScaling/LaunchTemplate.js +1 -1
  9. package/lib/AWS/CloudWatch/Dashboard.d.ts.map +1 -1
  10. package/lib/AWS/CloudWatch/Dashboard.js +4 -1
  11. package/lib/AWS/CloudWatch/Dashboard.js.map +1 -1
  12. package/lib/AWS/Credentials.d.ts +58 -2
  13. package/lib/AWS/Credentials.d.ts.map +1 -1
  14. package/lib/AWS/Credentials.js +124 -2
  15. package/lib/AWS/Credentials.js.map +1 -1
  16. package/lib/AWS/EC2/Image.d.ts.map +1 -1
  17. package/lib/AWS/EC2/Image.js +4 -1
  18. package/lib/AWS/EC2/Image.js.map +1 -1
  19. package/lib/AWS/EC2/Instance.d.ts +4 -3
  20. package/lib/AWS/EC2/Instance.d.ts.map +1 -1
  21. package/lib/AWS/EC2/Instance.js +4 -2
  22. package/lib/AWS/EC2/Instance.js.map +1 -1
  23. package/lib/AWS/EC2/KeyPair.d.ts +87 -0
  24. package/lib/AWS/EC2/KeyPair.d.ts.map +1 -0
  25. package/lib/AWS/EC2/KeyPair.js +198 -0
  26. package/lib/AWS/EC2/KeyPair.js.map +1 -0
  27. package/lib/AWS/EC2/NetworkAcl.d.ts.map +1 -1
  28. package/lib/AWS/EC2/NetworkAcl.js +4 -1
  29. package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
  30. package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
  31. package/lib/AWS/EC2/SecurityGroup.js +4 -1
  32. package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
  33. package/lib/AWS/EC2/SecurityGroupRule.d.ts.map +1 -1
  34. package/lib/AWS/EC2/SecurityGroupRule.js +14 -7
  35. package/lib/AWS/EC2/SecurityGroupRule.js.map +1 -1
  36. package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
  37. package/lib/AWS/EC2/Subnet.js +29 -5
  38. package/lib/AWS/EC2/Subnet.js.map +1 -1
  39. package/lib/AWS/EC2/hosted.d.ts +8 -10
  40. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  41. package/lib/AWS/EC2/hosted.js +81 -67
  42. package/lib/AWS/EC2/hosted.js.map +1 -1
  43. package/lib/AWS/EC2/index.d.ts +1 -0
  44. package/lib/AWS/EC2/index.d.ts.map +1 -1
  45. package/lib/AWS/EC2/index.js +1 -0
  46. package/lib/AWS/EC2/index.js.map +1 -1
  47. package/lib/AWS/ECS/Task.d.ts +8 -8
  48. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  49. package/lib/AWS/ECS/Task.js +82 -56
  50. package/lib/AWS/ECS/Task.js.map +1 -1
  51. package/lib/AWS/IAM/Role.d.ts +19 -4
  52. package/lib/AWS/IAM/Role.d.ts.map +1 -1
  53. package/lib/AWS/IAM/Role.js +81 -16
  54. package/lib/AWS/IAM/Role.js.map +1 -1
  55. package/lib/AWS/Lambda/CreateAuthToken.d.ts +28 -0
  56. package/lib/AWS/Lambda/CreateAuthToken.d.ts.map +1 -0
  57. package/lib/AWS/Lambda/CreateAuthToken.js +3 -0
  58. package/lib/AWS/Lambda/CreateAuthToken.js.map +1 -0
  59. package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts +3 -0
  60. package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts.map +1 -0
  61. package/lib/AWS/Lambda/CreateAuthTokenHttp.js +11 -0
  62. package/lib/AWS/Lambda/CreateAuthTokenHttp.js.map +1 -0
  63. package/lib/AWS/Lambda/CreateShellAuthToken.d.ts +27 -0
  64. package/lib/AWS/Lambda/CreateShellAuthToken.d.ts.map +1 -0
  65. package/lib/AWS/Lambda/CreateShellAuthToken.js +3 -0
  66. package/lib/AWS/Lambda/CreateShellAuthToken.js.map +1 -0
  67. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts +3 -0
  68. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts.map +1 -0
  69. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js +11 -0
  70. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js.map +1 -0
  71. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts +18 -0
  72. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts.map +1 -0
  73. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js +3 -0
  74. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js.map +1 -0
  75. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts +3 -0
  76. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts.map +1 -0
  77. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js +12 -0
  78. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js.map +1 -0
  79. package/lib/AWS/Lambda/Function.d.ts +4 -2
  80. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  81. package/lib/AWS/Lambda/Function.js +10 -5
  82. package/lib/AWS/Lambda/Function.js.map +1 -1
  83. package/lib/AWS/Lambda/GetMicrovm.d.ts +23 -0
  84. package/lib/AWS/Lambda/GetMicrovm.d.ts.map +1 -0
  85. package/lib/AWS/Lambda/GetMicrovm.js +3 -0
  86. package/lib/AWS/Lambda/GetMicrovm.js.map +1 -0
  87. package/lib/AWS/Lambda/GetMicrovmHttp.d.ts +3 -0
  88. package/lib/AWS/Lambda/GetMicrovmHttp.d.ts.map +1 -0
  89. package/lib/AWS/Lambda/GetMicrovmHttp.js +13 -0
  90. package/lib/AWS/Lambda/GetMicrovmHttp.js.map +1 -0
  91. package/lib/AWS/Lambda/GetMicrovmImage.d.ts +23 -0
  92. package/lib/AWS/Lambda/GetMicrovmImage.d.ts.map +1 -0
  93. package/lib/AWS/Lambda/GetMicrovmImage.js +3 -0
  94. package/lib/AWS/Lambda/GetMicrovmImage.js.map +1 -0
  95. package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts +18 -0
  96. package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts.map +1 -0
  97. package/lib/AWS/Lambda/GetMicrovmImageBuild.js +3 -0
  98. package/lib/AWS/Lambda/GetMicrovmImageBuild.js.map +1 -0
  99. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts +3 -0
  100. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts.map +1 -0
  101. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js +12 -0
  102. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js.map +1 -0
  103. package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts +3 -0
  104. package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts.map +1 -0
  105. package/lib/AWS/Lambda/GetMicrovmImageHttp.js +12 -0
  106. package/lib/AWS/Lambda/GetMicrovmImageHttp.js.map +1 -0
  107. package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts +18 -0
  108. package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts.map +1 -0
  109. package/lib/AWS/Lambda/GetMicrovmImageVersion.js +3 -0
  110. package/lib/AWS/Lambda/GetMicrovmImageVersion.js.map +1 -0
  111. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts +3 -0
  112. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts.map +1 -0
  113. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js +12 -0
  114. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js.map +1 -0
  115. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts +17 -0
  116. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts.map +1 -0
  117. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js +3 -0
  118. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js.map +1 -0
  119. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts +3 -0
  120. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts.map +1 -0
  121. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js +10 -0
  122. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js.map +1 -0
  123. package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts +17 -0
  124. package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts.map +1 -0
  125. package/lib/AWS/Lambda/ListManagedMicrovmImages.js +3 -0
  126. package/lib/AWS/Lambda/ListManagedMicrovmImages.js.map +1 -0
  127. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts +3 -0
  128. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts.map +1 -0
  129. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js +10 -0
  130. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js.map +1 -0
  131. package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts +19 -0
  132. package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts.map +1 -0
  133. package/lib/AWS/Lambda/ListMicrovmImageBuilds.js +3 -0
  134. package/lib/AWS/Lambda/ListMicrovmImageBuilds.js.map +1 -0
  135. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts +3 -0
  136. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts.map +1 -0
  137. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js +12 -0
  138. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js.map +1 -0
  139. package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts +18 -0
  140. package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts.map +1 -0
  141. package/lib/AWS/Lambda/ListMicrovmImageVersions.js +3 -0
  142. package/lib/AWS/Lambda/ListMicrovmImageVersions.js.map +1 -0
  143. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts +3 -0
  144. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts.map +1 -0
  145. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js +12 -0
  146. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js.map +1 -0
  147. package/lib/AWS/Lambda/ListMicrovms.d.ts +23 -0
  148. package/lib/AWS/Lambda/ListMicrovms.d.ts.map +1 -0
  149. package/lib/AWS/Lambda/ListMicrovms.js +3 -0
  150. package/lib/AWS/Lambda/ListMicrovms.js.map +1 -0
  151. package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts +3 -0
  152. package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts.map +1 -0
  153. package/lib/AWS/Lambda/ListMicrovmsHttp.js +12 -0
  154. package/lib/AWS/Lambda/ListMicrovmsHttp.js.map +1 -0
  155. package/lib/AWS/Lambda/MicrovmBinding.d.ts +61 -0
  156. package/lib/AWS/Lambda/MicrovmBinding.d.ts.map +1 -0
  157. package/lib/AWS/Lambda/MicrovmBinding.js +279 -0
  158. package/lib/AWS/Lambda/MicrovmBinding.js.map +1 -0
  159. package/lib/AWS/Lambda/MicrovmBundle.d.ts +62 -0
  160. package/lib/AWS/Lambda/MicrovmBundle.d.ts.map +1 -0
  161. package/lib/AWS/Lambda/MicrovmBundle.js +197 -0
  162. package/lib/AWS/Lambda/MicrovmBundle.js.map +1 -0
  163. package/lib/AWS/Lambda/MicrovmImage.d.ts +488 -0
  164. package/lib/AWS/Lambda/MicrovmImage.d.ts.map +1 -0
  165. package/lib/AWS/Lambda/MicrovmImage.js +381 -0
  166. package/lib/AWS/Lambda/MicrovmImage.js.map +1 -0
  167. package/lib/AWS/Lambda/MicrovmProvider.d.ts +7 -0
  168. package/lib/AWS/Lambda/MicrovmProvider.d.ts.map +1 -0
  169. package/lib/AWS/Lambda/MicrovmProvider.js +384 -0
  170. package/lib/AWS/Lambda/MicrovmProvider.js.map +1 -0
  171. package/lib/AWS/Lambda/MicrovmRpc.d.ts +50 -0
  172. package/lib/AWS/Lambda/MicrovmRpc.d.ts.map +1 -0
  173. package/lib/AWS/Lambda/MicrovmRpc.js +50 -0
  174. package/lib/AWS/Lambda/MicrovmRpc.js.map +1 -0
  175. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts +9 -0
  176. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts.map +1 -0
  177. package/lib/AWS/Lambda/MicrovmRuntimeContext.js +67 -0
  178. package/lib/AWS/Lambda/MicrovmRuntimeContext.js.map +1 -0
  179. package/lib/AWS/Lambda/NetworkConnector.d.ts +142 -0
  180. package/lib/AWS/Lambda/NetworkConnector.d.ts.map +1 -0
  181. package/lib/AWS/Lambda/NetworkConnector.js +283 -0
  182. package/lib/AWS/Lambda/NetworkConnector.js.map +1 -0
  183. package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
  184. package/lib/AWS/Lambda/QueueEventSource.js +1 -0
  185. package/lib/AWS/Lambda/QueueEventSource.js.map +1 -1
  186. package/lib/AWS/Lambda/ResumeMicrovm.d.ts +23 -0
  187. package/lib/AWS/Lambda/ResumeMicrovm.d.ts.map +1 -0
  188. package/lib/AWS/Lambda/ResumeMicrovm.js +3 -0
  189. package/lib/AWS/Lambda/ResumeMicrovm.js.map +1 -0
  190. package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts +3 -0
  191. package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts.map +1 -0
  192. package/lib/AWS/Lambda/ResumeMicrovmHttp.js +11 -0
  193. package/lib/AWS/Lambda/ResumeMicrovmHttp.js.map +1 -0
  194. package/lib/AWS/Lambda/RunMicrovm.d.ts +33 -0
  195. package/lib/AWS/Lambda/RunMicrovm.d.ts.map +1 -0
  196. package/lib/AWS/Lambda/RunMicrovm.js +3 -0
  197. package/lib/AWS/Lambda/RunMicrovm.js.map +1 -0
  198. package/lib/AWS/Lambda/RunMicrovmHttp.d.ts +3 -0
  199. package/lib/AWS/Lambda/RunMicrovmHttp.d.ts.map +1 -0
  200. package/lib/AWS/Lambda/RunMicrovmHttp.js +13 -0
  201. package/lib/AWS/Lambda/RunMicrovmHttp.js.map +1 -0
  202. package/lib/AWS/Lambda/SuspendMicrovm.d.ts +23 -0
  203. package/lib/AWS/Lambda/SuspendMicrovm.d.ts.map +1 -0
  204. package/lib/AWS/Lambda/SuspendMicrovm.js +3 -0
  205. package/lib/AWS/Lambda/SuspendMicrovm.js.map +1 -0
  206. package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts +3 -0
  207. package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts.map +1 -0
  208. package/lib/AWS/Lambda/SuspendMicrovmHttp.js +11 -0
  209. package/lib/AWS/Lambda/SuspendMicrovmHttp.js.map +1 -0
  210. package/lib/AWS/Lambda/TerminateMicrovm.d.ts +23 -0
  211. package/lib/AWS/Lambda/TerminateMicrovm.d.ts.map +1 -0
  212. package/lib/AWS/Lambda/TerminateMicrovm.js +3 -0
  213. package/lib/AWS/Lambda/TerminateMicrovm.js.map +1 -0
  214. package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts +3 -0
  215. package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts.map +1 -0
  216. package/lib/AWS/Lambda/TerminateMicrovmHttp.js +11 -0
  217. package/lib/AWS/Lambda/TerminateMicrovmHttp.js.map +1 -0
  218. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts +18 -0
  219. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts.map +1 -0
  220. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js +3 -0
  221. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js.map +1 -0
  222. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts +3 -0
  223. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts.map +1 -0
  224. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js +12 -0
  225. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js.map +1 -0
  226. package/lib/AWS/Lambda/index.d.ts +38 -0
  227. package/lib/AWS/Lambda/index.d.ts.map +1 -1
  228. package/lib/AWS/Lambda/index.js +38 -0
  229. package/lib/AWS/Lambda/index.js.map +1 -1
  230. package/lib/AWS/Providers.d.ts +1 -1
  231. package/lib/AWS/Providers.d.ts.map +1 -1
  232. package/lib/AWS/Providers.js +6 -2
  233. package/lib/AWS/Providers.js.map +1 -1
  234. package/lib/AWS/RDS/DBClusterParameterGroup.d.ts.map +1 -1
  235. package/lib/AWS/RDS/DBClusterParameterGroup.js +4 -1
  236. package/lib/AWS/RDS/DBClusterParameterGroup.js.map +1 -1
  237. package/lib/AWS/RDS/DBParameterGroup.d.ts.map +1 -1
  238. package/lib/AWS/RDS/DBParameterGroup.js +4 -1
  239. package/lib/AWS/RDS/DBParameterGroup.js.map +1 -1
  240. package/lib/AWS/Region.d.ts.map +1 -1
  241. package/lib/AWS/Region.js +6 -1
  242. package/lib/AWS/Region.js.map +1 -1
  243. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  244. package/lib/AWS/S3/Bucket.js +46 -26
  245. package/lib/AWS/S3/Bucket.js.map +1 -1
  246. package/lib/AlchemyContext.d.ts +7 -0
  247. package/lib/AlchemyContext.d.ts.map +1 -1
  248. package/lib/AlchemyContext.js.map +1 -1
  249. package/lib/Apply.js +2 -2
  250. package/lib/Apply.js.map +1 -1
  251. package/lib/Axiom/Chart.d.ts +9 -1
  252. package/lib/Axiom/Chart.d.ts.map +1 -1
  253. package/lib/Bundle/Bundle.d.ts +1 -0
  254. package/lib/Bundle/Bundle.d.ts.map +1 -1
  255. package/lib/Bundle/Bundle.js +1 -1
  256. package/lib/Bundle/Bundle.js.map +1 -1
  257. package/lib/Bundle/TempRoot.d.ts +9 -0
  258. package/lib/Bundle/TempRoot.d.ts.map +1 -1
  259. package/lib/Bundle/TempRoot.js +22 -0
  260. package/lib/Bundle/TempRoot.js.map +1 -1
  261. package/lib/Bundle/Vite.d.ts +20 -0
  262. package/lib/Bundle/Vite.d.ts.map +1 -0
  263. package/lib/Bundle/Vite.js +130 -0
  264. package/lib/Bundle/Vite.js.map +1 -0
  265. package/lib/Bundle/index.d.ts +0 -1
  266. package/lib/Bundle/index.d.ts.map +1 -1
  267. package/lib/Bundle/index.js +0 -1
  268. package/lib/Bundle/index.js.map +1 -1
  269. package/lib/Cli/Event.d.ts +1 -1
  270. package/lib/Cli/Event.d.ts.map +1 -1
  271. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  272. package/lib/Cli/LoggingCli.js +3 -0
  273. package/lib/Cli/LoggingCli.js.map +1 -1
  274. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  275. package/lib/Cli/commands/_shared.js +7 -1
  276. package/lib/Cli/commands/_shared.js.map +1 -1
  277. package/lib/Cli/commands/cloudflare.d.ts +2 -2
  278. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  279. package/lib/Cli/commands/cloudflare.js +21 -2
  280. package/lib/Cli/commands/cloudflare.js.map +1 -1
  281. package/lib/Cli/commands/deploy.d.ts.map +1 -1
  282. package/lib/Cli/commands/deploy.js +4 -1
  283. package/lib/Cli/commands/deploy.js.map +1 -1
  284. package/lib/Cli/tui/components/PlanProgress.js +5 -3
  285. package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
  286. package/lib/Cloudflare/AI/Gateway.d.ts +1 -1
  287. package/lib/Cloudflare/AI/Gateway.js +1 -1
  288. package/lib/Cloudflare/AI/Search.d.ts +1 -1
  289. package/lib/Cloudflare/AI/Search.js +1 -1
  290. package/lib/Cloudflare/AI/SearchInstance.d.ts +1 -1
  291. package/lib/Cloudflare/AI/SearchInstance.js +1 -1
  292. package/lib/Cloudflare/AI/SearchNamespace.d.ts +1 -1
  293. package/lib/Cloudflare/AI/SearchNamespace.js +1 -1
  294. package/lib/Cloudflare/AI/SearchToken.d.ts.map +1 -1
  295. package/lib/Cloudflare/AI/SearchToken.js +6 -1
  296. package/lib/Cloudflare/AI/SearchToken.js.map +1 -1
  297. package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
  298. package/lib/Cloudflare/Access/Application.js +51 -11
  299. package/lib/Cloudflare/Access/Application.js.map +1 -1
  300. package/lib/Cloudflare/Alerting/Webhook.d.ts.map +1 -1
  301. package/lib/Cloudflare/Alerting/Webhook.js +9 -2
  302. package/lib/Cloudflare/Alerting/Webhook.js.map +1 -1
  303. package/lib/Cloudflare/AnalyticsEngine/WriteDataset.d.ts +2 -2
  304. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
  305. package/lib/Cloudflare/ApiToken/AccountApiToken.js +5 -1
  306. package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
  307. package/lib/Cloudflare/Auth/AuthProvider.js +1 -1
  308. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  309. package/lib/Cloudflare/Containers/Container.d.ts +46 -4
  310. package/lib/Cloudflare/Containers/Container.d.ts.map +1 -1
  311. package/lib/Cloudflare/Containers/Container.js +27 -3
  312. package/lib/Cloudflare/Containers/Container.js.map +1 -1
  313. package/lib/Cloudflare/Containers/ContainerApplication.d.ts +25 -19
  314. package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
  315. package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
  316. package/lib/Cloudflare/Containers/ContainerBundle.d.ts +1 -2
  317. package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
  318. package/lib/Cloudflare/Containers/ContainerBundle.js +2 -4
  319. package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
  320. package/lib/Cloudflare/Containers/ContainerPlatform.js +2 -2
  321. package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
  322. package/lib/Cloudflare/Containers/ContainerProvider.d.ts +2 -1
  323. package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
  324. package/lib/Cloudflare/Containers/ContainerProvider.js +51 -35
  325. package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
  326. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts +3 -1
  327. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
  328. package/lib/Cloudflare/Containers/LocalContainerProvider.js +11 -4
  329. package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
  330. package/lib/Cloudflare/Containers/StartContainer.d.ts.map +1 -1
  331. package/lib/Cloudflare/Containers/StartContainer.js +222 -15
  332. package/lib/Cloudflare/Containers/StartContainer.js.map +1 -1
  333. package/lib/Cloudflare/DNS/ReadDns.d.ts +1 -1
  334. package/lib/Cloudflare/DNS/ReadWriteDns.d.ts +1 -1
  335. package/lib/Cloudflare/DNS/WriteDns.d.ts +1 -1
  336. package/lib/Cloudflare/Flagship/App.d.ts +1 -1
  337. package/lib/Cloudflare/Flagship/App.js +1 -1
  338. package/lib/Cloudflare/Images/Images.d.ts +1 -1
  339. package/lib/Cloudflare/Local.js +2 -1
  340. package/lib/Cloudflare/Local.js.map +1 -1
  341. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  342. package/lib/Cloudflare/Providers.js +2 -1
  343. package/lib/Cloudflare/Providers.js.map +1 -1
  344. package/lib/Cloudflare/Queues/Consumer.d.ts +2 -2
  345. package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
  346. package/lib/Cloudflare/Queues/Consumer.js +21 -13
  347. package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
  348. package/lib/Cloudflare/Queues/Queue.d.ts +1 -1
  349. package/lib/Cloudflare/Queues/Queue.js +1 -1
  350. package/lib/Cloudflare/R2/Bucket.d.ts +2 -2
  351. package/lib/Cloudflare/R2/Bucket.js +2 -2
  352. package/lib/Cloudflare/StateStore/Api.d.ts +4 -1
  353. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
  354. package/lib/Cloudflare/StateStore/Api.js +6 -4
  355. package/lib/Cloudflare/StateStore/Api.js.map +1 -1
  356. package/lib/Cloudflare/StateStore/State.d.ts +28 -2
  357. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  358. package/lib/Cloudflare/StateStore/State.js +122 -19
  359. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  360. package/lib/Cloudflare/Website/Vite.d.ts +26 -23
  361. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  362. package/lib/Cloudflare/Website/Vite.js +25 -7
  363. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  364. package/lib/Cloudflare/Workers/Binding.d.ts +1 -1
  365. package/lib/Cloudflare/Workers/Browser.d.ts +1 -1
  366. package/lib/Cloudflare/Workers/DurableObject.d.ts +54 -3
  367. package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
  368. package/lib/Cloudflare/Workers/DurableObject.js +54 -3
  369. package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
  370. package/lib/Cloudflare/Workers/InferEnv.d.ts +4 -2
  371. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  372. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  373. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +55 -6
  374. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  375. package/lib/Cloudflare/Workers/RpcDurableObject.d.ts +3 -3
  376. package/lib/Cloudflare/Workers/RpcDurableObject.js +3 -3
  377. package/lib/Cloudflare/Workers/RpcWorker.d.ts +4 -4
  378. package/lib/Cloudflare/Workers/RpcWorker.js +4 -4
  379. package/lib/Cloudflare/Workers/ScheduledEvents.js +1 -1
  380. package/lib/Cloudflare/Workers/ScheduledEvents.js.map +1 -1
  381. package/lib/Cloudflare/Workers/VersionMetadata.d.ts +1 -1
  382. package/lib/Cloudflare/Workers/Vite.d.ts +1 -4
  383. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  384. package/lib/Cloudflare/Workers/Vite.js +19 -38
  385. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  386. package/lib/Cloudflare/Workers/Worker.d.ts +73 -13
  387. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  388. package/lib/Cloudflare/Workers/Worker.js +9 -9
  389. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  390. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +2 -1
  391. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  392. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +31 -0
  393. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  394. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +7 -1
  395. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  396. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  397. package/lib/Cloudflare/Workers/WorkerLoader.d.ts +1 -1
  398. package/lib/Cloudflare/Workers/WorkerLoader.js +1 -1
  399. package/lib/Cloudflare/Workers/WorkerProvider.d.ts +10 -0
  400. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  401. package/lib/Cloudflare/Workers/WorkerProvider.js +240 -60
  402. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  403. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +1 -1
  404. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  405. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts +44 -2
  406. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts.map +1 -1
  407. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js +44 -2
  408. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js.map +1 -1
  409. package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts +77 -0
  410. package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts.map +1 -0
  411. package/lib/Cloudflare/WorkersForPlatforms/Get.js +9 -0
  412. package/lib/Cloudflare/WorkersForPlatforms/Get.js.map +1 -0
  413. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts +9 -0
  414. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts.map +1 -0
  415. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js +43 -0
  416. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js.map +1 -0
  417. package/lib/Cloudflare/WorkersForPlatforms/index.d.ts +2 -0
  418. package/lib/Cloudflare/WorkersForPlatforms/index.d.ts.map +1 -1
  419. package/lib/Cloudflare/WorkersForPlatforms/index.js +2 -0
  420. package/lib/Cloudflare/WorkersForPlatforms/index.js.map +1 -1
  421. package/lib/Cloudflare/Workflows/Workflow.d.ts +107 -1
  422. package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
  423. package/lib/Cloudflare/Workflows/Workflow.js +93 -6
  424. package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
  425. package/lib/Command/Build.d.ts.map +1 -1
  426. package/lib/Command/Build.js +24 -1
  427. package/lib/Command/Build.js.map +1 -1
  428. package/lib/Docker/Container.d.ts +156 -0
  429. package/lib/Docker/Container.d.ts.map +1 -0
  430. package/lib/Docker/Container.js +221 -0
  431. package/lib/Docker/Container.js.map +1 -0
  432. package/lib/Docker/Docker.d.ts +199 -0
  433. package/lib/Docker/Docker.d.ts.map +1 -0
  434. package/lib/Docker/Docker.js +224 -0
  435. package/lib/Docker/Docker.js.map +1 -0
  436. package/lib/Docker/Image.d.ts +109 -0
  437. package/lib/Docker/Image.d.ts.map +1 -0
  438. package/lib/Docker/Image.js +150 -0
  439. package/lib/Docker/Image.js.map +1 -0
  440. package/lib/Docker/Network.d.ts +61 -0
  441. package/lib/Docker/Network.d.ts.map +1 -0
  442. package/lib/Docker/Network.js +99 -0
  443. package/lib/Docker/Network.js.map +1 -0
  444. package/lib/Docker/Providers.d.ts +15 -0
  445. package/lib/Docker/Providers.d.ts.map +1 -0
  446. package/lib/Docker/Providers.js +18 -0
  447. package/lib/Docker/Providers.js.map +1 -0
  448. package/lib/Docker/Registry.d.ts +30 -0
  449. package/lib/Docker/Registry.d.ts.map +1 -0
  450. package/lib/Docker/Registry.js +44 -0
  451. package/lib/Docker/Registry.js.map +1 -0
  452. package/lib/Docker/RemoteImage.d.ts +102 -0
  453. package/lib/Docker/RemoteImage.d.ts.map +1 -0
  454. package/lib/Docker/RemoteImage.js +123 -0
  455. package/lib/Docker/RemoteImage.js.map +1 -0
  456. package/lib/Docker/Volume.d.ts +81 -0
  457. package/lib/Docker/Volume.d.ts.map +1 -0
  458. package/lib/Docker/Volume.js +107 -0
  459. package/lib/Docker/Volume.js.map +1 -0
  460. package/lib/Docker/index.d.ts +9 -0
  461. package/lib/Docker/index.d.ts.map +1 -0
  462. package/lib/Docker/index.js +8 -0
  463. package/lib/Docker/index.js.map +1 -0
  464. package/lib/Local/ProviderLayer.d.ts +1 -0
  465. package/lib/Local/ProviderLayer.d.ts.map +1 -1
  466. package/lib/Local/ProviderLayer.js +1 -0
  467. package/lib/Local/ProviderLayer.js.map +1 -1
  468. package/lib/Neon/Branch.d.ts +5 -0
  469. package/lib/Neon/Branch.d.ts.map +1 -1
  470. package/lib/Neon/Branch.js +8 -1
  471. package/lib/Neon/Branch.js.map +1 -1
  472. package/lib/Neon/Project.d.ts +5 -0
  473. package/lib/Neon/Project.d.ts.map +1 -1
  474. package/lib/Neon/Project.js +6 -0
  475. package/lib/Neon/Project.js.map +1 -1
  476. package/lib/Plan.d.ts.map +1 -1
  477. package/lib/Plan.js +3 -1
  478. package/lib/Plan.js.map +1 -1
  479. package/lib/Planetscale/Branch.d.ts +10 -0
  480. package/lib/Planetscale/Branch.d.ts.map +1 -1
  481. package/lib/Planetscale/Branch.js +43 -1
  482. package/lib/Planetscale/Branch.js.map +1 -1
  483. package/lib/Planetscale/Postgres/PostgresBranch.d.ts +5 -0
  484. package/lib/Planetscale/Postgres/PostgresBranch.d.ts.map +1 -1
  485. package/lib/Planetscale/Postgres/PostgresBranch.js.map +1 -1
  486. package/lib/Planetscale/Postgres/PostgresRole.d.ts +3 -1
  487. package/lib/Planetscale/Postgres/PostgresRole.d.ts.map +1 -1
  488. package/lib/Planetscale/Postgres/PostgresRole.js +8 -0
  489. package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -1
  490. package/lib/Planetscale/Util.d.ts +3 -124
  491. package/lib/Planetscale/Util.d.ts.map +1 -1
  492. package/lib/Platform.d.ts +2 -1
  493. package/lib/Platform.d.ts.map +1 -1
  494. package/lib/Platform.js +37 -10
  495. package/lib/Platform.js.map +1 -1
  496. package/lib/Provider.d.ts.map +1 -1
  497. package/lib/Provider.js.map +1 -1
  498. package/lib/Resource.d.ts.map +1 -1
  499. package/lib/Resource.js +3 -1
  500. package/lib/Resource.js.map +1 -1
  501. package/lib/Rpc.d.ts +1 -1
  502. package/lib/Server/Process.d.ts +29 -1
  503. package/lib/Server/Process.d.ts.map +1 -1
  504. package/lib/Server/Process.js +48 -1
  505. package/lib/Server/Process.js.map +1 -1
  506. package/lib/Stack.d.ts +4 -1
  507. package/lib/Stack.d.ts.map +1 -1
  508. package/lib/Stack.js +1 -1
  509. package/lib/Stack.js.map +1 -1
  510. package/lib/State/HttpStateApi.d.ts +10 -10
  511. package/lib/Tags.d.ts +6 -0
  512. package/lib/Tags.d.ts.map +1 -1
  513. package/lib/Tags.js +6 -0
  514. package/lib/Tags.js.map +1 -1
  515. package/lib/Telemetry/Attributes.d.ts.map +1 -1
  516. package/lib/Telemetry/Attributes.js +6 -15
  517. package/lib/Telemetry/Attributes.js.map +1 -1
  518. package/lib/Test/Bun.d.ts +1 -0
  519. package/lib/Test/Bun.d.ts.map +1 -1
  520. package/lib/Test/Bun.js +1 -0
  521. package/lib/Test/Bun.js.map +1 -1
  522. package/lib/Test/Core.d.ts +1 -0
  523. package/lib/Test/Core.d.ts.map +1 -1
  524. package/lib/Test/Core.js +3 -2
  525. package/lib/Test/Core.js.map +1 -1
  526. package/lib/Test/Vitest.d.ts.map +1 -1
  527. package/lib/Test/Vitest.js +1 -0
  528. package/lib/Test/Vitest.js.map +1 -1
  529. package/lib/Util/effect.js.map +1 -1
  530. package/lib/Util/proxy-chain.d.ts +1 -0
  531. package/lib/Util/proxy-chain.d.ts.map +1 -1
  532. package/lib/Util/proxy-chain.js +1 -0
  533. package/lib/Util/proxy-chain.js.map +1 -1
  534. package/package.json +26 -10
  535. package/src/AWS/AuthProvider.ts +32 -17
  536. package/src/AWS/AutoScaling/LaunchTemplate.ts +1 -1
  537. package/src/AWS/CloudWatch/Dashboard.ts +4 -1
  538. package/src/AWS/Credentials.ts +178 -2
  539. package/src/AWS/EC2/Image.ts +4 -1
  540. package/src/AWS/EC2/Instance.ts +9 -6
  541. package/src/AWS/EC2/KeyPair.ts +319 -0
  542. package/src/AWS/EC2/NetworkAcl.ts +4 -1
  543. package/src/AWS/EC2/SecurityGroup.ts +4 -1
  544. package/src/AWS/EC2/SecurityGroupRule.ts +14 -5
  545. package/src/AWS/EC2/Subnet.ts +49 -4
  546. package/src/AWS/EC2/hosted.ts +93 -93
  547. package/src/AWS/EC2/index.ts +1 -0
  548. package/src/AWS/ECS/Task.ts +96 -78
  549. package/src/AWS/IAM/Role.ts +132 -22
  550. package/src/AWS/Lambda/CreateAuthToken.ts +43 -0
  551. package/src/AWS/Lambda/CreateAuthTokenHttp.ts +11 -0
  552. package/src/AWS/Lambda/CreateShellAuthToken.ts +42 -0
  553. package/src/AWS/Lambda/CreateShellAuthTokenHttp.ts +11 -0
  554. package/src/AWS/Lambda/DeleteMicrovmImageVersion.ts +36 -0
  555. package/src/AWS/Lambda/DeleteMicrovmImageVersionHttp.ts +12 -0
  556. package/src/AWS/Lambda/Function.ts +36 -9
  557. package/src/AWS/Lambda/GetMicrovm.ts +32 -0
  558. package/src/AWS/Lambda/GetMicrovmHttp.ts +13 -0
  559. package/src/AWS/Lambda/GetMicrovmImage.ts +40 -0
  560. package/src/AWS/Lambda/GetMicrovmImageBuild.ts +35 -0
  561. package/src/AWS/Lambda/GetMicrovmImageBuildHttp.ts +12 -0
  562. package/src/AWS/Lambda/GetMicrovmImageHttp.ts +12 -0
  563. package/src/AWS/Lambda/GetMicrovmImageVersion.ts +35 -0
  564. package/src/AWS/Lambda/GetMicrovmImageVersionHttp.ts +12 -0
  565. package/src/AWS/Lambda/ListManagedMicrovmImageVersions.ts +31 -0
  566. package/src/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.ts +10 -0
  567. package/src/AWS/Lambda/ListManagedMicrovmImages.ts +31 -0
  568. package/src/AWS/Lambda/ListManagedMicrovmImagesHttp.ts +10 -0
  569. package/src/AWS/Lambda/ListMicrovmImageBuilds.ts +36 -0
  570. package/src/AWS/Lambda/ListMicrovmImageBuildsHttp.ts +12 -0
  571. package/src/AWS/Lambda/ListMicrovmImageVersions.ts +36 -0
  572. package/src/AWS/Lambda/ListMicrovmImageVersionsHttp.ts +12 -0
  573. package/src/AWS/Lambda/ListMicrovms.ts +40 -0
  574. package/src/AWS/Lambda/ListMicrovmsHttp.ts +12 -0
  575. package/src/AWS/Lambda/MicrovmBinding.ts +442 -0
  576. package/src/AWS/Lambda/MicrovmBundle.ts +256 -0
  577. package/src/AWS/Lambda/MicrovmImage.ts +569 -0
  578. package/src/AWS/Lambda/MicrovmProvider.ts +597 -0
  579. package/src/AWS/Lambda/MicrovmRpc.ts +75 -0
  580. package/src/AWS/Lambda/MicrovmRuntimeContext.ts +110 -0
  581. package/src/AWS/Lambda/NetworkConnector.ts +529 -0
  582. package/src/AWS/Lambda/QueueEventSource.ts +1 -0
  583. package/src/AWS/Lambda/ResumeMicrovm.ts +37 -0
  584. package/src/AWS/Lambda/ResumeMicrovmHttp.ts +11 -0
  585. package/src/AWS/Lambda/RunMicrovm.ts +45 -0
  586. package/src/AWS/Lambda/RunMicrovmHttp.ts +13 -0
  587. package/src/AWS/Lambda/SuspendMicrovm.ts +37 -0
  588. package/src/AWS/Lambda/SuspendMicrovmHttp.ts +11 -0
  589. package/src/AWS/Lambda/TerminateMicrovm.ts +38 -0
  590. package/src/AWS/Lambda/TerminateMicrovmHttp.ts +11 -0
  591. package/src/AWS/Lambda/UpdateMicrovmImageVersion.ts +36 -0
  592. package/src/AWS/Lambda/UpdateMicrovmImageVersionHttp.ts +12 -0
  593. package/src/AWS/Lambda/index.ts +38 -0
  594. package/src/AWS/Providers.ts +147 -133
  595. package/src/AWS/RDS/DBClusterParameterGroup.ts +5 -1
  596. package/src/AWS/RDS/DBParameterGroup.ts +5 -1
  597. package/src/AWS/Region.ts +9 -2
  598. package/src/AWS/S3/Bucket.ts +71 -36
  599. package/src/AlchemyContext.ts +7 -0
  600. package/src/Apply.ts +4 -2
  601. package/src/Axiom/Chart.ts +9 -1
  602. package/src/Bundle/Bundle.ts +1 -1
  603. package/src/Bundle/TempRoot.ts +22 -0
  604. package/src/Bundle/Vite.ts +204 -0
  605. package/src/Bundle/index.ts +0 -1
  606. package/src/Cli/Event.ts +1 -0
  607. package/src/Cli/LoggingCli.ts +3 -0
  608. package/src/Cli/commands/_shared.ts +7 -1
  609. package/src/Cli/commands/cloudflare.ts +37 -2
  610. package/src/Cli/commands/deploy.ts +4 -1
  611. package/src/Cli/tui/components/PlanProgress.tsx +5 -3
  612. package/src/Cloudflare/AI/Gateway.ts +1 -1
  613. package/src/Cloudflare/AI/Search.ts +1 -1
  614. package/src/Cloudflare/AI/SearchInstance.ts +1 -1
  615. package/src/Cloudflare/AI/SearchNamespace.ts +1 -1
  616. package/src/Cloudflare/AI/SearchToken.ts +6 -1
  617. package/src/Cloudflare/Access/Application.ts +61 -10
  618. package/src/Cloudflare/Alerting/Webhook.ts +18 -7
  619. package/src/Cloudflare/AnalyticsEngine/WriteDataset.ts +2 -2
  620. package/src/Cloudflare/ApiToken/AccountApiToken.ts +4 -0
  621. package/src/Cloudflare/Auth/AuthProvider.ts +1 -1
  622. package/src/Cloudflare/Containers/Container.ts +43 -4
  623. package/src/Cloudflare/Containers/ContainerApplication.ts +24 -18
  624. package/src/Cloudflare/Containers/ContainerBundle.ts +2 -4
  625. package/src/Cloudflare/Containers/ContainerPlatform.ts +3 -3
  626. package/src/Cloudflare/Containers/ContainerProvider.ts +50 -42
  627. package/src/Cloudflare/Containers/LocalContainerProvider.ts +11 -4
  628. package/src/Cloudflare/Containers/StartContainer.ts +316 -32
  629. package/src/Cloudflare/DNS/ReadDns.ts +1 -1
  630. package/src/Cloudflare/DNS/ReadWriteDns.ts +1 -1
  631. package/src/Cloudflare/DNS/WriteDns.ts +1 -1
  632. package/src/Cloudflare/Flagship/App.ts +1 -1
  633. package/src/Cloudflare/Images/Images.ts +1 -1
  634. package/src/Cloudflare/Local.ts +2 -0
  635. package/src/Cloudflare/Providers.ts +2 -0
  636. package/src/Cloudflare/Queues/Consumer.ts +21 -12
  637. package/src/Cloudflare/Queues/Queue.ts +1 -1
  638. package/src/Cloudflare/R2/Bucket.ts +2 -2
  639. package/src/Cloudflare/StateStore/Api.ts +6 -4
  640. package/src/Cloudflare/StateStore/State.ts +192 -20
  641. package/src/Cloudflare/Website/Vite.ts +29 -24
  642. package/src/Cloudflare/Workers/Binding.ts +1 -1
  643. package/src/Cloudflare/Workers/Browser.ts +1 -1
  644. package/src/Cloudflare/Workers/DurableObject.ts +54 -3
  645. package/src/Cloudflare/Workers/InferEnv.ts +47 -36
  646. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +54 -7
  647. package/src/Cloudflare/Workers/RpcDurableObject.ts +3 -3
  648. package/src/Cloudflare/Workers/RpcWorker.ts +4 -4
  649. package/src/Cloudflare/Workers/ScheduledEvents.ts +1 -1
  650. package/src/Cloudflare/Workers/VersionMetadata.ts +1 -1
  651. package/src/Cloudflare/Workers/Vite.ts +21 -40
  652. package/src/Cloudflare/Workers/Worker.ts +74 -13
  653. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +30 -0
  654. package/src/Cloudflare/Workers/WorkerBinding.ts +5 -1
  655. package/src/Cloudflare/Workers/WorkerLoader.ts +1 -1
  656. package/src/Cloudflare/Workers/WorkerProvider.ts +470 -200
  657. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +1 -1
  658. package/src/Cloudflare/WorkersForPlatforms/DispatchNamespace.ts +44 -2
  659. package/src/Cloudflare/WorkersForPlatforms/Get.ts +87 -0
  660. package/src/Cloudflare/WorkersForPlatforms/GetBinding.ts +63 -0
  661. package/src/Cloudflare/WorkersForPlatforms/index.ts +2 -0
  662. package/src/Cloudflare/Workflows/Workflow.ts +207 -78
  663. package/src/Command/Build.ts +32 -1
  664. package/src/Docker/Container.ts +413 -0
  665. package/src/Docker/Docker.ts +564 -0
  666. package/src/Docker/Image.ts +265 -0
  667. package/src/Docker/Network.ts +178 -0
  668. package/src/Docker/Providers.ts +37 -0
  669. package/src/Docker/Registry.ts +63 -0
  670. package/src/Docker/RemoteImage.ts +215 -0
  671. package/src/Docker/Volume.ts +187 -0
  672. package/src/Docker/index.ts +8 -0
  673. package/src/Local/ProviderLayer.ts +2 -0
  674. package/src/Neon/Branch.ts +15 -1
  675. package/src/Neon/Project.ts +13 -0
  676. package/src/Plan.ts +3 -1
  677. package/src/Planetscale/Branch.ts +70 -0
  678. package/src/Planetscale/Postgres/PostgresBranch.ts +6 -0
  679. package/src/Planetscale/Postgres/PostgresRole.ts +11 -1
  680. package/src/Platform.ts +50 -12
  681. package/src/Provider.ts +1 -1
  682. package/src/Resource.ts +9 -3
  683. package/src/Rpc.ts +1 -1
  684. package/src/Server/Process.ts +82 -1
  685. package/src/Stack.ts +11 -3
  686. package/src/Tags.ts +12 -0
  687. package/src/Telemetry/Attributes.ts +9 -12
  688. package/src/Test/Bun.ts +2 -0
  689. package/src/Test/Core.ts +13 -8
  690. package/src/Test/Vitest.ts +1 -0
  691. package/src/Util/effect.ts +1 -1
  692. package/src/Util/proxy-chain.ts +1 -0
  693. package/lib/Bundle/Docker.d.ts +0 -75
  694. package/lib/Bundle/Docker.d.ts.map +0 -1
  695. package/lib/Bundle/Docker.js +0 -148
  696. package/lib/Bundle/Docker.js.map +0 -1
  697. package/src/Bundle/Docker.ts +0 -229
@@ -1,9 +1,29 @@
1
- import { Credentials } from "@distilled.cloud/aws/Credentials";
1
+ import {
2
+ AwsCredentialProviderError,
3
+ Credentials,
4
+ type ResolvedCredentials,
5
+ } from "@distilled.cloud/aws/Credentials";
6
+ import { Region } from "@distilled.cloud/aws/Region";
7
+ import * as sts from "@distilled.cloud/aws/sts";
2
8
  import * as Effect from "effect/Effect";
3
9
  import * as Layer from "effect/Layer";
10
+ import * as Redacted from "effect/Redacted";
11
+ import * as Ref from "effect/Ref";
12
+ import * as Schedule from "effect/Schedule";
13
+ import * as Semaphore from "effect/Semaphore";
14
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
4
15
  import { AWSEnvironment } from "./Environment.ts";
5
16
 
6
- export { Credentials } from "@distilled.cloud/aws/Credentials";
17
+ /**
18
+ * Refresh assumed-role credentials this long before they actually expire, so a
19
+ * request never signs with credentials on the verge of expiring.
20
+ */
21
+ const CREDENTIAL_REFRESH_WINDOW_MS = 5 * 60 * 1000;
22
+
23
+ // NB: do not re-export `fromEnv` here — it is unavailable under the
24
+ // browser/workerd bundle condition (`credentials.browser`), which would break
25
+ // any Cloudflare Worker that transitively imports this module.
26
+ export { Credentials, fromCredentials } from "@distilled.cloud/aws/Credentials";
7
27
 
8
28
  declare module "@distilled.cloud/aws/Credentials" {
9
29
  interface Credentials {
@@ -22,3 +42,159 @@ export const fromEnvironment = Layer.effect(
22
42
  return Effect.flatMap(yield* AWSEnvironment, (env) => env.credentials);
23
43
  }),
24
44
  );
45
+
46
+ /**
47
+ * Build a single-flight, expiry-aware assumed-role credentials **resolver**,
48
+ * constructing the cache (a `Ref` + a 1-permit refresh semaphore) exactly once.
49
+ *
50
+ * The OUTER effect builds the cache and returns the INNER resolver; run the
51
+ * outer ONCE (e.g. when a binding initializes) and reuse the returned resolver
52
+ * for every request. That is what makes the cache actually cache: each request
53
+ * runs the shared resolver, which only calls `AssumeRole` when the cached
54
+ * credentials are missing or within the refresh window — never per request.
55
+ *
56
+ * `roleArn` and `base` are accepted as effects/layers so the long-lived signing
57
+ * credentials and role ARN can be read lazily at refresh time (e.g. from a
58
+ * deployed Worker's environment), rather than captured eagerly.
59
+ */
60
+ export const makeAssumeRoleResolver = (options: {
61
+ /** ARN of the IAM Role to assume (resolved lazily on each refresh). */
62
+ readonly roleArn: Effect.Effect<string>;
63
+ /** Layer supplying the long-lived credentials used to sign `AssumeRole`. */
64
+ readonly base: Layer.Layer<Credentials>;
65
+ /** STS role session name. @default "alchemy-microvm" */
66
+ readonly roleSessionName?: string;
67
+ /**
68
+ * Region for the STS endpoint. STS `AssumeRole` is global, so this only
69
+ * selects the regional STS endpoint. @default "us-east-1"
70
+ */
71
+ readonly region?: string;
72
+ }): Effect.Effect<
73
+ Effect.Effect<ResolvedCredentials, AwsCredentialProviderError>
74
+ > =>
75
+ Effect.gen(function* () {
76
+ const resolve = Effect.gen(function* () {
77
+ const roleArn = yield* options.roleArn;
78
+ const response = yield* sts
79
+ .assumeRole({
80
+ RoleArn: roleArn,
81
+ RoleSessionName: options.roleSessionName ?? "alchemy-microvm",
82
+ })
83
+ .pipe(
84
+ // A freshly-created IAM user/role/access-key is eventually
85
+ // consistent: the first `AssumeRole` calls can fail with
86
+ // `AccessDenied` until the trust policy + permissions propagate.
87
+ // Retry those for up to ~30s.
88
+ Effect.retry({
89
+ while: (error) =>
90
+ (error as { name?: string }).name === "AccessDeniedException" ||
91
+ (error as { _tag?: string })._tag === "AccessDeniedException",
92
+ schedule: Schedule.exponential("1 second"),
93
+ times: 8,
94
+ }),
95
+ );
96
+ const creds = response.Credentials;
97
+ if (!creds) {
98
+ return yield* new AwsCredentialProviderError({
99
+ message: "STS AssumeRole returned no credentials",
100
+ provider: "assume-role",
101
+ });
102
+ }
103
+ return {
104
+ accessKeyId: Redacted.make(creds.AccessKeyId),
105
+ secretAccessKey: Redacted.isRedacted(creds.SecretAccessKey)
106
+ ? creds.SecretAccessKey
107
+ : Redacted.make(creds.SecretAccessKey),
108
+ sessionToken: Redacted.make(creds.SessionToken),
109
+ expiration: creds.Expiration?.getTime(),
110
+ } satisfies ResolvedCredentials;
111
+ }).pipe(
112
+ // Sign AssumeRole with the static base credentials, and provide a
113
+ // (regional) STS endpoint + HttpClient so the resolve effect is
114
+ // self-contained (`R = never`).
115
+ Effect.provide(options.base),
116
+ Effect.provide(
117
+ Layer.succeed(Region, Effect.succeed(options.region ?? "us-east-1")),
118
+ ),
119
+ Effect.provide(FetchHttpClient.layer),
120
+ Effect.mapError((cause) =>
121
+ cause instanceof AwsCredentialProviderError
122
+ ? cause
123
+ : new AwsCredentialProviderError({
124
+ message: "STS AssumeRole failed",
125
+ provider: "assume-role",
126
+ cause,
127
+ }),
128
+ ),
129
+ );
130
+
131
+ // Single-flight, expiry-aware cache. A `Ref` holds the last-resolved
132
+ // credentials; a 1-permit semaphore serializes refreshes so that N
133
+ // concurrent callers observing stale/expiring credentials trigger
134
+ // exactly ONE `AssumeRole` call (the rest await the permit and then see
135
+ // the freshly-cached value via the re-check inside the critical section).
136
+ const cache = yield* Ref.make<ResolvedCredentials | undefined>(undefined);
137
+ const refreshLock = yield* Semaphore.make(1);
138
+
139
+ const isFresh = (
140
+ creds: ResolvedCredentials | undefined,
141
+ ): creds is ResolvedCredentials =>
142
+ creds !== undefined &&
143
+ (creds.expiration === undefined ||
144
+ creds.expiration - CREDENTIAL_REFRESH_WINDOW_MS > Date.now());
145
+
146
+ return Effect.gen(function* () {
147
+ const current = yield* Ref.get(cache);
148
+ // Fast path: cached and not within the refresh window.
149
+ if (isFresh(current)) return current;
150
+ // Slow path: acquire the refresh permit, re-check (another fiber may
151
+ // have refreshed while we waited), then resolve once and cache.
152
+ return yield* refreshLock.withPermits(1)(
153
+ Effect.gen(function* () {
154
+ const latest = yield* Ref.get(cache);
155
+ if (isFresh(latest)) return latest;
156
+ const resolved = yield* resolve;
157
+ yield* Ref.set(cache, resolved);
158
+ return resolved;
159
+ }),
160
+ );
161
+ });
162
+ });
163
+
164
+ /**
165
+ * A `Credentials` layer that assumes an IAM Role via STS and serves the
166
+ * returned temporary credentials (cached until shortly before expiry).
167
+ *
168
+ * `base` supplies the long-lived credentials used to *sign* the `AssumeRole`
169
+ * call — typically static IAM-user access keys (see
170
+ * {@link fromCredentials}). The `AssumeRole` request itself is signed against
171
+ * `base`, while the temporary credentials it returns become the resolved
172
+ * `Credentials` for every downstream AWS call.
173
+ *
174
+ * The cache is built once when the layer is constructed; build/provide this
175
+ * layer ONCE and reuse it. To share the same cache across many `Effect.provide`
176
+ * sites without re-providing the layer, build {@link makeAssumeRoleResolver}
177
+ * directly and supply the resolver via `Layer.succeed(Credentials, resolver)`.
178
+ */
179
+ export const fromAssumeRole = (options: {
180
+ /** ARN of the IAM Role to assume. */
181
+ readonly roleArn: string;
182
+ /** Static credentials used to sign the `AssumeRole` call. */
183
+ readonly base: Layer.Layer<Credentials>;
184
+ /** STS role session name. @default "alchemy-microvm" */
185
+ readonly roleSessionName?: string;
186
+ /**
187
+ * Region for the STS endpoint. STS `AssumeRole` is global, so this only
188
+ * selects the regional STS endpoint. @default "us-east-1"
189
+ */
190
+ readonly region?: string;
191
+ }): Layer.Layer<Credentials> =>
192
+ Layer.effect(
193
+ Credentials,
194
+ makeAssumeRoleResolver({
195
+ roleArn: Effect.succeed(options.roleArn),
196
+ base: options.base,
197
+ roleSessionName: options.roleSessionName,
198
+ region: options.region,
199
+ }),
200
+ );
@@ -66,7 +66,10 @@ export const amazonLinux2023 = (options?: {
66
66
  }) =>
67
67
  findLatestImage({
68
68
  owners: ["amazon"],
69
- name: ["al2023-ami-*-*"],
69
+ // `al2023-ami-2023.*` selects the standard image. The broader
70
+ // `al2023-ami-*` also matches `al2023-ami-minimal-*`, which ships without
71
+ // the SSM agent and a stripped toolset and frequently sorts newest.
72
+ name: ["al2023-ami-2023.*"],
70
73
  architecture: options?.architecture,
71
74
  description: "Amazon Linux 2023",
72
75
  });
@@ -70,9 +70,10 @@ export interface InstanceProps extends PlatformProps {
70
70
  */
71
71
  securityGroupIds?: Input<SecurityGroupId>[];
72
72
  /**
73
- * Optional EC2 key pair name for SSH access.
73
+ * Optional EC2 key pair name for SSH access. Accepts a reference such as
74
+ * `AWS.EC2.KeyPair(...).keyName`.
74
75
  */
75
- keyName?: string;
76
+ keyName?: Input<string>;
76
77
  /**
77
78
  * Optional IAM instance profile name to attach at launch.
78
79
  */
@@ -290,7 +291,7 @@ export type InstanceRuntimeContext = Ec2HostRuntimeContext;
290
291
  * );
291
292
  *
292
293
  * return {
293
- * main: import.meta.filename,
294
+ * main: import.meta.url,
294
295
  * imageId,
295
296
  * instanceType: "t3.small",
296
297
  * subnetId: subnet.subnetId,
@@ -527,8 +528,10 @@ export const InstanceProvider = () =>
527
528
  ),
528
529
  Effect.retry({
529
530
  while: (error) => error instanceof InstanceStillExists,
530
- schedule: Schedule.exponential("250 millis").pipe(
531
- Schedule.both(Schedule.recurs(8)),
531
+ // Termination (shutting-down -> terminated) can take a couple of
532
+ // minutes; the prior ~64s budget timed out intermittently.
533
+ schedule: Schedule.spaced("5 seconds").pipe(
534
+ Schedule.both(Schedule.recurs(48)),
532
535
  ),
533
536
  }),
534
537
  Effect.catchTag("InvalidInstanceID.NotFound", () => Effect.void),
@@ -553,7 +556,7 @@ export const InstanceProvider = () =>
553
556
  {
554
557
  imageId: news.imageId,
555
558
  instanceType: news.instanceType,
556
- keyName: news.keyName,
559
+ keyName: news.keyName as string | undefined,
557
560
  subnetId: news.subnetId as string | undefined,
558
561
  securityGroupIds: news.securityGroupIds as string[] | undefined,
559
562
  associatePublicIpAddress: news.associatePublicIpAddress,
@@ -0,0 +1,319 @@
1
+ import * as ec2 from "@distilled.cloud/aws/ec2";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Redacted from "effect/Redacted";
4
+ import { Unowned } from "../../AdoptPolicy.ts";
5
+ import { isResolved } from "../../Diff.ts";
6
+ import { createPhysicalName } from "../../PhysicalName.ts";
7
+ import * as Provider from "../../Provider.ts";
8
+ import { Resource } from "../../Resource.ts";
9
+ import {
10
+ createInternalTags,
11
+ createTagsList,
12
+ diffTags,
13
+ hasTags,
14
+ } from "../../Tags.ts";
15
+ import type { Providers } from "../Providers.ts";
16
+
17
+ export type KeyPairId<ID extends string = string> = `key-${ID}`;
18
+
19
+ /** Key algorithm for a generated EC2 key pair. */
20
+ export type KeyPairType = "rsa" | "ed25519";
21
+
22
+ /** Private-key file format for a generated EC2 key pair. */
23
+ export type KeyPairFormat = "pem" | "ppk";
24
+
25
+ export interface KeyPairProps {
26
+ /**
27
+ * Name of the key pair. If omitted, a unique name is generated from the
28
+ * stack, stage, and logical id. Changing it replaces the key pair.
29
+ */
30
+ keyName?: string;
31
+ /**
32
+ * Algorithm used when Alchemy generates the key pair. Ignored when
33
+ * {@link publicKeyMaterial} is supplied (an imported key keeps its own type).
34
+ * Changing it replaces the key pair.
35
+ * @default "rsa"
36
+ */
37
+ keyType?: KeyPairType;
38
+ /**
39
+ * Format of the returned private key material. Only meaningful when Alchemy
40
+ * generates the key pair. Changing it replaces the key pair.
41
+ * @default "pem"
42
+ */
43
+ keyFormat?: KeyPairFormat;
44
+ /**
45
+ * Public key material (PEM or OpenSSH) to import instead of generating a new
46
+ * key pair. When set, AWS stores only the public key — no `privateKey` is
47
+ * returned. Changing it replaces the key pair.
48
+ */
49
+ publicKeyMaterial?: string;
50
+ /**
51
+ * Tags to assign to the key pair. Merged with the alchemy auto-tags.
52
+ */
53
+ tags?: Record<string, string>;
54
+ }
55
+
56
+ export interface KeyPair extends Resource<
57
+ "AWS.EC2.KeyPair",
58
+ KeyPairProps,
59
+ {
60
+ /** The ID of the key pair (e.g. `key-0123456789abcdef0`). */
61
+ keyPairId: KeyPairId;
62
+ /** The name of the key pair. */
63
+ keyName: string;
64
+ /** SHA-1/MD5 fingerprint of the key pair. */
65
+ keyFingerprint: string;
66
+ /** The algorithm of the key pair. */
67
+ keyType: KeyPairType;
68
+ /**
69
+ * The unencrypted PEM/PPK private key material. Only present when Alchemy
70
+ * generated the key pair (not when {@link KeyPairProps.publicKeyMaterial}
71
+ * was imported). AWS returns this exactly once, at create time; it is then
72
+ * persisted as a secret in alchemy state.
73
+ */
74
+ privateKey?: Redacted.Redacted<string>;
75
+ },
76
+ never,
77
+ Providers
78
+ > {}
79
+
80
+ /**
81
+ * An EC2 key pair used to grant SSH access to instances launched with its
82
+ * `keyName`.
83
+ *
84
+ * By default Alchemy asks EC2 to generate the key pair and captures the
85
+ * private key (returned only once, at create time) as a secret in state. Pass
86
+ * {@link KeyPairProps.publicKeyMaterial} to import your own public key instead,
87
+ * in which case no private key is stored.
88
+ *
89
+ * @resource
90
+ * @section Creating a Key Pair
91
+ * @example Generated key pair
92
+ * ```typescript
93
+ * const keyPair = yield* AWS.EC2.KeyPair("DeployKey", {
94
+ * keyType: "ed25519",
95
+ * });
96
+ * // keyPair.keyName -> pass to AWS.EC2.Instance({ keyName })
97
+ * // keyPair.privateKey -> Redacted<string> (the PEM private key)
98
+ * ```
99
+ *
100
+ * @example Imported public key
101
+ * ```typescript
102
+ * const keyPair = yield* AWS.EC2.KeyPair("ImportedKey", {
103
+ * publicKeyMaterial: "ssh-ed25519 AAAAC3Nz... user@host",
104
+ * });
105
+ * ```
106
+ */
107
+ export const KeyPair = Resource<KeyPair>("AWS.EC2.KeyPair");
108
+
109
+ const toKeyName = (id: string, props: { keyName?: string } = {}) =>
110
+ props.keyName
111
+ ? Effect.succeed(props.keyName)
112
+ : createPhysicalName({ id, maxLength: 255 });
113
+
114
+ const asRedacted = (
115
+ material: string | Redacted.Redacted<string> | undefined,
116
+ ): Redacted.Redacted<string> | undefined =>
117
+ material === undefined
118
+ ? undefined
119
+ : Redacted.isRedacted(material)
120
+ ? material
121
+ : Redacted.make(material);
122
+
123
+ export const KeyPairProvider = () =>
124
+ Provider.effect(
125
+ KeyPair,
126
+ Effect.gen(function* () {
127
+ const describeByName = (keyName: string) =>
128
+ ec2.describeKeyPairs({ KeyNames: [keyName] }).pipe(
129
+ Effect.catchTag("InvalidKeyPair.NotFound", () =>
130
+ Effect.succeed({ KeyPairs: [] }),
131
+ ),
132
+ Effect.map((r) => r.KeyPairs?.[0]),
133
+ );
134
+
135
+ return {
136
+ stables: ["keyPairId", "keyName", "keyType"],
137
+
138
+ // Generated key pairs are immutable except for tags. A changed name /
139
+ // type / format / imported material means a different key pair.
140
+ diff: Effect.fn(function* ({ id, olds, news }) {
141
+ if (!isResolved(news)) return;
142
+ const oldName = yield* toKeyName(id, olds ?? {});
143
+ const newName = yield* toKeyName(id, news);
144
+ if (
145
+ oldName !== newName ||
146
+ (olds?.keyType ?? "rsa") !== (news.keyType ?? "rsa") ||
147
+ (olds?.keyFormat ?? "pem") !== (news.keyFormat ?? "pem") ||
148
+ olds?.publicKeyMaterial !== news.publicKeyMaterial
149
+ ) {
150
+ return { action: "replace" } as const;
151
+ }
152
+ }),
153
+
154
+ read: Effect.fn(function* ({ id, olds, output }) {
155
+ const keyName = output?.keyName ?? (yield* toKeyName(id, olds ?? {}));
156
+ const info = yield* describeByName(keyName);
157
+ if (!info?.KeyPairId) return undefined;
158
+ const tags = yield* createInternalTags(id);
159
+ const observedTags: Record<string, string | undefined> =
160
+ Object.fromEntries(
161
+ (info.Tags ?? []).map((t) => [t.Key ?? "", t.Value]),
162
+ );
163
+ if (!hasTags(tags, observedTags)) {
164
+ // Exists but unbranded — let the engine gate adoption behind --adopt.
165
+ return Unowned({
166
+ keyPairId: info.KeyPairId as KeyPairId,
167
+ keyName: info.KeyName ?? keyName,
168
+ keyFingerprint: info.KeyFingerprint ?? "",
169
+ keyType: (info.KeyType ?? "rsa") as KeyPairType,
170
+ // Private key is only available at create time; keep any cached
171
+ // copy from prior state.
172
+ privateKey: output?.privateKey,
173
+ });
174
+ }
175
+ return {
176
+ keyPairId: info.KeyPairId as KeyPairId,
177
+ keyName: info.KeyName ?? keyName,
178
+ keyFingerprint: info.KeyFingerprint ?? output?.keyFingerprint ?? "",
179
+ keyType: (info.KeyType ?? output?.keyType ?? "rsa") as KeyPairType,
180
+ privateKey: output?.privateKey,
181
+ };
182
+ }),
183
+
184
+ list: () =>
185
+ Effect.gen(function* () {
186
+ const result = yield* ec2.describeKeyPairs({});
187
+ return (result.KeyPairs ?? [])
188
+ .filter(
189
+ (
190
+ kp,
191
+ ): kp is ec2.KeyPairInfo & {
192
+ KeyPairId: string;
193
+ KeyName: string;
194
+ } => kp.KeyPairId != null && kp.KeyName != null,
195
+ )
196
+ .filter((kp) =>
197
+ (kp.Tags ?? []).some((t) => t.Key === "alchemy::stack"),
198
+ )
199
+ .map((kp) => ({
200
+ keyPairId: kp.KeyPairId as KeyPairId,
201
+ keyName: kp.KeyName,
202
+ keyFingerprint: kp.KeyFingerprint ?? "",
203
+ keyType: (kp.KeyType ?? "rsa") as KeyPairType,
204
+ privateKey: undefined,
205
+ }));
206
+ }),
207
+
208
+ reconcile: Effect.fn(function* ({ id, news = {}, output, session }) {
209
+ const keyName = output?.keyName ?? (yield* toKeyName(id, news));
210
+ const internalTags = yield* createInternalTags(id);
211
+ const desiredTags = { ...internalTags, ...news.tags };
212
+
213
+ // Observe — is the key pair already present?
214
+ let info = yield* describeByName(keyName);
215
+ let privateKey = output?.privateKey;
216
+
217
+ // Ensure — import or generate when missing.
218
+ if (!info?.KeyPairId) {
219
+ if (news.publicKeyMaterial !== undefined) {
220
+ const imported = yield* ec2
221
+ .importKeyPair({
222
+ KeyName: keyName,
223
+ PublicKeyMaterial: new TextEncoder().encode(
224
+ news.publicKeyMaterial,
225
+ ),
226
+ TagSpecifications: [
227
+ {
228
+ ResourceType: "key-pair",
229
+ Tags: createTagsList(desiredTags),
230
+ },
231
+ ],
232
+ })
233
+ .pipe(
234
+ Effect.catchTag("InvalidKeyPair.Duplicate", () =>
235
+ Effect.succeed(undefined),
236
+ ),
237
+ );
238
+ if (imported?.KeyPairId) {
239
+ info = {
240
+ KeyPairId: imported.KeyPairId,
241
+ KeyName: imported.KeyName,
242
+ KeyFingerprint: imported.KeyFingerprint,
243
+ KeyType: "rsa",
244
+ };
245
+ } else {
246
+ info = yield* describeByName(keyName);
247
+ }
248
+ } else {
249
+ const created = yield* ec2
250
+ .createKeyPair({
251
+ KeyName: keyName,
252
+ KeyType: news.keyType ?? "rsa",
253
+ KeyFormat: news.keyFormat ?? "pem",
254
+ TagSpecifications: [
255
+ {
256
+ ResourceType: "key-pair",
257
+ Tags: createTagsList(desiredTags),
258
+ },
259
+ ],
260
+ })
261
+ .pipe(
262
+ Effect.catchTag("InvalidKeyPair.Duplicate", () =>
263
+ Effect.succeed(undefined),
264
+ ),
265
+ );
266
+ if (created?.KeyPairId) {
267
+ privateKey = asRedacted(created.KeyMaterial) ?? privateKey;
268
+ info = {
269
+ KeyPairId: created.KeyPairId,
270
+ KeyName: created.KeyName,
271
+ KeyFingerprint: created.KeyFingerprint,
272
+ KeyType: (news.keyType ?? "rsa") as KeyPairType,
273
+ };
274
+ } else {
275
+ info = yield* describeByName(keyName);
276
+ }
277
+ }
278
+ }
279
+
280
+ if (!info?.KeyPairId) {
281
+ return yield* Effect.die(
282
+ new Error(`Failed to resolve EC2 key pair '${keyName}'`),
283
+ );
284
+ }
285
+ const keyPairId = info.KeyPairId as KeyPairId;
286
+
287
+ // Sync tags — observed cloud tags vs desired.
288
+ const observedTags = Object.fromEntries(
289
+ (info.Tags ?? []).map((t) => [t.Key!, t.Value!]),
290
+ ) as Record<string, string>;
291
+ const { removed, upsert } = diffTags(observedTags, desiredTags);
292
+ if (removed.length > 0) {
293
+ yield* ec2.deleteTags({
294
+ Resources: [keyPairId],
295
+ Tags: removed.map((key) => ({ Key: key })),
296
+ });
297
+ }
298
+ if (upsert.length > 0) {
299
+ yield* ec2.createTags({ Resources: [keyPairId], Tags: upsert });
300
+ }
301
+
302
+ yield* session.note(`Key pair ${keyName} (${keyPairId})`);
303
+ return {
304
+ keyPairId,
305
+ keyName: info.KeyName ?? keyName,
306
+ keyFingerprint: info.KeyFingerprint ?? "",
307
+ keyType: (info.KeyType ?? news.keyType ?? "rsa") as KeyPairType,
308
+ privateKey,
309
+ };
310
+ }),
311
+
312
+ delete: Effect.fn(function* ({ output }) {
313
+ // `deleteKeyPair` is idempotent — deleting a missing key pair
314
+ // succeeds, so there is no NotFound error to catch.
315
+ yield* ec2.deleteKeyPair({ KeyPairId: output.keyPairId });
316
+ }),
317
+ };
318
+ }),
319
+ );
@@ -234,7 +234,10 @@ export const NetworkAclProvider = () =>
234
234
  Array.from(chunk).flatMap((page) =>
235
235
  (page.NetworkAcls ?? []).filter(
236
236
  (acl): acl is ec2.NetworkAcl & { NetworkAclId: string } =>
237
- acl.NetworkAclId != null,
237
+ acl.NetworkAclId != null &&
238
+ // Each VPC's default NACL is AWS-managed and cannot be
239
+ // deleted (InvalidParameterValue) — don't enumerate it.
240
+ acl.IsDefault !== true,
238
241
  ),
239
242
  ),
240
243
  ),
@@ -476,7 +476,10 @@ export const SecurityGroupProvider = () =>
476
476
  Array.from(chunk).flatMap((page) =>
477
477
  (page.SecurityGroups ?? []).filter(
478
478
  (sg): sg is ec2.SecurityGroup & { GroupId: string } =>
479
- sg.GroupId != null,
479
+ sg.GroupId != null &&
480
+ // Every VPC's `default` group is AWS-managed and can
481
+ // never be deleted (CannotDelete) — don't enumerate it.
482
+ sg.GroupName !== "default",
480
483
  ),
481
484
  ),
482
485
  ),
@@ -515,13 +515,20 @@ export const SecurityGroupRuleProvider = () =>
515
515
 
516
516
  delete: Effect.fn(function* ({ olds, output, session }) {
517
517
  const ruleId = output.securityGroupRuleId;
518
+ const groupId = (output.groupId ?? olds?.groupId) as string;
519
+ // Prefer the observed attribute (`isEgress`) — `olds` may be the
520
+ // listed Attributes (e.g. during nuke) rather than the Props shape,
521
+ // in which case `olds.type` is undefined.
522
+ const isEgress = output.isEgress ?? olds?.type !== "ingress";
518
523
 
519
524
  yield* session.note(`Deleting Security Group Rule: ${ruleId}`);
520
525
 
521
- if (olds.type === "ingress") {
526
+ // The whole security group may already be gone, taking its rules
527
+ // with it (InvalidGroup.NotFound) — the rule is deleted either way.
528
+ if (isEgress) {
522
529
  yield* ec2
523
- .revokeSecurityGroupIngress({
524
- GroupId: olds.groupId as string,
530
+ .revokeSecurityGroupEgress({
531
+ GroupId: groupId,
525
532
  SecurityGroupRuleIds: [ruleId],
526
533
  DryRun: false,
527
534
  })
@@ -530,11 +537,12 @@ export const SecurityGroupRuleProvider = () =>
530
537
  "InvalidPermission.NotFound",
531
538
  () => Effect.void,
532
539
  ),
540
+ Effect.catchTag("InvalidGroup.NotFound", () => Effect.void),
533
541
  );
534
542
  } else {
535
543
  yield* ec2
536
- .revokeSecurityGroupEgress({
537
- GroupId: olds.groupId as string,
544
+ .revokeSecurityGroupIngress({
545
+ GroupId: groupId,
538
546
  SecurityGroupRuleIds: [ruleId],
539
547
  DryRun: false,
540
548
  })
@@ -543,6 +551,7 @@ export const SecurityGroupRuleProvider = () =>
543
551
  "InvalidPermission.NotFound",
544
552
  () => Effect.void,
545
553
  ),
554
+ Effect.catchTag("InvalidGroup.NotFound", () => Effect.void),
546
555
  );
547
556
  }
548
557