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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (697) hide show
  1. package/README.md +1 -1
  2. package/bin/exec.js +684 -758
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/AuthProvider.d.ts.map +1 -1
  5. package/lib/AWS/AuthProvider.js +22 -9
  6. package/lib/AWS/AuthProvider.js.map +1 -1
  7. package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
  8. package/lib/AWS/AutoScaling/LaunchTemplate.js +1 -1
  9. package/lib/AWS/CloudWatch/Dashboard.d.ts.map +1 -1
  10. package/lib/AWS/CloudWatch/Dashboard.js +4 -1
  11. package/lib/AWS/CloudWatch/Dashboard.js.map +1 -1
  12. package/lib/AWS/Credentials.d.ts +58 -2
  13. package/lib/AWS/Credentials.d.ts.map +1 -1
  14. package/lib/AWS/Credentials.js +124 -2
  15. package/lib/AWS/Credentials.js.map +1 -1
  16. package/lib/AWS/EC2/Image.d.ts.map +1 -1
  17. package/lib/AWS/EC2/Image.js +4 -1
  18. package/lib/AWS/EC2/Image.js.map +1 -1
  19. package/lib/AWS/EC2/Instance.d.ts +4 -3
  20. package/lib/AWS/EC2/Instance.d.ts.map +1 -1
  21. package/lib/AWS/EC2/Instance.js +4 -2
  22. package/lib/AWS/EC2/Instance.js.map +1 -1
  23. package/lib/AWS/EC2/KeyPair.d.ts +87 -0
  24. package/lib/AWS/EC2/KeyPair.d.ts.map +1 -0
  25. package/lib/AWS/EC2/KeyPair.js +198 -0
  26. package/lib/AWS/EC2/KeyPair.js.map +1 -0
  27. package/lib/AWS/EC2/NetworkAcl.d.ts.map +1 -1
  28. package/lib/AWS/EC2/NetworkAcl.js +4 -1
  29. package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
  30. package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
  31. package/lib/AWS/EC2/SecurityGroup.js +4 -1
  32. package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
  33. package/lib/AWS/EC2/SecurityGroupRule.d.ts.map +1 -1
  34. package/lib/AWS/EC2/SecurityGroupRule.js +14 -7
  35. package/lib/AWS/EC2/SecurityGroupRule.js.map +1 -1
  36. package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
  37. package/lib/AWS/EC2/Subnet.js +29 -5
  38. package/lib/AWS/EC2/Subnet.js.map +1 -1
  39. package/lib/AWS/EC2/hosted.d.ts +8 -10
  40. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  41. package/lib/AWS/EC2/hosted.js +81 -67
  42. package/lib/AWS/EC2/hosted.js.map +1 -1
  43. package/lib/AWS/EC2/index.d.ts +1 -0
  44. package/lib/AWS/EC2/index.d.ts.map +1 -1
  45. package/lib/AWS/EC2/index.js +1 -0
  46. package/lib/AWS/EC2/index.js.map +1 -1
  47. package/lib/AWS/ECS/Task.d.ts +8 -8
  48. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  49. package/lib/AWS/ECS/Task.js +82 -56
  50. package/lib/AWS/ECS/Task.js.map +1 -1
  51. package/lib/AWS/IAM/Role.d.ts +19 -4
  52. package/lib/AWS/IAM/Role.d.ts.map +1 -1
  53. package/lib/AWS/IAM/Role.js +81 -16
  54. package/lib/AWS/IAM/Role.js.map +1 -1
  55. package/lib/AWS/Lambda/CreateAuthToken.d.ts +28 -0
  56. package/lib/AWS/Lambda/CreateAuthToken.d.ts.map +1 -0
  57. package/lib/AWS/Lambda/CreateAuthToken.js +3 -0
  58. package/lib/AWS/Lambda/CreateAuthToken.js.map +1 -0
  59. package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts +3 -0
  60. package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts.map +1 -0
  61. package/lib/AWS/Lambda/CreateAuthTokenHttp.js +11 -0
  62. package/lib/AWS/Lambda/CreateAuthTokenHttp.js.map +1 -0
  63. package/lib/AWS/Lambda/CreateShellAuthToken.d.ts +27 -0
  64. package/lib/AWS/Lambda/CreateShellAuthToken.d.ts.map +1 -0
  65. package/lib/AWS/Lambda/CreateShellAuthToken.js +3 -0
  66. package/lib/AWS/Lambda/CreateShellAuthToken.js.map +1 -0
  67. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts +3 -0
  68. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts.map +1 -0
  69. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js +11 -0
  70. package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js.map +1 -0
  71. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts +18 -0
  72. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts.map +1 -0
  73. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js +3 -0
  74. package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js.map +1 -0
  75. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts +3 -0
  76. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts.map +1 -0
  77. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js +12 -0
  78. package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js.map +1 -0
  79. package/lib/AWS/Lambda/Function.d.ts +4 -2
  80. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  81. package/lib/AWS/Lambda/Function.js +10 -5
  82. package/lib/AWS/Lambda/Function.js.map +1 -1
  83. package/lib/AWS/Lambda/GetMicrovm.d.ts +23 -0
  84. package/lib/AWS/Lambda/GetMicrovm.d.ts.map +1 -0
  85. package/lib/AWS/Lambda/GetMicrovm.js +3 -0
  86. package/lib/AWS/Lambda/GetMicrovm.js.map +1 -0
  87. package/lib/AWS/Lambda/GetMicrovmHttp.d.ts +3 -0
  88. package/lib/AWS/Lambda/GetMicrovmHttp.d.ts.map +1 -0
  89. package/lib/AWS/Lambda/GetMicrovmHttp.js +13 -0
  90. package/lib/AWS/Lambda/GetMicrovmHttp.js.map +1 -0
  91. package/lib/AWS/Lambda/GetMicrovmImage.d.ts +23 -0
  92. package/lib/AWS/Lambda/GetMicrovmImage.d.ts.map +1 -0
  93. package/lib/AWS/Lambda/GetMicrovmImage.js +3 -0
  94. package/lib/AWS/Lambda/GetMicrovmImage.js.map +1 -0
  95. package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts +18 -0
  96. package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts.map +1 -0
  97. package/lib/AWS/Lambda/GetMicrovmImageBuild.js +3 -0
  98. package/lib/AWS/Lambda/GetMicrovmImageBuild.js.map +1 -0
  99. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts +3 -0
  100. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts.map +1 -0
  101. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js +12 -0
  102. package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js.map +1 -0
  103. package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts +3 -0
  104. package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts.map +1 -0
  105. package/lib/AWS/Lambda/GetMicrovmImageHttp.js +12 -0
  106. package/lib/AWS/Lambda/GetMicrovmImageHttp.js.map +1 -0
  107. package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts +18 -0
  108. package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts.map +1 -0
  109. package/lib/AWS/Lambda/GetMicrovmImageVersion.js +3 -0
  110. package/lib/AWS/Lambda/GetMicrovmImageVersion.js.map +1 -0
  111. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts +3 -0
  112. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts.map +1 -0
  113. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js +12 -0
  114. package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js.map +1 -0
  115. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts +17 -0
  116. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts.map +1 -0
  117. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js +3 -0
  118. package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js.map +1 -0
  119. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts +3 -0
  120. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts.map +1 -0
  121. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js +10 -0
  122. package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js.map +1 -0
  123. package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts +17 -0
  124. package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts.map +1 -0
  125. package/lib/AWS/Lambda/ListManagedMicrovmImages.js +3 -0
  126. package/lib/AWS/Lambda/ListManagedMicrovmImages.js.map +1 -0
  127. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts +3 -0
  128. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts.map +1 -0
  129. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js +10 -0
  130. package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js.map +1 -0
  131. package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts +19 -0
  132. package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts.map +1 -0
  133. package/lib/AWS/Lambda/ListMicrovmImageBuilds.js +3 -0
  134. package/lib/AWS/Lambda/ListMicrovmImageBuilds.js.map +1 -0
  135. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts +3 -0
  136. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts.map +1 -0
  137. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js +12 -0
  138. package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js.map +1 -0
  139. package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts +18 -0
  140. package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts.map +1 -0
  141. package/lib/AWS/Lambda/ListMicrovmImageVersions.js +3 -0
  142. package/lib/AWS/Lambda/ListMicrovmImageVersions.js.map +1 -0
  143. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts +3 -0
  144. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts.map +1 -0
  145. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js +12 -0
  146. package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js.map +1 -0
  147. package/lib/AWS/Lambda/ListMicrovms.d.ts +23 -0
  148. package/lib/AWS/Lambda/ListMicrovms.d.ts.map +1 -0
  149. package/lib/AWS/Lambda/ListMicrovms.js +3 -0
  150. package/lib/AWS/Lambda/ListMicrovms.js.map +1 -0
  151. package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts +3 -0
  152. package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts.map +1 -0
  153. package/lib/AWS/Lambda/ListMicrovmsHttp.js +12 -0
  154. package/lib/AWS/Lambda/ListMicrovmsHttp.js.map +1 -0
  155. package/lib/AWS/Lambda/MicrovmBinding.d.ts +61 -0
  156. package/lib/AWS/Lambda/MicrovmBinding.d.ts.map +1 -0
  157. package/lib/AWS/Lambda/MicrovmBinding.js +279 -0
  158. package/lib/AWS/Lambda/MicrovmBinding.js.map +1 -0
  159. package/lib/AWS/Lambda/MicrovmBundle.d.ts +62 -0
  160. package/lib/AWS/Lambda/MicrovmBundle.d.ts.map +1 -0
  161. package/lib/AWS/Lambda/MicrovmBundle.js +197 -0
  162. package/lib/AWS/Lambda/MicrovmBundle.js.map +1 -0
  163. package/lib/AWS/Lambda/MicrovmImage.d.ts +488 -0
  164. package/lib/AWS/Lambda/MicrovmImage.d.ts.map +1 -0
  165. package/lib/AWS/Lambda/MicrovmImage.js +381 -0
  166. package/lib/AWS/Lambda/MicrovmImage.js.map +1 -0
  167. package/lib/AWS/Lambda/MicrovmProvider.d.ts +7 -0
  168. package/lib/AWS/Lambda/MicrovmProvider.d.ts.map +1 -0
  169. package/lib/AWS/Lambda/MicrovmProvider.js +384 -0
  170. package/lib/AWS/Lambda/MicrovmProvider.js.map +1 -0
  171. package/lib/AWS/Lambda/MicrovmRpc.d.ts +50 -0
  172. package/lib/AWS/Lambda/MicrovmRpc.d.ts.map +1 -0
  173. package/lib/AWS/Lambda/MicrovmRpc.js +50 -0
  174. package/lib/AWS/Lambda/MicrovmRpc.js.map +1 -0
  175. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts +9 -0
  176. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts.map +1 -0
  177. package/lib/AWS/Lambda/MicrovmRuntimeContext.js +67 -0
  178. package/lib/AWS/Lambda/MicrovmRuntimeContext.js.map +1 -0
  179. package/lib/AWS/Lambda/NetworkConnector.d.ts +142 -0
  180. package/lib/AWS/Lambda/NetworkConnector.d.ts.map +1 -0
  181. package/lib/AWS/Lambda/NetworkConnector.js +283 -0
  182. package/lib/AWS/Lambda/NetworkConnector.js.map +1 -0
  183. package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
  184. package/lib/AWS/Lambda/QueueEventSource.js +1 -0
  185. package/lib/AWS/Lambda/QueueEventSource.js.map +1 -1
  186. package/lib/AWS/Lambda/ResumeMicrovm.d.ts +23 -0
  187. package/lib/AWS/Lambda/ResumeMicrovm.d.ts.map +1 -0
  188. package/lib/AWS/Lambda/ResumeMicrovm.js +3 -0
  189. package/lib/AWS/Lambda/ResumeMicrovm.js.map +1 -0
  190. package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts +3 -0
  191. package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts.map +1 -0
  192. package/lib/AWS/Lambda/ResumeMicrovmHttp.js +11 -0
  193. package/lib/AWS/Lambda/ResumeMicrovmHttp.js.map +1 -0
  194. package/lib/AWS/Lambda/RunMicrovm.d.ts +33 -0
  195. package/lib/AWS/Lambda/RunMicrovm.d.ts.map +1 -0
  196. package/lib/AWS/Lambda/RunMicrovm.js +3 -0
  197. package/lib/AWS/Lambda/RunMicrovm.js.map +1 -0
  198. package/lib/AWS/Lambda/RunMicrovmHttp.d.ts +3 -0
  199. package/lib/AWS/Lambda/RunMicrovmHttp.d.ts.map +1 -0
  200. package/lib/AWS/Lambda/RunMicrovmHttp.js +13 -0
  201. package/lib/AWS/Lambda/RunMicrovmHttp.js.map +1 -0
  202. package/lib/AWS/Lambda/SuspendMicrovm.d.ts +23 -0
  203. package/lib/AWS/Lambda/SuspendMicrovm.d.ts.map +1 -0
  204. package/lib/AWS/Lambda/SuspendMicrovm.js +3 -0
  205. package/lib/AWS/Lambda/SuspendMicrovm.js.map +1 -0
  206. package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts +3 -0
  207. package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts.map +1 -0
  208. package/lib/AWS/Lambda/SuspendMicrovmHttp.js +11 -0
  209. package/lib/AWS/Lambda/SuspendMicrovmHttp.js.map +1 -0
  210. package/lib/AWS/Lambda/TerminateMicrovm.d.ts +23 -0
  211. package/lib/AWS/Lambda/TerminateMicrovm.d.ts.map +1 -0
  212. package/lib/AWS/Lambda/TerminateMicrovm.js +3 -0
  213. package/lib/AWS/Lambda/TerminateMicrovm.js.map +1 -0
  214. package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts +3 -0
  215. package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts.map +1 -0
  216. package/lib/AWS/Lambda/TerminateMicrovmHttp.js +11 -0
  217. package/lib/AWS/Lambda/TerminateMicrovmHttp.js.map +1 -0
  218. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts +18 -0
  219. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts.map +1 -0
  220. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js +3 -0
  221. package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js.map +1 -0
  222. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts +3 -0
  223. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts.map +1 -0
  224. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js +12 -0
  225. package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js.map +1 -0
  226. package/lib/AWS/Lambda/index.d.ts +38 -0
  227. package/lib/AWS/Lambda/index.d.ts.map +1 -1
  228. package/lib/AWS/Lambda/index.js +38 -0
  229. package/lib/AWS/Lambda/index.js.map +1 -1
  230. package/lib/AWS/Providers.d.ts +1 -1
  231. package/lib/AWS/Providers.d.ts.map +1 -1
  232. package/lib/AWS/Providers.js +6 -2
  233. package/lib/AWS/Providers.js.map +1 -1
  234. package/lib/AWS/RDS/DBClusterParameterGroup.d.ts.map +1 -1
  235. package/lib/AWS/RDS/DBClusterParameterGroup.js +4 -1
  236. package/lib/AWS/RDS/DBClusterParameterGroup.js.map +1 -1
  237. package/lib/AWS/RDS/DBParameterGroup.d.ts.map +1 -1
  238. package/lib/AWS/RDS/DBParameterGroup.js +4 -1
  239. package/lib/AWS/RDS/DBParameterGroup.js.map +1 -1
  240. package/lib/AWS/Region.d.ts.map +1 -1
  241. package/lib/AWS/Region.js +6 -1
  242. package/lib/AWS/Region.js.map +1 -1
  243. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  244. package/lib/AWS/S3/Bucket.js +46 -26
  245. package/lib/AWS/S3/Bucket.js.map +1 -1
  246. package/lib/AlchemyContext.d.ts +7 -0
  247. package/lib/AlchemyContext.d.ts.map +1 -1
  248. package/lib/AlchemyContext.js.map +1 -1
  249. package/lib/Apply.js +2 -2
  250. package/lib/Apply.js.map +1 -1
  251. package/lib/Axiom/Chart.d.ts +9 -1
  252. package/lib/Axiom/Chart.d.ts.map +1 -1
  253. package/lib/Bundle/Bundle.d.ts +1 -0
  254. package/lib/Bundle/Bundle.d.ts.map +1 -1
  255. package/lib/Bundle/Bundle.js +1 -1
  256. package/lib/Bundle/Bundle.js.map +1 -1
  257. package/lib/Bundle/TempRoot.d.ts +9 -0
  258. package/lib/Bundle/TempRoot.d.ts.map +1 -1
  259. package/lib/Bundle/TempRoot.js +22 -0
  260. package/lib/Bundle/TempRoot.js.map +1 -1
  261. package/lib/Bundle/Vite.d.ts +20 -0
  262. package/lib/Bundle/Vite.d.ts.map +1 -0
  263. package/lib/Bundle/Vite.js +130 -0
  264. package/lib/Bundle/Vite.js.map +1 -0
  265. package/lib/Bundle/index.d.ts +0 -1
  266. package/lib/Bundle/index.d.ts.map +1 -1
  267. package/lib/Bundle/index.js +0 -1
  268. package/lib/Bundle/index.js.map +1 -1
  269. package/lib/Cli/Event.d.ts +1 -1
  270. package/lib/Cli/Event.d.ts.map +1 -1
  271. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  272. package/lib/Cli/LoggingCli.js +3 -0
  273. package/lib/Cli/LoggingCli.js.map +1 -1
  274. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  275. package/lib/Cli/commands/_shared.js +7 -1
  276. package/lib/Cli/commands/_shared.js.map +1 -1
  277. package/lib/Cli/commands/cloudflare.d.ts +2 -2
  278. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  279. package/lib/Cli/commands/cloudflare.js +21 -2
  280. package/lib/Cli/commands/cloudflare.js.map +1 -1
  281. package/lib/Cli/commands/deploy.d.ts.map +1 -1
  282. package/lib/Cli/commands/deploy.js +4 -1
  283. package/lib/Cli/commands/deploy.js.map +1 -1
  284. package/lib/Cli/tui/components/PlanProgress.js +5 -3
  285. package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
  286. package/lib/Cloudflare/AI/Gateway.d.ts +1 -1
  287. package/lib/Cloudflare/AI/Gateway.js +1 -1
  288. package/lib/Cloudflare/AI/Search.d.ts +1 -1
  289. package/lib/Cloudflare/AI/Search.js +1 -1
  290. package/lib/Cloudflare/AI/SearchInstance.d.ts +1 -1
  291. package/lib/Cloudflare/AI/SearchInstance.js +1 -1
  292. package/lib/Cloudflare/AI/SearchNamespace.d.ts +1 -1
  293. package/lib/Cloudflare/AI/SearchNamespace.js +1 -1
  294. package/lib/Cloudflare/AI/SearchToken.d.ts.map +1 -1
  295. package/lib/Cloudflare/AI/SearchToken.js +6 -1
  296. package/lib/Cloudflare/AI/SearchToken.js.map +1 -1
  297. package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
  298. package/lib/Cloudflare/Access/Application.js +51 -11
  299. package/lib/Cloudflare/Access/Application.js.map +1 -1
  300. package/lib/Cloudflare/Alerting/Webhook.d.ts.map +1 -1
  301. package/lib/Cloudflare/Alerting/Webhook.js +9 -2
  302. package/lib/Cloudflare/Alerting/Webhook.js.map +1 -1
  303. package/lib/Cloudflare/AnalyticsEngine/WriteDataset.d.ts +2 -2
  304. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
  305. package/lib/Cloudflare/ApiToken/AccountApiToken.js +5 -1
  306. package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
  307. package/lib/Cloudflare/Auth/AuthProvider.js +1 -1
  308. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  309. package/lib/Cloudflare/Containers/Container.d.ts +46 -4
  310. package/lib/Cloudflare/Containers/Container.d.ts.map +1 -1
  311. package/lib/Cloudflare/Containers/Container.js +27 -3
  312. package/lib/Cloudflare/Containers/Container.js.map +1 -1
  313. package/lib/Cloudflare/Containers/ContainerApplication.d.ts +25 -19
  314. package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
  315. package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
  316. package/lib/Cloudflare/Containers/ContainerBundle.d.ts +1 -2
  317. package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
  318. package/lib/Cloudflare/Containers/ContainerBundle.js +2 -4
  319. package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
  320. package/lib/Cloudflare/Containers/ContainerPlatform.js +2 -2
  321. package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
  322. package/lib/Cloudflare/Containers/ContainerProvider.d.ts +2 -1
  323. package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
  324. package/lib/Cloudflare/Containers/ContainerProvider.js +51 -35
  325. package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
  326. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts +3 -1
  327. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
  328. package/lib/Cloudflare/Containers/LocalContainerProvider.js +11 -4
  329. package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
  330. package/lib/Cloudflare/Containers/StartContainer.d.ts.map +1 -1
  331. package/lib/Cloudflare/Containers/StartContainer.js +222 -15
  332. package/lib/Cloudflare/Containers/StartContainer.js.map +1 -1
  333. package/lib/Cloudflare/DNS/ReadDns.d.ts +1 -1
  334. package/lib/Cloudflare/DNS/ReadWriteDns.d.ts +1 -1
  335. package/lib/Cloudflare/DNS/WriteDns.d.ts +1 -1
  336. package/lib/Cloudflare/Flagship/App.d.ts +1 -1
  337. package/lib/Cloudflare/Flagship/App.js +1 -1
  338. package/lib/Cloudflare/Images/Images.d.ts +1 -1
  339. package/lib/Cloudflare/Local.js +2 -1
  340. package/lib/Cloudflare/Local.js.map +1 -1
  341. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  342. package/lib/Cloudflare/Providers.js +2 -1
  343. package/lib/Cloudflare/Providers.js.map +1 -1
  344. package/lib/Cloudflare/Queues/Consumer.d.ts +2 -2
  345. package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
  346. package/lib/Cloudflare/Queues/Consumer.js +21 -13
  347. package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
  348. package/lib/Cloudflare/Queues/Queue.d.ts +1 -1
  349. package/lib/Cloudflare/Queues/Queue.js +1 -1
  350. package/lib/Cloudflare/R2/Bucket.d.ts +2 -2
  351. package/lib/Cloudflare/R2/Bucket.js +2 -2
  352. package/lib/Cloudflare/StateStore/Api.d.ts +4 -1
  353. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
  354. package/lib/Cloudflare/StateStore/Api.js +6 -4
  355. package/lib/Cloudflare/StateStore/Api.js.map +1 -1
  356. package/lib/Cloudflare/StateStore/State.d.ts +28 -2
  357. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  358. package/lib/Cloudflare/StateStore/State.js +122 -19
  359. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  360. package/lib/Cloudflare/Website/Vite.d.ts +26 -23
  361. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  362. package/lib/Cloudflare/Website/Vite.js +25 -7
  363. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  364. package/lib/Cloudflare/Workers/Binding.d.ts +1 -1
  365. package/lib/Cloudflare/Workers/Browser.d.ts +1 -1
  366. package/lib/Cloudflare/Workers/DurableObject.d.ts +54 -3
  367. package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
  368. package/lib/Cloudflare/Workers/DurableObject.js +54 -3
  369. package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
  370. package/lib/Cloudflare/Workers/InferEnv.d.ts +4 -2
  371. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  372. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  373. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +55 -6
  374. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  375. package/lib/Cloudflare/Workers/RpcDurableObject.d.ts +3 -3
  376. package/lib/Cloudflare/Workers/RpcDurableObject.js +3 -3
  377. package/lib/Cloudflare/Workers/RpcWorker.d.ts +4 -4
  378. package/lib/Cloudflare/Workers/RpcWorker.js +4 -4
  379. package/lib/Cloudflare/Workers/ScheduledEvents.js +1 -1
  380. package/lib/Cloudflare/Workers/ScheduledEvents.js.map +1 -1
  381. package/lib/Cloudflare/Workers/VersionMetadata.d.ts +1 -1
  382. package/lib/Cloudflare/Workers/Vite.d.ts +1 -4
  383. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  384. package/lib/Cloudflare/Workers/Vite.js +19 -38
  385. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  386. package/lib/Cloudflare/Workers/Worker.d.ts +73 -13
  387. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  388. package/lib/Cloudflare/Workers/Worker.js +9 -9
  389. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  390. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +2 -1
  391. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  392. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +31 -0
  393. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  394. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +7 -1
  395. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  396. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  397. package/lib/Cloudflare/Workers/WorkerLoader.d.ts +1 -1
  398. package/lib/Cloudflare/Workers/WorkerLoader.js +1 -1
  399. package/lib/Cloudflare/Workers/WorkerProvider.d.ts +10 -0
  400. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  401. package/lib/Cloudflare/Workers/WorkerProvider.js +240 -60
  402. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  403. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +1 -1
  404. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  405. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts +44 -2
  406. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts.map +1 -1
  407. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js +44 -2
  408. package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js.map +1 -1
  409. package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts +77 -0
  410. package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts.map +1 -0
  411. package/lib/Cloudflare/WorkersForPlatforms/Get.js +9 -0
  412. package/lib/Cloudflare/WorkersForPlatforms/Get.js.map +1 -0
  413. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts +9 -0
  414. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts.map +1 -0
  415. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js +43 -0
  416. package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js.map +1 -0
  417. package/lib/Cloudflare/WorkersForPlatforms/index.d.ts +2 -0
  418. package/lib/Cloudflare/WorkersForPlatforms/index.d.ts.map +1 -1
  419. package/lib/Cloudflare/WorkersForPlatforms/index.js +2 -0
  420. package/lib/Cloudflare/WorkersForPlatforms/index.js.map +1 -1
  421. package/lib/Cloudflare/Workflows/Workflow.d.ts +107 -1
  422. package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
  423. package/lib/Cloudflare/Workflows/Workflow.js +93 -6
  424. package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
  425. package/lib/Command/Build.d.ts.map +1 -1
  426. package/lib/Command/Build.js +24 -1
  427. package/lib/Command/Build.js.map +1 -1
  428. package/lib/Docker/Container.d.ts +156 -0
  429. package/lib/Docker/Container.d.ts.map +1 -0
  430. package/lib/Docker/Container.js +221 -0
  431. package/lib/Docker/Container.js.map +1 -0
  432. package/lib/Docker/Docker.d.ts +199 -0
  433. package/lib/Docker/Docker.d.ts.map +1 -0
  434. package/lib/Docker/Docker.js +224 -0
  435. package/lib/Docker/Docker.js.map +1 -0
  436. package/lib/Docker/Image.d.ts +109 -0
  437. package/lib/Docker/Image.d.ts.map +1 -0
  438. package/lib/Docker/Image.js +150 -0
  439. package/lib/Docker/Image.js.map +1 -0
  440. package/lib/Docker/Network.d.ts +61 -0
  441. package/lib/Docker/Network.d.ts.map +1 -0
  442. package/lib/Docker/Network.js +99 -0
  443. package/lib/Docker/Network.js.map +1 -0
  444. package/lib/Docker/Providers.d.ts +15 -0
  445. package/lib/Docker/Providers.d.ts.map +1 -0
  446. package/lib/Docker/Providers.js +18 -0
  447. package/lib/Docker/Providers.js.map +1 -0
  448. package/lib/Docker/Registry.d.ts +30 -0
  449. package/lib/Docker/Registry.d.ts.map +1 -0
  450. package/lib/Docker/Registry.js +44 -0
  451. package/lib/Docker/Registry.js.map +1 -0
  452. package/lib/Docker/RemoteImage.d.ts +102 -0
  453. package/lib/Docker/RemoteImage.d.ts.map +1 -0
  454. package/lib/Docker/RemoteImage.js +123 -0
  455. package/lib/Docker/RemoteImage.js.map +1 -0
  456. package/lib/Docker/Volume.d.ts +81 -0
  457. package/lib/Docker/Volume.d.ts.map +1 -0
  458. package/lib/Docker/Volume.js +107 -0
  459. package/lib/Docker/Volume.js.map +1 -0
  460. package/lib/Docker/index.d.ts +9 -0
  461. package/lib/Docker/index.d.ts.map +1 -0
  462. package/lib/Docker/index.js +8 -0
  463. package/lib/Docker/index.js.map +1 -0
  464. package/lib/Local/ProviderLayer.d.ts +1 -0
  465. package/lib/Local/ProviderLayer.d.ts.map +1 -1
  466. package/lib/Local/ProviderLayer.js +1 -0
  467. package/lib/Local/ProviderLayer.js.map +1 -1
  468. package/lib/Neon/Branch.d.ts +5 -0
  469. package/lib/Neon/Branch.d.ts.map +1 -1
  470. package/lib/Neon/Branch.js +8 -1
  471. package/lib/Neon/Branch.js.map +1 -1
  472. package/lib/Neon/Project.d.ts +5 -0
  473. package/lib/Neon/Project.d.ts.map +1 -1
  474. package/lib/Neon/Project.js +6 -0
  475. package/lib/Neon/Project.js.map +1 -1
  476. package/lib/Plan.d.ts.map +1 -1
  477. package/lib/Plan.js +3 -1
  478. package/lib/Plan.js.map +1 -1
  479. package/lib/Planetscale/Branch.d.ts +10 -0
  480. package/lib/Planetscale/Branch.d.ts.map +1 -1
  481. package/lib/Planetscale/Branch.js +43 -1
  482. package/lib/Planetscale/Branch.js.map +1 -1
  483. package/lib/Planetscale/Postgres/PostgresBranch.d.ts +5 -0
  484. package/lib/Planetscale/Postgres/PostgresBranch.d.ts.map +1 -1
  485. package/lib/Planetscale/Postgres/PostgresBranch.js.map +1 -1
  486. package/lib/Planetscale/Postgres/PostgresRole.d.ts +3 -1
  487. package/lib/Planetscale/Postgres/PostgresRole.d.ts.map +1 -1
  488. package/lib/Planetscale/Postgres/PostgresRole.js +8 -0
  489. package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -1
  490. package/lib/Planetscale/Util.d.ts +3 -124
  491. package/lib/Planetscale/Util.d.ts.map +1 -1
  492. package/lib/Platform.d.ts +2 -1
  493. package/lib/Platform.d.ts.map +1 -1
  494. package/lib/Platform.js +37 -10
  495. package/lib/Platform.js.map +1 -1
  496. package/lib/Provider.d.ts.map +1 -1
  497. package/lib/Provider.js.map +1 -1
  498. package/lib/Resource.d.ts.map +1 -1
  499. package/lib/Resource.js +3 -1
  500. package/lib/Resource.js.map +1 -1
  501. package/lib/Rpc.d.ts +1 -1
  502. package/lib/Server/Process.d.ts +29 -1
  503. package/lib/Server/Process.d.ts.map +1 -1
  504. package/lib/Server/Process.js +48 -1
  505. package/lib/Server/Process.js.map +1 -1
  506. package/lib/Stack.d.ts +4 -1
  507. package/lib/Stack.d.ts.map +1 -1
  508. package/lib/Stack.js +1 -1
  509. package/lib/Stack.js.map +1 -1
  510. package/lib/State/HttpStateApi.d.ts +10 -10
  511. package/lib/Tags.d.ts +6 -0
  512. package/lib/Tags.d.ts.map +1 -1
  513. package/lib/Tags.js +6 -0
  514. package/lib/Tags.js.map +1 -1
  515. package/lib/Telemetry/Attributes.d.ts.map +1 -1
  516. package/lib/Telemetry/Attributes.js +6 -15
  517. package/lib/Telemetry/Attributes.js.map +1 -1
  518. package/lib/Test/Bun.d.ts +1 -0
  519. package/lib/Test/Bun.d.ts.map +1 -1
  520. package/lib/Test/Bun.js +1 -0
  521. package/lib/Test/Bun.js.map +1 -1
  522. package/lib/Test/Core.d.ts +1 -0
  523. package/lib/Test/Core.d.ts.map +1 -1
  524. package/lib/Test/Core.js +3 -2
  525. package/lib/Test/Core.js.map +1 -1
  526. package/lib/Test/Vitest.d.ts.map +1 -1
  527. package/lib/Test/Vitest.js +1 -0
  528. package/lib/Test/Vitest.js.map +1 -1
  529. package/lib/Util/effect.js.map +1 -1
  530. package/lib/Util/proxy-chain.d.ts +1 -0
  531. package/lib/Util/proxy-chain.d.ts.map +1 -1
  532. package/lib/Util/proxy-chain.js +1 -0
  533. package/lib/Util/proxy-chain.js.map +1 -1
  534. package/package.json +26 -10
  535. package/src/AWS/AuthProvider.ts +32 -17
  536. package/src/AWS/AutoScaling/LaunchTemplate.ts +1 -1
  537. package/src/AWS/CloudWatch/Dashboard.ts +4 -1
  538. package/src/AWS/Credentials.ts +178 -2
  539. package/src/AWS/EC2/Image.ts +4 -1
  540. package/src/AWS/EC2/Instance.ts +9 -6
  541. package/src/AWS/EC2/KeyPair.ts +319 -0
  542. package/src/AWS/EC2/NetworkAcl.ts +4 -1
  543. package/src/AWS/EC2/SecurityGroup.ts +4 -1
  544. package/src/AWS/EC2/SecurityGroupRule.ts +14 -5
  545. package/src/AWS/EC2/Subnet.ts +49 -4
  546. package/src/AWS/EC2/hosted.ts +93 -93
  547. package/src/AWS/EC2/index.ts +1 -0
  548. package/src/AWS/ECS/Task.ts +96 -78
  549. package/src/AWS/IAM/Role.ts +132 -22
  550. package/src/AWS/Lambda/CreateAuthToken.ts +43 -0
  551. package/src/AWS/Lambda/CreateAuthTokenHttp.ts +11 -0
  552. package/src/AWS/Lambda/CreateShellAuthToken.ts +42 -0
  553. package/src/AWS/Lambda/CreateShellAuthTokenHttp.ts +11 -0
  554. package/src/AWS/Lambda/DeleteMicrovmImageVersion.ts +36 -0
  555. package/src/AWS/Lambda/DeleteMicrovmImageVersionHttp.ts +12 -0
  556. package/src/AWS/Lambda/Function.ts +36 -9
  557. package/src/AWS/Lambda/GetMicrovm.ts +32 -0
  558. package/src/AWS/Lambda/GetMicrovmHttp.ts +13 -0
  559. package/src/AWS/Lambda/GetMicrovmImage.ts +40 -0
  560. package/src/AWS/Lambda/GetMicrovmImageBuild.ts +35 -0
  561. package/src/AWS/Lambda/GetMicrovmImageBuildHttp.ts +12 -0
  562. package/src/AWS/Lambda/GetMicrovmImageHttp.ts +12 -0
  563. package/src/AWS/Lambda/GetMicrovmImageVersion.ts +35 -0
  564. package/src/AWS/Lambda/GetMicrovmImageVersionHttp.ts +12 -0
  565. package/src/AWS/Lambda/ListManagedMicrovmImageVersions.ts +31 -0
  566. package/src/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.ts +10 -0
  567. package/src/AWS/Lambda/ListManagedMicrovmImages.ts +31 -0
  568. package/src/AWS/Lambda/ListManagedMicrovmImagesHttp.ts +10 -0
  569. package/src/AWS/Lambda/ListMicrovmImageBuilds.ts +36 -0
  570. package/src/AWS/Lambda/ListMicrovmImageBuildsHttp.ts +12 -0
  571. package/src/AWS/Lambda/ListMicrovmImageVersions.ts +36 -0
  572. package/src/AWS/Lambda/ListMicrovmImageVersionsHttp.ts +12 -0
  573. package/src/AWS/Lambda/ListMicrovms.ts +40 -0
  574. package/src/AWS/Lambda/ListMicrovmsHttp.ts +12 -0
  575. package/src/AWS/Lambda/MicrovmBinding.ts +442 -0
  576. package/src/AWS/Lambda/MicrovmBundle.ts +256 -0
  577. package/src/AWS/Lambda/MicrovmImage.ts +569 -0
  578. package/src/AWS/Lambda/MicrovmProvider.ts +597 -0
  579. package/src/AWS/Lambda/MicrovmRpc.ts +75 -0
  580. package/src/AWS/Lambda/MicrovmRuntimeContext.ts +110 -0
  581. package/src/AWS/Lambda/NetworkConnector.ts +529 -0
  582. package/src/AWS/Lambda/QueueEventSource.ts +1 -0
  583. package/src/AWS/Lambda/ResumeMicrovm.ts +37 -0
  584. package/src/AWS/Lambda/ResumeMicrovmHttp.ts +11 -0
  585. package/src/AWS/Lambda/RunMicrovm.ts +45 -0
  586. package/src/AWS/Lambda/RunMicrovmHttp.ts +13 -0
  587. package/src/AWS/Lambda/SuspendMicrovm.ts +37 -0
  588. package/src/AWS/Lambda/SuspendMicrovmHttp.ts +11 -0
  589. package/src/AWS/Lambda/TerminateMicrovm.ts +38 -0
  590. package/src/AWS/Lambda/TerminateMicrovmHttp.ts +11 -0
  591. package/src/AWS/Lambda/UpdateMicrovmImageVersion.ts +36 -0
  592. package/src/AWS/Lambda/UpdateMicrovmImageVersionHttp.ts +12 -0
  593. package/src/AWS/Lambda/index.ts +38 -0
  594. package/src/AWS/Providers.ts +147 -133
  595. package/src/AWS/RDS/DBClusterParameterGroup.ts +5 -1
  596. package/src/AWS/RDS/DBParameterGroup.ts +5 -1
  597. package/src/AWS/Region.ts +9 -2
  598. package/src/AWS/S3/Bucket.ts +71 -36
  599. package/src/AlchemyContext.ts +7 -0
  600. package/src/Apply.ts +4 -2
  601. package/src/Axiom/Chart.ts +9 -1
  602. package/src/Bundle/Bundle.ts +1 -1
  603. package/src/Bundle/TempRoot.ts +22 -0
  604. package/src/Bundle/Vite.ts +204 -0
  605. package/src/Bundle/index.ts +0 -1
  606. package/src/Cli/Event.ts +1 -0
  607. package/src/Cli/LoggingCli.ts +3 -0
  608. package/src/Cli/commands/_shared.ts +7 -1
  609. package/src/Cli/commands/cloudflare.ts +37 -2
  610. package/src/Cli/commands/deploy.ts +4 -1
  611. package/src/Cli/tui/components/PlanProgress.tsx +5 -3
  612. package/src/Cloudflare/AI/Gateway.ts +1 -1
  613. package/src/Cloudflare/AI/Search.ts +1 -1
  614. package/src/Cloudflare/AI/SearchInstance.ts +1 -1
  615. package/src/Cloudflare/AI/SearchNamespace.ts +1 -1
  616. package/src/Cloudflare/AI/SearchToken.ts +6 -1
  617. package/src/Cloudflare/Access/Application.ts +61 -10
  618. package/src/Cloudflare/Alerting/Webhook.ts +18 -7
  619. package/src/Cloudflare/AnalyticsEngine/WriteDataset.ts +2 -2
  620. package/src/Cloudflare/ApiToken/AccountApiToken.ts +4 -0
  621. package/src/Cloudflare/Auth/AuthProvider.ts +1 -1
  622. package/src/Cloudflare/Containers/Container.ts +43 -4
  623. package/src/Cloudflare/Containers/ContainerApplication.ts +24 -18
  624. package/src/Cloudflare/Containers/ContainerBundle.ts +2 -4
  625. package/src/Cloudflare/Containers/ContainerPlatform.ts +3 -3
  626. package/src/Cloudflare/Containers/ContainerProvider.ts +50 -42
  627. package/src/Cloudflare/Containers/LocalContainerProvider.ts +11 -4
  628. package/src/Cloudflare/Containers/StartContainer.ts +316 -32
  629. package/src/Cloudflare/DNS/ReadDns.ts +1 -1
  630. package/src/Cloudflare/DNS/ReadWriteDns.ts +1 -1
  631. package/src/Cloudflare/DNS/WriteDns.ts +1 -1
  632. package/src/Cloudflare/Flagship/App.ts +1 -1
  633. package/src/Cloudflare/Images/Images.ts +1 -1
  634. package/src/Cloudflare/Local.ts +2 -0
  635. package/src/Cloudflare/Providers.ts +2 -0
  636. package/src/Cloudflare/Queues/Consumer.ts +21 -12
  637. package/src/Cloudflare/Queues/Queue.ts +1 -1
  638. package/src/Cloudflare/R2/Bucket.ts +2 -2
  639. package/src/Cloudflare/StateStore/Api.ts +6 -4
  640. package/src/Cloudflare/StateStore/State.ts +192 -20
  641. package/src/Cloudflare/Website/Vite.ts +29 -24
  642. package/src/Cloudflare/Workers/Binding.ts +1 -1
  643. package/src/Cloudflare/Workers/Browser.ts +1 -1
  644. package/src/Cloudflare/Workers/DurableObject.ts +54 -3
  645. package/src/Cloudflare/Workers/InferEnv.ts +47 -36
  646. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +54 -7
  647. package/src/Cloudflare/Workers/RpcDurableObject.ts +3 -3
  648. package/src/Cloudflare/Workers/RpcWorker.ts +4 -4
  649. package/src/Cloudflare/Workers/ScheduledEvents.ts +1 -1
  650. package/src/Cloudflare/Workers/VersionMetadata.ts +1 -1
  651. package/src/Cloudflare/Workers/Vite.ts +21 -40
  652. package/src/Cloudflare/Workers/Worker.ts +74 -13
  653. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +30 -0
  654. package/src/Cloudflare/Workers/WorkerBinding.ts +5 -1
  655. package/src/Cloudflare/Workers/WorkerLoader.ts +1 -1
  656. package/src/Cloudflare/Workers/WorkerProvider.ts +470 -200
  657. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +1 -1
  658. package/src/Cloudflare/WorkersForPlatforms/DispatchNamespace.ts +44 -2
  659. package/src/Cloudflare/WorkersForPlatforms/Get.ts +87 -0
  660. package/src/Cloudflare/WorkersForPlatforms/GetBinding.ts +63 -0
  661. package/src/Cloudflare/WorkersForPlatforms/index.ts +2 -0
  662. package/src/Cloudflare/Workflows/Workflow.ts +207 -78
  663. package/src/Command/Build.ts +32 -1
  664. package/src/Docker/Container.ts +413 -0
  665. package/src/Docker/Docker.ts +564 -0
  666. package/src/Docker/Image.ts +265 -0
  667. package/src/Docker/Network.ts +178 -0
  668. package/src/Docker/Providers.ts +37 -0
  669. package/src/Docker/Registry.ts +63 -0
  670. package/src/Docker/RemoteImage.ts +215 -0
  671. package/src/Docker/Volume.ts +187 -0
  672. package/src/Docker/index.ts +8 -0
  673. package/src/Local/ProviderLayer.ts +2 -0
  674. package/src/Neon/Branch.ts +15 -1
  675. package/src/Neon/Project.ts +13 -0
  676. package/src/Plan.ts +3 -1
  677. package/src/Planetscale/Branch.ts +70 -0
  678. package/src/Planetscale/Postgres/PostgresBranch.ts +6 -0
  679. package/src/Planetscale/Postgres/PostgresRole.ts +11 -1
  680. package/src/Platform.ts +50 -12
  681. package/src/Provider.ts +1 -1
  682. package/src/Resource.ts +9 -3
  683. package/src/Rpc.ts +1 -1
  684. package/src/Server/Process.ts +82 -1
  685. package/src/Stack.ts +11 -3
  686. package/src/Tags.ts +12 -0
  687. package/src/Telemetry/Attributes.ts +9 -12
  688. package/src/Test/Bun.ts +2 -0
  689. package/src/Test/Core.ts +13 -8
  690. package/src/Test/Vitest.ts +1 -0
  691. package/src/Util/effect.ts +1 -1
  692. package/src/Util/proxy-chain.ts +1 -0
  693. package/lib/Bundle/Docker.d.ts +0 -75
  694. package/lib/Bundle/Docker.d.ts.map +0 -1
  695. package/lib/Bundle/Docker.js +0 -148
  696. package/lib/Bundle/Docker.js.map +0 -1
  697. package/src/Bundle/Docker.ts +0 -229
