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
@@ -3,31 +3,28 @@ import * as ecr from "@distilled.cloud/aws/ecr";
3
3
  import * as ecs from "@distilled.cloud/aws/ecs";
4
4
  import * as iam from "@distilled.cloud/aws/iam";
5
5
  import { Region } from "@distilled.cloud/aws/Region";
6
- import * as Config from "effect/Config";
7
6
  import * as Context from "effect/Context";
8
7
  import * as Effect from "effect/Effect";
9
- import * as FileSystem from "effect/FileSystem";
10
8
  import * as Stream from "effect/Stream";
11
9
  import type * as rolldown from "rolldown";
12
10
  import { AlchemyContext } from "../../AlchemyContext.ts";
13
11
  import * as Bundle from "../../Bundle/Bundle.ts";
14
- import {
15
- dockerBuild,
16
- materializeDockerfile,
17
- pushImage,
18
- writeContextFiles,
19
- } from "../../Bundle/Docker.ts";
20
12
  import {
21
13
  findCwdForBundle,
22
14
  getStableContextDir,
15
+ resolveMainPath,
23
16
  } from "../../Bundle/TempRoot.ts";
24
17
  import { isResolved } from "../../Diff.ts";
25
- import * as Output from "../../Output.ts";
18
+ import { Docker } from "../../Docker/Docker.ts";
26
19
  import { createPhysicalName } from "../../PhysicalName.ts";
27
20
  import { Platform, type Main, type PlatformProps } from "../../Platform.ts";
28
21
  import * as Provider from "../../Provider.ts";
29
22
  import { Resource, type ResourceBinding } from "../../Resource.ts";
30
- import type { ProcessContext, ServerHost } from "../../Server/Process.ts";
23
+ import {
24
+ createHostRuntimeContext,
25
+ type HostRuntimeContext,
26
+ type ServerHost,
27
+ } from "../../Server/Process.ts";
31
28
  import { Stack } from "../../Stack.ts";
