alchemy 2.0.0-beta.61 → 2.0.0-beta.62

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 (602) hide show
  1. package/README.md +15 -0
  2. package/bin/exec.js +71 -12
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/ACM/Certificate.d.ts.map +1 -1
  5. package/lib/AWS/ACM/Certificate.js +16 -4
  6. package/lib/AWS/ACM/Certificate.js.map +1 -1
  7. package/lib/AWS/ApiGateway/common.d.ts.map +1 -1
  8. package/lib/AWS/ApiGateway/common.js +6 -3
  9. package/lib/AWS/ApiGateway/common.js.map +1 -1
  10. package/lib/AWS/AuthProvider.d.ts.map +1 -1
  11. package/lib/AWS/AuthProvider.js +1 -1
  12. package/lib/AWS/AuthProvider.js.map +1 -1
  13. package/lib/AWS/AutoScaling/AutoScalingGroup.d.ts.map +1 -1
  14. package/lib/AWS/AutoScaling/AutoScalingGroup.js +8 -2
  15. package/lib/AWS/AutoScaling/AutoScalingGroup.js.map +1 -1
  16. package/lib/AWS/Bootstrap.d.ts.map +1 -1
  17. package/lib/AWS/Bootstrap.js +5 -2
  18. package/lib/AWS/Bootstrap.js.map +1 -1
  19. package/lib/AWS/CloudFront/Distribution.d.ts.map +1 -1
  20. package/lib/AWS/CloudFront/Distribution.js +20 -5
  21. package/lib/AWS/CloudFront/Distribution.js.map +1 -1
  22. package/lib/AWS/CloudFront/Function.js +5 -2
  23. package/lib/AWS/CloudFront/Function.js.map +1 -1
  24. package/lib/AWS/CloudFront/Invalidation.d.ts.map +1 -1
  25. package/lib/AWS/CloudFront/Invalidation.js +4 -1
  26. package/lib/AWS/CloudFront/Invalidation.js.map +1 -1
  27. package/lib/AWS/CloudFront/KvEntries.d.ts.map +1 -1
  28. package/lib/AWS/CloudFront/KvEntries.js +4 -1
  29. package/lib/AWS/CloudFront/KvEntries.js.map +1 -1
  30. package/lib/AWS/CloudFront/KvRoutesUpdate.d.ts.map +1 -1
  31. package/lib/AWS/CloudFront/KvRoutesUpdate.js +8 -2
  32. package/lib/AWS/CloudFront/KvRoutesUpdate.js.map +1 -1
  33. package/lib/AWS/CloudFront/VpcOrigin.d.ts.map +1 -1
  34. package/lib/AWS/CloudFront/VpcOrigin.js +12 -3
  35. package/lib/AWS/CloudFront/VpcOrigin.js.map +1 -1
  36. package/lib/AWS/CloudFront/common.d.ts.map +1 -1
  37. package/lib/AWS/CloudFront/common.js +5 -2
  38. package/lib/AWS/CloudFront/common.js.map +1 -1
  39. package/lib/AWS/CloudWatch/AnomalyDetector.d.ts.map +1 -1
  40. package/lib/AWS/CloudWatch/AnomalyDetector.js +4 -1
  41. package/lib/AWS/CloudWatch/AnomalyDetector.js.map +1 -1
  42. package/lib/AWS/CloudWatch/common.d.ts.map +1 -1
  43. package/lib/AWS/CloudWatch/common.js +1 -1
  44. package/lib/AWS/CloudWatch/common.js.map +1 -1
  45. package/lib/AWS/DynamoDB/Table.d.ts.map +1 -1
  46. package/lib/AWS/DynamoDB/Table.js +53 -20
  47. package/lib/AWS/DynamoDB/Table.js.map +1 -1
  48. package/lib/AWS/EC2/EIP.d.ts.map +1 -1
  49. package/lib/AWS/EC2/EIP.js +4 -1
  50. package/lib/AWS/EC2/EIP.js.map +1 -1
  51. package/lib/AWS/EC2/EgressOnlyInternetGateway.d.ts.map +1 -1
  52. package/lib/AWS/EC2/EgressOnlyInternetGateway.js +4 -2
  53. package/lib/AWS/EC2/EgressOnlyInternetGateway.js.map +1 -1
  54. package/lib/AWS/EC2/Instance.d.ts.map +1 -1
  55. package/lib/AWS/EC2/Instance.js +12 -3
  56. package/lib/AWS/EC2/Instance.js.map +1 -1
  57. package/lib/AWS/EC2/InternetGateway.d.ts.map +1 -1
  58. package/lib/AWS/EC2/InternetGateway.js +12 -5
  59. package/lib/AWS/EC2/InternetGateway.js.map +1 -1
  60. package/lib/AWS/EC2/NatGateway.js +2 -4
  61. package/lib/AWS/EC2/NatGateway.js.map +1 -1
  62. package/lib/AWS/EC2/NetworkAcl.d.ts.map +1 -1
  63. package/lib/AWS/EC2/NetworkAcl.js +4 -1
  64. package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
  65. package/lib/AWS/EC2/NetworkAclEntry.d.ts.map +1 -1
  66. package/lib/AWS/EC2/NetworkAclEntry.js +4 -1
  67. package/lib/AWS/EC2/NetworkAclEntry.js.map +1 -1
  68. package/lib/AWS/EC2/RouteTable.d.ts.map +1 -1
  69. package/lib/AWS/EC2/RouteTable.js +8 -6
  70. package/lib/AWS/EC2/RouteTable.js.map +1 -1
  71. package/lib/AWS/EC2/RouteTableAssociation.js +2 -5
  72. package/lib/AWS/EC2/RouteTableAssociation.js.map +1 -1
  73. package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
  74. package/lib/AWS/EC2/SecurityGroup.js +8 -3
  75. package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
  76. package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
  77. package/lib/AWS/EC2/Subnet.js +10 -6
  78. package/lib/AWS/EC2/Subnet.js.map +1 -1
  79. package/lib/AWS/EC2/Vpc.d.ts.map +1 -1
  80. package/lib/AWS/EC2/Vpc.js +7 -7
  81. package/lib/AWS/EC2/Vpc.js.map +1 -1
  82. package/lib/AWS/EC2/VpcEndpoint.js +2 -4
  83. package/lib/AWS/EC2/VpcEndpoint.js.map +1 -1
  84. package/lib/AWS/ECS/Service.d.ts.map +1 -1
  85. package/lib/AWS/ECS/Service.js +4 -1
  86. package/lib/AWS/ECS/Service.js.map +1 -1
  87. package/lib/AWS/EKS/Addon.js +8 -2
  88. package/lib/AWS/EKS/Addon.js.map +1 -1
  89. package/lib/AWS/EKS/Cluster.d.ts.map +1 -1
  90. package/lib/AWS/EKS/Cluster.js +4 -1
  91. package/lib/AWS/EKS/Cluster.js.map +1 -1
  92. package/lib/AWS/ELBv2/TargetGroup.d.ts.map +1 -1
  93. package/lib/AWS/ELBv2/TargetGroup.js +4 -1
  94. package/lib/AWS/ELBv2/TargetGroup.js.map +1 -1
  95. package/lib/AWS/ELBv2/TrustStore.d.ts.map +1 -1
  96. package/lib/AWS/ELBv2/TrustStore.js +4 -1
  97. package/lib/AWS/ELBv2/TrustStore.js.map +1 -1
  98. package/lib/AWS/IAM/SAMLProvider.js +4 -1
  99. package/lib/AWS/IAM/SAMLProvider.js.map +1 -1
  100. package/lib/AWS/IdentityCenter/AccountAssignment.js +8 -2
  101. package/lib/AWS/IdentityCenter/AccountAssignment.js.map +1 -1
  102. package/lib/AWS/IdentityCenter/common.d.ts.map +1 -1
  103. package/lib/AWS/IdentityCenter/common.js +1 -1
  104. package/lib/AWS/IdentityCenter/common.js.map +1 -1
  105. package/lib/AWS/KMS/Alias.js +4 -1
  106. package/lib/AWS/KMS/Alias.js.map +1 -1
  107. package/lib/AWS/KMS/Key.js +4 -1
  108. package/lib/AWS/KMS/Key.js.map +1 -1
  109. package/lib/AWS/Kinesis/Stream.d.ts.map +1 -1
  110. package/lib/AWS/Kinesis/Stream.js +2 -2
  111. package/lib/AWS/Kinesis/Stream.js.map +1 -1
  112. package/lib/AWS/Kinesis/StreamConsumer.d.ts.map +1 -1
  113. package/lib/AWS/Kinesis/StreamConsumer.js +7 -4
  114. package/lib/AWS/Kinesis/StreamConsumer.js.map +1 -1
  115. package/lib/AWS/Lambda/Alias.d.ts.map +1 -1
  116. package/lib/AWS/Lambda/Alias.js +4 -1
  117. package/lib/AWS/Lambda/Alias.js.map +1 -1
  118. package/lib/AWS/Lambda/EventInvokeConfig.d.ts.map +1 -1
  119. package/lib/AWS/Lambda/EventInvokeConfig.js +2 -2
  120. package/lib/AWS/Lambda/EventInvokeConfig.js.map +1 -1
  121. package/lib/AWS/Lambda/EventSourceMapping.d.ts.map +1 -1
  122. package/lib/AWS/Lambda/EventSourceMapping.js +10 -4
  123. package/lib/AWS/Lambda/EventSourceMapping.js.map +1 -1
  124. package/lib/AWS/Lambda/Function.d.ts +16 -1
  125. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  126. package/lib/AWS/Lambda/Function.js +101 -26
  127. package/lib/AWS/Lambda/Function.js.map +1 -1
  128. package/lib/AWS/Lambda/MicrovmProvider.d.ts.map +1 -1
  129. package/lib/AWS/Lambda/MicrovmProvider.js +13 -5
  130. package/lib/AWS/Lambda/MicrovmProvider.js.map +1 -1
  131. package/lib/AWS/Lambda/NetworkConnector.js +13 -5
  132. package/lib/AWS/Lambda/NetworkConnector.js.map +1 -1
  133. package/lib/AWS/Lambda/RuntimeExtension.d.ts +27 -0
  134. package/lib/AWS/Lambda/RuntimeExtension.d.ts.map +1 -0
  135. package/lib/AWS/Lambda/RuntimeExtension.js +49 -0
  136. package/lib/AWS/Lambda/RuntimeExtension.js.map +1 -0
  137. package/lib/AWS/Organizations/Account.js +5 -2
  138. package/lib/AWS/Organizations/Account.js.map +1 -1
  139. package/lib/AWS/Organizations/common.d.ts.map +1 -1
  140. package/lib/AWS/Organizations/common.js +1 -1
  141. package/lib/AWS/Organizations/common.js.map +1 -1
  142. package/lib/AWS/Providers.js +14 -12
  143. package/lib/AWS/Providers.js.map +1 -1
  144. package/lib/AWS/RDS/DBCluster.d.ts.map +1 -1
  145. package/lib/AWS/RDS/DBCluster.js +8 -2
  146. package/lib/AWS/RDS/DBCluster.js.map +1 -1
  147. package/lib/AWS/RDS/DBInstance.d.ts.map +1 -1
  148. package/lib/AWS/RDS/DBInstance.js +8 -2
  149. package/lib/AWS/RDS/DBInstance.js.map +1 -1
  150. package/lib/AWS/RDS/DBProxy.d.ts.map +1 -1
  151. package/lib/AWS/RDS/DBProxy.js +4 -1
  152. package/lib/AWS/RDS/DBProxy.js.map +1 -1
  153. package/lib/AWS/RDS/DBProxyEndpoint.d.ts.map +1 -1
  154. package/lib/AWS/RDS/DBProxyEndpoint.js +4 -1
  155. package/lib/AWS/RDS/DBProxyEndpoint.js.map +1 -1
  156. package/lib/AWS/Route53/HealthCheck.d.ts.map +1 -1
  157. package/lib/AWS/Route53/HealthCheck.js +8 -2
  158. package/lib/AWS/Route53/HealthCheck.js.map +1 -1
  159. package/lib/AWS/Route53/HostedZone.d.ts.map +1 -1
  160. package/lib/AWS/Route53/HostedZone.js +8 -2
  161. package/lib/AWS/Route53/HostedZone.js.map +1 -1
  162. package/lib/AWS/Route53/Record.d.ts.map +1 -1
  163. package/lib/AWS/Route53/Record.js +4 -1
  164. package/lib/AWS/Route53/Record.js.map +1 -1
  165. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  166. package/lib/AWS/S3/Bucket.js +5 -2
  167. package/lib/AWS/S3/Bucket.js.map +1 -1
  168. package/lib/AWS/SQS/Queue.d.ts.map +1 -1
  169. package/lib/AWS/SQS/Queue.js +25 -7
  170. package/lib/AWS/SQS/Queue.js.map +1 -1
  171. package/lib/AWS/StateStore/State.js +5 -2
  172. package/lib/AWS/StateStore/State.js.map +1 -1
  173. package/lib/AWS/Website/AssetDeployment.js +5 -2
  174. package/lib/AWS/Website/AssetDeployment.js.map +1 -1
  175. package/lib/Apply.js +8 -0
  176. package/lib/Apply.js.map +1 -1
  177. package/lib/Auth/AuthProvider.d.ts +10 -0
  178. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  179. package/lib/Auth/AuthProvider.js +10 -0
  180. package/lib/Auth/AuthProvider.js.map +1 -1
  181. package/lib/Axiom/AuthProvider.d.ts.map +1 -1
  182. package/lib/Axiom/AuthProvider.js +1 -1
  183. package/lib/Axiom/AuthProvider.js.map +1 -1
  184. package/lib/Bundle/Vite.d.ts +1 -1
  185. package/lib/Bundle/Vite.d.ts.map +1 -1
  186. package/lib/Bundle/Vite.js +14 -12
  187. package/lib/Bundle/Vite.js.map +1 -1
  188. package/lib/Cli/commands/_shared.d.ts +55 -5
  189. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  190. package/lib/Cli/commands/_shared.js +62 -2
  191. package/lib/Cli/commands/_shared.js.map +1 -1
  192. package/lib/Cli/commands/login.d.ts.map +1 -1
  193. package/lib/Cli/commands/login.js +9 -20
  194. package/lib/Cli/commands/login.js.map +1 -1
  195. package/lib/Cli/commands/logs.d.ts.map +1 -1
  196. package/lib/Cli/commands/logs.js +1 -0
  197. package/lib/Cli/commands/logs.js.map +1 -1
  198. package/lib/Cli/commands/nuke.d.ts.map +1 -1
  199. package/lib/Cli/commands/nuke.js +15 -24
  200. package/lib/Cli/commands/nuke.js.map +1 -1
  201. package/lib/Cli/commands/profile.d.ts +23 -1
  202. package/lib/Cli/commands/profile.d.ts.map +1 -1
  203. package/lib/Cli/commands/profile.js +47 -10
  204. package/lib/Cli/commands/profile.js.map +1 -1
  205. package/lib/Cli/commands/tail.d.ts.map +1 -1
  206. package/lib/Cli/commands/tail.js +1 -0
  207. package/lib/Cli/commands/tail.js.map +1 -1
  208. package/lib/Cloudflare/AI/GatewayDynamicRouting.d.ts.map +1 -1
  209. package/lib/Cloudflare/AI/GatewayDynamicRouting.js +31 -2
  210. package/lib/Cloudflare/AI/GatewayDynamicRouting.js.map +1 -1
  211. package/lib/Cloudflare/AI/SearchInstance.js +4 -1
  212. package/lib/Cloudflare/AI/SearchInstance.js.map +1 -1
  213. package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
  214. package/lib/Cloudflare/Access/Application.js +7 -1
  215. package/lib/Cloudflare/Access/Application.js.map +1 -1
  216. package/lib/Cloudflare/Alerting/Silence.d.ts.map +1 -1
  217. package/lib/Cloudflare/Alerting/Silence.js +4 -1
  218. package/lib/Cloudflare/Alerting/Silence.js.map +1 -1
  219. package/lib/Cloudflare/Alerting/Webhook.d.ts.map +1 -1
  220. package/lib/Cloudflare/Alerting/Webhook.js +8 -2
  221. package/lib/Cloudflare/Alerting/Webhook.js.map +1 -1
  222. package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
  223. package/lib/Cloudflare/Auth/AuthProvider.js +22 -7
  224. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  225. package/lib/Cloudflare/Auth/OAuthClient.d.ts.map +1 -1
  226. package/lib/Cloudflare/Auth/OAuthClient.js +6 -7
  227. package/lib/Cloudflare/Auth/OAuthClient.js.map +1 -1
  228. package/lib/Cloudflare/Cache/RegionalTieredCache.d.ts.map +1 -1
  229. package/lib/Cloudflare/Cache/RegionalTieredCache.js +7 -1
  230. package/lib/Cloudflare/Cache/RegionalTieredCache.js.map +1 -1
  231. package/lib/Cloudflare/Containers/ContainerApplication.d.ts +18 -2
  232. package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
  233. package/lib/Cloudflare/Containers/ContainerApplication.js +1 -0
  234. package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
  235. package/lib/Cloudflare/Containers/ContainerBundle.d.ts +29 -3
  236. package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
  237. package/lib/Cloudflare/Containers/ContainerBundle.js +73 -22
  238. package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
  239. package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
  240. package/lib/Cloudflare/Containers/ContainerProvider.js +53 -14
  241. package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
  242. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts +6 -6
  243. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
  244. package/lib/Cloudflare/Containers/LocalContainerProvider.js +69 -47
  245. package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
  246. package/lib/Cloudflare/Diagnostics/EndpointHealthcheck.js +4 -1
  247. package/lib/Cloudflare/Diagnostics/EndpointHealthcheck.js.map +1 -1
  248. package/lib/Cloudflare/Images/Variant.d.ts.map +1 -1
  249. package/lib/Cloudflare/Images/Variant.js +4 -1
  250. package/lib/Cloudflare/Images/Variant.js.map +1 -1
  251. package/lib/Cloudflare/LoadBalancer/Monitor.d.ts.map +1 -1
  252. package/lib/Cloudflare/LoadBalancer/Monitor.js +4 -1
  253. package/lib/Cloudflare/LoadBalancer/Monitor.js.map +1 -1
  254. package/lib/Cloudflare/LoadBalancer/MonitorGroup.d.ts.map +1 -1
  255. package/lib/Cloudflare/LoadBalancer/MonitorGroup.js +4 -1
  256. package/lib/Cloudflare/LoadBalancer/MonitorGroup.js.map +1 -1
  257. package/lib/Cloudflare/LoadBalancer/Pool.d.ts.map +1 -1
  258. package/lib/Cloudflare/LoadBalancer/Pool.js +4 -1
  259. package/lib/Cloudflare/LoadBalancer/Pool.js.map +1 -1
  260. package/lib/Cloudflare/LocalRuntime.d.ts +14 -0
  261. package/lib/Cloudflare/LocalRuntime.d.ts.map +1 -1
  262. package/lib/Cloudflare/LocalRuntime.js +1 -0
  263. package/lib/Cloudflare/LocalRuntime.js.map +1 -1
  264. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.d.ts.map +1 -1
  265. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.js +4 -1
  266. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.js.map +1 -1
  267. package/lib/Cloudflare/Pipelines/Pipeline.d.ts.map +1 -1
  268. package/lib/Cloudflare/Pipelines/Pipeline.js +8 -2
  269. package/lib/Cloudflare/Pipelines/Pipeline.js.map +1 -1
  270. package/lib/Cloudflare/Pipelines/Sink.d.ts.map +1 -1
  271. package/lib/Cloudflare/Pipelines/Sink.js +8 -2
  272. package/lib/Cloudflare/Pipelines/Sink.js.map +1 -1
  273. package/lib/Cloudflare/Pipelines/Stream.d.ts.map +1 -1
  274. package/lib/Cloudflare/Pipelines/Stream.js +4 -1
  275. package/lib/Cloudflare/Pipelines/Stream.js.map +1 -1
  276. package/lib/Cloudflare/Providers.js +14 -11
  277. package/lib/Cloudflare/Providers.js.map +1 -1
  278. package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
  279. package/lib/Cloudflare/Queues/Consumer.js +30 -3
  280. package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
  281. package/lib/Cloudflare/Queues/Queue.d.ts.map +1 -1
  282. package/lib/Cloudflare/Queues/Queue.js +4 -1
  283. package/lib/Cloudflare/Queues/Queue.js.map +1 -1
  284. package/lib/Cloudflare/R2/Bucket.js +12 -3
  285. package/lib/Cloudflare/R2/Bucket.js.map +1 -1
  286. package/lib/Cloudflare/R2/BucketEventNotification.js +4 -1
  287. package/lib/Cloudflare/R2/BucketEventNotification.js.map +1 -1
  288. package/lib/Cloudflare/R2/DataCatalog.js +4 -1
  289. package/lib/Cloudflare/R2/DataCatalog.js.map +1 -1
  290. package/lib/Cloudflare/Rum/Rule.d.ts.map +1 -1
  291. package/lib/Cloudflare/Rum/Rule.js +4 -1
  292. package/lib/Cloudflare/Rum/Rule.js.map +1 -1
  293. package/lib/Cloudflare/Snippets/Snippet.d.ts.map +1 -1
  294. package/lib/Cloudflare/Snippets/Snippet.js +4 -1
  295. package/lib/Cloudflare/Snippets/Snippet.js.map +1 -1
  296. package/lib/Cloudflare/StateStore/CredentialsFile.d.ts +42 -0
  297. package/lib/Cloudflare/StateStore/CredentialsFile.d.ts.map +1 -0
  298. package/lib/Cloudflare/StateStore/CredentialsFile.js +23 -0
  299. package/lib/Cloudflare/StateStore/CredentialsFile.js.map +1 -0
  300. package/lib/Cloudflare/StateStore/State.d.ts +2 -2
  301. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  302. package/lib/Cloudflare/StateStore/State.js +46 -9
  303. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  304. package/lib/Cloudflare/Tags/ZoneResourceTags.d.ts.map +1 -1
  305. package/lib/Cloudflare/Tags/ZoneResourceTags.js +4 -1
  306. package/lib/Cloudflare/Tags/ZoneResourceTags.js.map +1 -1
  307. package/lib/Cloudflare/UrlNormalization/UrlNormalization.d.ts.map +1 -1
  308. package/lib/Cloudflare/UrlNormalization/UrlNormalization.js +7 -1
  309. package/lib/Cloudflare/UrlNormalization/UrlNormalization.js.map +1 -1
  310. package/lib/Cloudflare/WaitingRoom/Settings.d.ts.map +1 -1
  311. package/lib/Cloudflare/WaitingRoom/Settings.js +7 -1
  312. package/lib/Cloudflare/WaitingRoom/Settings.js.map +1 -1
  313. package/lib/Cloudflare/Website/Vite.d.ts +19 -0
  314. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  315. package/lib/Cloudflare/Website/Vite.js +20 -0
  316. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  317. package/lib/Cloudflare/Workers/Compatibility.d.ts.map +1 -1
  318. package/lib/Cloudflare/Workers/Compatibility.js +43 -7
  319. package/lib/Cloudflare/Workers/Compatibility.js.map +1 -1
  320. package/lib/Cloudflare/Workers/CronEventSource.d.ts +3 -2
  321. package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
  322. package/lib/Cloudflare/Workers/CronEventSource.js.map +1 -1
  323. package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
  324. package/lib/Cloudflare/Workers/DurableObjectBridge.js +86 -82
  325. package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
  326. package/lib/Cloudflare/Workers/HttpServer.d.ts +1 -4
  327. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  328. package/lib/Cloudflare/Workers/HttpServer.js +1 -3
  329. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  330. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  331. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +74 -11
  332. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  333. package/lib/Cloudflare/Workers/ObservabilityDestination.d.ts.map +1 -1
  334. package/lib/Cloudflare/Workers/ObservabilityDestination.js +4 -1
  335. package/lib/Cloudflare/Workers/ObservabilityDestination.js.map +1 -1
  336. package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
  337. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  338. package/lib/Cloudflare/Workers/Worker.d.ts +27 -5
  339. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  340. package/lib/Cloudflare/Workers/Worker.js +10 -5
  341. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  342. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  343. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +24 -15
  344. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  345. package/lib/Cloudflare/Workers/WorkerBridge.d.ts +13 -5
  346. package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
  347. package/lib/Cloudflare/Workers/WorkerBridge.js +126 -50
  348. package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
  349. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  350. package/lib/Cloudflare/Workers/WorkerProvider.js +26 -7
  351. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  352. package/lib/Cloudflare/Workers/cloudflare_workers.d.ts.map +1 -1
  353. package/lib/Cloudflare/Workers/cloudflare_workers.js +10 -3
  354. package/lib/Cloudflare/Workers/cloudflare_workers.js.map +1 -1
  355. package/lib/Cloudflare/Workflows/Workflow.d.ts +10 -7
  356. package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
  357. package/lib/Cloudflare/Workflows/Workflow.js +38 -13
  358. package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
  359. package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts.map +1 -1
  360. package/lib/Cloudflare/Workflows/WorkflowBridge.js +39 -37
  361. package/lib/Cloudflare/Workflows/WorkflowBridge.js.map +1 -1
  362. package/lib/Cloudflare/Workflows/WorkflowName.d.ts +11 -0
  363. package/lib/Cloudflare/Workflows/WorkflowName.d.ts.map +1 -0
  364. package/lib/Cloudflare/Workflows/WorkflowName.js +28 -0
  365. package/lib/Cloudflare/Workflows/WorkflowName.js.map +1 -0
  366. package/lib/Cloudflare/Zone/Hold.d.ts.map +1 -1
  367. package/lib/Cloudflare/Zone/Hold.js +7 -1
  368. package/lib/Cloudflare/Zone/Hold.js.map +1 -1
  369. package/lib/Command/Dev.d.ts +16 -6
  370. package/lib/Command/Dev.d.ts.map +1 -1
  371. package/lib/Command/Dev.js +37 -7
  372. package/lib/Command/Dev.js.map +1 -1
  373. package/lib/Docker/Container.js +4 -1
  374. package/lib/Docker/Container.js.map +1 -1
  375. package/lib/Drizzle/Postgres.d.ts +14 -13
  376. package/lib/Drizzle/Postgres.d.ts.map +1 -1
  377. package/lib/Drizzle/Postgres.js +39 -19
  378. package/lib/Drizzle/Postgres.js.map +1 -1
  379. package/lib/GitHub/AuthProvider.d.ts.map +1 -1
  380. package/lib/GitHub/AuthProvider.js +1 -1
  381. package/lib/GitHub/AuthProvider.js.map +1 -1
  382. package/lib/GitHub/Env.d.ts +20 -0
  383. package/lib/GitHub/Env.d.ts.map +1 -0
  384. package/lib/GitHub/Env.js +27 -0
  385. package/lib/GitHub/Env.js.map +1 -0
  386. package/lib/GitHub/index.d.ts +1 -0
  387. package/lib/GitHub/index.d.ts.map +1 -1
  388. package/lib/GitHub/index.js +1 -0
  389. package/lib/GitHub/index.js.map +1 -1
  390. package/lib/Http.d.ts +9 -0
  391. package/lib/Http.d.ts.map +1 -1
  392. package/lib/Http.js +9 -0
  393. package/lib/Http.js.map +1 -1
  394. package/lib/Local/RpcProviderProxy.js +1 -1
  395. package/lib/Local/RpcProviderProxy.js.map +1 -1
  396. package/lib/Neon/AuthProvider.d.ts.map +1 -1
  397. package/lib/Neon/AuthProvider.js +1 -1
  398. package/lib/Neon/AuthProvider.js.map +1 -1
  399. package/lib/Neon/Project.js +4 -1
  400. package/lib/Neon/Project.js.map +1 -1
  401. package/lib/Plan.d.ts.map +1 -1
  402. package/lib/Plan.js +28 -11
  403. package/lib/Plan.js.map +1 -1
  404. package/lib/Planetscale/AuthProvider.d.ts +26 -9
  405. package/lib/Planetscale/AuthProvider.d.ts.map +1 -1
  406. package/lib/Planetscale/AuthProvider.js +142 -11
  407. package/lib/Planetscale/AuthProvider.js.map +1 -1
  408. package/lib/Planetscale/Branch.d.ts.map +1 -1
  409. package/lib/Planetscale/Branch.js +4 -1
  410. package/lib/Planetscale/Branch.js.map +1 -1
  411. package/lib/Planetscale/Credentials.d.ts.map +1 -1
  412. package/lib/Planetscale/Credentials.js +14 -6
  413. package/lib/Planetscale/Credentials.js.map +1 -1
  414. package/lib/Planetscale/MySQL/MySQLMigrations.js +4 -1
  415. package/lib/Planetscale/MySQL/MySQLMigrations.js.map +1 -1
  416. package/lib/Planetscale/OAuthClient.d.ts +72 -0
  417. package/lib/Planetscale/OAuthClient.d.ts.map +1 -0
  418. package/lib/Planetscale/OAuthClient.js +227 -0
  419. package/lib/Planetscale/OAuthClient.js.map +1 -0
  420. package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts.map +1 -1
  421. package/lib/Planetscale/Postgres/PostgresClusterSize.js +4 -1
  422. package/lib/Planetscale/Postgres/PostgresClusterSize.js.map +1 -1
  423. package/lib/Planetscale/Postgres/PostgresMigrations.js +4 -1
  424. package/lib/Planetscale/Postgres/PostgresMigrations.js.map +1 -1
  425. package/lib/Planetscale/Util.d.ts.map +1 -1
  426. package/lib/Planetscale/Util.js +4 -1
  427. package/lib/Planetscale/Util.js.map +1 -1
  428. package/lib/Platform.d.ts +2 -3
  429. package/lib/Platform.d.ts.map +1 -1
  430. package/lib/Platform.js +52 -3
  431. package/lib/Platform.js.map +1 -1
  432. package/lib/Provider.d.ts +35 -0
  433. package/lib/Provider.d.ts.map +1 -1
  434. package/lib/Provider.js.map +1 -1
  435. package/lib/State/HttpStateApi.d.ts +8 -8
  436. package/lib/State/HttpStateStore.js +5 -2
  437. package/lib/State/HttpStateStore.js.map +1 -1
  438. package/lib/Sync.d.ts.map +1 -1
  439. package/lib/Sync.js +3 -0
  440. package/lib/Sync.js.map +1 -1
  441. package/lib/Test/Http.d.ts.map +1 -1
  442. package/lib/Test/Http.js +8 -2
  443. package/lib/Test/Http.js.map +1 -1
  444. package/lib/Util/data.d.ts +6 -1
  445. package/lib/Util/data.d.ts.map +1 -1
  446. package/lib/Util/data.js.map +1 -1
  447. package/lib/Util/poll.js +1 -1
  448. package/lib/Util/poll.js.map +1 -1
  449. package/package.json +20 -20
  450. package/src/AWS/ACM/Certificate.ts +16 -12
  451. package/src/AWS/ApiGateway/common.ts +11 -8
  452. package/src/AWS/AuthProvider.ts +0 -3
  453. package/src/AWS/AutoScaling/AutoScalingGroup.ts +8 -6
  454. package/src/AWS/Bootstrap.ts +5 -6
  455. package/src/AWS/CloudFront/Distribution.ts +20 -16
  456. package/src/AWS/CloudFront/Function.ts +10 -6
  457. package/src/AWS/CloudFront/Invalidation.ts +4 -3
  458. package/src/AWS/CloudFront/KvEntries.ts +4 -3
  459. package/src/AWS/CloudFront/KvRoutesUpdate.ts +8 -6
  460. package/src/AWS/CloudFront/VpcOrigin.ts +12 -9
  461. package/src/AWS/CloudFront/common.ts +10 -6
  462. package/src/AWS/CloudWatch/AnomalyDetector.ts +4 -3
  463. package/src/AWS/CloudWatch/common.ts +1 -3
  464. package/src/AWS/DynamoDB/Table.ts +57 -47
  465. package/src/AWS/EC2/EIP.ts +6 -4
  466. package/src/AWS/EC2/EgressOnlyInternetGateway.ts +6 -4
  467. package/src/AWS/EC2/Instance.ts +12 -9
  468. package/src/AWS/EC2/InternetGateway.ts +18 -12
  469. package/src/AWS/EC2/NatGateway.ts +6 -10
  470. package/src/AWS/EC2/NetworkAcl.ts +6 -4
  471. package/src/AWS/EC2/NetworkAclEntry.ts +4 -3
  472. package/src/AWS/EC2/RouteTable.ts +12 -9
  473. package/src/AWS/EC2/RouteTableAssociation.ts +3 -5
  474. package/src/AWS/EC2/SecurityGroup.ts +10 -7
  475. package/src/AWS/EC2/Subnet.ts +15 -15
  476. package/src/AWS/EC2/Vpc.ts +12 -12
  477. package/src/AWS/EC2/VpcEndpoint.ts +6 -8
  478. package/src/AWS/ECS/Service.ts +4 -3
  479. package/src/AWS/EKS/Addon.ts +8 -6
  480. package/src/AWS/EKS/Cluster.ts +4 -3
  481. package/src/AWS/ELBv2/TargetGroup.ts +4 -3
  482. package/src/AWS/ELBv2/TrustStore.ts +4 -3
  483. package/src/AWS/IAM/SAMLProvider.ts +4 -4
  484. package/src/AWS/IdentityCenter/AccountAssignment.ts +8 -6
  485. package/src/AWS/IdentityCenter/common.ts +1 -3
  486. package/src/AWS/KMS/Alias.ts +4 -3
  487. package/src/AWS/KMS/Key.ts +4 -3
  488. package/src/AWS/Kinesis/Stream.ts +2 -6
  489. package/src/AWS/Kinesis/StreamConsumer.ts +7 -12
  490. package/src/AWS/Lambda/Alias.ts +4 -3
  491. package/src/AWS/Lambda/EventInvokeConfig.ts +2 -6
  492. package/src/AWS/Lambda/EventSourceMapping.ts +10 -8
  493. package/src/AWS/Lambda/Function.ts +111 -31
  494. package/src/AWS/Lambda/MicrovmProvider.ts +18 -16
  495. package/src/AWS/Lambda/NetworkConnector.ts +19 -15
  496. package/src/AWS/Lambda/RuntimeExtension.ts +46 -0
  497. package/src/AWS/Organizations/Account.ts +5 -6
  498. package/src/AWS/Organizations/common.ts +1 -3
  499. package/src/AWS/Providers.ts +22 -20
  500. package/src/AWS/RDS/DBCluster.ts +8 -6
  501. package/src/AWS/RDS/DBInstance.ts +8 -6
  502. package/src/AWS/RDS/DBProxy.ts +4 -3
  503. package/src/AWS/RDS/DBProxyEndpoint.ts +4 -3
  504. package/src/AWS/Route53/HealthCheck.ts +8 -6
  505. package/src/AWS/Route53/HostedZone.ts +8 -6
  506. package/src/AWS/Route53/Record.ts +4 -3
  507. package/src/AWS/S3/Bucket.ts +5 -4
  508. package/src/AWS/SQS/Queue.ts +26 -20
  509. package/src/AWS/StateStore/State.ts +5 -4
  510. package/src/AWS/Website/AssetDeployment.ts +10 -6
  511. package/src/Apply.ts +8 -0
  512. package/src/Auth/AuthProvider.ts +11 -0
  513. package/src/Axiom/AuthProvider.ts +0 -3
  514. package/src/Bundle/Vite.ts +16 -15
  515. package/src/Cli/commands/_shared.ts +119 -5
  516. package/src/Cli/commands/login.ts +9 -40
  517. package/src/Cli/commands/logs.ts +1 -0
  518. package/src/Cli/commands/nuke.ts +16 -44
  519. package/src/Cli/commands/profile.ts +89 -27
  520. package/src/Cli/commands/tail.ts +1 -0
  521. package/src/Cloudflare/AI/GatewayDynamicRouting.ts +38 -6
  522. package/src/Cloudflare/AI/SearchInstance.ts +4 -3
  523. package/src/Cloudflare/Access/Application.ts +7 -4
  524. package/src/Cloudflare/Alerting/Silence.ts +4 -3
  525. package/src/Cloudflare/Alerting/Webhook.ts +8 -6
  526. package/src/Cloudflare/Auth/AuthProvider.ts +54 -38
  527. package/src/Cloudflare/Auth/OAuthClient.ts +6 -7
  528. package/src/Cloudflare/Cache/RegionalTieredCache.ts +7 -4
  529. package/src/Cloudflare/Containers/ContainerApplication.ts +22 -2
  530. package/src/Cloudflare/Containers/ContainerBundle.ts +99 -33
  531. package/src/Cloudflare/Containers/ContainerProvider.ts +73 -19
  532. package/src/Cloudflare/Containers/LocalContainerProvider.ts +78 -72
  533. package/src/Cloudflare/Diagnostics/EndpointHealthcheck.ts +4 -3
  534. package/src/Cloudflare/Images/Variant.ts +4 -3
  535. package/src/Cloudflare/LoadBalancer/Monitor.ts +4 -3
  536. package/src/Cloudflare/LoadBalancer/MonitorGroup.ts +4 -3
  537. package/src/Cloudflare/LoadBalancer/Pool.ts +4 -3
  538. package/src/Cloudflare/LocalRuntime.ts +17 -0
  539. package/src/Cloudflare/MagicNetworkMonitoring/Rule.ts +4 -3
  540. package/src/Cloudflare/Pipelines/Pipeline.ts +8 -6
  541. package/src/Cloudflare/Pipelines/Sink.ts +8 -6
  542. package/src/Cloudflare/Pipelines/Stream.ts +4 -3
  543. package/src/Cloudflare/Providers.ts +21 -19
  544. package/src/Cloudflare/Queues/Consumer.ts +45 -9
  545. package/src/Cloudflare/Queues/Queue.ts +4 -3
  546. package/src/Cloudflare/R2/Bucket.ts +12 -9
  547. package/src/Cloudflare/R2/BucketEventNotification.ts +4 -3
  548. package/src/Cloudflare/R2/DataCatalog.ts +4 -3
  549. package/src/Cloudflare/Rum/Rule.ts +4 -3
  550. package/src/Cloudflare/Snippets/Snippet.ts +4 -3
  551. package/src/Cloudflare/StateStore/CredentialsFile.ts +48 -0
  552. package/src/Cloudflare/StateStore/State.ts +61 -25
  553. package/src/Cloudflare/Tags/ZoneResourceTags.ts +4 -3
  554. package/src/Cloudflare/UrlNormalization/UrlNormalization.ts +7 -4
  555. package/src/Cloudflare/WaitingRoom/Settings.ts +7 -4
  556. package/src/Cloudflare/Website/Vite.ts +20 -0
  557. package/src/Cloudflare/Workers/Compatibility.ts +50 -7
  558. package/src/Cloudflare/Workers/CronEventSource.ts +3 -2
  559. package/src/Cloudflare/Workers/DurableObjectBridge.ts +38 -33
  560. package/src/Cloudflare/Workers/HttpServer.ts +1 -4
  561. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +132 -26
  562. package/src/Cloudflare/Workers/ObservabilityDestination.ts +4 -3
  563. package/src/Cloudflare/Workers/Worker.ts +27 -5
  564. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +27 -16
  565. package/src/Cloudflare/Workers/WorkerBridge.ts +227 -106
  566. package/src/Cloudflare/Workers/WorkerProvider.ts +26 -19
  567. package/src/Cloudflare/Workers/cloudflare_workers.ts +20 -12
  568. package/src/Cloudflare/Workflows/Workflow.ts +54 -20
  569. package/src/Cloudflare/Workflows/WorkflowBridge.ts +19 -23
  570. package/src/Cloudflare/Workflows/WorkflowName.ts +41 -0
  571. package/src/Cloudflare/Zone/Hold.ts +7 -4
  572. package/src/Command/Dev.ts +42 -10
  573. package/src/Docker/Container.ts +4 -1
  574. package/src/Drizzle/Postgres.ts +51 -23
  575. package/src/GitHub/AuthProvider.ts +0 -3
  576. package/src/GitHub/Env.ts +57 -0
  577. package/src/GitHub/index.ts +1 -0
  578. package/src/Http.ts +11 -0
  579. package/src/Local/RpcProviderProxy.ts +1 -1
  580. package/src/Neon/AuthProvider.ts +0 -3
  581. package/src/Neon/Project.ts +2 -2
  582. package/src/Plan.ts +28 -11
  583. package/src/Planetscale/AuthProvider.ts +267 -27
  584. package/src/Planetscale/Branch.ts +4 -3
  585. package/src/Planetscale/Credentials.ts +18 -6
  586. package/src/Planetscale/MySQL/MySQLMigrations.ts +4 -3
  587. package/src/Planetscale/OAuthClient.ts +307 -0
  588. package/src/Planetscale/Postgres/PostgresClusterSize.ts +4 -3
  589. package/src/Planetscale/Postgres/PostgresMigrations.ts +4 -3
  590. package/src/Planetscale/Util.ts +4 -3
  591. package/src/Platform.ts +74 -7
  592. package/src/Provider.ts +35 -0
  593. package/src/State/HttpStateStore.ts +5 -5
  594. package/src/Sync.ts +3 -0
  595. package/src/Test/Http.ts +8 -6
  596. package/src/Util/data.ts +14 -5
  597. package/src/Util/poll.ts +1 -1
  598. package/lib/ExecutionContext.d.ts +0 -18
  599. package/lib/ExecutionContext.d.ts.map +0 -1
  600. package/lib/ExecutionContext.js +0 -10
  601. package/lib/ExecutionContext.js.map +0 -1
  602. package/src/ExecutionContext.ts +0 -18
