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
@@ -0,0 +1,597 @@
1
+ import * as microvms from "@distilled.cloud/aws/lambda-microvms";
2
+ import * as Data from "effect/Data";
3
+ import * as Effect from "effect/Effect";
4
+ import * as FileSystem from "effect/FileSystem";
5
+ import * as Path from "effect/Path";
6
+ import * as Redacted from "effect/Redacted";
7
+ import * as Schedule from "effect/Schedule";
8
+ import * as Stream from "effect/Stream";
9
+
10
+ import type { ValidationException } from "@distilled.cloud/aws/Errors";
11
+ import type { ScopedPlanStatusSession } from "../../Cli/Cli.ts";
12
+ import { isResolved } from "../../Diff.ts";
13
+ import { createPhysicalName } from "../../PhysicalName.ts";
14
+ import * as Provider from "../../Provider.ts";
15
+ import { createInternalTags, diffTags } from "../../Tags.ts";
16
+ import { sha256 } from "../../Util/sha256.ts";
17
+ import { Assets } from "../Assets.ts";
18
+ import {
19
+ buildMicrovmDockerfile,
20
+ bundleMicrovmProgram,
21
+ DEFAULT_MICROVM_PORT,
22
+ readContextDirectory,
23
+ zipFiles,
24
+ } from "./MicrovmBundle.ts";
25
+ import { MicrovmImage, type MicrovmImageProps } from "./MicrovmImage.ts";
26
+
27
+ // Fold the `env` map (user-provided + capability-binding contributions) into the
28
+ // MicroVM API's `environmentVariables` (a `Record<string, string>`). Redacted
29
+ // values are unwrapped; non-string values are JSON-encoded.
30
+ const foldEnv = (
31
+ env: Record<string, any> | undefined,
32
+ ): Record<string, string> | undefined => {
33
+ if (!env) return undefined;
34
+ const out: Record<string, string> = {};
35
+ for (const [key, value] of Object.entries(env)) {
36
+ if (value === undefined) continue;
37
+ const v = Redacted.isRedacted(value) ? Redacted.value(value) : value;
38
+ out[key] = typeof v === "string" ? v : JSON.stringify(v);
39
+ }
40
+ return Object.keys(out).length > 0 ? out : undefined;
41
+ };
42
+
43
+ const READY_STATES = new Set<string>(["CREATED", "UPDATED"]);
44
+ const FAILED_STATES = new Set<string>([
45
+ "CREATE_FAILED",
46
+ "UPDATE_FAILED",
47
+ "DELETE_FAILED",
48
+ ]);
49
+
50
+ const toIso = (value: Date | string | undefined): string | undefined =>
51
+ value instanceof Date ? value.toISOString() : value;
52
+
53
+ // Resolve `buildRole` / `baseImage` (each a string ARN or a materialized
54
+ // resource reference) to a plain ARN string. The engine materializes a
55
+ // whole-resource prop into its stable attributes (see Plan.ts `resolveInput`),
56
+ // so the instance's `.roleArn` / `.imageArn` is a plain string at reconcile.
57
+ const resolveBuildRoleArn = (news: MicrovmImageProps): string | undefined =>
58
+ news.buildRole === undefined
59
+ ? undefined
60
+ : typeof news.buildRole === "string"
61
+ ? news.buildRole
62
+ : (news.buildRole.roleArn as unknown as string);
63
+
64
+ const resolveBaseImageArn = (news: MicrovmImageProps): string | undefined =>
65
+ news.baseImage === undefined
66
+ ? undefined
67
+ : typeof news.baseImage === "string"
68
+ ? news.baseImage
69
+ : (news.baseImage.imageArn as unknown as string);
70
+
71
+ // Properties (besides the artifact content) that affect the built image.
72
+ const buildPropsIdentity = (news: MicrovmImageProps) =>
73
+ JSON.stringify({
74
+ baseImageArn: resolveBaseImageArn(news) ?? null,
75
+ baseImageVersion: news.baseImageVersion ?? null,
76
+ description: news.description ?? null,
77
+ logging: news.logging ?? null,
78
+ egressNetworkConnectors: [...(news.egressNetworkConnectors ?? [])].sort(),
79
+ cpuConfigurations: news.cpuConfigurations ?? [],
80
+ resources: news.resources ?? [],
81
+ additionalOsCapabilities: [...(news.additionalOsCapabilities ?? [])].sort(),
82
+ hooks: news.hooks ?? null,
83
+ env: news.env ?? {},
84
+ });
85
+
86
+ interface ResolvedArtifact {
87
+ uri: string;
88
+ hash: string;
89
+ }
90
+
91
+ const resolveName = (id: string, name?: string) =>
92
+ name
93
+ ? Effect.succeed(name)
94
+ : createPhysicalName({ id, maxLength: 64, delimiter: "-" });
95
+
96
+ // `getMicrovmImage` requires an ARN or ID — it rejects a plain name with a
97
+ // `ValidationException` ("Invalid ARN format"). Only call it with an
98
+ // ARN/ID.
99
+ const getImage = (identifier: string) =>
100
+ microvms
101
+ .getMicrovmImage({ imageIdentifier: identifier })
102
+ .pipe(
103
+ Effect.catchTag("ResourceNotFoundException", () =>
104
+ Effect.succeed(undefined),
105
+ ),
106
+ );
107
+
108
+ // Look an image up by its (name-only) identifier via the name filter, since
109
+ // `getMicrovmImage` won't accept a name. Returns the full image or undefined.
110
+ const findImageByName = Effect.fn(function* (name: string) {
111
+ const summaries = yield* microvms.listMicrovmImages
112
+ .items({ nameFilter: name })
113
+ .pipe(
114
+ Stream.runCollect,
115
+ Effect.map((chunk) => Array.from(chunk)),
116
+ );
117
+ const match = summaries.find((summary) => summary.name === name);
118
+ return match ? yield* getImage(match.imageArn) : undefined;
119
+ });
120
+
121
+ const defaultBaseImageArn = Effect.fn(function* () {
122
+ const items = yield* microvms.listManagedMicrovmImages.items({}).pipe(
123
+ Stream.runCollect,
124
+ Effect.map((c) => Array.from(c)),
125
+ );
126
+ const base = items.find((i) => i.imageArn.includes("al2023")) ?? items[0];
127
+ if (!base) {
128
+ return yield* Effect.die(
129
+ "No managed MicroVM base images available; set `baseImage`.",
130
+ );
131
+ }
132
+ return base.imageArn;
133
+ });
134
+
135
+ // Materialize + upload the code artifact and compute its build identity hash.
136
+ const resolveArtifact = Effect.fn(function* (
137
+ news: MicrovmImageProps,
138
+ session: ScopedPlanStatusSession,
139
+ ) {
140
+ const propsId = buildPropsIdentity(news);
141
+
142
+ if (news.main) {
143
+ const runtime = news.runtime ?? "node";
144
+ const port = news.port ?? DEFAULT_MICROVM_PORT;
145
+ yield* session.note("Bundling MicroVM program...");
146
+ const { files, hash: bundleHash } = yield* bundleMicrovmProgram({
147
+ main: news.main,
148
+ runtime,
149
+ isExternal: news.isExternal ?? false,
150
+ external: news.external,
151
+ port,
152
+ });
153
+ const dockerfile = buildMicrovmDockerfile(news.dockerfile, runtime, port);
154
+ const hash = yield* sha256(`${bundleHash}:${dockerfile}:${propsId}`);
155
+ const archive = yield* zipFiles([
156
+ { path: "Dockerfile", content: dockerfile },
157
+ ...files,
158
+ ]);
159
+ const assets = yield* Assets;
160
+ const key = yield* assets.uploadAsset(hash, archive);
161
+ const bucket = yield* assets.bucketName;
162
+ return { uri: `s3://${bucket}/${key}`, hash };
163
+ }
164
+
165
+ if (news.context) {
166
+ const path = yield* Path.Path;
167
+ const fs = yield* FileSystem.FileSystem;
168
+ yield* session.note("Packaging MicroVM build context...");
169
+ const files = yield* readContextDirectory(news.context);
170
+ // Ensure a Dockerfile is present (resolve from `dockerfile` path or default).
171
+ const dockerfileName = news.dockerfile ?? "Dockerfile";
172
+ const hasDockerfile = files.some((f) => f.path === dockerfileName);
173
+ if (!hasDockerfile) {
174
+ const dockerfilePath = path.join(news.context, dockerfileName);
175
+ const content = yield* fs
176
+ .readFile(dockerfilePath)
177
+ .pipe(Effect.catch(() => Effect.succeed(undefined)));
178
+ if (content) files.push({ path: "Dockerfile", content });
179
+ }
180
+ const contentId = files
181
+ .map((f) => `${f.path}:${f.content.byteLength}`)
182
+ .sort()
183
+ .join("|");
184
+ const hash = yield* sha256(`${contentId}:${propsId}`);
185
+ const archive = yield* zipFiles(files);
186
+ const assets = yield* Assets;
187
+ const key = yield* assets.uploadAsset(hash, archive);
188
+ const bucket = yield* assets.bucketName;
189
+ return { uri: `s3://${bucket}/${key}`, hash };
190
+ }
191
+
192
+ if (news.codeArtifact?.uri) {
193
+ const hash = yield* sha256(`${news.codeArtifact.uri}:${propsId}`);
194
+ return { uri: news.codeArtifact.uri, hash };
195
+ }
196
+
197
+ return yield* Effect.die(
198
+ "MicrovmImage requires one of `main`, `context`, or `codeArtifact.uri`.",
199
+ );
200
+ });
201
+
202
+ const toAttrs = (
203
+ image: microvms.GetMicrovmImageOutput,
204
+ artifact?: ResolvedArtifact,
205
+ ): MicrovmImage["Attributes"] => ({
206
+ imageArn: image.imageArn,
207
+ name: image.name,
208
+ state: image.state,
209
+ imageVersion:
210
+ image.latestActiveImageVersion ?? image.latestFailedImageVersion,
211
+ latestActiveImageVersion: image.latestActiveImageVersion,
212
+ latestFailedImageVersion: image.latestFailedImageVersion,
213
+ createdAt: toIso(image.createdAt),
214
+ updatedAt: toIso(image.updatedAt),
215
+ codeArtifact: artifact
216
+ ? { uri: artifact.uri, hash: artifact.hash }
217
+ : undefined,
218
+ });
219
+
220
+ const requireBuildRole = (news: MicrovmImageProps) => {
221
+ const arn = resolveBuildRoleArn(news);
222
+ return arn
223
+ ? Effect.succeed(arn)
224
+ : Effect.die("MicrovmImage requires `buildRole` to build the image.");
225
+ };
226
+
227
+ const createImage = Effect.fn(function* (
228
+ name: string,
229
+ news: MicrovmImageProps,
230
+ artifact: ResolvedArtifact,
231
+ baseImageArn: string,
232
+ desiredTags: Record<string, string>,
233
+ session: ScopedPlanStatusSession,
234
+ ) {
235
+ const buildRoleArn = yield* requireBuildRole(news);
236
+ yield* session.note(`Creating MicroVM image ${name}...`);
237
+ const created = yield* microvms
238
+ .createMicrovmImage({
239
+ name,
240
+ baseImageArn,
241
+ baseImageVersion: news.baseImageVersion,
242
+ buildRoleArn,
243
+ codeArtifact: { uri: artifact.uri },
244
+ description: news.description,
245
+ logging: news.logging,
246
+ egressNetworkConnectors: news.egressNetworkConnectors,
247
+ cpuConfigurations: news.cpuConfigurations,
248
+ resources: news.resources,
249
+ additionalOsCapabilities: news.additionalOsCapabilities,
250
+ hooks: news.hooks,
251
+ environmentVariables: foldEnv(news.env),
252
+ tags: desiredTags,
253
+ })
254
+ .pipe(
255
+ Effect.catchTag("ConflictException", () =>
256
+ getImage(name).pipe(
257
+ Effect.flatMap((existing) =>
258
+ existing
259
+ ? Effect.succeed({ imageArn: existing.imageArn })
260
+ : Effect.die(
261
+ `MicroVM image ${name} conflicted but was not found.`,
262
+ ),
263
+ ),
264
+ ),
265
+ ),
266
+ );
267
+ return yield* waitForReady(created.imageArn, session);
268
+ });
269
+
270
+ const updateImage = Effect.fn(function* (
271
+ imageArn: string,
272
+ news: MicrovmImageProps,
273
+ artifact: ResolvedArtifact,
274
+ baseImageArn: string,
275
+ session: ScopedPlanStatusSession,
276
+ ) {
277
+ const buildRoleArn = yield* requireBuildRole(news);
278
+ yield* session.note(`Updating MicroVM image ${news.name ?? imageArn}...`);
279
+ const updated = yield* microvms.updateMicrovmImage({
280
+ imageIdentifier: imageArn,
281
+ baseImageArn,
282
+ baseImageVersion: news.baseImageVersion,
283
+ buildRoleArn,
284
+ codeArtifact: { uri: artifact.uri },
285
+ description: news.description,
286
+ logging: news.logging,
287
+ egressNetworkConnectors: news.egressNetworkConnectors,
288
+ cpuConfigurations: news.cpuConfigurations,
289
+ resources: news.resources,
290
+ additionalOsCapabilities: news.additionalOsCapabilities,
291
+ hooks: news.hooks,
292
+ environmentVariables: foldEnv(news.env),
293
+ });
294
+ return yield* waitForReady(updated.imageArn, session);
295
+ });
296
+
297
+ const syncTags = Effect.fn(function* (
298
+ imageArn: string,
299
+ observedTags: Record<string, string>,
300
+ desiredTags: Record<string, string>,
301
+ ) {
302
+ const { removed, upsert } = diffTags(observedTags, desiredTags);
303
+ if (removed.length > 0) {
304
+ yield* microvms.untagResource({ Resource: imageArn, TagKeys: removed });
305
+ }
306
+ if (upsert.length > 0) {
307
+ yield* microvms.tagResource({
308
+ Resource: imageArn,
309
+ Tags: Object.fromEntries(upsert.map((t) => [t.Key, t.Value])),
310
+ });
311
+ }
312
+ });
313
+
314
+ export const MicrovmImageProvider = () =>
315
+ Provider.succeed(MicrovmImage, {
316
+ stables: ["imageArn", "name"],
317
+
318
+ diff: Effect.fn(function* ({ id, olds, news }) {
319
+ if (!isResolved(news)) return;
320
+ const oldName = yield* resolveName(id, olds.name);
321
+ const newName = yield* resolveName(id, news.name);
322
+ if (oldName !== newName) {
323
+ return { action: "replace" } as const;
324
+ }
325
+ }),
326
+
327
+ read: Effect.fn(function* ({ id, olds, output }) {
328
+ // Prefer the cached ARN; otherwise look up by name (getMicrovmImage
329
+ // rejects names).
330
+ const image = output?.imageArn
331
+ ? yield* getImage(output.imageArn)
332
+ : yield* findImageByName(
333
+ output?.name ?? (yield* resolveName(id, olds?.name)),
334
+ );
335
+ return image
336
+ ? toAttrs(image, output?.codeArtifact as ResolvedArtifact | undefined)
337
+ : undefined;
338
+ }),
339
+
340
+ list: () =>
341
+ Effect.gen(function* () {
342
+ const summaries = yield* microvms.listMicrovmImages.items({}).pipe(
343
+ Stream.runCollect,
344
+ Effect.map((chunk) => Array.from(chunk)),
345
+ );
346
+ const images = yield* Effect.forEach(
347
+ summaries,
348
+ (summary) => getImage(summary.imageArn),
349
+ { concurrency: 10 },
350
+ );
351
+ return images.flatMap((image) => (image ? [toAttrs(image)] : []));
352
+ }),
353
+
354
+ reconcile: Effect.fn(function* ({ id, news, output, session }) {
355
+ const name = yield* resolveName(id, news.name);
356
+ const internalTags = yield* createInternalTags(id);
357
+ const desiredTags = { ...internalTags, ...news.tags };
358
+ const baseImageArn =
359
+ resolveBaseImageArn(news) ?? (yield* defaultBaseImageArn());
360
+
361
+ // Resolve + upload the artifact and compute its build identity.
362
+ const artifact = yield* resolveArtifact(news, session);
363
+
364
+ // Observe — prefer the cached ARN; otherwise look up by name (a name
365
+ // is not a valid `getMicrovmImage` identifier).
366
+ const observed = output?.imageArn
367
+ ? yield* getImage(output.imageArn)
368
+ : yield* findImageByName(name);
369
+
370
+ // Ensure + sync: rebuild only when the build identity changed.
371
+ const image = !observed
372
+ ? yield* createImage(
373
+ name,
374
+ news,
375
+ artifact,
376
+ baseImageArn,
377
+ desiredTags,
378
+ session,
379
+ )
380
+ : output?.codeArtifact?.hash === artifact.hash
381
+ ? observed
382
+ : yield* updateImage(
383
+ observed.imageArn,
384
+ news,
385
+ artifact,
386
+ baseImageArn,
387
+ session,
388
+ );
389
+
390
+ yield* syncTags(
391
+ image.imageArn,
392
+ (image.tags ?? {}) as Record<string, string>,
393
+ desiredTags,
394
+ );
395
+
396
+ yield* session.note(`MicroVM image ${name} is ${image.state}`);
397
+ return toAttrs(image, artifact);
398
+ }),
399
+
400
+ delete: Effect.fn(function* ({ output, session }) {
401
+ // An image can't be deleted while it still has MicroVMs running — tear
402
+ // them down first and wait for them to disappear.
403
+ yield* terminateRunningMicrovms(output.imageArn, session);
404
+ yield* session.note(`Deleting MicroVM image ${output.name}...`);
405
+
406
+ yield* microvms
407
+ .deleteMicrovmImage({ imageIdentifier: output.imageArn })
408
+ .pipe(
409
+ Effect.catchTag("ResourceNotFoundException", () => Effect.void),
410
+ // A MicroVM caught mid-termination still blocks the delete; retry
411
+ // briefly until the instances are fully gone.
412
+ Effect.retry({
413
+ while: (e): e is ValidationException =>
414
+ e._tag === "ValidationException" &&
415
+ e.message.includes("running MicroVMs"),
416
+ schedule: Schedule.fixed(5_000).pipe(
417
+ Schedule.both(Schedule.recurs(12)),
418
+ ),
419
+ }),
420
+ );
421
+ yield* waitForDeleted(output.imageArn, session);
422
+ }),
423
+ });
424
+
425
+ class ImageBuilding extends Data.TaggedError("ImageBuilding")<{
426
+ imageArn: string;
427
+ state: string;
428
+ }> {}
429
+
430
+ class ImageFailed extends Data.TaggedError("ImageFailed")<{
431
+ imageArn: string;
432
+ state: string;
433
+ reason?: string;
434
+ }> {}
435
+
436
+ class MicrovmsActive extends Data.TaggedError("MicrovmsActive")<{
437
+ count: number;
438
+ }> {}
439
+
440
+ // MicroVM states that still hold a slot on the image and block its deletion.
441
+ const ACTIVE_MICROVM_STATES = new Set<string>([
442
+ "PENDING",
443
+ "RUNNING",
444
+ "SUSPENDING",
445
+ "SUSPENDED",
446
+ ]);
447
+
448
+ const listActiveMicrovms = (imageArn: string) =>
449
+ microvms.listMicrovms.items({ imageIdentifier: imageArn }).pipe(
450
+ Stream.runCollect,
451
+ Effect.map((chunk) =>
452
+ Array.from(chunk).filter((m) => ACTIVE_MICROVM_STATES.has(m.state)),
453
+ ),
454
+ Effect.catchTag("ResourceNotFoundException", () =>
455
+ Effect.succeed([] as microvms.MicrovmItem[]),
456
+ ),
457
+ );
458
+
459
+ // Terminate every running MicroVM launched from this image and wait until none
460
+ // remain active — a prerequisite for deleting the image.
461
+ const terminateRunningMicrovms = Effect.fn(function* (
462
+ imageArn: string,
463
+ session: ScopedPlanStatusSession,
464
+ ) {
465
+ const active = yield* listActiveMicrovms(imageArn);
466
+ if (active.length === 0) return;
467
+ yield* session.note(`Terminating ${active.length} running MicroVM(s)...`);
468
+ yield* Effect.forEach(
469
+ active,
470
+ (m) =>
471
+ microvms.terminateMicrovm({ microvmIdentifier: m.microvmId }).pipe(
472
+ // Already gone or mid-transition — the wait below converges anyway.
473
+ Effect.catchTag(
474
+ [
475
+ "ResourceNotFoundException",
476
+ "ConflictException",
477
+ "ValidationException",
478
+ ],
479
+ () => Effect.void,
480
+ ),
481
+ ),
482
+ { concurrency: 5, discard: true },
483
+ );
484
+ yield* listActiveMicrovms(imageArn).pipe(
485
+ Effect.flatMap((remaining) =>
486
+ remaining.length === 0
487
+ ? Effect.void
488
+ : new MicrovmsActive({ count: remaining.length }),
489
+ ),
490
+ Effect.retry({
491
+ while: (e) => e._tag === "MicrovmsActive",
492
+ schedule: Schedule.fixed(5_000).pipe(
493
+ Schedule.both(Schedule.recurs(24)),
494
+ Schedule.tapOutput(() =>
495
+ session.note("Waiting for MicroVMs to terminate..."),
496
+ ),
497
+ ),
498
+ }),
499
+ );
500
+ });
501
+
502
+ // Drill into the failed version's `stateReason` (and per-architecture build
503
+ // state reasons) so a build failure surfaces an actionable message instead of
504
+ // just `CREATE_FAILED`.
505
+ const buildFailureReason = Effect.fn(function* (
506
+ imageArn: string,
507
+ imageVersion: string | undefined,
508
+ ) {
509
+ if (!imageVersion) return undefined;
510
+ const version = yield* microvms
511
+ .getMicrovmImageVersion({ imageIdentifier: imageArn, imageVersion })
512
+ .pipe(Effect.catch(() => Effect.succeed(undefined)));
513
+ // A version fans out to one build per architecture/chipset; report the reason
514
+ // from each build that actually FAILED (keyed by architecture so multi-platform
515
+ // failures are distinguishable). `buildState` is the reliable signal — don't
516
+ // guess via timestamps.
517
+ const builds = yield* microvms.listMicrovmImageBuilds
518
+ .items({ imageIdentifier: imageArn, imageVersion })
519
+ .pipe(
520
+ Stream.runCollect,
521
+ Effect.map((chunk) => Array.from(chunk)),
522
+ Effect.catch(() =>
523
+ Effect.succeed([] as microvms.MicrovmImageBuildSummary[]),
524
+ ),
525
+ );
526
+ const failedBuildReasons = builds
527
+ .filter((b) => b.buildState === "FAILED" && b.stateReason)
528
+ .map((b) => `${b.architecture}: ${b.stateReason}`);
529
+ // Prefer the per-build failure reasons; fall back to the version-level reason.
530
+ const reasons =
531
+ failedBuildReasons.length > 0
532
+ ? [...new Set(failedBuildReasons)]
533
+ : [version?.stateReason].filter((r): r is string => !!r);
534
+ return reasons.join("; ");
535
+ });
536
+
537
+ const waitForReady = (imageArn: string, session: ScopedPlanStatusSession) =>
538
+ Effect.gen(function* () {
539
+ const image = yield* microvms.getMicrovmImage({
540
+ imageIdentifier: imageArn,
541
+ });
542
+ if (READY_STATES.has(image.state)) return image;
543
+ if (FAILED_STATES.has(image.state)) {
544
+ const reason = yield* buildFailureReason(
545
+ imageArn,
546
+ image.latestFailedImageVersion,
547
+ );
548
+ yield* session.note(
549
+ `MicroVM image build ${image.state}: ${reason ?? "(no reason reported)"}`,
550
+ );
551
+ yield* Effect.logError(
552
+ `MicroVM image ${imageArn} build ${image.state}: ${reason ?? "(no reason reported)"}`,
553
+ );
554
+ return yield* new ImageFailed({ imageArn, state: image.state, reason });
555
+ }
556
+ return yield* new ImageBuilding({ imageArn, state: image.state });
557
+ }).pipe(
558
+ Effect.retry({
559
+ while: (e) => e._tag === "ImageBuilding",
560
+ schedule: Schedule.fixed(10_000).pipe(
561
+ Schedule.both(Schedule.recurs(72)), // up to ~12 minutes
562
+ Schedule.tapOutput(([, attempt]) =>
563
+ session.note(
564
+ `Waiting for MicroVM image build... (${(attempt + 1) * 10}s)`,
565
+ ),
566
+ ),
567
+ ),
568
+ }),
569
+ );
570
+
571
+ const waitForDeleted = (imageArn: string, session: ScopedPlanStatusSession) =>
572
+ Effect.gen(function* () {
573
+ const image = yield* microvms
574
+ .getMicrovmImage({ imageIdentifier: imageArn })
575
+ .pipe(
576
+ Effect.catchTag("ResourceNotFoundException", () =>
577
+ Effect.succeed(undefined),
578
+ ),
579
+ );
580
+ if (!image || image.state === "DELETED") return;
581
+ if (image.state === "DELETE_FAILED") {
582
+ return yield* new ImageFailed({ imageArn, state: image.state });
583
+ }
584
+ return yield* new ImageBuilding({ imageArn, state: image.state });
585
+ }).pipe(
586
+ Effect.retry({
587
+ while: (e) => e._tag === "ImageBuilding",
588
+ schedule: Schedule.fixed(10_000).pipe(
589
+ Schedule.both(Schedule.recurs(72)),
590
+ Schedule.tapOutput(([, attempt]) =>
591
+ session.note(
592
+ `Waiting for MicroVM image deletion... (${(attempt + 1) * 10}s)`,
593
+ ),
594
+ ),
595
+ ),
596
+ }),
597
+ );
@@ -0,0 +1,75 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Redacted from "effect/Redacted";
3
+ import * as HttpClient from "effect/unstable/http/HttpClient";
4
+ import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
5
+ import { makeFetchRpcStub } from "../../Rpc.ts";
6
+
7
+ /**
8
+ * A running MicroVM's connection details, as returned by the {@link RunMicrovm}
9
+ * and {@link CreateAuthToken} bindings.
10
+ */
11
+ export interface MicrovmConnection {
12
+ /**
13
+ * The MicroVM endpoint hostname (no scheme), e.g.
14
+ * `<id>.lambda-microvm.<region>.on.aws` — from `RunMicrovm`'s response.
15
+ */
16
+ endpoint: string;
17
+ /**
18
+ * The auth token from `CreateAuthToken` — a map of header name → value that
19
+ * authorizes requests to the MicroVM endpoint (the AWS proxy validates them).
20
+ * Values may be {@link Redacted.Redacted}.
21
+ */
22
+ authToken: Record<string, string | Redacted.Redacted<string> | undefined>;
23
+ }
24
+
25
+ /**
26
+ * Flatten a MicroVM `authToken` (from {@link CreateAuthToken}) into a plain
27
+ * header map, unwrapping any {@link Redacted.Redacted} values. Send these as
28
+ * request headers when calling the MicroVM endpoint.
29
+ */
30
+ export const microvmAuthHeaders = (
31
+ authToken: MicrovmConnection["authToken"],
32
+ ): Record<string, string> => {
33
+ const headers: Record<string, string> = {};
34
+ for (const [key, value] of Object.entries(authToken)) {
35
+ if (value === undefined) continue;
36
+ headers[key] = Redacted.isRedacted(value) ? Redacted.value(value) : value;
37
+ }
38
+ return headers;
39
+ };
40
+
41
+ /**
42
+ * Connect to a running MicroVM's in-VM RPC server and return a typed client
43
+ * stub. The stub mirrors the image's tagged RPC `Shape`: value methods
44
+ * `yield*` as `Effect`s, streaming methods pipe as `Stream`s. Each call is a
45
+ * `POST https://<endpoint>/__rpc__/<method>` with the auth-token entries set as
46
+ * request headers — the mirror of {@link serveRpc} running inside the MicroVM.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const vm = yield* runMicrovm({});
51
+ * const { authToken } = yield* createAuthToken({
52
+ * microvmIdentifier: vm.microvmId,
53
+ * expirationInMinutes: 5,
54
+ * allowedPorts: [{ port: 8080 }],
55
+ * });
56
+ * const sandbox = yield* AWS.Lambda.connectMicrovm(Sandbox, {
57
+ * endpoint: vm.endpoint,
58
+ * authToken,
59
+ * });
60
+ * const reply = yield* sandbox.hello("world");
61
+ * ```
62
+ */
63
+ export const connectMicrovm = <S>(
64
+ _image: abstract new (_: never) => S,
65
+ connection: MicrovmConnection,
66
+ ): Effect.Effect<S, never, HttpClient.HttpClient> =>
67
+ Effect.gen(function* () {
68
+ const client = yield* HttpClient.HttpClient;
69
+ const headers = microvmAuthHeaders(connection.authToken);
70
+ return makeFetchRpcStub<S>({
71
+ baseUrl: `https://${connection.endpoint}`,
72
+ fetch: (request) =>
73
+ client.execute(request.pipe(HttpClientRequest.setHeaders(headers))),
74
+ });
75
+ });