32
29
  import {
33
30
  createInternalTags,
@@ -57,7 +54,7 @@ export class TaskEnvironment extends Context.Service<
57
54
  export interface TaskProps extends PlatformProps {
58
55
  /**
59
56
  * Module entrypoint for the bundled task program. This should typically be
60
- * `import.meta.filename` from an inline Effect program.
57
+ * `import.meta.url` from an inline Effect program.
61
58
  */
62
59
  main: string;
63
60
  /**
@@ -235,7 +232,7 @@ export type TaskServices = Credentials | Region | ServerHost | AWSEnvironment;
235
232
 
236
233
  export type TaskShape = Main<TaskServices>;
237
234
 
238
- export interface TaskRuntimeContext extends ProcessContext {
235
+ export interface TaskRuntimeContext extends HostRuntimeContext {
239
236
  readonly Type: "AWS.ECS.Task";
240
237
  }
241
238
 
@@ -255,7 +252,7 @@ export interface TaskRuntimeContext extends ProcessContext {
255
252
  * @example Basic Task
256
253
  * ```typescript
257
254
  * const task = yield* Task("ApiTask", {
258
- * main: import.meta.filename,
255
+ * main: import.meta.url,
259
256
  * cpu: 256,
260
257
  * memory: 512,
261
258
  * port: 3000,
@@ -266,7 +263,7 @@ export interface TaskRuntimeContext extends ProcessContext {
266
263
  * @example Task with a Sidecar
267
264
  * ```typescript
268
265
  * const task = yield* Task("ApiTask", {
269
- * main: import.meta.filename,
266
+ * main: import.meta.url,
270
267
  * port: 3000,
271
268
  * sidecars: [
272
269
  * {
@@ -283,7 +280,7 @@ export interface TaskRuntimeContext extends ProcessContext {
283
280
  * @example ARM64 with EFS Volume and Ephemeral Storage
284
281
  * ```typescript
285
282
  * const task = yield* Task("WorkerTask", {
286
- * main: import.meta.filename,
283
+ * main: import.meta.url,
287
284
  * runtimePlatform: { cpuArchitecture: "ARM64", operatingSystemFamily: "LINUX" },
288
285
  * ephemeralStorage: { sizeInGiB: 40 },
289
286
  * volumes: [
@@ -300,44 +297,9 @@ export interface TaskRuntimeContext extends ProcessContext {
300
297
  */
301
298
  export const Task: Platform<Task, TaskServices, TaskShape, TaskRuntimeContext> =
302
299
  Platform("AWS.ECS.Task", {
303
- createRuntimeContext: (id): TaskRuntimeContext => {
304
- const runners: Effect.Effect<void, never, any>[] = [];
305
- const env: Record<string, any> = {};
306
-
307
- return {
308
- Type: "AWS.ECS.Task",
309
- id,
310
- env,
311
- set: (bindingId: string, output: Output.Output) =>
312
- Effect.sync(() => {
313
- const key = bindingId.replaceAll(/[^a-zA-Z0-9]/g, "_");
314
- env[key] = output.pipe(
315
- Output.map((value) => JSON.stringify(value)),
316
- );
317
- return key;
318
- }),
319
- get: <T>(key: string) =>
320
- Config.string(key).pipe(
321
- Effect.flatMap((value) =>
322
- Effect.try({
323
- try: () => JSON.parse(value) as T,
324
- catch: (error) => error as Error,
325
- }),
326
- ),
327
- Effect.catch((cause) =>
328
- Effect.die(
329
- new Error(`Failed to get environment variable: ${key}`, {
330
- cause,
331
- }),
332
- ),
333
- ),
334
- ),
335
- run: (effect: Effect.Effect<void, never, any>) =>
336
- Effect.sync(() => {
337
- runners.push(effect);
338
- }),
339
- };
340
- },
300
+ createRuntimeContext: createHostRuntimeContext("AWS.ECS.Task") as (
301
+ id: string,
302
+ ) => TaskRuntimeContext,
341
303
  });
342
304
 
343
305
  export const TaskProvider = () =>
@@ -345,9 +307,9 @@ export const TaskProvider = () =>
345
307
  Task,
346
308
  Effect.gen(function* () {
347
309
  const stack = yield* Stack;
310
+ const docker = yield* Docker;
348
311
 
349
312
  const { dotAlchemy } = yield* AlchemyContext;
350
- const fs = yield* FileSystem.FileSystem;
351
313
  const virtualEntryPlugin = yield* Bundle.virtualEntryPlugin;
352
314
 
353
315
  const alchemyEnv = {
@@ -576,7 +538,7 @@ export const TaskProvider = () =>
576
538
 
577
539
  const bundleProgram = Effect.fn(function* (id: string, props: TaskProps) {
578
540
  const handler = props.handler ?? "default";
579
- const realMain = yield* fs.realPath(props.main);
541
+ const realMain = yield* resolveMainPath(props.main);
580
542
  const cwd = yield* findCwdForBundle(realMain);
581
543
 
582
544
  const buildBundle = Effect.fn(function* (
@@ -589,14 +551,27 @@ export const TaskProvider = () =>
589
551
  input: entry,
590
552
  cwd,
591
553
  platform: "node",
554
+ // The container runs on `bun`; keep `bun`/`bun:*` external (the
555
+ // runtime provides them) and resolve the `bun` export condition
556
+ // so `@effect/platform-bun` picks its Bun implementations.
557
+ external: [
558
+ "bun",
559
+ "bun:*",
560
+ ...((props.build?.input?.external as string[] | undefined) ??
561
+ []),
562
+ ],
563
+ resolve: {
564
+ conditionNames: ["bun", "import", "module", "default"],
565
+ ...props.build?.input?.resolve,
566
+ },
592
567
  plugins: [props.build?.input?.plugins, plugins],
593
568
  },
594
569
  {
595
570
  ...props.build?.output,
596
571
  format: "esm",
597
572
  sourcemap: props.build?.output?.sourcemap ?? false,
598
- minify: props.build?.output?.minify ?? true,
599
- entryFileNames: "index.js",
573
+ minify: props.build?.output?.minify ?? false,
574
+ entryFileNames: "index.mjs",
600
575
  },
601
576
  );
602
577
  });
@@ -607,7 +582,8 @@ export const TaskProvider = () =>
607
582
  realMain,
608
583
  virtualEntryPlugin(
609
584
  (importPath) => `
610
- import { NodeServices } from "@effect/platform-node";
585
+ import { BunServices } from "@effect/platform-bun";
586
+ import { BunHttpServer } from "alchemy/Http";
611
587
  import { Stack } from "alchemy/Stack";
612
588
  import * as Config from "effect/Config";
613
589
  import * as ConfigProvider from "effect/ConfigProvider";
@@ -621,13 +597,17 @@ import * as Region from "@distilled.cloud/aws/Region";
621
597
  import { ${handler} as handler } from ${JSON.stringify(importPath)};
622
598
 
623
599
  const platform = Layer.mergeAll(
624
- NodeServices.layer,
600
+ BunServices.layer,
625
601
  FetchHttpClient.layer,
626
602
  Logger.layer([Logger.consolePretty()]),
627
603
  );
628
604
 
605
+ // Resolve the bundled program (the runners registered via host.run / serve)
606
+ // and run it with a Bun HTTP server bound to PORT, so a returned { fetch }
607
+ // handler is actually served and host.run loops stay alive.
629
608
  const program = handler.pipe(
630
- Effect.flatMap((task) => task.RuntimeContext.exports.program),
609
+ Effect.flatMap((task) => task.RuntimeContext.exports),
610
+ Effect.flatMap((exports) => exports.program),
631
611
  Effect.provide(
632
612
  Layer.effect(
633
613
  Stack,
@@ -645,6 +625,7 @@ const program = handler.pipe(
645
625
  ).pipe(
646
626
  Layer.provideMerge(Credentials.fromEnv()),
647
627
  Layer.provideMerge(Region.fromEnv()),
628
+ Layer.provideMerge(BunHttpServer()),
648
629
  Layer.provideMerge(platform),
649
630
  Layer.provideMerge(
650
631
  Layer.succeed(
@@ -657,34 +638,43 @@ const program = handler.pipe(
657
638
  Effect.scoped
658
639
  );
659
640
 
660
- await Effect.runPromise(program);
641
+ console.log("Task bootstrap starting...");
642
+ await Effect.runPromise(program).catch((err) => {
643
+ console.error("Task bootstrap failed:", err);
644
+ process.exit(1);
645
+ });
661
646
  `,
662
647
  ),
663
648
  );
664
649
 
665
- const mainFile = bundleOutput.files[0];
666
- const code =
667
- typeof mainFile.content === "string"
668
- ? new TextEncoder().encode(mainFile.content)
669
- : mainFile.content;
650
+ // Return every emitted file (entry + shared chunks). Dynamic imports in
651
+ // the Bun HTTP server / AWS SDK split into chunks; dropping any of them
652
+ // crashes the container with `Cannot find module './chunk-XXX.js'`.
653
+ const files = bundleOutput.files.map((file) => ({
654
+ path: file.path,
655
+ content:
656
+ typeof file.content === "string"
657
+ ? new TextEncoder().encode(file.content)
658
+ : file.content,
659
+ }));
670
660
 
671
- return { code, hash: bundleOutput.hash };
661
+ return { files, hash: bundleOutput.hash };
672
662
  });
673
663
 
674
664
  const buildAndPushImage = Effect.fn(function* ({
675
665
  id,
676
666
  repositoryUri,
677
667
  hash,
678
- code,
668
+ files,
679
669
  props,
680
670
  }: {
681
671
  id: string;
682
672
  repositoryUri: string;
683
673
  hash: string;
684
- code: Uint8Array<ArrayBufferLike>;
674
+ files: { path: string; content: Uint8Array<ArrayBufferLike> }[];
685
675
  props: TaskProps;
686
676
  }) {
687
- const realMain = yield* fs.realPath(props.main);
677
+ const realMain = yield* resolveMainPath(props.main);
688
678
  const contextDir = yield* getStableContextDir(
689
679
  realMain,
690
680
  dotAlchemy,
@@ -699,6 +689,10 @@ await Effect.runPromise(program);
699
689
  `FROM ${base}`,
700
690
  `WORKDIR /app`,
701
691
  `COPY index.mjs /app/index.mjs`,
692
+ // Copy any additional rolldown chunks (`chunk-XXX.js`,
693
+ // `BunServices-YYY.js`, …). Non-trivial bundles always emit at
694
+ // least one; minimal bundles emit none and the COPY no-ops.
695
+ `COPY *.js /app/`,
702
696
  ];
703
697
  if (props.port !== undefined) {
704
698
  lines.push(
@@ -724,15 +718,31 @@ await Effect.runPromise(program);
724
718
  );
725
719
  const registry = credentials.proxyEndpoint.replace(/^https?:\/\//, "");
726
720
 
727
- yield* materializeDockerfile(dockerfile, contextDir);
728
- yield* writeContextFiles(contextDir, [
729
- { path: "index.mjs", content: code },
730
- ]);
731
- yield* dockerBuild({
721
+ yield* docker.materialize({
722
+ context: contextDir,
723
+ dockerfile: dockerfile,
724
+ // Entry chunk becomes `index.mjs`; all other chunks keep their
725
+ // emitted `*.js` names so the entry's relative imports resolve.
726
+ files: files.map((file, index) => ({
727
+ path: index === 0 ? "index.mjs" : file.path,
728
+ content: file.content,
729
+ })),
730
+ });
731
+ // Build for the architecture the task definition declares (Fargate
732
+ // defaults to X86_64 when `runtimePlatform` is unset). Without this, an
733
+ // image built on an ARM64 host (e.g. Apple Silicon) is rejected at task
734
+ // start with `image Manifest does not contain descriptor matching
735
+ // platform 'linux/amd64'`.
736
+ const buildPlatform =
737
+ props.runtimePlatform?.cpuArchitecture === "ARM64"
738
+ ? "linux/arm64"
739
+ : "linux/amd64";
740
+ yield* docker.image.build({
732
741
  tag: imageUri,
733
742
  context: contextDir,
743
+ platform: buildPlatform,
734
744
  });
735
- yield* pushImage(imageUri, {
745
+ yield* docker.image.push(imageUri, {
736
746
  username: "AWS",
737
747
  password,
738
748
  server: registry,
@@ -999,12 +1009,12 @@ await Effect.runPromise(program);
999
1009
  // definitions are versioned in AWS, so registering a new revision
1000
1010
  // is the unit of "update" — the prior revision is deregistered
1001
1011
  // only on `delete` of the resource.
1002
- const { code, hash } = yield* bundleProgram(id, news);
1012
+ const { files, hash } = yield* bundleProgram(id, news);
1003
1013
  const imageUri = yield* buildAndPushImage({
1004
1014
  id,
1005
1015
  repositoryUri,
1006
1016
  hash,
1007
- code,
1017
+ files,
1008
1018
  props: {
1009
1019
  ...news,
1010
1020
  env: {
@@ -1158,6 +1168,11 @@ await Effect.runPromise(program);
1158
1168
  RoleName: output.taskRoleName,
1159
1169
  })
1160
1170
  .pipe(
1171
+ // The role may already be gone (delete re-run / race) — treat a
1172
+ // missing role as "no policies to delete" so delete is idempotent.
1173
+ Effect.catchTag("NoSuchEntityException", () =>
1174
+ Effect.succeed({ PolicyNames: [] as string[] }),
1175
+ ),
1161
1176
  Effect.flatMap((policies) =>
1162
1177
  Effect.all(
1163
1178
  (policies.PolicyNames ?? []).map((policyName) =>
@@ -1186,6 +1201,9 @@ await Effect.runPromise(program);
1186
1201
  RoleName: roleName,
1187
1202
  })
1188
1203
  .pipe(
1204
+ Effect.catchTag("NoSuchEntityException", () =>
1205
+ Effect.succeed({ AttachedPolicies: [] }),
1206
+ ),
1189
1207
  Effect.flatMap((policies) =>
1190
1208
  Effect.all(
1191
1209
  (policies.AttachedPolicies ?? []).map((policy) =>
@@ -1,11 +1,12 @@
1
1
  import * as iam from "@distilled.cloud/aws/iam";
2
2
  import * as Effect from "effect/Effect";
3
+ import * as Schedule from "effect/Schedule";
3
4
  import * as Stream from "effect/Stream";
4
5
  import { Unowned } from "../../AdoptPolicy.ts";
5
6
  import { isResolved } from "../../Diff.ts";
6
7
  import { createPhysicalName } from "../../PhysicalName.ts";
7
8
  import * as Provider from "../../Provider.ts";
8
- import { Resource } from "../../Resource.ts";
9
+ import { Resource, type ResourceBinding } from "../../Resource.ts";
9
10
  import {
10
11
  createInternalTags,
11
12
  createTagsList,
@@ -15,7 +16,7 @@ import {
15
16
  import type { AccountID } from "../Environment.ts";
16
17
  import { AWSEnvironment } from "../Environment.ts";
17
18
  import type { Providers } from "../Providers.ts";
18
- import type { PolicyDocument } from "./Policy.ts";
19
+ import type { PolicyDocument, PolicyStatement } from "./Policy.ts";
19
20
  import {
20
21
  parsePolicyDocument,
21
22
  stringifyPolicyDocument,
@@ -25,6 +26,22 @@ import {
25
26
  export type RoleName = string;
26
27
  export type RoleArn = `arn:aws:iam::${AccountID}:role/${RoleName}`;
27
28
 
29
+ /**
30
+ * IAM misuses `MalformedPolicyDocument` for an eventual-consistency case: a
31
+ * trust policy whose `Principal` names a *freshly created* user/role is
32
+ * rejected with "Invalid principal in policy" until that principal finishes
33
+ * propagating through IAM (typically a few seconds). That specific message is
34
+ * retryable; a genuinely malformed document (bad syntax/fields) is not and
35
+ * fails fast because its message never matches.
36
+ */
37
+ const invalidPrincipalRetry = {
38
+ while: (e: { _tag: string; message?: string }) =>
39
+ e._tag === "MalformedPolicyDocumentException" &&
40
+ (e.message?.includes("Invalid principal") ?? false),
41
+ schedule: Schedule.exponential("2 seconds"),
42
+ times: 5,
43
+ } as const;
44
+
28
45
  export interface RoleProps {
29
46
  /**
30
47
  * Name of the role. If omitted, a unique name will be generated.
@@ -36,9 +53,11 @@ export interface RoleProps {
36
53
  */
37
54
  path?: string;
38
55
  /**
39
- * IAM trust policy for the role.
56
+ * IAM trust policy for the role. Optional when a binding contributes the
57
+ * trust statements (see the `assumeRolePolicyStatements` binding field) — at
58
+ * least one of the two must supply a statement.
40
59
  */
41
- assumeRolePolicyDocument: PolicyDocument;
60
+ assumeRolePolicyDocument?: PolicyDocument;
42
61
  /**
43
62
  * Managed policy ARNs to attach to the role.
44
63
  */
@@ -81,10 +100,69 @@ export interface Role extends Resource<
81
100
  permissionsBoundary: string | undefined;
82
101
  tags: Record<string, string>;
83
102
  },
84
- never,
103
+ {
104
+ /**
105
+ * IAM policy statements contributed by bindings (e.g. a consumer granting
106
+ * this role access to a resource). They are folded into a managed inline
107
+ * policy named `alchemy-bindings` on the role.
108
+ */
109
+ policyStatements?: PolicyStatement[];
110
+ /**
111
+ * Trust-policy (assume-role) statements contributed by bindings — e.g. a
112
+ * consumer declaring which service principal may assume this role. They are
113
+ * merged into the role's `assumeRolePolicyDocument`.
114
+ */
115
+ assumeRolePolicyStatements?: PolicyStatement[];
116
+ },
85
117
  Providers
86
118
  > {}
87
119
 
120
+ /**
121
+ * Name of the inline policy the role provider synthesizes from binding-supplied
122
+ * {@link PolicyStatement}s.
123
+ */
124
+ const BINDINGS_POLICY_NAME = "alchemy-bindings";
125
+
126
+ /**
127
+ * Merge the user's inline policies with a synthetic `alchemy-bindings` policy
128
+ * built from binding-supplied statements (deduped by JSON identity, sorted for
129
+ * a stable document).
130
+ */
131
+ const mergeBoundInlinePolicies = (
132
+ inlinePolicies: Record<string, PolicyDocument> | undefined,
133
+ bindings: ResourceBinding<Role["Binding"]>[],
134
+ ): Record<string, PolicyDocument> => {
135
+ const statements = bindings
136
+ .filter((binding) => (binding as { action?: string }).action !== "delete")
137
+ .flatMap((binding) => binding.data?.policyStatements ?? []);
138
+ if (statements.length === 0) return inlinePolicies ?? {};
139
+ const deduped = Array.from(
140
+ new Map(statements.map((s) => [JSON.stringify(s), s])).values(),
141
+ ).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
142
+ return {
143
+ ...inlinePolicies,
144
+ [BINDINGS_POLICY_NAME]: { Version: "2012-10-17", Statement: deduped },
145
+ };
146
+ };
147
+
148
+ /**
149
+ * Merge the user's trust policy with binding-supplied assume-role statements
150
+ * (deduped by JSON identity, sorted for a stable document).
151
+ */
152
+ const mergeBoundAssumeRolePolicy = (
153
+ doc: PolicyDocument | undefined,
154
+ bindings: ResourceBinding<Role["Binding"]>[],
155
+ ): PolicyDocument => {
156
+ const bound = bindings
157
+ .filter((binding) => (binding as { action?: string }).action !== "delete")
158
+ .flatMap((binding) => binding.data?.assumeRolePolicyStatements ?? []);
159
+ const statements = [...(doc?.Statement ?? []), ...bound];
160
+ const deduped = Array.from(
161
+ new Map(statements.map((s) => [JSON.stringify(s), s])).values(),
162
+ ).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
163
+ return { Version: "2012-10-17", Statement: deduped };
164
+ };
165
+
88
166
  /**
89
167
  * An IAM role for AWS services and runtimes.
90
168
  * @resource
@@ -109,8 +187,6 @@ export const RoleProvider = () =>
109
187
  Provider.effect(
110
188
  Role,
111
189
  Effect.gen(function* () {
112
- yield* AWSEnvironment;
113
-
114
190
  const toRoleName = (id: string, props: { roleName?: string } = {}) =>
115
191
  props.roleName
116
192
  ? Effect.succeed(props.roleName)
@@ -249,7 +325,13 @@ export const RoleProvider = () =>
249
325
  const roles = yield* iam.listRoles.pages({}).pipe(
250
326
  Stream.runCollect,
251
327
  Effect.map((chunk) =>
252
- Array.from(chunk).flatMap((page) => page.Roles ?? []),
328
+ Array.from(chunk)
329
+ .flatMap((page) => page.Roles ?? [])
330
+ // Service-linked roles are owned by AWS and cannot be
331
+ // modified or deleted by us (UnmodifiableEntityException).
332
+ .filter(
333
+ (role) => !role.Path?.startsWith("/aws-service-role/"),
334
+ ),
253
335
  ),
254
336
  );
255
337
 
@@ -297,7 +379,7 @@ export const RoleProvider = () =>
297
379
  attrs !== undefined,
298
380
  );
299
381
  }),
300
- diff: Effect.fn(function* ({ id, olds, news }) {
382
+ diff: Effect.fn(function* ({ id, olds, news = {} }) {
301
383
  if (!isResolved(news)) return;
302
384
  if (
303
385
  (yield* toRoleName(id, olds ?? {})) !==
@@ -305,7 +387,7 @@ export const RoleProvider = () =>
305
387
  ) {
306
388
  return { action: "replace" } as const;
307
389
  }
308
- if ((olds?.path ?? "/") !== (news.path ?? "/")) {
390
+ if ((olds?.path ?? "/") !== (news?.path ?? "/")) {
309
391
  return { action: "replace" } as const;
310
392
  }
311
393
  }),
@@ -354,8 +436,29 @@ export const RoleProvider = () =>
354
436
  };
355
437
  return (yield* hasAlchemyTags(id, tags)) ? attrs : Unowned(attrs);
356
438
  }),
357
- reconcile: Effect.fn(function* ({ id, news, output, session }) {
439
+ reconcile: Effect.fn(function* ({
440
+ id,
441
+ news = {},
442
+ output,
443
+ session,
444
+ bindings,
445
+ }) {
358
446
  const roleName = output?.roleName ?? (yield* toRoleName(id, news));
447
+ // Fold binding-supplied policy statements into the inline policies.
448
+ const inlinePolicies = mergeBoundInlinePolicies(
449
+ news.inlinePolicies,
450
+ bindings,
451
+ );
452
+ // Merge binding-supplied trust statements into the trust policy.
453
+ const assumeRolePolicyDocument = mergeBoundAssumeRolePolicy(
454
+ news.assumeRolePolicyDocument,
455
+ bindings,
456
+ );
457
+ if (assumeRolePolicyDocument.Statement.length === 0) {
458
+ return yield* Effect.die(
459
+ "Role requires a trust policy: set `assumeRolePolicyDocument` or bind `assumeRolePolicyStatements`.",
460
+ );
461
+ }
359
462
  const desiredTags = {
360
463
  ...(yield* createInternalTags(id)),
361
464
  ...news.tags,
@@ -381,7 +484,7 @@ export const RoleProvider = () =>
381
484
  Path: news.path,
382
485
  RoleName: roleName,
383
486
  AssumeRolePolicyDocument: stringifyPolicyDocument(
384
- news.assumeRolePolicyDocument,
487
+ assumeRolePolicyDocument,
385
488
  ),
386
489
  Description: news.description,
387
490
  MaxSessionDuration: news.maxSessionDuration,
@@ -389,6 +492,7 @@ export const RoleProvider = () =>
389
492
  Tags: createTagsList(desiredTags),
390
493
  })
391
494
  .pipe(
495
+ Effect.retry(invalidPrincipalRetry),
392
496
  Effect.catchTag("EntityAlreadyExistsException", () =>
393
497
  iam.getRole({ RoleName: roleName }),
394
498
  ),
@@ -408,14 +512,16 @@ export const RoleProvider = () =>
408
512
  // when the document actually differs.
409
513
  if (
410
514
  JSON.stringify(observedAssumePolicy ?? null) !==
411
- JSON.stringify(news.assumeRolePolicyDocument)
515
+ JSON.stringify(assumeRolePolicyDocument)
412
516
  ) {
413
- yield* iam.updateAssumeRolePolicy({
414
- RoleName: roleName,
415
- PolicyDocument: stringifyPolicyDocument(
416
- news.assumeRolePolicyDocument,
417
- ),
418
- });
517
+ yield* iam
518
+ .updateAssumeRolePolicy({
519
+ RoleName: roleName,
520
+ PolicyDocument: stringifyPolicyDocument(
521
+ assumeRolePolicyDocument,
522
+ ),
523
+ })
524
+ .pipe(Effect.retry(invalidPrincipalRetry));
419
525
  }
420
526
 
421
527
  // Sync description / maxSessionDuration via updateRole.
@@ -465,7 +571,7 @@ export const RoleProvider = () =>
465
571
  yield* syncInlinePolicies({
466
572
  roleName,
467
573
  olds: observedInlinePolicies,
468
- news: news.inlinePolicies ?? {},
574
+ news: inlinePolicies,
469
575
  });
470
576
 
471
577
  // Sync tags against the cloud's actual tags so adoption /
@@ -501,9 +607,9 @@ export const RoleProvider = () =>
501
607
  observedRole.Role?.Path ??
502
608
  news.path ??
503
609
  "/",
504
- assumeRolePolicyDocument: news.assumeRolePolicyDocument,
610
+ assumeRolePolicyDocument,
505
611
  managedPolicyArns: news.managedPolicyArns ?? [],
506
- inlinePolicies: news.inlinePolicies ?? {},
612
+ inlinePolicies,
507
613
  description: liveRole.Role?.Description ?? news.description,
508
614
  maxSessionDuration:
509
615
  liveRole.Role?.MaxSessionDuration ?? news.maxSessionDuration,
@@ -538,6 +644,8 @@ export const RoleProvider = () =>
538
644
  ),
539
645
  ),
540
646
  ),
647
+ // The role itself may already be gone.
648
+ Effect.catchTag("NoSuchEntityException", () => Effect.void),
541
649
  );
542
650
 
543
651
  yield* iam
@@ -560,6 +668,8 @@ export const RoleProvider = () =>
560
668
  ),
561
669
  ),
562
670
  ),
671
+ // The role itself may already be gone.
672
+ Effect.catchTag("NoSuchEntityException", () => Effect.void),
563
673
  );
564
674
 
565
675
  yield* iam
@@ -0,0 +1,43 @@
1
+ import type * as microvms from "@distilled.cloud/aws/lambda-microvms";
2
+ import type * as Effect from "effect/Effect";
3
+ import * as Binding from "../../Binding.ts";
4
+ import type { MicrovmImage } from "./MicrovmImage.ts";
5
+
6
+ export interface CreateAuthTokenRequest
7
+ extends microvms.CreateMicrovmAuthTokenRequest {}
8
+
9
+ /**
10
+ * Runtime binding for `CreateMicrovmAuthToken`.
11
+ *
12
+ * Bind it to a {@link MicrovmImage} to get a callable that mints a short-lived
13
+ * token for a running MicroVM. Send it on the MicroVM `endpoint` in the
14
+ * `X-aws-proxy-auth` header.
15
+ * @binding
16
+ * @section Auth Tokens
17
+ * @example Mint an auth token
18
+ * ```typescript
19
+ * const createAuthToken = yield* AWS.Lambda.CreateAuthToken(Sandbox);
20
+ * const { authToken } = yield* createAuthToken({
21
+ * microvmIdentifier: vm.microvmId,
22
+ * expirationInMinutes: 5,
23
+ * allowedPorts: [{ port: 5000 }],
24
+ * });
25
+ * ```
26
+ */
27
+ export interface CreateAuthToken extends Binding.Service<
28
+ CreateAuthToken,
29
+ "AWS.Lambda.CreateAuthToken",
30
+ (
31
+ image: MicrovmImage,
32
+ ) => Effect.Effect<
33
+ (
34
+ request: CreateAuthTokenRequest,
35
+ ) => Effect.Effect<
36
+ microvms.CreateMicrovmAuthTokenResponse,
37
+ microvms.CreateMicrovmAuthTokenError
38
+ >
39
+ >
40
+ > {}
41
+ export const CreateAuthToken = Binding.Service<CreateAuthToken>(
42
+ "AWS.Lambda.CreateAuthToken",
43
+ );
@@ -0,0 +1,11 @@
1
+ import * as microvms from "@distilled.cloud/aws/lambda-microvms";
2
+ import { CreateAuthToken } from "./CreateAuthToken.ts";
3
+ import { makeImageBinding } from "./MicrovmBinding.ts";
4
+
5
+ export const CreateAuthTokenHttp = makeImageBinding({
6
+ binding: CreateAuthToken,
7
+ name: "CreateAuthToken",
8
+ actions: ["lambda:CreateMicrovmAuthToken"],
9
+ operation: microvms.createMicrovmAuthToken,
10
+ scope: "microvm",
11
+ });