@@ -1,9 +1,10 @@
1
1
  import * as Effect from "effect/Effect";
2
+ import * as Path from "effect/Path";
2
3
  import { AlchemyContext } from "../../AlchemyContext.ts";
3
4
  import * as Artifacts from "../../Artifacts.ts";
4
- import { materializeDockerfile } from "../../Bundle/Docker.ts";
5
5
  import { getStableContextDir } from "../../Bundle/TempRoot.ts";
6
6
  import { isResolved } from "../../Diff.ts";
7
+ import { Docker } from "../../Docker/Docker.ts";
7
8
  import * as RpcProvider from "../../Local/RpcProvider.ts";
8
9
  import { sha256Object } from "../../Util/sha256.ts";
9
10
  import { normalizeNulls } from "../../Util/stable.ts";
@@ -41,6 +42,8 @@ export const LocalContainerProvider = () =>
41
42
  LOCAL_ENTRY_URL,
42
43
  Effect.gen(function* () {
43
44
  const { dotAlchemy } = yield* AlchemyContext;
45
+ const docker = yield* Docker;
46
+ const path = yield* Path.Path;
44
47
 
45
48
  // Bundle the container entrypoint and write it (plus the generated
46
49
  // Dockerfile) into a stable build context directory. `Docker.build` in
@@ -68,7 +71,7 @@ export const LocalContainerProvider = () =>
68
71
  news.external,
69
72
  news.autoInstallExternals,
70
73
  );
71
- const [bundle, dockerfile] = yield* Effect.all(
74
+ const [bundle] = yield* Effect.all(
72
75
  [
73
76
  bundleContainerProgram({
74
77
  id,
@@ -79,13 +82,17 @@ export const LocalContainerProvider = () =>
79
82
  external: news.external,
80
83
  outdir: context,
81
84
  }),
82
- materializeDockerfile(dockerfileContent, context),
85
+ docker.materialize({
86
+ context: context,
87
+ dockerfile: dockerfileContent,
88
+ files: [],
89
+ }),
83
90
  ],
84
91
  { concurrency: "unbounded" },
85
92
  );
86
93
  return {
87
94
  context,
88
- dockerfile,
95
+ dockerfile: path.join(context, "Dockerfile"),
89
96
  hash: yield* sha256Object({
90
97
  bundle: bundle.hash,
91
98
  dockerfileContent,
@@ -2,6 +2,7 @@ import * as Duration from "effect/Duration";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Layer from "effect/Layer";
4
4
  import * as Schedule from "effect/Schedule";
5
+ import * as Semaphore from "effect/Semaphore";
5
6
  import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
6
7
  import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
7
8
  import * as HttpServerRequest from "effect/unstable/http/HttpServerRequest";
@@ -9,13 +10,62 @@ import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse";
9
10
  import { ALCHEMY_PHASE } from "../../Phase.ts";
10
11
  import { makeFetchRpcStub } from "../../Rpc.ts";
11
12
  import { type Fetcher } from "../Fetcher.ts";
13
+ import { DurableObjectState } from "../Workers/DurableObjectState.ts";
12
14
  import {
15
+ ContainerCrashedError,
13
16
  ContainerError,
17
+ ContainerRateLimitedError,
14
18
  ContainerTag,
19
+ NoContainerInstanceError,
15
20
  type Container,
16
21
  type ContainerStartupOptions,
17
22
  } from "./Container.ts";
18
23
 
24
+ /**
25
+ * Per-container-instance start coordination (start mutex + confirmed-ready
26
+ * port cache).
27
+ *
28
+ * `startContainer` can be invoked more than once for the same physical
29
+ * container: the {@link layer} helper calls it once per Durable Object, but a
30
+ * caller may also use `startContainer` directly from several places. If the
31
+ * mutex/ready-cache lived in each `startContainer` closure, those calls would
32
+ * not coordinate — two of them could both observe `running === false` and both
33
+ * call `container.start()`, with the second throwing "already running" (see
34
+ * cloudflare/containers#173).
35
+ *
36
+ * Keying off the Durable Object's `DurableObjectState` (stable for the life of
37
+ * a DO instance, and a distinct object per instance) makes the coordination
38
+ * per-container-instance regardless of how many `startContainer` calls share
39
+ * it. The map is module-scoped, but Workers isolates are per-isolate and each
40
+ * DO instance has its own `DurableObjectState`, so instances never collide; the
41
+ * `WeakMap` lets entries be collected with the instance. We deliberately do NOT
42
+ * key on the container's logical id — that is shared across every
43
+ * `getByName(...)` instance of the same class, which must each start
44
+ * independently.
45
+ */
46
+ const startCoordination = new WeakMap<
47
+ object,
48
+ {
49
+ readonly startMutex: ReturnType<typeof Semaphore.makeUnsafe>;
50
+ readonly readyPorts: Set<number>;
51
+ }
52
+ >();
53
+
54
+ const getStartCoordination = (key: object) => {
55
+ let coordination = startCoordination.get(key);
56
+ if (!coordination) {
57
+ // `makeUnsafe` (rather than `Effect.makeSemaphore`) because this runs in a
58
+ // synchronous cache-miss branch; the semaphore is a plain mutable primitive
59
+ // shared across effects, created once per DO instance.
60
+ coordination = {
61
+ startMutex: Semaphore.makeUnsafe(1),
62
+ readyPorts: new Set<number>(),
63
+ };
64
+ startCoordination.set(key, coordination);
65
+ }
66
+ return coordination;
67
+ };
68
+
19
69
  export const layer = <Image extends Container.Decl.Any>(
20
70
  container: Image,
21
71
  options?: ContainerStartupOptions,
@@ -45,38 +95,261 @@ export const startContainer = Effect.fn(function* <
45
95
  ? yield* bound as Effect.Effect<Container>
46
96
  : (bound as Container);
47
97
 
98
+ // Every constant below is taken directly from Cloudflare's own
99
+ // `@cloudflare/containers` runtime (`dist/lib/container.js`) rather than
100
+ // guessed, so our readiness behaviour matches `startAndWaitForPorts`:
101
+ //
102
+ // INSTANCE_POLL_INTERVAL_MS = 300 → fixed poll interval
103
+ // PING_TIMEOUT_MS = 5_000 → per-probe cap (addTimeoutSignal)
104
+ // TIMEOUT_TO_GET_CONTAINER_MS = 8_000 → phase 1: find+start an instance
105
+ // TIMEOUT_TO_GET_PORTS_MS = 20_000 → phase 2: wait for the port to listen
106
+ //
107
+ // Native derives its retry COUNTS as ceil(timeout / pollInterval); we keep
108
+ // the two phases separate (as native does) on a 300ms cadence.
109
+ const READINESS_POLL_INTERVAL = Duration.millis(300); // INSTANCE_POLL_INTERVAL_MS
110
+ const READINESS_PROBE_TIMEOUT = Duration.seconds(5); // PING_TIMEOUT_MS
111
+ const TIMEOUT_TO_GET_CONTAINER_MS = 8_000;
112
+ const TIMEOUT_TO_GET_PORTS_MS = 20_000;
113
+ const GET_CONTAINER_RETRIES = Math.ceil(TIMEOUT_TO_GET_CONTAINER_MS / 300); // 27
114
+ const PORT_READY_RETRIES = Math.ceil(TIMEOUT_TO_GET_PORTS_MS / 300); // 67
115
+ // When rate limited, back off hard before retrying — hammering `start()`
116
+ // only prolongs the limit (native returns 429 immediately and does not loop).
117
+ const RATE_LIMIT_BACKOFF = Duration.seconds(2);
118
+ const RATE_LIMIT_RETRIES = 5;
119
+ // Light retry for the real request only — covers the transient
120
+ // "Network connection lost" window when a container instance is recycled.
121
+ const REQUEST_RETRIES = 3;
122
+
123
+ // Error classification, mirroring native's string matchers in
124
+ // `@cloudflare/containers` (`isErrorOfType` against these exact phrases).
125
+ const errString = (e: unknown) =>
126
+ (e instanceof Error ? e.message : String(e)).toLowerCase();
127
+ const isNoInstanceError = (e: unknown) =>
128
+ errString(e).includes(
129
+ "there is no container instance that can be provided to this durable object",
130
+ );
131
+ const isRateLimitedError = (e: unknown) =>
132
+ errString(e).includes("you are requesting too many containers per second");
133
+
134
+ type ReadinessError =
135
+ | ContainerError
136
+ | NoContainerInstanceError
137
+ | ContainerRateLimitedError
138
+ | ContainerCrashedError;
139
+
140
+ // Map a raw defect to a typed readiness error (native classifies the same
141
+ // message phrases via `isErrorOfType`).
142
+ const classifyDefect = (
143
+ defect: unknown,
144
+ portNumber: number,
145
+ ): ContainerError | NoContainerInstanceError | ContainerRateLimitedError =>
146
+ isRateLimitedError(defect)
147
+ ? new ContainerRateLimitedError({
148
+ message: "Rate limited starting container",
149
+ cause: defect,
150
+ })
151
+ : isNoInstanceError(defect)
152
+ ? new NoContainerInstanceError({
153
+ message: "No container instance available",
154
+ cause: defect,
155
+ })
156
+ : new ContainerError({
157
+ message: `Container not ready on port ${portNumber}: ${defect}`,
158
+ cause: defect,
159
+ });
160
+
161
+ // Coalesce concurrent starts and share the confirmed-ready port cache across
162
+ // every caller for THIS Durable Object instance (see `startCoordination`).
163
+ // Native uses a `startInFlight` promise so two racing callers never both
164
+ // invoke `container.start()` ("already running" — cloudflare/containers#173);
165
+ // the 1-permit mutex serialises the start path so the second entrant sees
166
+ // `running === true` and skips. `readyPorts` lets steady-state requests skip
167
+ // the readiness probe entirely (like native's `healthy` state).
168
+ //
169
+ // Key on `DurableObjectState` (stable + unique per DO instance). Requiring it
170
+ // is correct: a container only ever runs inside a Durable Object, so this is
171
+ // an honest dependency rather than a silent fallback.
172
+ const doState = yield* DurableObjectState;
173
+ const coordinationKey: object =
174
+ (doState.container as object | undefined) ?? doState;
175
+ const { startMutex, readyPorts } = getStartCoordination(coordinationKey);
176
+
177
+ const launchMonitor = Effect.forkDetach(
178
+ container.monitor().pipe(
179
+ Effect.flatMap(() => Effect.logInfo("Container monitor exited")),
180
+ Effect.catchTag("ContainerError", (error) =>
181
+ Effect.logError(`Container monitor error: ${error.message}`),
182
+ ),
183
+ // When the container exits (stopped, crashed, or slept), its ports are no
184
+ // longer listening — drop the confirmed-ready marks so the next request
185
+ // re-probes the freshly (re)started instance instead of fetching a dead
186
+ // port. This is the analog of native's monitor clearing the `healthy`
187
+ // state on exit.
188
+ Effect.ensuring(Effect.sync(() => readyPorts.clear())),
189
+ ),
190
+ );
191
+
192
+ // The actual (re)start, serialised through the mutex so racing callers never
193
+ // both invoke `container.start()` ("already running" — see
194
+ // cloudflare/containers#173). Re-checks `running` under the lock.
195
+ const startOnce = Semaphore.withPermits(
196
+ startMutex,
197
+ 1,
198
+ )(
199
+ Effect.gen(function* () {
200
+ if (yield* container.running) return;
201
+ yield* Effect.logDebug("Container not running, starting...");
202
+ // A (re)start means nothing is listening yet — clear any stale ready
203
+ // marks from a previous run so the next request re-probes this instance.
204
+ yield* Effect.sync(() => readyPorts.clear());
205
+ yield* container.start(options).pipe(
206
+ Effect.catchDefect((defect) => Effect.fail(classifyDefect(defect, -1))),
207
+ // A rate limit is transient — back off well clear of the per-second
208
+ // window and try again a few times before surfacing it.
209
+ Effect.retry({
210
+ while: (
211
+ e:
212
+ | ContainerError
213
+ | NoContainerInstanceError
214
+ | ContainerRateLimitedError,
215
+ ) => e._tag === "ContainerRateLimitedError",
216
+ schedule: Schedule.spaced(RATE_LIMIT_BACKOFF),
217
+ times: RATE_LIMIT_RETRIES,
218
+ }),
219
+ );
220
+ yield* launchMonitor;
221
+ }),
222
+ );
223
+
224
+ // Ensure the container is running. Fast path: when it's already running (the
225
+ // steady state) this is a single cheap `running` read and avoids contending
226
+ // on the start mutex. Only an actual (re)start acquires the lock — which is
227
+ // also what makes auto-restart work: a stopped/crashed container has
228
+ // `running === false`, so the next call transparently restarts it.
48
229
  const ensureRunning = Effect.gen(function* () {
49
230
  if (yield* container.running) return;
50
- yield* Effect.logInfo("Container not running, starting...");
51
- yield* container.start(options);
52
- yield* Effect.logInfo("Container started, launching monitor");
53
- yield* Effect.forkDetach(
54
- container.monitor().pipe(
55
- Effect.flatMap(() => Effect.logInfo("Container monitor exited")),
56
- Effect.catchTag("ContainerError", (error) =>
57
- Effect.logError(`Container monitor error: ${error.message}`),
58
- ),
59
- ),
60
- );
231
+ yield* startOnce;
61
232
  });
62
233
 
63
- // Poll the container roughly every 2–3s while it cold-starts, but bound the
64
- // total wait (~3 min) so an unreachable container surfaces a `ContainerError`
65
- // instead of hanging the Durable Object request forever. Without this cap a
66
- // container that never accepts connections on the requested port (e.g. it
67
- // crash-loops, or the process never binds the port) would retry indefinitely
68
- // and the worker request would never return.
69
- const startupBackoff = Schedule.exponential(100, 1.5).pipe(
70
- Schedule.modifyDelay((_, delay) =>
71
- Effect.succeed(
72
- Duration.min(
73
- Duration.max(delay, Duration.seconds(1)),
74
- Duration.seconds(3),
234
+ // A single readiness probe: any response at all (even a non-2xx) proves the
235
+ // port is accepting connections. Each probe is hard-capped so a hung connect
236
+ // to a not-yet-bound port cannot stall the request. If the instance has gone
237
+ // away (`running === false`) after we started it, surface a crash rather than
238
+ // polling out the whole budget (native's `if (!this.container.running)`).
239
+ const probePort = (portNumber: number) =>
240
+ container.getTcpPort(portNumber).pipe(
241
+ Effect.andThen((port: Fetcher) =>
242
+ port.fetch(
243
+ HttpClientRequest.get("http://containerstarthealthcheck") as any,
75
244
  ),
76
245
  ),
77
- ),
78
- Schedule.both(Schedule.recurs(75)),
79
- );
246
+ Effect.timeout(READINESS_PROBE_TIMEOUT),
247
+ Effect.catchDefect((defect: unknown) =>
248
+ container.running.pipe(
249
+ Effect.andThen((running) =>
250
+ Effect.fail<ReadinessError>(
251
+ !running &&
252
+ !isRateLimitedError(defect) &&
253
+ !isNoInstanceError(defect)
254
+ ? new ContainerCrashedError({
255
+ message: `Container exited while waiting for port ${portNumber}`,
256
+ cause: defect,
257
+ })
258
+ : classifyDefect(defect, portNumber),
259
+ ),
260
+ ),
261
+ ),
262
+ ),
263
+ // A probe that hangs past the per-attempt cap, or fails the HTTP fetch
264
+ // before the port is up, is just "not ready yet" — retry it like any
265
+ // other transient readiness failure.
266
+ Effect.catchTag(["TimeoutError", "HttpClientError"], (cause: unknown) =>
267
+ container.running.pipe(
268
+ Effect.andThen((running) =>
269
+ Effect.fail<ReadinessError>(
270
+ !running
271
+ ? new ContainerCrashedError({
272
+ message: `Container exited while waiting for port ${portNumber}`,
273
+ cause,
274
+ })
275
+ : new ContainerError({
276
+ message: `Container probe not ready on port ${portNumber}`,
277
+ cause,
278
+ }),
279
+ ),
280
+ ),
281
+ ),
282
+ ),
283
+ );
284
+
285
+ // Retry ONLY failures that can clear by waiting on the SAME instance:
286
+ // - `ContainerError` — the port isn't listening yet (the app is
287
+ // still booting; the container process is up)
288
+ // - `NoContainerInstanceError` — an instance is still being allocated
289
+ // Fail fast on the rest:
290
+ // - `ContainerCrashedError` — the container PROCESS has exited
291
+ // (`running === false`). `running` reflects
292
+ // the process, not the app, so this is never
293
+ // "still starting" — it's fatal for this
294
+ // instance. Spinning the budget on a
295
+ // crash-looping container just wastes ~20-60s
296
+ // per request; surface it in ~one poll.
297
+ // - `ContainerRateLimitedError`— back off in `ensureRunning`, don't spin.
298
+ // This matches `@cloudflare/containers`, whose `waitForPort` /
299
+ // `doStartContainer` throw immediately on `!running`.
300
+ const isTransientReadiness = (e: ReadinessError) =>
301
+ e._tag === "ContainerError" || e._tag === "NoContainerInstanceError";
302
+
303
+ // Phase 2 (native `waitForPort`): poll the port until it accepts connections.
304
+ // Crash detection is poll-based (`probePort` surfaces `ContainerCrashedError`
305
+ // on an observed `!running`, which `isTransientReadiness` does NOT retry).
306
+ //
307
+ // NB: we deliberately do NOT race `container.monitor()` for faster crash
308
+ // detection. The monitor wrapper settles immediately for a not-yet-allocated
309
+ // instance (and loses the exit code that native uses to tell "queued" from
310
+ // "exited"), so racing it mis-reports healthy, still-provisioning containers
311
+ // as crashed under concurrent startup — it dropped a 100-instance cold start
312
+ // to <10% success. Polling is correct under load; the price is that crash
313
+ // detection is bounded by the probe cadence rather than instant.
314
+ const waitForPort = (portNumber: number) =>
315
+ readyPorts.has(portNumber)
316
+ ? Effect.void
317
+ : probePort(portNumber).pipe(
318
+ Effect.tapError((err) =>
319
+ Effect.logDebug(`Container not ready (will retry): ${err}`),
320
+ ),
321
+ Effect.retry({
322
+ while: isTransientReadiness,
323
+ schedule: Schedule.spaced(READINESS_POLL_INTERVAL),
324
+ times: PORT_READY_RETRIES,
325
+ }),
326
+ Effect.andThen(() =>
327
+ Effect.sync(() => {
328
+ readyPorts.add(portNumber);
329
+ }),
330
+ ),
331
+ );
332
+
333
+ // Phase 1 (native `doStartContainer`) + phase 2: ensure the instance is
334
+ // started (bounded, rate-limit aware), then wait for the port. `ensureRunning`
335
+ // is ALWAYS run (cheap when already running) rather than short-circuiting on
336
+ // `readyPorts` — otherwise a container that has since stopped/crashed would
337
+ // never be restarted. The port probe (`waitForPort`) is what `readyPorts`
338
+ // skips in steady state.
339
+ const ensureReady = (portNumber: number) =>
340
+ ensureRunning.pipe(
341
+ Effect.retry({
342
+ while: (
343
+ e:
344
+ | ContainerError
345
+ | NoContainerInstanceError
346
+ | ContainerRateLimitedError,
347
+ ) => e._tag === "NoContainerInstanceError",
348
+ schedule: Schedule.spaced(READINESS_POLL_INTERVAL),
349
+ times: GET_CONTAINER_RETRIES,
350
+ }),
351
+ Effect.andThen(() => waitForPort(portNumber)),
352
+ );
80
353
 
81
354
  const getTcpPort = (portNumber: number) =>
82
355
  Effect.succeed({
@@ -85,20 +358,31 @@ export const startContainer = Effect.fn(function* <
85
358
  | HttpClientRequest.HttpClientRequest
86
359
  | HttpServerRequest.HttpServerRequest,
87
360
  ) =>
88
- ensureRunning.pipe(
361
+ // Block until the port is ready (bounded), THEN forward the real
362
+ // request exactly once. Readiness is a cheap healthcheck, so the user
363
+ // request is never replayed against a cold container.
364
+ ensureReady(portNumber).pipe(
89
365
  Effect.andThen(() => container.getTcpPort(portNumber)),
90
366
  Effect.andThen((port: Fetcher) => port.fetch(request as any)),
91
367
  Effect.catchDefect((defect: unknown) =>
92
368
  Effect.fail(
93
369
  new ContainerError({
94
- message: `Container not ready on port ${portNumber}: ${defect}`,
370
+ message: `Container fetch failed on port ${portNumber}: ${defect}`,
371
+ cause: defect,
95
372
  }),
96
373
  ),
97
374
  ),
98
- Effect.tapError((err) =>
99
- Effect.logDebug(`Container fetch error (will retry): ${err}`),
100
- ),
101
- Effect.retry({ schedule: startupBackoff }),
375
+ // Only retry a generic transient blip: a not-yet-ready port
376
+ // (`ContainerError`) or a transport hiccup on the real request such
377
+ // as "Network connection lost" (`HttpClientError`). A crash, rate
378
+ // limit, or exhausted no-instance budget is surfaced immediately so a
379
+ // crash-looping container fails fast instead of re-starting 3× more.
380
+ Effect.retry({
381
+ while: (e) =>
382
+ e._tag === "ContainerError" || e._tag === "HttpClientError",
383
+ schedule: Schedule.spaced(READINESS_POLL_INTERVAL),
384
+ times: REQUEST_RETRIES,
385
+ }),
102
386
  )) as {
103
387
  (
104
388
  request: HttpClientRequest.HttpClientRequest,
@@ -36,7 +36,7 @@ import type { Zone } from "../Zone/Zone.ts";
36
36
  *
37
37
  * export class ReadDnserWorker extends Cloudflare.Worker<ReadDnserWorker>()(
38
38
  * "ReadDnserWorker",
39
- * { main: import.meta.filename },
39
+ * { main: import.meta.url },
40
40
  * Effect.gen(function* () {
41
41
  * // Init phase — bind the read client scoped to the zone.
42
42
  * const dns = yield* Cloudflare.DNS.ReadDns(Zone);
@@ -32,7 +32,7 @@ import { type WriteDnsClient } from "./WriteDns.ts";
32
32
  *
33
33
  * export class Worker extends Cloudflare.Worker<Worker>()(
34
34
  * "Worker",
35
- * { main: import.meta.filename },
35
+ * { main: import.meta.url },
36
36
  * Effect.gen(function* () {
37
37
  * // Init phase — bind the full CRUD client scoped to the zone.
38
38
  * const dns = yield* Cloudflare.DNS.ReadWriteDns(Zone);
@@ -46,7 +46,7 @@ import type { Zone } from "../Zone/Zone.ts";
46
46
  *
47
47
  * export class WriteDnsrWorker extends Cloudflare.Worker<WriteDnsrWorker>()(
48
48
  * "WriteDnsrWorker",
49
- * { main: import.meta.filename },
49
+ * { main: import.meta.url },
50
50
  * Effect.gen(function* () {
51
51
  * // Init phase — bind the write client scoped to the zone.
52
52
  * const dns = yield* Cloudflare.DNS.WriteDns(Zone);
@@ -97,7 +97,7 @@ export type App = Resource<TypeId, AppProps, AppAttributes, never, Providers>;
97
97
  *
98
98
  * Cloudflare.Worker(
99
99
  * "FlagsWorker",
100
- * { main: import.meta.filename },
100
+ * { main: import.meta.url },
101
101
  * Effect.gen(function* () {
102
102
  * const flags = yield* Cloudflare.Flagship.ReadFlags(App);
103
103
  * return {
@@ -33,7 +33,7 @@ export class ImagesError extends Data.TaggedError("ImagesError")<{
33
33
  * ```typescript
34
34
  * import { HttpServerRequest } from "effect/unstable/http/HttpServerRequest";
35
35
  *
36
- * Cloudflare.Worker("ImageWorker", { main: import.meta.filename },
36
+ * Cloudflare.Worker("ImageWorker", { main: import.meta.url },
37
37
  * Effect.gen(function* () {
38
38
  * const images = yield* Cloudflare.Images.Images("PIPELINE");
39
39
  * return {
@@ -1,4 +1,5 @@
1
1
  import * as Layer from "effect/Layer";
2
+ import { DockerLive } from "../Docker/Docker.ts";
2
3
  import * as RpcServer from "../Local/RpcServer.ts";
3
4
  import { CloudflareAuth } from "./Auth/AuthProvider.ts";
4
5
  import * as CloudflareEnvironment from "./CloudflareEnvironment.ts";
@@ -25,5 +26,6 @@ Layer.mergeAll(
25
26
  ).pipe(
26
27
  Layer.provide(localRuntimeServices()),
27
28
  Layer.provide(cloudflareServices),
29
+ Layer.provide(DockerLive),
28
30
  RpcServer.launch,
29
31
  );
@@ -8,6 +8,7 @@ import * as Schedule from "effect/Schedule";
8
8
  import { CredentialsStoreLive } from "../Auth/Credentials.ts";
9
9
  import { ProfileLive } from "../Auth/Profile.ts";
10
10
  import * as Command from "../Command/index.ts";
11
+ import { DockerLive } from "../Docker/Docker.ts";
11
12
  import { KeyPair, KeyPairProvider } from "../KeyPair.ts";
12
13
  import * as Provider from "../Provider.ts";
13
14
  import { Random, RandomProvider } from "../Random.ts";
@@ -681,6 +682,7 @@ export const providers = () =>
681
682
  RandomProvider(),
682
683
  ),
683
684
  ),
685
+ Layer.provide(DockerLive),
684
686
  Layer.provideMerge(localRuntimeServices()),
685
687
  Layer.provideMerge(Credentials.fromAuthProvider()),
686
688
  Layer.provideMerge(CloudflareEnvironment.fromProfile()),
@@ -98,7 +98,7 @@ export type Consumer = Resource<
98
98
  *
99
99
  * yield* Cloudflare.Queues.Consumer("MyConsumer", {
100
100
  * queueId: queue.queueId,
101
- * scriptName: "my-worker",
101
+ * scriptName: worker.workerName,
102
102
  * });
103
103
  * ```
104
104
  *
@@ -106,7 +106,7 @@ export type Consumer = Resource<
106
106
  * ```typescript
107
107
  * yield* Cloudflare.Queues.Consumer("MyConsumer", {
108
108
  * queueId: queue.queueId,
109
- * scriptName: "my-worker",
109
+ * scriptName: worker.workerName,
110
110
  * settings: {
111
111
  * batchSize: 50,
112
112
  * maxRetries: 5,
@@ -127,6 +127,12 @@ const findWorkerConsumer = (acct: string, queueId: string) =>
127
127
  Stream.filter((c): c is ObservedConsumer => c !== undefined),
128
128
  Stream.runHead,
129
129
  Effect.map(Option.getOrUndefined),
130
+ // A queue created earlier in the same plan is eventually consistent:
131
+ // listConsumers can transiently 404 (`QueueNotFound`, code 11000) before
132
+ // the fresh queue is visible to the consumers API. Treat that as "no
133
+ // consumer yet" — the caller falls through to createConsumer, which
134
+ // retries QueueNotFound until the queue propagates.
135
+ Effect.catchTag("QueueNotFound", () => Effect.succeed(undefined)),
130
136
  );
131
137
 
132
138
  export const ConsumerProviderLive = () =>
@@ -349,22 +355,25 @@ export const ConsumerProviderLive = () =>
349
355
  settings: news.settings,
350
356
  })
351
357
  .pipe(
352
- // The sibling Worker resource pre-creates a placeholder
353
- // script with no `queue` handler; Cloudflare returns
354
- // code 11001 until the real reconcile uploads the
355
- // handler. Retry until the upload propagates (capped),
356
- // then surface a real failure if it never does.
358
+ // Two eventual-consistency races on a fresh deploy, both
359
+ // retried on the same bounded schedule:
360
+ // - QueueHandlerMissing (11001): the sibling Worker resource
361
+ // pre-creates a placeholder script with no `queue` handler;
362
+ // Cloudflare returns 11001 until the real reconcile uploads
363
+ // the handler.
364
+ // - QueueNotFound (11000): the queue was created earlier in
365
+ // this same plan but isn't yet visible to the consumers API.
357
366
  Effect.tapError((e) =>
358
- e._tag === "QueueHandlerMissing"
367
+ e._tag === "QueueHandlerMissing" || e._tag === "QueueNotFound"
359
368
  ? Effect.logDebug(
360
- `Consumer create: worker ` +
361
- `"${news.scriptName}" has no queue handler ` +
362
- `yet (code 11001), retrying`,
369
+ `Consumer create: not ready for worker ` +
370
+ `"${news.scriptName}" (${e._tag}), retrying`,
363
371
  )
364
372
  : Effect.void,
365
373
  ),
366
374
  Effect.retry({
367
- while: (e) => e._tag === "QueueHandlerMissing",
375
+ while: (e) =>
376
+ e._tag === "QueueHandlerMissing" || e._tag === "QueueNotFound",
368
377
  schedule: queueHandlerReadinessSchedule,
369
378
  }),
370
379
  Effect.catchTag("ConsumerAlreadyExists", (cause) =>
@@ -82,7 +82,7 @@ export type Queue = Resource<
82
82
  *
83
83
  * export default Cloudflare.Worker(
84
84
  * "Worker",
85
- * { main: import.meta.filename },
85
+ * { main: import.meta.url },
86
86
  * Effect.gen(function* () {
87
87
  * const queue = yield* Cloudflare.Queues.WriteQueue(Queue);
88
88
  *
@@ -172,7 +172,7 @@ export type Bucket = Resource<
172
172
  * @section Binding to a Worker
173
173
  * @example Reading and writing objects
174
174
  * ```typescript
175
- * const bucket = yield* Cloudflare.R2.ReadWrite(MyBucket);
175
+ * const bucket = yield* Cloudflare.R2.ReadWriteBucket(MyBucket);
176
176
  *
177
177
  * // Write an object
178
178
  * yield* bucket.put("hello.txt", "Hello, World!");
@@ -186,7 +186,7 @@ export type Bucket = Resource<
186
186
  *
187
187
  * @example Streaming upload with content length
188
188
  * ```typescript
189
- * const bucket = yield* Cloudflare.R2.ReadWrite(MyBucket);
189
+ * const bucket = yield* Cloudflare.R2.ReadWriteBucket(MyBucket);
190
190
  *
191
191
  * yield* bucket.put("upload.bin", request.stream, {
192
192
  * contentLength: Number(request.headers["content-length"] ?? 0),
@@ -8,6 +8,7 @@ import * as HttpRouter from "effect/unstable/http/HttpRouter";
8
8
  import * as HttpApiBuilder from "effect/unstable/httpapi/HttpApiBuilder";
9
9
  import * as HttpApiError from "effect/unstable/httpapi/HttpApiError";
10
10
  import crypto from "node:crypto";
11
+ import { RuntimeContext } from "../../RuntimeContext.ts";
11
12
  import {
12
13
  BearerTokenValidator,
13
14
  StateApi,
@@ -101,7 +102,7 @@ export default Worker(
101
102
  "Api",
102
103
  {
103
104
  name: STATE_STORE_SCRIPT_NAME,
104
- main: import.meta.filename,
105
+ main: import.meta.url,
105
106
  url: true,
106
107
  compatibility: {
107
108
  flags: ["nodejs_compat"],
@@ -115,13 +116,14 @@ export default Worker(
115
116
  const bearerTokenValidator = Layer.succeed(
116
117
  BearerTokenValidator,
117
118
  BearerTokenValidator.of({
118
- // @ts-expect-error - TODO(sam): fix RuntimeContext color here
119
119
  validate: Effect.fn(function* (token) {
120
- const expected = yield* remoteSecret.get();
120
+ const expected = yield* remoteSecret
121
+ .get()
122
+ .pipe(Effect.orDie, Effect.provide(RuntimeContext.phantom));
121
123
  return !!expected &&
122
124
  timingSafeEqual(token.trim(), Redacted.value(expected).trim())
123
125
  ? yield* Effect.void
124
- : yield* Effect.fail(new HttpApiError.Unauthorized());
126
+ : yield* new HttpApiError.Unauthorized();
125
127
  }),
126
128
  }),
127
129
  );