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,442 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as HashMap from "effect/HashMap";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Option from "effect/Option";
5
+ import * as Redacted from "effect/Redacted";
6
+ import * as Ref from "effect/Ref";
7
+ import * as Scope from "effect/Scope";
8
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
9
+ import { Region } from "@distilled.cloud/aws/Region";
10
+ import * as Binding from "../../Binding.ts";
11
+ import type { Input } from "../../Input.ts";
12
+ import * as Output from "../../Output.ts";
13
+ import type { ResourceLike } from "../../Resource.ts";
14
+ import type {
15
+ AwsCredentialProviderError,
16
+ ResolvedCredentials,
17
+ } from "@distilled.cloud/aws/Credentials";
18
+ import { Credentials, makeAssumeRoleResolver } from "../Credentials.ts";
19
+ import { AccessKey } from "../IAM/AccessKey.ts";
20
+ import type { PolicyStatement } from "../IAM/Policy.ts";
21
+ import { Role } from "../IAM/Role.ts";
22
+ import { User } from "../IAM/User.ts";
23
+ import { isFunction } from "./Function.ts";
24
+ import type { MicrovmImage } from "./MicrovmImage.ts";
25
+
26
+ // Shared scaffolding for the MicroVM runtime bindings. Every `*Http` impl is
27
+ // identical except for the distilled operation, the IAM action(s), the policy
28
+ // scope, and whether the bound image's identifier is injected into the request.
29
+ // NOT exported from `index.ts` — it only backs the per-operation `*Http` files.
30
+
31
+ /** The distilled operation method, yielded to its request callable. */
32
+ type Operation<Res, Err> = Effect.Effect<
33
+ (req: any) => Effect.Effect<Res, Err, any>,
34
+ any,
35
+ any
36
+ >;
37
+
38
+ // We resolve the host (Worker vs Lambda) at both deploy AND runtime to decide
39
+ // how credentials are supplied. A Cloudflare Worker is structurally tagged with
40
+ // this Type id; a hard import of the Cloudflare module graph is avoided.
41
+ const WORKER_TYPE_ID = "Cloudflare.Worker";
42
+ type WorkerHost = ResourceLike & {
43
+ bind: (
44
+ sid: string,
45
+ ) => (binding: Input<{ bindings?: unknown[] }>) => Effect.Effect<void>;
46
+ };
47
+ const isWorkerHost = (host: ResourceLike): host is WorkerHost =>
48
+ (host as { Type?: string }).Type === WORKER_TYPE_ID;
49
+
50
+ /** Region segment of an AWS ARN (`arn:partition:service:<region>:...`). */
51
+ const regionFromArn = (arn: string): string => arn.split(":")[3] ?? "us-east-1";
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Per-scope singleton store. A Worker reaching AWS must create exactly ONE IAM
55
+ // User + AccessKey + Role (and one assumed-role credential cache) regardless of
56
+ // how many of the ~16 MicroVM `*Http` bindings it uses. A
57
+ // `WeakMap<Scope, Ref<HashMap>>` memoizes any keyed effect for the lifetime of
58
+ // the surrounding scope (the deploy plan, or the worker's runtime init scope),
59
+ // so every binding shares the same resources and the same credentials.
60
+ // ---------------------------------------------------------------------------
61
+
62
+ const perScope = new WeakMap<
63
+ Scope.Scope,
64
+ Ref.Ref<HashMap.HashMap<string, unknown>>
65
+ >();
66
+ // Fallback when no `Scope` is in context — notably a deployed Worker's init
67
+ // phase, which runs outside any scope. Process-wide is an acceptable singleton
68
+ // granularity there (one isolate == one logical host).
69
+ const globalStore = new Map<string, unknown>();
70
+
71
+ const storeRef = Effect.gen(function* () {
72
+ const scope = yield* Effect.serviceOption(Scope.Scope);
73
+ if (Option.isNone(scope)) return undefined;
74
+ let ref = perScope.get(scope.value);
75
+ if (!ref) {
76
+ ref = yield* Ref.make(HashMap.empty<string, unknown>());
77
+ perScope.set(scope.value, ref);
78
+ }
79
+ return ref;
80
+ });
81
+
82
+ const memoize = <A, E, R>(key: string, build: Effect.Effect<A, E, R>) =>
83
+ Effect.gen(function* () {
84
+ const ref = yield* storeRef;
85
+ if (ref) {
86
+ const existing = HashMap.get(yield* Ref.get(ref), key);
87
+ if (Option.isSome(existing)) return existing.value as A;
88
+ const value = yield* build;
89
+ yield* Ref.update(ref, HashMap.set(key, value as unknown));
90
+ return value;
91
+ }
92
+ if (globalStore.has(key)) return globalStore.get(key) as A;
93
+ const value = yield* build;
94
+ globalStore.set(key, value);
95
+ return value;
96
+ }) as Effect.Effect<A, E, R>;
97
+
98
+ export interface ImageBindingOptions<Req, Res, Err, Self> {
99
+ /** The `Binding.Service` contract this layer implements. */
100
+ binding: Binding.Service<
101
+ Self,
102
+ string,
103
+ (
104
+ image: MicrovmImage,
105
+ ) => Effect.Effect<(req: Req) => Effect.Effect<Res, Err>>
106
+ >;
107
+ /** Operation name, used for the SID label and tracing, e.g. `"RunMicrovm"`. */
108
+ name: string;
109
+ /** IAM action(s) the host Function needs, e.g. `["lambda:RunMicrovm"]`. */
110
+ actions: string[];
111
+ /** The distilled operation, e.g. `microvms.runMicrovm`. */
112
+ operation: Operation<Res, Err>;
113
+ /**
114
+ * Policy scope (always limited to the bound image's identity — never `["*"]`):
115
+ * - `"image"` (default) scopes to the exact image ARN (e.g. `RunMicrovm`,
116
+ * image-read ops).
117
+ * - `"microvm"` scopes to the MicroVM instances launched from this image via
118
+ * a `microvm:*` glob derived from the image ARN (same partition, region,
119
+ * and account). MicroVM instance ARNs are minted at runtime, so an exact
120
+ * ARN can't be known at deploy time, but the action stays bounded to this
121
+ * account/region's MicroVMs rather than `["*"]`.
122
+ * - `"account"` uses `["*"]`. Reserved for collection-level list actions
123
+ * (e.g. `ListMicrovms`) that AWS only authorizes against `*` and cannot be
124
+ * resource-scoped, analogous to `ec2:DescribeInstances`.
125
+ */
126
+ scope?: "image" | "microvm" | "account";
127
+ /** Inject `imageIdentifier: <imageArn>` into each request. */
128
+ injectImageIdentifier?: boolean;
129
+ /**
130
+ * Also grant `lambda:PassNetworkConnector` on network connectors in the
131
+ * image's region — both the account's own connectors and the AWS-managed
132
+ * ones (e.g. `INTERNET_EGRESS`). Required by `RunMicrovm`, which passes a
133
+ * network connector (defaulting to the managed `INTERNET_EGRESS`) to the
134
+ * launched MicroVM.
135
+ */
136
+ passNetworkConnector?: boolean;
137
+ }
138
+
139
+ /**
140
+ * Derive the `microvm:*` instance-ARN glob from an image ARN by swapping the
141
+ * `microvm-image:<name>` resource segment for `microvm:*`, keeping the same
142
+ * `arn:<partition>:lambda:<region>:<account>:` prefix.
143
+ */
144
+ const microvmGlob = (imageArn: string): string =>
145
+ `${imageArn.replace(/:microvm-image[:/].*$/, "")}:microvm:*`;
146
+
147
+ /**
148
+ * Derive the network-connector ARN globs from an image ARN: the account's own
149
+ * connectors (`arn:<partition>:lambda:<region>:<account>:network-connector:*`)
150
+ * and the AWS-managed connectors (same prefix but account `aws`).
151
+ */
152
+ const networkConnectorGlobs = (imageArn: string): string[] => {
153
+ // arn:<partition>:lambda:<region>:<account>
154
+ const prefix = imageArn.replace(/:microvm-image[:/].*$/, "");
155
+ // arn:<partition>:lambda:<region>
156
+ const regionPrefix = prefix.replace(/:[^:]*$/, "");
157
+ return [
158
+ `${prefix}:network-connector:*`,
159
+ `${regionPrefix}:aws:network-connector:*`,
160
+ ];
161
+ };
162
+
163
+ /** The IAM policy statements an image-scoped MicroVM operation requires. */
164
+ const imagePolicyStatements = <Req, Res, Err, Self>(
165
+ image: MicrovmImage,
166
+ options: ImageBindingOptions<Req, Res, Err, Self>,
167
+ ): Input<PolicyStatement>[] => [
168
+ {
169
+ Effect: "Allow",
170
+ Action: options.actions,
171
+ Resource:
172
+ options.scope === "account"
173
+ ? // Collection-level list actions only authorize on `*`.
174
+ ["*"]
175
+ : options.scope === "microvm"
176
+ ? [
177
+ // Instance ops (GetMicrovm, TerminateMicrovm, CreateAuthToken,
178
+ // …) are authorized by AWS against the image ARN as well as the
179
+ // instance ARN, so grant both: the exact image and the
180
+ // `microvm:*` instance glob derived from it.
181
+ Output.interpolate`${image.imageArn}`,
182
+ image.imageArn.pipe(Output.map(microvmGlob)),
183
+ ]
184
+ : [Output.interpolate`${image.imageArn}`],
185
+ },
186
+ ...(options.passNetworkConnector
187
+ ? [
188
+ {
189
+ Effect: "Allow" as const,
190
+ Action: ["lambda:PassNetworkConnector"],
191
+ Resource: [
192
+ image.imageArn.pipe(
193
+ Output.map((a) => networkConnectorGlobs(a)[0]!),
194
+ ),
195
+ image.imageArn.pipe(
196
+ Output.map((a) => networkConnectorGlobs(a)[1]!),
197
+ ),
198
+ ],
199
+ },
200
+ ]
201
+ : []),
202
+ ];
203
+
204
+ interface WorkerAwsAccess {
205
+ /** The shared least-privilege Role each binding contributes statements to. */
206
+ readonly role: Role;
207
+ /**
208
+ * Shared assumed-role credentials resolver, single-flight + expiry-aware,
209
+ * built ONCE per host (see {@link ensureWorkerAwsAccess}). Every binding and
210
+ * every request reuses this exact resolver, so `AssumeRole` runs once and is
211
+ * re-run only when the cached credentials approach expiry — never per request.
212
+ */
213
+ readonly credentials: Effect.Effect<
214
+ ResolvedCredentials,
215
+ AwsCredentialProviderError
216
+ >;
217
+ }
218
+
219
+ /**
220
+ * Create — once per scope, per host worker — the IAM identity a Cloudflare
221
+ * Worker uses to reach AWS:
222
+ * - an IAM **User** allowed to assume any role that trusts it,
223
+ * - a long-lived **AccessKey** for that user,
224
+ * - a least-privilege **Role** the user assumes (trusts only this user;
225
+ * MicroVM permissions accumulate on it via `role.bind`).
226
+ *
227
+ * The user's access key + the role ARN are read as {@link Output} *accessors*
228
+ * (`yield* accessKey.accessKeyId`, …) — yielding an attribute both registers
229
+ * the binding on the worker (deploy) and returns an `Effect` that reads it at
230
+ * runtime. At runtime those accessors feed an assume-role credentials layer
231
+ * (single-flight, expiry-aware) built once and shared across all bindings.
232
+ */
233
+ const ensureWorkerAwsAccess = (host: WorkerHost) =>
234
+ memoize(
235
+ `microvm-aws:${(host as ResourceLike).LogicalId}`,
236
+ Effect.gen(function* (): Generator<any, WorkerAwsAccess, any> {
237
+ const id = (host as ResourceLike).LogicalId;
238
+
239
+ // The user may assume any role that trusts it (Resource `*`); the role's
240
+ // trust policy is what actually restricts assumption to this user, which
241
+ // avoids a User↔Role ARN dependency cycle while staying safe.
242
+ const user = yield* User(`${id}-microvm-user`, {
243
+ inlinePolicies: {
244
+ "assume-microvm-role": {
245
+ Version: "2012-10-17",
246
+ Statement: [
247
+ { Effect: "Allow", Action: ["sts:AssumeRole"], Resource: ["*"] },
248
+ ],
249
+ },
250
+ },
251
+ });
252
+
253
+ const accessKey = yield* AccessKey(`${id}-microvm-key`, {
254
+ userName: user.userName,
255
+ });
256
+
257
+ const role = yield* Role(`${id}-microvm-role`, {
258
+ assumeRolePolicyDocument: {
259
+ Version: "2012-10-17",
260
+ Statement: [
261
+ {
262
+ Effect: "Allow",
263
+ Principal: { AWS: user.userArn },
264
+ Action: ["sts:AssumeRole"],
265
+ },
266
+ ],
267
+ },
268
+ });
269
+
270
+ // Bind the user's credentials + role ARN onto the worker via accessors:
271
+ // at deploy this registers the env (the secret as `secret_text`); at
272
+ // runtime these resolve to the deployed values.
273
+ const accessKeyId = yield* accessKey.accessKeyId;
274
+ const secretAccessKey = yield* accessKey.secretAccessKey;
275
+ const roleArn = yield* role.roleArn;
276
+
277
+ // The long-lived IAM-user credentials that sign `AssumeRole`. Read lazily
278
+ // from the worker environment on each refresh (NOT captured eagerly, so
279
+ // this is valid at deploy time where the env isn't populated yet).
280
+ const base = Layer.succeed(
281
+ Credentials,
282
+ Effect.gen(function* () {
283
+ const id = yield* accessKeyId;
284
+ const secret = yield* secretAccessKey;
285
+ return {
286
+ accessKeyId: Redacted.make(id),
287
+ secretAccessKey: secret
288
+ ? Redacted.isRedacted(secret)
289
+ ? secret
290
+ : Redacted.make(secret)
291
+ : Redacted.make(""),
292
+ sessionToken: undefined,
293
+ } satisfies ResolvedCredentials;
294
+ }),
295
+ );
296
+
297
+ // Build the single-flight, expiry-aware assume-role cache ONCE. STS is
298
+ // global, so the endpoint region is a fixed default; the per-request
299
+ // operation provides its own image-derived `Region` separately.
300
+ const credentials = yield* makeAssumeRoleResolver({
301
+ roleArn,
302
+ base,
303
+ region: "us-east-1",
304
+ });
305
+
306
+ return { role, credentials };
307
+ }),
308
+ );
309
+
310
+ /**
311
+ * Run a MicroVM operation with host-appropriate AWS credentials:
312
+ * - Lambda Function host → the execution-role credentials already in the
313
+ * ambient environment (nothing to provide).
314
+ * - Cloudflare Worker host → the assumed-role credentials, plus a `Region`
315
+ * derived from the image ARN and an `HttpClient`.
316
+ */
317
+ const withRuntimeCredentials = <A, E>(
318
+ access: WorkerAwsAccess | undefined,
319
+ region: Effect.Effect<string>,
320
+ eff: Effect.Effect<A, E, any>,
321
+ ): Effect.Effect<A, E, any> =>
322
+ access
323
+ ? Effect.gen(function* () {
324
+ const reg = yield* region;
325
+ // Provide the SHARED cached resolver built once in
326
+ // `ensureWorkerAwsAccess` — NOT a fresh assume-role layer per request —
327
+ // so the assumed-role credentials are reused (and only refreshed near
328
+ // expiry) instead of re-assuming the role on every call.
329
+ return yield* eff.pipe(
330
+ Effect.provide(Layer.succeed(Credentials, access.credentials)),
331
+ Effect.provide(Layer.succeed(Region, Effect.succeed(reg))),
332
+ Effect.provide(FetchHttpClient.layer),
333
+ );
334
+ })
335
+ : eff;
336
+
337
+ /**
338
+ * Build a MicroVM runtime binding bound to a {@link MicrovmImage}. At deploy it
339
+ * registers the IAM grant on the host — the Lambda execution role directly, or
340
+ * (for a Cloudflare Worker) a dedicated assume-role Role whose credentials are
341
+ * bound onto the worker. At runtime it calls the distilled operation with the
342
+ * host-appropriate credentials.
343
+ */
344
+ export const makeImageBinding = <Req, Res, Err, Self>(
345
+ options: ImageBindingOptions<Req, Res, Err, Self>,
346
+ ): Layer.Layer<Self> =>
347
+ Layer.effect(
348
+ options.binding as any,
349
+ Effect.gen(function* () {
350
+ const run = yield* options.operation;
351
+ return Effect.fn(function* (image: MicrovmImage) {
352
+ const host = yield* Binding.Host;
353
+ const statements = imagePolicyStatements(image, options);
354
+ const label = `Allow(${host.LogicalId}, AWS.Lambda.${options.name}(${image.LogicalId}))`;
355
+
356
+ // Accessors (registered on the host at deploy, resolved at runtime).
357
+ const imageArn = yield* image.imageArn;
358
+ // Region is derived from the resolved image ARN — via `Effect.map` of
359
+ // the accessor, NOT a second Output binding (whose env key would embed
360
+ // the mapper's source text and is brittle).
361
+ const region = Effect.map(imageArn, regionFromArn);
362
+
363
+ let access: WorkerAwsAccess | undefined;
364
+ if (isFunction(host)) {
365
+ if (!globalThis.__ALCHEMY_RUNTIME__) {
366
+ yield* host.bind`${label}`({ policyStatements: statements });
367
+ }
368
+ } else if (isWorkerHost(host)) {
369
+ access = yield* ensureWorkerAwsAccess(host);
370
+ if (!globalThis.__ALCHEMY_RUNTIME__) {
371
+ yield* access.role.bind`${label}`({ policyStatements: statements });
372
+ }
373
+ }
374
+
375
+ return Effect.fn(`AWS.Lambda.${options.name}(${image.LogicalId})`)(
376
+ function* (request: Req) {
377
+ return yield* withRuntimeCredentials(
378
+ access,
379
+ region,
380
+ run(
381
+ options.injectImageIdentifier
382
+ ? { ...(request as object), imageIdentifier: yield* imageArn }
383
+ : request,
384
+ ),
385
+ );
386
+ },
387
+ );
388
+ });
389
+ }),
390
+ ) as unknown as Layer.Layer<Self>;
391
+
392
+ export interface AccountBindingOptions<Req, Res, Err, Self> {
393
+ binding: Binding.Service<
394
+ Self,
395
+ string,
396
+ () => Effect.Effect<(req: Req) => Effect.Effect<Res, Err>>
397
+ >;
398
+ name: string;
399
+ actions: string[];
400
+ operation: Operation<Res, Err>;
401
+ }
402
+
403
+ /**
404
+ * Build an account-scoped MicroVM binding (no resource argument), e.g. for
405
+ * listing AWS-managed base images. IAM `Resource` is `["*"]`.
406
+ */
407
+ export const makeAccountBinding = <Req, Res, Err, Self>(
408
+ options: AccountBindingOptions<Req, Res, Err, Self>,
409
+ ): Layer.Layer<Self> =>
410
+ Layer.effect(
411
+ options.binding as any,
412
+ Effect.gen(function* () {
413
+ const run = yield* options.operation;
414
+ return Effect.fn(function* () {
415
+ const host = yield* Binding.Host;
416
+ const label = `Allow(${host.LogicalId}, AWS.Lambda.${options.name}())`;
417
+ const statements: Input<PolicyStatement>[] = [
418
+ { Effect: "Allow", Action: options.actions, Resource: ["*"] },
419
+ ];
420
+
421
+ let access: WorkerAwsAccess | undefined;
422
+ if (isFunction(host)) {
423
+ if (!globalThis.__ALCHEMY_RUNTIME__) {
424
+ yield* host.bind`${label}`({ policyStatements: statements });
425
+ }
426
+ } else if (isWorkerHost(host)) {
427
+ access = yield* ensureWorkerAwsAccess(host);
428
+ if (!globalThis.__ALCHEMY_RUNTIME__) {
429
+ yield* access.role.bind`${label}`({ policyStatements: statements });
430
+ }
431
+ }
432
+
433
+ return Effect.fn(`AWS.Lambda.${options.name}()`)(function* (
434
+ request: Req,
435
+ ) {
436
+ // Account-level operations are global; default the STS/endpoint region.
437
+ const region = Effect.succeed("us-east-1");
438
+ return yield* withRuntimeCredentials(access, region, run(request));
439
+ });
440
+ });
441
+ }),
442
+ ) as unknown as Layer.Layer<Self>;
@@ -0,0 +1,256 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import type * as rolldown from "rolldown";
5
+ import * as Bundle from "../../Bundle/Bundle.ts";
6
+ import { findCwdForBundle } from "../../Bundle/TempRoot.ts";
7
+ import { Self } from "../../Self.ts";
8
+ import { Stack } from "../../Stack.ts";
9
+
10
+ /**
11
+ * The AWS-managed base image MicroVM Dockerfiles build on. The MicroVM build
12
+ * runs the Dockerfile server-side and snapshots the result with Firecracker.
13
+ */
14
+ export const MICROVM_BASE_DOCKER_IMAGE =
15
+ "public.ecr.aws/lambda/microvms:al2023-minimal";
16
+
17
+ /** The default port the in-VM HTTP server listens on. */
18
+ export const DEFAULT_MICROVM_PORT = 8080;
19
+
20
+ /**
21
+ * Build the final Dockerfile for an effectful MicroVM image. Starts from the
22
+ * user-provided base (or the managed MicroVM base), installs the JS runtime,
23
+ * copies the bundled program, and runs it as the entrypoint. Mirrors the
24
+ * Cloudflare Container `buildFinalDockerfile`, but targets the MicroVM base.
25
+ */
26
+ export const buildMicrovmDockerfile = (
27
+ userDockerfile: string | undefined,
28
+ runtime: "bun" | "node",
29
+ port: number,
30
+ ): string => {
31
+ const base = userDockerfile?.trim() ?? `FROM ${MICROVM_BASE_DOCKER_IMAGE}`;
32
+ const installRuntime =
33
+ runtime === "bun"
34
+ ? // `bun.sh/install` unpacks a zip, so the minimal MicroVM base needs
35
+ // `unzip` (and `tar`) present before the installer runs.
36
+ "RUN dnf install -y unzip tar && curl -fsSL https://bun.sh/install | bash && ln -s /root/.bun/bin/bun /usr/local/bin/bun && dnf clean all"
37
+ : "RUN dnf install -y nodejs && dnf clean all";
38
+ const runtimeBin = runtime === "bun" ? "bun" : "node";
39
+ return [
40
+ base,
41
+ "",
42
+ installRuntime,
43
+ "WORKDIR /app",
44
+ // The entry (`index.mjs`) and every rolldown chunk are emitted with a
45
+ // `.mjs` extension, which Node always treats as ESM — so the entry's named
46
+ // imports of a chunk resolve without needing a `package.json` `"type"`
47
+ // marker (which would risk clobbering a user-provided base image's file).
48
+ "COPY *.mjs /app/",
49
+ `EXPOSE ${port}`,
50
+ `ENV PORT=${port}`,
51
+ `ENTRYPOINT ["${runtimeBin}", "/app/index.mjs"]`,
52
+ "",
53
+ ].join("\n");
54
+ };
55
+
56
+ /**
57
+ * Bundle an Effect-native MicroVM program with Rolldown and wrap it in a
58
+ * generated bootstrap that boots an HTTP server (the MicroVM endpoint). Returns
59
+ * every emitted file so the full set can be zipped into the code artifact.
60
+ *
61
+ * Mirrors `bundleContainerProgram`; the bootstrap provides AWS runtime services
62
+ * (FetchHttpClient + region from env) so in-VM HTTP capability bindings
63
+ * (e.g. S3 `*Http`) resolve against the MicroVM's execution role.
64
+ */
65
+ export const bundleMicrovmProgram = Effect.fn(function* ({
66
+ main,
67
+ runtime,
68
+ handler = "default",
69
+ isExternal = false,
70
+ external = [],
71
+ port,
72
+ }: {
73
+ main: string;
74
+ runtime: "bun" | "node";
75
+ handler?: string | undefined;
76
+ isExternal?: boolean;
77
+ external?: string[];
78
+ port: number;
79
+ }) {
80
+ const fs = yield* FileSystem.FileSystem;
81
+ const stack = yield* Stack;
82
+ const virtualEntryPlugin = yield* Bundle.virtualEntryPlugin;
83
+
84
+ const realMain = yield* fs.realPath(main);
85
+ const cwd = yield* findCwdForBundle(realMain);
86
+
87
+ const buildBundle = Effect.fn(function* (
88
+ entry: string,
89
+ plugins?: rolldown.RolldownPluginOption,
90
+ ) {
91
+ return yield* Bundle.build(
92
+ {
93
+ input: entry,
94
+ cwd,
95
+ external: [
96
+ "@aws-sdk/*",
97
+ ...(runtime === "bun" ? ["bun", "bun:*"] : []),
98
+ ...external,
99
+ ],
100
+ platform: "node",
101
+ resolve: {
102
+ conditionNames:
103
+ runtime === "bun"
104
+ ? ["bun", "import", "module", "default"]
105
+ : ["node", "import", "module", "default"],
106
+ },
107
+ plugins,
108
+ treeshake: true,
109
+ },
110
+ {
111
+ format: "esm",
112
+ sourcemap: false,
113
+ minify: false,
114
+ entryFileNames: "index.mjs",
115
+ // Emit chunks as `.mjs` too so Node treats them as ESM unconditionally
116
+ // (no `package.json` `"type":"module"` needed in the image).
117
+ chunkFileNames: "[name]-[hash].mjs",
118
+ },
119
+ );
120
+ });
121
+
122
+ const bundleOutput = isExternal
123
+ ? yield* buildBundle(realMain)
124
+ : yield* buildBundle(
125
+ realMain,
126
+ virtualEntryPlugin(
127
+ (importPath) => `
128
+ ${
129
+ runtime === "bun"
130
+ ? `import { BunServices } from "@effect/platform-bun";
131
+ import { BunHttpServer } from "alchemy/Http";
132
+ const HttpServer = BunHttpServer;`
133
+ : `import { NodeServices } from "@effect/platform-node";
134
+ import { NodeHttpServer } from "alchemy/Http";
135
+ const HttpServer = NodeHttpServer;`
136
+ }
137
+ import { Stack } from "alchemy/Stack";
138
+ import { makeEntrypointLayer } from "alchemy/Runtime";
139
+ import * as Effect from "effect/Effect";
140
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
141
+ import * as Layer from "effect/Layer";
142
+ import * as Logger from "effect/Logger";
143
+ import * as Context from "effect/Context";
144
+ import { MinimumLogLevel } from "effect/References";
145
+
146
+ import ${handler === "default" ? "entrypoint" : `{ ${handler} as entrypoint }`} from ${JSON.stringify(importPath)};
147
+
148
+ const tag = Context.Service("${Self.key}")
149
+ const layer = makeEntrypointLayer(tag, entrypoint);
150
+
151
+ const platform = Layer.mergeAll(
152
+ ${runtime === "bun" ? "BunServices.layer" : "NodeServices.layer"},
153
+ FetchHttpClient.layer,
154
+ Logger.layer([Logger.consolePretty()]),
155
+ );
156
+
157
+ const stack = Layer.succeed(Stack, {
158
+ name: ${JSON.stringify(stack.name)},
159
+ stage: ${JSON.stringify(stack.stage)},
160
+ bindings: {},
161
+ resources: {}
162
+ });
163
+
164
+ const serverEffect = tag.pipe(
165
+ Effect.flatMap(func => func.RuntimeContext.exports),
166
+ Effect.flatMap(exports => exports.default),
167
+ Effect.provide(
168
+ layer.pipe(
169
+ Layer.provideMerge(stack),
170
+ Layer.provideMerge(HttpServer({ port: Number(process.env.PORT ?? ${port}) })),
171
+ Layer.provideMerge(platform),
172
+ Layer.provideMerge(
173
+ Layer.succeed(MinimumLogLevel, process.env.DEBUG ? "Debug" : "Info")
174
+ ),
175
+ )
176
+ ),
177
+ Effect.scoped
178
+ );
179
+
180
+ console.log("MicroVM bootstrap starting on port ${port}...");
181
+ await Effect.runPromise(serverEffect).catch((err) => {
182
+ console.error("MicroVM bootstrap failed:", err);
183
+ process.exit(1);
184
+ })`,
185
+ ),
186
+ );
187
+
188
+ const files = bundleOutput.files.map((f) => ({
189
+ path: f.path,
190
+ content:
191
+ typeof f.content === "string"
192
+ ? new TextEncoder().encode(f.content)
193
+ : f.content,
194
+ }));
195
+
196
+ return { files, hash: bundleOutput.hash };
197
+ });
198
+
199
+ export interface ArtifactFile {
200
+ path: string;
201
+ content: string | Uint8Array;
202
+ }
203
+
204
+ /**
205
+ * Zip a flat list of files into a deterministic (fixed mtime) archive. Used to
206
+ * package the MicroVM code artifact (Dockerfile + bundled program, or a build
207
+ * context) before uploading it to S3.
208
+ */
209
+ export const zipFiles = Effect.fn(function* (
210
+ files: ReadonlyArray<ArtifactFile>,
211
+ ) {
212
+ const zip = new (yield* Effect.promise(() => import("jszip"))).default();
213
+ const date = new Date("1980-01-01T00:00:00.000Z");
214
+ for (const file of files) {
215
+ zip.file(file.path, file.content, { date });
216
+ }
217
+ return yield* Effect.promise(() =>
218
+ zip.generateAsync({
219
+ type: "nodebuffer",
220
+ compression: "DEFLATE",
221
+ platform: "UNIX",
222
+ }),
223
+ );
224
+ });
225
+
226
+ /**
227
+ * Recursively read a build-context directory into a flat list of files
228
+ * (relative paths + bytes) for zipping into the code artifact. Used by the
229
+ * external (bring-your-own-Dockerfile) MicroVM mode.
230
+ */
231
+ export const readContextDirectory = Effect.fn(function* (dir: string) {
232
+ const fs = yield* FileSystem.FileSystem;
233
+ const path = yield* Path.Path;
234
+ const root = yield* fs.realPath(dir);
235
+
236
+ const walk = (
237
+ current: string,
238
+ ): Effect.Effect<{ path: string; content: Uint8Array }[], any, never> =>
239
+ Effect.gen(function* () {
240
+ const entries = yield* fs.readDirectory(current);
241
+ const out: { path: string; content: Uint8Array }[] = [];
242
+ for (const entry of entries) {
243
+ const abs = path.join(current, entry);
244
+ const info = yield* fs.stat(abs);
245
+ if (info.type === "Directory") {
246
+ out.push(...(yield* walk(abs)));
247
+ } else {
248
+ const content = yield* fs.readFile(abs);
249
+ out.push({ path: path.relative(root, abs), content });
250
+ }
251
+ }
252
+ return out;
253
+ });
254
+
255
+ return yield* walk(root);
256
+ });