@@ -21,6 +21,7 @@ import {
21
21
  retryOnce,
22
22
  } from "../../Auth/Env.ts";
23
23
  import * as Clank from "../../Util/Clank.ts";
24
+ import { CREDENTIALS_FILE as STATE_STORE_CREDENTIALS_FILE } from "../StateStore/CredentialsFile.ts";
24
25
  import * as OAuthClient from "./OAuthClient.ts";
25
26
 
26
27
  const options: Array<{
@@ -343,10 +344,18 @@ export const CloudflareAuth = AuthProviderLayer<
343
344
 
344
345
  const configureCredentials = (profileName: string, ctx: ConfigureContext) =>
345
346
  Effect.gen(function* () {
346
- if (ctx.ci) {
347
- return { method: "env" as const };
348
- }
349
- return yield* configureInteractive(profileName);
347
+ const config = ctx.ci
348
+ ? { method: "env" as const }
349
+ : yield* configureInteractive(profileName);
350
+ // Re-configuring auth may point this profile at a different
351
+ // Cloudflare account. The cached state-store credentials
352
+ // (`~/.alchemy/credentials/{profile}/cloudflare-state-store.json`)
353
+ // are minted per-account, so drop them here; the next deploy
354
+ // re-derives them against the freshly-configured account.
355
+ yield* store
356
+ .delete(profileName, STATE_STORE_CREDENTIALS_FILE)
357
+ .pipe(Effect.ignore);
358
+ return config;
350
359
  }).pipe(
351
360
  Effect.mapError(
352
361
  (e) =>
@@ -491,40 +500,50 @@ export const CloudflareAuth = AuthProviderLayer<
491
500
  );
492
501
 
493
502
  const logout = (profileName: string, config: CloudflareAuthConfig) =>
494
- Match.value(config).pipe(
495
- Match.when({ method: "env" }, () => Effect.void),
496
- Match.when({ method: "stored" }, () =>
497
- store
498
- .delete(profileName, "cf-stored")
499
- .pipe(
500
- Effect.andThen(
501
- Clank.success("Cloudflare: stored credentials removed"),
503
+ Match.value(config)
504
+ .pipe(
505
+ Match.when({ method: "env" }, () => Effect.void),
506
+ Match.when({ method: "stored" }, () =>
507
+ store
508
+ .delete(profileName, "cf-stored")
509
+ .pipe(
510
+ Effect.andThen(
511
+ Clank.success("Cloudflare: stored credentials removed"),
512
+ ),
502
513
  ),
503
- ),
504
- ),
505
- Match.when({ method: "oauth" }, () =>
506
- store
507
- .read<OAuthClient.OAuthCredentials>(profileName, "cf-oauth")
508
- .pipe(
509
- Effect.tap((creds) =>
510
- creds?.type === "oauth"
511
- ? OAuthClient.revoke(creds).pipe(
512
- Effect.catchTag("OAuthError", (err) =>
513
- Clank.warn(
514
- `Cloudflare: could not revoke OAuth token: ${err.errorDescription}`,
514
+ ),
515
+ Match.when({ method: "oauth" }, () =>
516
+ store
517
+ .read<OAuthClient.OAuthCredentials>(profileName, "cf-oauth")
518
+ .pipe(
519
+ Effect.tap((creds) =>
520
+ creds?.type === "oauth"
521
+ ? OAuthClient.revoke(creds).pipe(
522
+ Effect.catchTag("OAuthError", (err) =>
523
+ Clank.warn(
524
+ `Cloudflare: could not revoke OAuth token: ${err.errorDescription}`,
525
+ ),
515
526
  ),
516
- ),
517
- )
518
- : Effect.void,
519
- ),
520
- Effect.andThen(store.delete(profileName, "cf-oauth")),
521
- Effect.andThen(
522
- Clank.success("Cloudflare: OAuth credentials removed."),
527
+ )
528
+ : Effect.void,
529
+ ),
530
+ Effect.andThen(store.delete(profileName, "cf-oauth")),
531
+ Effect.andThen(
532
+ Clank.success("Cloudflare: OAuth credentials removed."),
533
+ ),
523
534
  ),
524
- ),
525
- ),
526
- Match.exhaustive,
527
- );
535
+ ),
536
+ Match.exhaustive,
537
+ )
538
+ // The cached state-store credentials are derived from the account we
539
+ // just logged out of, so drop them regardless of auth method.
540
+ .pipe(
541
+ Effect.andThen(
542
+ store
543
+ .delete(profileName, STATE_STORE_CREDENTIALS_FILE)
544
+ .pipe(Effect.ignore),
545
+ ),
546
+ );
528
547
 
529
548
  const login = (profileName: string, config: CloudflareAuthConfig) =>
530
549
  Match.value(config)
@@ -619,9 +638,6 @@ export const CloudflareAuth = AuthProviderLayer<
619
638
  Match.exhaustive,
620
639
  );
621
640
  }),
622
- Effect.catch((e) =>
623
- Console.error(` Failed to retrieve credentials: ${e}`),
624
- ),
625
641
  );
626
642
 
627
643
  return {
@@ -2,6 +2,7 @@ import * as Data from "effect/Data";
2
2
  import * as Effect from "effect/Effect";
3
3
  import crypto from "node:crypto";
4
4
  import http from "node:http";
5
+ import { AUTH_ERROR_URL, AUTH_SUCCESS_URL } from "../../Auth/AuthProvider.ts";
5
6
  import {
6
7
  OAUTH_CLIENT_ID,
7
8
  OAUTH_ENDPOINTS,
@@ -224,7 +225,7 @@ function callbackPromise(
224
225
  const error = url.searchParams.get("error");
225
226
  const errorDescription = url.searchParams.get("error_description");
226
227
  if (error) {
227
- res.writeHead(302, { Location: "https://alchemy.run/auth/error" });
228
+ res.writeHead(302, { Location: AUTH_ERROR_URL });
228
229
  res.end();
229
230
  cleanup();
230
231
  reject(
@@ -239,7 +240,7 @@ function callbackPromise(
239
240
  const code = url.searchParams.get("code");
240
241
  const state = url.searchParams.get("state");
241
242
  if (!code || !state) {
242
- res.writeHead(302, { Location: "https://alchemy.run/auth/error" });
243
+ res.writeHead(302, { Location: AUTH_ERROR_URL });
243
244
  res.end();
244
245
  cleanup();
245
246
  reject(
@@ -252,7 +253,7 @@ function callbackPromise(
252
253
  }
253
254
 
254
255
  if (state !== authorization.state) {
255
- res.writeHead(302, { Location: "https://alchemy.run/auth/error" });
256
+ res.writeHead(302, { Location: AUTH_ERROR_URL });
256
257
  res.end();
257
258
  cleanup();
258
259
  reject(
@@ -268,14 +269,12 @@ function callbackPromise(
268
269
  const credentials = await Effect.runPromise(
269
270
  exchange(code, authorization.verifier),
270
271
  );
271
- res.writeHead(302, {
272
- Location: "https://alchemy.run/auth/success",
273
- });
272
+ res.writeHead(302, { Location: AUTH_SUCCESS_URL });
274
273
  res.end();
275
274
  cleanup();
276
275
  resolve(credentials);
277
276
  } catch (err) {
278
- res.writeHead(302, { Location: "https://alchemy.run/auth/error" });
277
+ res.writeHead(302, { Location: AUTH_ERROR_URL });
279
278
  res.end();
280
279
  cleanup();
281
280
  reject(err);
@@ -114,10 +114,13 @@ const desiredValue = (props: RegionalTieredCacheProps): "on" | "off" =>
114
114
  // Cloudflare can transiently fail to authenticate a valid token, surfacing as
115
115
  // `Unauthorized`/`Forbidden`. Retry with exponential backoff capped at 5s,
116
116
  // bounded to ~8 attempts so a persistently-failing call still fails fast.
117
- const transientAuthRetrySchedule = Schedule.exponential("500 millis").pipe(
118
- Schedule.either(Schedule.spaced("5 seconds")),
119
- Schedule.both(Schedule.recurs(8)),
120
- );
117
+ const transientAuthRetrySchedule = Schedule.max([
118
+ Schedule.min([
119
+ Schedule.exponential("500 millis"),
120
+ Schedule.spaced("5 seconds"),
121
+ ]),
122
+ Schedule.recurs(8),
123
+ ]);
121
124
 
122
125
  export const RegionalTieredCacheProvider = () =>
123
126
  Provider.succeed(RegionalTieredCache, {
@@ -1,5 +1,5 @@
1
- import type { ContainerImage } from "@distilled.cloud/cloudflare-runtime/Docker";
2
1
  import * as Containers from "@distilled.cloud/cloudflare/containers";
2
+ import * as Redacted from "effect/Redacted";
3
3
  import * as ProviderLayer from "../../Local/ProviderLayer.ts";
4
4
  import {
5
5
  type Main,
@@ -610,7 +610,27 @@ export interface ContainerApplication<Shape = unknown> extends Resource<
610
610
  // imported by Worker.ts). The provider helpers that previously lived here
611
611
  // (resolveDurableObjectApplicationRecovery, the readiness schedule/retry, etc.)
612
612
  // were extracted to ContainerProvider.ts on this branch.
613
- export type DevContainerImage = ContainerImage;
613
+ export type DevContainerImage =
614
+ | DevContainerImage.Build
615
+ | DevContainerImage.Pull
616
+ | DevContainerImage.Ref;
617
+
618
+ export declare namespace DevContainerImage {
619
+ interface Base {
620
+ readonly env?: Record<string, string | Redacted.Redacted<string>>;
621
+ }
622
+ export interface Build extends Base {
623
+ readonly dockerfile: string;
624
+ readonly context?: string;
625
+ readonly buildArgs?: Record<string, string>;
626
+ }
627
+ export interface Pull extends Base {
628
+ readonly imageUri: string;
629
+ }
630
+ export interface Ref extends Base {
631
+ readonly tag: string;
632
+ }
633
+ }
614
634
 
615
635
  export const ContainerProvider = () =>
616
636
  ProviderLayer.select({
@@ -1,16 +1,21 @@
1
1
  import * as Effect from "effect/Effect";
2
+ import * as Path from "effect/Path";
2
3
  import * as Redacted from "effect/Redacted";
3
4
  import type * as rolldown from "rolldown";
5
+ import { AlchemyContext } from "../../AlchemyContext.ts";
4
6
  import * as Bundle from "../../Bundle/Bundle.ts";
5
- import { findCwdForBundle, resolveMainPath } from "../../Bundle/TempRoot.ts";
7
+ import {
8
+ findCwdForBundle,
9
+ getStableContextDir,
10
+ resolveMainPath,
11
+ } from "../../Bundle/TempRoot.ts";
12
+ import { Docker } from "../../Docker/Docker.ts";
6
13
  import * as Output from "../../Output.ts";
7
14
  import { createPhysicalName } from "../../PhysicalName.ts";
8
15
  import { Self } from "../../Self.ts";
9
16
  import { Stack } from "../../Stack.ts";
10
- import type {
11
- ContainerApplication,
12
- ContainerApplicationProps,
13
- } from "./ContainerApplication.ts";
17
+ import { sha256Object } from "../../Util/sha256.ts";
18
+ import type { ContainerApplicationProps } from "./ContainerApplication.ts";
14
19
 
15
20
  /**
16
21
  * Fold the runtime-context `env` map (populated by `Binding.Service`s and
@@ -36,35 +41,24 @@ import type {
36
41
  *
37
42
  * Explicit `props.environmentVariables` win on a name collision.
38
43
  */
39
- export const foldEnvIntoEnvironmentVariables = (
44
+ export const makeContainerEnv = (
40
45
  props: ContainerApplicationProps,
41
- accountId?: string,
42
- ): ContainerApplication.EnvironmentVariable[] | undefined => {
43
- const explicitNames = new Set(
44
- (props.environmentVariables ?? []).map((e) => e.name),
45
- );
46
- const environmentVariables: ContainerApplication.EnvironmentVariable[] = [
47
- ...(props.environmentVariables ?? []),
48
- ...(accountId !== undefined &&
49
- !explicitNames.has("ALCHEMY_CLOUDFLARE_ACCOUNT_ID")
50
- ? [{ name: "ALCHEMY_CLOUDFLARE_ACCOUNT_ID", value: accountId }]
51
- : []),
52
- ...Object.entries(props.env ?? {})
53
- .filter(
54
- ([name, value]) =>
55
- value !== undefined &&
56
- !Output.isOutput(value) &&
57
- !explicitNames.has(name) &&
58
- name !== "ALCHEMY_CLOUDFLARE_ACCOUNT_ID",
59
- )
60
- .map(([name, value]) => ({
61
- name,
62
- value: Redacted.isRedacted(value)
63
- ? Redacted.value(value as Redacted.Redacted<string>)
64
- : (value as string),
65
- })),
66
- ];
67
- return environmentVariables.length > 0 ? environmentVariables : undefined;
46
+ accountId: string,
47
+ ) => {
48
+ const env: Record<string, string | Redacted.Redacted<string>> = {};
49
+ for (const [name, value] of Object.entries(props.env ?? {})) {
50
+ if (Output.isOutput(value) || value === undefined) {
51
+ continue;
52
+ }
53
+ env[name] = value;
54
+ }
55
+ for (const value of props.environmentVariables ?? []) {
56
+ env[value.name] = value.value;
57
+ }
58
+ if (!env.ALCHEMY_CLOUDFLARE_ACCOUNT_ID) {
59
+ env.ALCHEMY_CLOUDFLARE_ACCOUNT_ID = accountId;
60
+ }
61
+ return env;
68
62
  };
69
63
 
70
64
  /**
@@ -290,3 +284,75 @@ await Effect.runPromise(serverEffect).catch((err) => {
290
284
 
291
285
  return { files, hash: bundleOutput.hash };
292
286
  });
287
+
288
+ /**
289
+ * Bundle an Effect-native container `main` and materialize it (plus the
290
+ * generated Dockerfile) into a stable Docker build context directory, then
291
+ * return the paths + content hash of that context.
292
+ *
293
+ * This is the local-dev image shape (`ContainerImage.Build`) that
294
+ * `@distilled.cloud/cloudflare-runtime` consumes: it `docker build`s the
295
+ * `dockerfile` against the `context` directory. Shared between the local
296
+ * provider (which serves this context to the runtime as the `dev` image) and
297
+ * the live provider (which persists the same deterministic context path as
298
+ * `dev` so a subsequent `alchemy dev` run has an image to build even though the
299
+ * live deploy pushed to Cloudflare's registry instead).
300
+ *
301
+ * The context directory is deterministic for a given resource id, so live and
302
+ * local agree on the path. Callers that want to skip re-bundling on an
303
+ * unchanged resource should wrap this in {@link Artifacts.cached}.
304
+ */
305
+ export const prepareContainerBuildContext = Effect.fn(function* (
306
+ id: string,
307
+ news: ContainerApplicationProps,
308
+ ) {
309
+ const { dotAlchemy } = yield* AlchemyContext;
310
+ const docker = yield* Docker;
311
+ const path = yield* Path.Path;
312
+
313
+ const main = news.main;
314
+ if (!main) {
315
+ return yield* Effect.die(
316
+ new Error("Container requires a `main` entrypoint."),
317
+ );
318
+ }
319
+ const runtime = news.runtime ?? "bun";
320
+ const context = yield* getStableContextDir(
321
+ process.cwd(),
322
+ dotAlchemy,
323
+ `${id}-container`,
324
+ );
325
+ const dockerfileContent = buildFinalDockerfile(
326
+ news.dockerfile,
327
+ runtime,
328
+ news.external,
329
+ news.autoInstallExternals,
330
+ );
331
+ const [bundle] = yield* Effect.all(
332
+ [
333
+ bundleContainerProgram({
334
+ id,
335
+ main,
336
+ runtime,
337
+ handler: news.handler,
338
+ isExternal: news.isExternal,
339
+ external: news.external,
340
+ outdir: context,
341
+ }),
342
+ docker.materialize({
343
+ context,
344
+ dockerfile: dockerfileContent,
345
+ files: [],
346
+ }),
347
+ ],
348
+ { concurrency: "unbounded" },
349
+ );
350
+ return {
351
+ context,
352
+ dockerfile: path.join(context, "Dockerfile"),
353
+ hash: yield* sha256Object({
354
+ bundle: bundle.hash,
355
+ dockerfileContent,
356
+ }),
357
+ };
358
+ });
@@ -2,6 +2,7 @@ import * as Containers from "@distilled.cloud/cloudflare/containers";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as FileSystem from "effect/FileSystem";
4
4
  import * as Path from "effect/Path";
5
+ import * as Redacted from "effect/Redacted";
5
6
  import * as Schedule from "effect/Schedule";
6
7
  import { Unowned } from "../../AdoptPolicy.ts";
7
8
  import { AlchemyContext } from "../../AlchemyContext.ts";
@@ -24,7 +25,7 @@ import {
24
25
  buildFinalDockerfile,
25
26
  bundleContainerProgram,
26
27
  createContainerApplicationName,
27
- foldEnvIntoEnvironmentVariables,
28
+ makeContainerEnv,
28
29
  } from "./ContainerBundle.ts";
29
30
  import { ContainerPlatform } from "./ContainerPlatform.ts";
30
31
 
@@ -105,8 +106,8 @@ export const LiveContainerProvider = () =>
105
106
 
106
107
  const desiredConfiguration = (
107
108
  props: ContainerApplicationProps,
109
+ env: Record<string, string | Redacted.Redacted<string>>,
108
110
  imageRef: string,
109
- accountId: string,
110
111
  ) =>
111
112
  normalizeNulls({
112
113
  image: imageRef,
@@ -127,10 +128,10 @@ export const LiveContainerProvider = () =>
127
128
  vcpu: props.vcpu,
128
129
  memory: props.memory,
129
130
  disk: props.disk,
130
- environmentVariables: foldEnvIntoEnvironmentVariables(
131
- props,
132
- accountId,
133
- ),
131
+ environmentVariables: Object.entries(env).map(([name, value]) => ({
132
+ name,
133
+ value: Redacted.isRedacted(value) ? Redacted.value(value) : value,
134
+ })),
134
135
  labels: props.labels,
135
136
  network: props.network,
136
137
  command: props.command,
@@ -165,6 +166,7 @@ export const LiveContainerProvider = () =>
165
166
  const computeImage = Effect.fn(function* (
166
167
  id: string,
167
168
  props: ContainerApplicationProps,
169
+ env: Record<string, string | Redacted.Redacted<string>>,
168
170
  ) {
169
171
  const { accountId } = yield* yield* CloudflareEnvironment;
170
172
  const name = yield* createApplicationName(id, props.name);
@@ -195,10 +197,26 @@ export const LiveContainerProvider = () =>
195
197
  bundleHash,
196
198
  dockerfile: finalDockerfile,
197
199
  })).slice(0, 16);
200
+ // The dev image is the deterministic build-context directory that
201
+ // `buildAndPushImage` materializes into (and that the local provider
202
+ // regenerates on the next `alchemy dev`). We persist the path here so
203
+ // a dev run after a live deploy has an image to `docker build` — the
204
+ // live deploy pushes to Cloudflare's registry, which the local
205
+ // `workerd` runtime can't pull. See `prepareContainerBuildContext`.
206
+ const contextDir = yield* getStableContextDir(
207
+ process.cwd(),
208
+ dotAlchemy,
209
+ `${id}-container`,
210
+ );
198
211
  return {
199
212
  build: { kind: "effectful" as const, files },
200
213
  imageRef: makeRef(imageHash),
201
214
  imageHash,
215
+ dev: {
216
+ context: path.relative(process.cwd(), contextDir),
217
+ dockerfile: "Dockerfile",
218
+ env,
219
+ },
202
220
  };
203
221
  }
204
222
 
@@ -212,6 +230,8 @@ export const LiveContainerProvider = () =>
212
230
  build: { kind: "remote" as const, image: props.image },
213
231
  imageRef: makeRef(imageHash),
214
232
  imageHash,
233
+ // The local runtime pulls this image directly (no build context).
234
+ dev: { imageUri: props.image, env },
215
235
  };
216
236
  }
217
237
 
@@ -230,6 +250,13 @@ export const LiveContainerProvider = () =>
230
250
  build: { kind: "external" as const, context, dockerfile },
231
251
  imageRef: makeRef(imageHash),
232
252
  imageHash,
253
+ // The local runtime builds the user's Dockerfile against the same
254
+ // (already real-path'd) context directory.
255
+ dev: {
256
+ context: path.relative(process.cwd(), context),
257
+ dockerfile: path.relative(context, dockerfile),
258
+ env,
259
+ },
233
260
  };
234
261
  });
235
262
 
@@ -531,8 +558,13 @@ export const LiveContainerProvider = () =>
531
558
  yield* Effect.logInfo(
532
559
  `Cloudflare Container update: preparing ${existing.applicationName}`,
533
560
  );
534
- const { build, imageRef, imageHash } = yield* computeImage(id, news);
535
- const configuration = desiredConfiguration(news, imageRef, accountId);
561
+ const env = makeContainerEnv(news, accountId);
562
+ const { build, imageRef, imageHash, dev } = yield* computeImage(
563
+ id,
564
+ news,
565
+ env,
566
+ );
567
+ const configuration = desiredConfiguration(news, env, imageRef);
536
568
 
537
569
  if (imageHash !== existing.hash?.image) {
538
570
  yield* buildAndPushImage(id, news, build, imageRef, session);
@@ -589,7 +621,7 @@ export const LiveContainerProvider = () =>
589
621
  rollout: news.rollout,
590
622
  });
591
623
  }
592
- return { ...updated, configuration, hash: { image: imageHash } };
624
+ return { ...updated, configuration, hash: { image: imageHash }, dev };
593
625
  });
594
626
 
595
627
  const getDurableObjects = (
@@ -664,8 +696,12 @@ export const LiveContainerProvider = () =>
664
696
  return { action: "update", stables: ["accountId"] } as const;
665
697
  }
666
698
 
667
- const { imageHash } = yield* computeImage(id, news);
668
- if (imageHash !== output.hash?.image) {
699
+ const { imageHash, dev } = yield* computeImage(
700
+ id,
701
+ news,
702
+ makeContainerEnv(news, accountId),
703
+ );
704
+ if (imageHash !== output.hash?.image || !deepEqual(dev, output.dev)) {
669
705
  return { action: "update" } as const;
670
706
  }
671
707
  }),
@@ -676,8 +712,13 @@ export const LiveContainerProvider = () =>
676
712
  );
677
713
 
678
714
  const { accountId } = yield* yield* CloudflareEnvironment;
679
- const { build, imageRef, imageHash } = yield* computeImage(id, news);
680
- const configuration = desiredConfiguration(news, imageRef, accountId);
715
+ const env = makeContainerEnv(news, accountId);
716
+ const { build, imageRef, imageHash, dev } = yield* computeImage(
717
+ id,
718
+ news,
719
+ env,
720
+ );
721
+ const configuration = desiredConfiguration(news, env, imageRef);
681
722
  yield* buildAndPushImage(id, news, build, imageRef, session);
682
723
 
683
724
  // Precreate intentionally omits the Durable Object attachment so the
@@ -699,6 +740,7 @@ export const LiveContainerProvider = () =>
699
740
  return {
700
741
  ...("applicationId" in result ? result : toAttributes(result)),
701
742
  hash: { image: imageHash },
743
+ dev,
702
744
  };
703
745
  }),
704
746
  reconcile: Effect.fn(function* ({
@@ -714,8 +756,13 @@ export const LiveContainerProvider = () =>
714
756
  );
715
757
  const durableObjects = yield* getDurableObjects(bindings);
716
758
  const { accountId } = yield* yield* CloudflareEnvironment;
717
- const { build, imageRef, imageHash } = yield* computeImage(id, news);
718
- const configuration = desiredConfiguration(news, imageRef, accountId);
759
+ const env = makeContainerEnv(news, accountId);
760
+ const { build, imageRef, imageHash, dev } = yield* computeImage(
761
+ id,
762
+ news,
763
+ env,
764
+ );
765
+ const configuration = desiredConfiguration(news, env, imageRef);
719
766
 
720
767
  // Observe — re-fetch the cached application to confirm it still
721
768
  // exists. Cloudflare reports a deleted container application as
@@ -815,6 +862,7 @@ export const LiveContainerProvider = () =>
815
862
  return {
816
863
  ...("applicationId" in result ? result : toAttributes(result)),
817
864
  hash: { image: imageHash },
865
+ dev,
818
866
  };
819
867
  }
820
868
 
@@ -849,6 +897,7 @@ export const LiveContainerProvider = () =>
849
897
  return {
850
898
  ...("applicationId" in result ? result : toAttributes(result)),
851
899
  hash: { image: imageHash },
900
+ dev,
852
901
  };
853
902
  }),
854
903
  delete: Effect.fn(function* ({ output }) {
@@ -881,6 +930,10 @@ export const LiveContainerProvider = () =>
881
930
  return {
882
931
  ...toAttributes(existing),
883
932
  hash: output?.hash,
933
+ // The dev image is a local build-context reference that the
934
+ // API can't return — preserve the persisted one so a refresh
935
+ // doesn't wipe it (which would break a later `alchemy dev`).
936
+ dev: output?.dev,
884
937
  };
885
938
  });
886
939
 
@@ -902,6 +955,7 @@ export const LiveContainerProvider = () =>
902
955
  Effect.map((app) => ({
903
956
  ...toAttributes(app),
904
957
  hash: output.hash,
958
+ dev: output.dev,
905
959
  })),
906
960
  Effect.catchTag("ContainerApplicationNotFound", () =>
907
961
  readByName(output.applicationName),
@@ -997,10 +1051,10 @@ const resolveDurableObjectApplicationRecovery = ({
997
1051
  // uncapped `Schedule.exponential(150)` reaches a ~76s single delay by the 10th
998
1052
  // retry (~150s total), which both blows test budgets and needlessly stalls the
999
1053
  // update→create fallback when the target is genuinely gone.
1000
- const containerApplicationReadinessSchedule = Schedule.exponential(150).pipe(
1001
- Schedule.either(Schedule.spaced("3 seconds")),
1002
- Schedule.both(Schedule.recurs(10)),
1003
- );
1054
+ const containerApplicationReadinessSchedule = Schedule.max([
1055
+ Schedule.min([Schedule.exponential(150), Schedule.spaced("3 seconds")]),
1056
+ Schedule.recurs(10),
1057
+ ]);
1004
1058
 
1005
1059
  const isContainerApplicationNotFound = (
1006
1060
  error: unknown,