alchemy 0.66.0 → 0.68.0

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 (825) hide show
  1. package/bin/alchemy.js +25554 -26250
  2. package/bin/alchemy.ts +6 -2
  3. package/bin/commands/configure.ts +194 -0
  4. package/bin/commands/login.ts +99 -55
  5. package/bin/commands/logout.ts +66 -0
  6. package/bin/services/find-workspace-root.ts +1 -1
  7. package/bin/trpc.ts +27 -2
  8. package/lib/alchemy.d.ts +6 -0
  9. package/lib/alchemy.d.ts.map +1 -1
  10. package/lib/alchemy.js +1 -0
  11. package/lib/alchemy.js.map +1 -1
  12. package/lib/apply.d.ts +2 -2
  13. package/lib/apply.d.ts.map +1 -1
  14. package/lib/apply.js +18 -15
  15. package/lib/apply.js.map +1 -1
  16. package/lib/auth.d.ts +72 -0
  17. package/lib/auth.d.ts.map +1 -0
  18. package/lib/auth.js +163 -0
  19. package/lib/auth.js.map +1 -0
  20. package/lib/aws/bucket.d.ts +12 -3
  21. package/lib/aws/bucket.d.ts.map +1 -1
  22. package/lib/aws/bucket.js +2 -2
  23. package/lib/aws/bucket.js.map +1 -1
  24. package/lib/aws/control/resource.d.ts +34 -3
  25. package/lib/aws/control/resource.d.ts.map +1 -1
  26. package/lib/aws/control/resource.js +3 -3
  27. package/lib/aws/control/resource.js.map +1 -1
  28. package/lib/aws/ec2/internet-gateway-attachment.d.ts +1 -2
  29. package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -1
  30. package/lib/aws/ec2/internet-gateway-attachment.js +4 -4
  31. package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -1
  32. package/lib/aws/ec2/internet-gateway.d.ts +1 -2
  33. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
  34. package/lib/aws/ec2/internet-gateway.js +2 -2
  35. package/lib/aws/ec2/internet-gateway.js.map +1 -1
  36. package/lib/aws/ec2/nat-gateway.d.ts +1 -2
  37. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -1
  38. package/lib/aws/ec2/nat-gateway.js +2 -2
  39. package/lib/aws/ec2/nat-gateway.js.map +1 -1
  40. package/lib/aws/ec2/route-table-association.d.ts +1 -2
  41. package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
  42. package/lib/aws/ec2/route-table-association.js +2 -2
  43. package/lib/aws/ec2/route-table-association.js.map +1 -1
  44. package/lib/aws/ec2/route-table.d.ts +1 -2
  45. package/lib/aws/ec2/route-table.d.ts.map +1 -1
  46. package/lib/aws/ec2/route-table.js +2 -2
  47. package/lib/aws/ec2/route-table.js.map +1 -1
  48. package/lib/aws/ec2/route.d.ts +1 -2
  49. package/lib/aws/ec2/route.d.ts.map +1 -1
  50. package/lib/aws/ec2/route.js +2 -2
  51. package/lib/aws/ec2/route.js.map +1 -1
  52. package/lib/aws/ec2/security-group-rule.d.ts +1 -2
  53. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -1
  54. package/lib/aws/ec2/security-group-rule.js +2 -2
  55. package/lib/aws/ec2/security-group-rule.js.map +1 -1
  56. package/lib/aws/ec2/security-group.d.ts +1 -2
  57. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  58. package/lib/aws/ec2/security-group.js +2 -2
  59. package/lib/aws/ec2/security-group.js.map +1 -1
  60. package/lib/aws/ec2/subnet.d.ts +1 -2
  61. package/lib/aws/ec2/subnet.d.ts.map +1 -1
  62. package/lib/aws/ec2/subnet.js +2 -2
  63. package/lib/aws/ec2/subnet.js.map +1 -1
  64. package/lib/aws/ec2/vpc.d.ts +1 -2
  65. package/lib/aws/ec2/vpc.d.ts.map +1 -1
  66. package/lib/aws/ec2/vpc.js +2 -2
  67. package/lib/aws/ec2/vpc.js.map +1 -1
  68. package/lib/aws/function.d.ts +116 -3
  69. package/lib/aws/function.d.ts.map +1 -1
  70. package/lib/aws/function.js +2 -2
  71. package/lib/aws/function.js.map +1 -1
  72. package/lib/aws/oidc/github-oidc-provider.d.ts +13 -2
  73. package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -1
  74. package/lib/aws/oidc/oidc-provider.d.ts +48 -3
  75. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
  76. package/lib/aws/oidc/oidc-provider.js +2 -2
  77. package/lib/aws/oidc/oidc-provider.js.map +1 -1
  78. package/lib/aws/policy-attachment.d.ts +2 -3
  79. package/lib/aws/policy-attachment.d.ts.map +1 -1
  80. package/lib/aws/policy-attachment.js +1 -1
  81. package/lib/aws/policy-attachment.js.map +1 -1
  82. package/lib/aws/policy.d.ts +1 -2
  83. package/lib/aws/policy.d.ts.map +1 -1
  84. package/lib/aws/policy.js +4 -4
  85. package/lib/aws/policy.js.map +1 -1
  86. package/lib/aws/queue.d.ts +1 -2
  87. package/lib/aws/queue.d.ts.map +1 -1
  88. package/lib/aws/queue.js +4 -4
  89. package/lib/aws/queue.js.map +1 -1
  90. package/lib/aws/role.d.ts +1 -2
  91. package/lib/aws/role.d.ts.map +1 -1
  92. package/lib/aws/role.js +2 -2
  93. package/lib/aws/role.js.map +1 -1
  94. package/lib/aws/ses.d.ts +1 -2
  95. package/lib/aws/ses.d.ts.map +1 -1
  96. package/lib/aws/ses.js +2 -2
  97. package/lib/aws/ses.js.map +1 -1
  98. package/lib/aws/ssm-parameter.d.ts +1 -2
  99. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  100. package/lib/aws/ssm-parameter.js +2 -2
  101. package/lib/aws/ssm-parameter.js.map +1 -1
  102. package/lib/aws/table.d.ts +1 -2
  103. package/lib/aws/table.d.ts.map +1 -1
  104. package/lib/aws/table.js +2 -2
  105. package/lib/aws/table.js.map +1 -1
  106. package/lib/cloudflare/account-api-token.d.ts +1 -2
  107. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  108. package/lib/cloudflare/account-api-token.js +2 -2
  109. package/lib/cloudflare/account-api-token.js.map +1 -1
  110. package/lib/cloudflare/ai-gateway.d.ts +1 -2
  111. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  112. package/lib/cloudflare/ai-gateway.js +2 -2
  113. package/lib/cloudflare/ai-gateway.js.map +1 -1
  114. package/lib/cloudflare/api-gateway-operation.d.ts +1 -2
  115. package/lib/cloudflare/api-gateway-operation.d.ts.map +1 -1
  116. package/lib/cloudflare/api-gateway-operation.js +2 -2
  117. package/lib/cloudflare/api-gateway-operation.js.map +1 -1
  118. package/lib/cloudflare/api-schema.d.ts +1 -2
  119. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  120. package/lib/cloudflare/api-schema.js +2 -2
  121. package/lib/cloudflare/api-schema.js.map +1 -1
  122. package/lib/cloudflare/api-shield.d.ts +1 -2
  123. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  124. package/lib/cloudflare/api-shield.js +2 -2
  125. package/lib/cloudflare/api-shield.js.map +1 -1
  126. package/lib/cloudflare/api.d.ts +18 -10
  127. package/lib/cloudflare/api.d.ts.map +1 -1
  128. package/lib/cloudflare/api.js +93 -38
  129. package/lib/cloudflare/api.js.map +1 -1
  130. package/lib/cloudflare/assets.d.ts +21 -43
  131. package/lib/cloudflare/assets.d.ts.map +1 -1
  132. package/lib/cloudflare/assets.js +78 -70
  133. package/lib/cloudflare/assets.js.map +1 -1
  134. package/lib/cloudflare/auth.d.ts +91 -17
  135. package/lib/cloudflare/auth.d.ts.map +1 -1
  136. package/lib/cloudflare/auth.js +141 -62
  137. package/lib/cloudflare/auth.js.map +1 -1
  138. package/lib/cloudflare/bindings.d.ts +17 -5
  139. package/lib/cloudflare/bindings.d.ts.map +1 -1
  140. package/lib/cloudflare/bindings.js +3 -1
  141. package/lib/cloudflare/bindings.js.map +1 -1
  142. package/lib/cloudflare/bound.d.ts +4 -3
  143. package/lib/cloudflare/bound.d.ts.map +1 -1
  144. package/lib/cloudflare/bucket.d.ts +60 -8
  145. package/lib/cloudflare/bucket.d.ts.map +1 -1
  146. package/lib/cloudflare/bucket.js +161 -18
  147. package/lib/cloudflare/bucket.js.map +1 -1
  148. package/lib/cloudflare/bundle/internal-worker-bundle.d.ts +1 -1
  149. package/lib/cloudflare/bundle/internal-worker-bundle.d.ts.map +1 -1
  150. package/lib/cloudflare/bundle/internal-worker-bundle.js.map +1 -1
  151. package/lib/cloudflare/bundle/plugin-wasm.js +4 -2
  152. package/lib/cloudflare/bundle/plugin-wasm.js.map +1 -1
  153. package/lib/cloudflare/certificate-pack.d.ts +1 -2
  154. package/lib/cloudflare/certificate-pack.d.ts.map +1 -1
  155. package/lib/cloudflare/certificate-pack.js +4 -4
  156. package/lib/cloudflare/certificate-pack.js.map +1 -1
  157. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  158. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  159. package/lib/cloudflare/container.d.ts +1 -2
  160. package/lib/cloudflare/container.d.ts.map +1 -1
  161. package/lib/cloudflare/container.js +6 -6
  162. package/lib/cloudflare/container.js.map +1 -1
  163. package/lib/cloudflare/custom-domain.d.ts +1 -2
  164. package/lib/cloudflare/custom-domain.d.ts.map +1 -1
  165. package/lib/cloudflare/custom-domain.js +2 -2
  166. package/lib/cloudflare/custom-domain.js.map +1 -1
  167. package/lib/cloudflare/d1-database.d.ts +2 -3
  168. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  169. package/lib/cloudflare/d1-database.js +5 -5
  170. package/lib/cloudflare/d1-database.js.map +1 -1
  171. package/lib/cloudflare/dispatch-namespace.d.ts +2 -3
  172. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  173. package/lib/cloudflare/dispatch-namespace.js +3 -3
  174. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  175. package/lib/cloudflare/dns-records.d.ts +1 -2
  176. package/lib/cloudflare/dns-records.d.ts.map +1 -1
  177. package/lib/cloudflare/dns-records.js +4 -4
  178. package/lib/cloudflare/dns-records.js.map +1 -1
  179. package/lib/cloudflare/email-address.d.ts +1 -2
  180. package/lib/cloudflare/email-address.d.ts.map +1 -1
  181. package/lib/cloudflare/email-address.js +6 -6
  182. package/lib/cloudflare/email-address.js.map +1 -1
  183. package/lib/cloudflare/email-catch-all.d.ts +1 -2
  184. package/lib/cloudflare/email-catch-all.d.ts.map +1 -1
  185. package/lib/cloudflare/email-catch-all.js +4 -4
  186. package/lib/cloudflare/email-catch-all.js.map +1 -1
  187. package/lib/cloudflare/email-routing.d.ts +1 -2
  188. package/lib/cloudflare/email-routing.d.ts.map +1 -1
  189. package/lib/cloudflare/email-routing.js +4 -4
  190. package/lib/cloudflare/email-routing.js.map +1 -1
  191. package/lib/cloudflare/email-rule.d.ts +1 -2
  192. package/lib/cloudflare/email-rule.d.ts.map +1 -1
  193. package/lib/cloudflare/email-rule.js +4 -4
  194. package/lib/cloudflare/email-rule.js.map +1 -1
  195. package/lib/cloudflare/hyperdrive-ref.d.ts +23 -0
  196. package/lib/cloudflare/hyperdrive-ref.d.ts.map +1 -0
  197. package/lib/cloudflare/hyperdrive-ref.js +52 -0
  198. package/lib/cloudflare/hyperdrive-ref.js.map +1 -0
  199. package/lib/cloudflare/hyperdrive.d.ts +1 -2
  200. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  201. package/lib/cloudflare/hyperdrive.js +4 -4
  202. package/lib/cloudflare/hyperdrive.js.map +1 -1
  203. package/lib/cloudflare/index.d.ts +2 -0
  204. package/lib/cloudflare/index.d.ts.map +1 -1
  205. package/lib/cloudflare/index.js +2 -0
  206. package/lib/cloudflare/index.js.map +1 -1
  207. package/lib/cloudflare/kv-namespace.d.ts +2 -3
  208. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  209. package/lib/cloudflare/kv-namespace.js +5 -5
  210. package/lib/cloudflare/kv-namespace.js.map +1 -1
  211. package/lib/cloudflare/miniflare/build-worker-options.d.ts +2 -1
  212. package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
  213. package/lib/cloudflare/miniflare/build-worker-options.js +11 -6
  214. package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
  215. package/lib/cloudflare/miniflare/delete.js +1 -1
  216. package/lib/cloudflare/miniflare/delete.js.map +1 -1
  217. package/lib/cloudflare/miniflare/miniflare-controller.d.ts +3 -1
  218. package/lib/cloudflare/miniflare/miniflare-controller.d.ts.map +1 -1
  219. package/lib/cloudflare/miniflare/miniflare-controller.js +24 -9
  220. package/lib/cloudflare/miniflare/miniflare-controller.js.map +1 -1
  221. package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts +24 -13
  222. package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts.map +1 -1
  223. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +90 -79
  224. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  225. package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
  226. package/lib/cloudflare/miniflare/remote-binding-proxy.js +15 -4
  227. package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
  228. package/lib/cloudflare/miniflare/tunnel.d.ts +18 -0
  229. package/lib/cloudflare/miniflare/tunnel.d.ts.map +1 -0
  230. package/lib/cloudflare/miniflare/tunnel.js +79 -0
  231. package/lib/cloudflare/miniflare/tunnel.js.map +1 -0
  232. package/lib/cloudflare/next.d.ts.map +1 -1
  233. package/lib/cloudflare/next.js +3 -0
  234. package/lib/cloudflare/next.js.map +1 -1
  235. package/lib/cloudflare/permission-groups.d.ts +1 -2
  236. package/lib/cloudflare/permission-groups.d.ts.map +1 -1
  237. package/lib/cloudflare/permission-groups.js +1 -1
  238. package/lib/cloudflare/permission-groups.js.map +1 -1
  239. package/lib/cloudflare/pipeline.d.ts +2 -3
  240. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  241. package/lib/cloudflare/pipeline.js +5 -5
  242. package/lib/cloudflare/pipeline.js.map +1 -1
  243. package/lib/cloudflare/queue-consumer.d.ts +1 -2
  244. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  245. package/lib/cloudflare/queue-consumer.js +4 -4
  246. package/lib/cloudflare/queue-consumer.js.map +1 -1
  247. package/lib/cloudflare/queue.d.ts +1 -2
  248. package/lib/cloudflare/queue.d.ts.map +1 -1
  249. package/lib/cloudflare/queue.js +4 -4
  250. package/lib/cloudflare/queue.js.map +1 -1
  251. package/lib/cloudflare/quick-tunnel.d.ts +1 -1
  252. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  253. package/lib/cloudflare/react-router/plugin.js +13 -0
  254. package/lib/cloudflare/react-router/plugin.js.map +1 -1
  255. package/lib/cloudflare/redirect-rule.d.ts +1 -2
  256. package/lib/cloudflare/redirect-rule.d.ts.map +1 -1
  257. package/lib/cloudflare/redirect-rule.js +4 -4
  258. package/lib/cloudflare/redirect-rule.js.map +1 -1
  259. package/lib/cloudflare/route.d.ts +1 -2
  260. package/lib/cloudflare/route.d.ts.map +1 -1
  261. package/lib/cloudflare/route.js +4 -4
  262. package/lib/cloudflare/route.js.map +1 -1
  263. package/lib/cloudflare/ruleset.d.ts +1 -2
  264. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  265. package/lib/cloudflare/ruleset.js +2 -2
  266. package/lib/cloudflare/ruleset.js.map +1 -1
  267. package/lib/cloudflare/secret-ref.d.ts +38 -0
  268. package/lib/cloudflare/secret-ref.d.ts.map +1 -0
  269. package/lib/cloudflare/secret-ref.js +38 -0
  270. package/lib/cloudflare/secret-ref.js.map +1 -0
  271. package/lib/cloudflare/secret.d.ts +2 -3
  272. package/lib/cloudflare/secret.d.ts.map +1 -1
  273. package/lib/cloudflare/secret.js +3 -3
  274. package/lib/cloudflare/secret.js.map +1 -1
  275. package/lib/cloudflare/secrets-store.d.ts +2 -3
  276. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  277. package/lib/cloudflare/secrets-store.js +3 -3
  278. package/lib/cloudflare/secrets-store.js.map +1 -1
  279. package/lib/cloudflare/tunnel.d.ts +2 -3
  280. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  281. package/lib/cloudflare/tunnel.js +3 -3
  282. package/lib/cloudflare/tunnel.js.map +1 -1
  283. package/lib/cloudflare/user.d.ts +3 -2
  284. package/lib/cloudflare/user.d.ts.map +1 -1
  285. package/lib/cloudflare/user.js +7 -5
  286. package/lib/cloudflare/user.js.map +1 -1
  287. package/lib/cloudflare/vectorize-index.d.ts +2 -3
  288. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  289. package/lib/cloudflare/vectorize-index.js +6 -6
  290. package/lib/cloudflare/vectorize-index.js.map +1 -1
  291. package/lib/cloudflare/vectorize-metadata-index.d.ts +2 -3
  292. package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
  293. package/lib/cloudflare/vectorize-metadata-index.js +4 -4
  294. package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
  295. package/lib/cloudflare/website.js +1 -1
  296. package/lib/cloudflare/website.js.map +1 -1
  297. package/lib/cloudflare/worker-assets.d.ts +1 -29
  298. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  299. package/lib/cloudflare/worker-assets.js +9 -42
  300. package/lib/cloudflare/worker-assets.js.map +1 -1
  301. package/lib/cloudflare/worker-metadata.d.ts +1 -1
  302. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  303. package/lib/cloudflare/worker-metadata.js +7 -9
  304. package/lib/cloudflare/worker-metadata.js.map +1 -1
  305. package/lib/cloudflare/worker-stub.d.ts +2 -3
  306. package/lib/cloudflare/worker-stub.d.ts.map +1 -1
  307. package/lib/cloudflare/worker-stub.js +3 -3
  308. package/lib/cloudflare/worker-stub.js.map +1 -1
  309. package/lib/cloudflare/worker-subdomain.d.ts +4 -3
  310. package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
  311. package/lib/cloudflare/worker-subdomain.js +5 -5
  312. package/lib/cloudflare/worker-subdomain.js.map +1 -1
  313. package/lib/cloudflare/worker.d.ts +19 -5
  314. package/lib/cloudflare/worker.d.ts.map +1 -1
  315. package/lib/cloudflare/worker.js +18 -5
  316. package/lib/cloudflare/worker.js.map +1 -1
  317. package/lib/cloudflare/wrangler.json.d.ts +2 -1
  318. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  319. package/lib/cloudflare/wrangler.json.js +4 -6
  320. package/lib/cloudflare/wrangler.json.js.map +1 -1
  321. package/lib/cloudflare/zone.d.ts +1 -2
  322. package/lib/cloudflare/zone.d.ts.map +1 -1
  323. package/lib/cloudflare/zone.js +2 -2
  324. package/lib/cloudflare/zone.js.map +1 -1
  325. package/lib/context.d.ts +8 -8
  326. package/lib/context.d.ts.map +1 -1
  327. package/lib/context.js.map +1 -1
  328. package/lib/destroy.d.ts +1 -1
  329. package/lib/destroy.d.ts.map +1 -1
  330. package/lib/destroy.js.map +1 -1
  331. package/lib/dns/import-dns.d.ts +1 -2
  332. package/lib/dns/import-dns.d.ts.map +1 -1
  333. package/lib/dns/import-dns.js +2 -2
  334. package/lib/dns/import-dns.js.map +1 -1
  335. package/lib/docker/container.d.ts +1 -2
  336. package/lib/docker/container.d.ts.map +1 -1
  337. package/lib/docker/container.js +2 -3
  338. package/lib/docker/container.js.map +1 -1
  339. package/lib/docker/image.d.ts +1 -2
  340. package/lib/docker/image.d.ts.map +1 -1
  341. package/lib/docker/image.js +9 -9
  342. package/lib/docker/image.js.map +1 -1
  343. package/lib/docker/network.d.ts +1 -2
  344. package/lib/docker/network.d.ts.map +1 -1
  345. package/lib/docker/network.js +2 -3
  346. package/lib/docker/network.js.map +1 -1
  347. package/lib/docker/remote-image.d.ts +1 -2
  348. package/lib/docker/remote-image.d.ts.map +1 -1
  349. package/lib/docker/remote-image.js +2 -3
  350. package/lib/docker/remote-image.js.map +1 -1
  351. package/lib/docker/volume.d.ts +1 -2
  352. package/lib/docker/volume.d.ts.map +1 -1
  353. package/lib/docker/volume.js +2 -3
  354. package/lib/docker/volume.js.map +1 -1
  355. package/lib/esbuild/bundle.d.ts +1 -2
  356. package/lib/esbuild/bundle.d.ts.map +1 -1
  357. package/lib/esbuild/bundle.js +4 -4
  358. package/lib/esbuild/bundle.js.map +1 -1
  359. package/lib/fs/copy-file.d.ts +1 -2
  360. package/lib/fs/copy-file.d.ts.map +1 -1
  361. package/lib/fs/copy-file.js +2 -2
  362. package/lib/fs/copy-file.js.map +1 -1
  363. package/lib/fs/file.d.ts +1 -2
  364. package/lib/fs/file.d.ts.map +1 -1
  365. package/lib/fs/file.js +2 -2
  366. package/lib/fs/file.js.map +1 -1
  367. package/lib/fs/folder.d.ts +1 -2
  368. package/lib/fs/folder.d.ts.map +1 -1
  369. package/lib/fs/folder.js +2 -2
  370. package/lib/fs/folder.js.map +1 -1
  371. package/lib/github/comment.d.ts +1 -2
  372. package/lib/github/comment.d.ts.map +1 -1
  373. package/lib/github/comment.js +4 -4
  374. package/lib/github/comment.js.map +1 -1
  375. package/lib/github/repository-environment.d.ts +1 -2
  376. package/lib/github/repository-environment.d.ts.map +1 -1
  377. package/lib/github/repository-environment.js +2 -2
  378. package/lib/github/repository-environment.js.map +1 -1
  379. package/lib/github/repository-webhook.d.ts +1 -2
  380. package/lib/github/repository-webhook.d.ts.map +1 -1
  381. package/lib/github/repository-webhook.js +2 -2
  382. package/lib/github/repository-webhook.js.map +1 -1
  383. package/lib/github/secret.d.ts +1 -2
  384. package/lib/github/secret.d.ts.map +1 -1
  385. package/lib/github/secret.js +2 -2
  386. package/lib/github/secret.js.map +1 -1
  387. package/lib/llms.cloudflare.txt +1 -1
  388. package/lib/neon/api/client.gen.d.ts +13 -0
  389. package/lib/neon/api/client.gen.d.ts.map +1 -0
  390. package/lib/neon/api/client.gen.js +7 -0
  391. package/lib/neon/api/client.gen.js.map +1 -0
  392. package/lib/neon/api/sdk.gen.d.ts +880 -0
  393. package/lib/neon/api/sdk.gen.d.ts.map +1 -0
  394. package/lib/neon/api/sdk.gen.js +1527 -0
  395. package/lib/neon/api/sdk.gen.js.map +1 -0
  396. package/lib/neon/api/types.gen.d.ts +7250 -0
  397. package/lib/neon/api/types.gen.d.ts.map +1 -0
  398. package/lib/neon/api/types.gen.js +2 -0
  399. package/lib/neon/api/types.gen.js.map +1 -0
  400. package/lib/neon/api.d.ts +14 -49
  401. package/lib/neon/api.d.ts.map +1 -1
  402. package/lib/neon/api.js +36 -114
  403. package/lib/neon/api.js.map +1 -1
  404. package/lib/neon/branch.d.ts +141 -0
  405. package/lib/neon/branch.d.ts.map +1 -0
  406. package/lib/neon/branch.js +112 -0
  407. package/lib/neon/branch.js.map +1 -0
  408. package/lib/neon/index.d.ts +1 -1
  409. package/lib/neon/index.d.ts.map +1 -1
  410. package/lib/neon/index.js +1 -1
  411. package/lib/neon/index.js.map +1 -1
  412. package/lib/neon/project.d.ts +32 -242
  413. package/lib/neon/project.d.ts.map +1 -1
  414. package/lib/neon/project.js +90 -269
  415. package/lib/neon/project.js.map +1 -1
  416. package/lib/neon/utils.d.ts +49 -0
  417. package/lib/neon/utils.d.ts.map +1 -0
  418. package/lib/neon/utils.js +44 -0
  419. package/lib/neon/utils.js.map +1 -0
  420. package/lib/os/exec.d.ts +1 -2
  421. package/lib/os/exec.d.ts.map +1 -1
  422. package/lib/os/exec.js +2 -2
  423. package/lib/os/exec.js.map +1 -1
  424. package/lib/planetscale/api/client.gen.d.ts +12 -1749
  425. package/lib/planetscale/api/client.gen.d.ts.map +1 -1
  426. package/lib/planetscale/api/client.gen.js +6 -2400
  427. package/lib/planetscale/api/client.gen.js.map +1 -1
  428. package/lib/planetscale/api/sdk.gen.d.ts +1582 -0
  429. package/lib/planetscale/api/sdk.gen.d.ts.map +1 -0
  430. package/lib/planetscale/api/sdk.gen.js +2219 -0
  431. package/lib/planetscale/api/sdk.gen.js.map +1 -0
  432. package/lib/planetscale/api/types.gen.d.ts +594 -449
  433. package/lib/planetscale/api/types.gen.d.ts.map +1 -1
  434. package/lib/planetscale/api.d.ts +43 -0
  435. package/lib/planetscale/api.d.ts.map +1 -0
  436. package/lib/planetscale/api.js +53 -0
  437. package/lib/planetscale/api.js.map +1 -0
  438. package/lib/planetscale/branch.d.ts +2 -3
  439. package/lib/planetscale/branch.d.ts.map +1 -1
  440. package/lib/planetscale/branch.js +17 -15
  441. package/lib/planetscale/branch.js.map +1 -1
  442. package/lib/planetscale/database.d.ts +2 -3
  443. package/lib/planetscale/database.d.ts.map +1 -1
  444. package/lib/planetscale/database.js +34 -34
  445. package/lib/planetscale/database.js.map +1 -1
  446. package/lib/planetscale/index.d.ts +1 -1
  447. package/lib/planetscale/index.d.ts.map +1 -1
  448. package/lib/planetscale/index.js +1 -1
  449. package/lib/planetscale/index.js.map +1 -1
  450. package/lib/planetscale/password.d.ts +2 -3
  451. package/lib/planetscale/password.d.ts.map +1 -1
  452. package/lib/planetscale/password.js +11 -11
  453. package/lib/planetscale/password.js.map +1 -1
  454. package/lib/planetscale/role.d.ts +2 -3
  455. package/lib/planetscale/role.d.ts.map +1 -1
  456. package/lib/planetscale/role.js +18 -18
  457. package/lib/planetscale/role.js.map +1 -1
  458. package/lib/planetscale/utils.d.ts +1 -1
  459. package/lib/planetscale/utils.d.ts.map +1 -1
  460. package/lib/planetscale/utils.js +17 -33
  461. package/lib/planetscale/utils.js.map +1 -1
  462. package/lib/random/random-string.d.ts +1 -2
  463. package/lib/random/random-string.d.ts.map +1 -1
  464. package/lib/random/random-string.js +3 -3
  465. package/lib/random/random-string.js.map +1 -1
  466. package/lib/resource.d.ts +4 -1
  467. package/lib/resource.d.ts.map +1 -1
  468. package/lib/resource.js.map +1 -1
  469. package/lib/scope.d.ts +10 -1
  470. package/lib/scope.d.ts.map +1 -1
  471. package/lib/scope.js +3 -1
  472. package/lib/scope.js.map +1 -1
  473. package/lib/sentry/client-key.d.ts +1 -2
  474. package/lib/sentry/client-key.d.ts.map +1 -1
  475. package/lib/sentry/client-key.js +2 -2
  476. package/lib/sentry/client-key.js.map +1 -1
  477. package/lib/sentry/project.d.ts +1 -2
  478. package/lib/sentry/project.d.ts.map +1 -1
  479. package/lib/sentry/project.js +2 -2
  480. package/lib/sentry/project.js.map +1 -1
  481. package/lib/sentry/team.d.ts +1 -2
  482. package/lib/sentry/team.d.ts.map +1 -1
  483. package/lib/sentry/team.js +2 -2
  484. package/lib/sentry/team.js.map +1 -1
  485. package/lib/state/r2-rest-state-store.d.ts +1 -0
  486. package/lib/state/r2-rest-state-store.d.ts.map +1 -1
  487. package/lib/state/r2-rest-state-store.js +15 -34
  488. package/lib/state/r2-rest-state-store.js.map +1 -1
  489. package/lib/stripe/card.d.ts +1 -2
  490. package/lib/stripe/card.d.ts.map +1 -1
  491. package/lib/stripe/card.js +2 -2
  492. package/lib/stripe/card.js.map +1 -1
  493. package/lib/stripe/coupon.d.ts +1 -2
  494. package/lib/stripe/coupon.d.ts.map +1 -1
  495. package/lib/stripe/coupon.js +2 -2
  496. package/lib/stripe/coupon.js.map +1 -1
  497. package/lib/stripe/customer.d.ts +1 -2
  498. package/lib/stripe/customer.d.ts.map +1 -1
  499. package/lib/stripe/customer.js +2 -2
  500. package/lib/stripe/customer.js.map +1 -1
  501. package/lib/stripe/entitlements-feature.d.ts +1 -2
  502. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  503. package/lib/stripe/entitlements-feature.js +2 -2
  504. package/lib/stripe/entitlements-feature.js.map +1 -1
  505. package/lib/stripe/file.d.ts +1 -2
  506. package/lib/stripe/file.d.ts.map +1 -1
  507. package/lib/stripe/file.js +2 -2
  508. package/lib/stripe/file.js.map +1 -1
  509. package/lib/stripe/meter.d.ts +1 -2
  510. package/lib/stripe/meter.d.ts.map +1 -1
  511. package/lib/stripe/meter.js +1 -1
  512. package/lib/stripe/meter.js.map +1 -1
  513. package/lib/stripe/portal-configuration.d.ts +1 -2
  514. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  515. package/lib/stripe/portal-configuration.js +2 -2
  516. package/lib/stripe/portal-configuration.js.map +1 -1
  517. package/lib/stripe/price.d.ts +1 -2
  518. package/lib/stripe/price.d.ts.map +1 -1
  519. package/lib/stripe/price.js +2 -2
  520. package/lib/stripe/price.js.map +1 -1
  521. package/lib/stripe/product-feature.d.ts +1 -2
  522. package/lib/stripe/product-feature.d.ts.map +1 -1
  523. package/lib/stripe/product-feature.js +2 -2
  524. package/lib/stripe/product-feature.js.map +1 -1
  525. package/lib/stripe/product.d.ts +1 -2
  526. package/lib/stripe/product.d.ts.map +1 -1
  527. package/lib/stripe/product.js +2 -2
  528. package/lib/stripe/product.js.map +1 -1
  529. package/lib/stripe/promotion-code.d.ts +1 -2
  530. package/lib/stripe/promotion-code.d.ts.map +1 -1
  531. package/lib/stripe/promotion-code.js +2 -2
  532. package/lib/stripe/promotion-code.js.map +1 -1
  533. package/lib/stripe/shipping-rate.d.ts +1 -2
  534. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  535. package/lib/stripe/shipping-rate.js +2 -2
  536. package/lib/stripe/shipping-rate.js.map +1 -1
  537. package/lib/stripe/tax-rate.d.ts +1 -2
  538. package/lib/stripe/tax-rate.d.ts.map +1 -1
  539. package/lib/stripe/tax-rate.js +2 -2
  540. package/lib/stripe/tax-rate.js.map +1 -1
  541. package/lib/stripe/webhook.d.ts +16 -3
  542. package/lib/stripe/webhook.d.ts.map +1 -1
  543. package/lib/stripe/webhook.js +2 -2
  544. package/lib/stripe/webhook.js.map +1 -1
  545. package/lib/test/bun.d.ts.map +1 -1
  546. package/lib/test/bun.js +1 -0
  547. package/lib/test/bun.js.map +1 -1
  548. package/lib/test/options.d.ts +5 -0
  549. package/lib/test/options.d.ts.map +1 -1
  550. package/lib/test/vitest.d.ts.map +1 -1
  551. package/lib/test/vitest.js +1 -0
  552. package/lib/test/vitest.js.map +1 -1
  553. package/lib/upstash/redis.d.ts +1 -2
  554. package/lib/upstash/redis.d.ts.map +1 -1
  555. package/lib/upstash/redis.js.map +1 -1
  556. package/lib/util/api/client/client.gen.d.ts +3 -0
  557. package/lib/util/api/client/client.gen.d.ts.map +1 -0
  558. package/lib/util/api/client/client.gen.js +205 -0
  559. package/lib/util/api/client/client.gen.js.map +1 -0
  560. package/lib/util/api/client/index.d.ts +8 -0
  561. package/lib/util/api/client/index.d.ts.map +1 -0
  562. package/lib/util/api/client/index.js +6 -0
  563. package/lib/util/api/client/index.js.map +1 -0
  564. package/lib/util/api/client/types.gen.d.ts +125 -0
  565. package/lib/util/api/client/types.gen.d.ts.map +1 -0
  566. package/lib/util/api/client/types.gen.js +2 -0
  567. package/lib/util/api/client/types.gen.js.map +1 -0
  568. package/lib/util/api/client/utils.gen.d.ts +34 -0
  569. package/lib/util/api/client/utils.gen.d.ts.map +1 -0
  570. package/lib/util/api/client/utils.gen.js +231 -0
  571. package/lib/util/api/client/utils.gen.js.map +1 -0
  572. package/lib/util/api/core/auth.gen.d.ts +19 -0
  573. package/lib/util/api/core/auth.gen.d.ts.map +1 -0
  574. package/lib/util/api/core/auth.gen.js +15 -0
  575. package/lib/util/api/core/auth.gen.js.map +1 -0
  576. package/lib/util/api/core/bodySerializer.gen.d.ts +18 -0
  577. package/lib/util/api/core/bodySerializer.gen.d.ts.map +1 -0
  578. package/lib/util/api/core/bodySerializer.gen.js +58 -0
  579. package/lib/util/api/core/bodySerializer.gen.js.map +1 -0
  580. package/lib/util/api/core/params.gen.d.ts +34 -0
  581. package/lib/util/api/core/params.gen.d.ts.map +1 -0
  582. package/lib/util/api/core/params.gen.js +89 -0
  583. package/lib/util/api/core/params.gen.js.map +1 -0
  584. package/lib/util/api/core/pathSerializer.gen.d.ts +34 -0
  585. package/lib/util/api/core/pathSerializer.gen.d.ts.map +1 -0
  586. package/lib/util/api/core/pathSerializer.gen.js +115 -0
  587. package/lib/util/api/core/pathSerializer.gen.js.map +1 -0
  588. package/lib/util/api/core/serverSentEvents.gen.d.ts +72 -0
  589. package/lib/util/api/core/serverSentEvents.gen.d.ts.map +1 -0
  590. package/lib/util/api/core/serverSentEvents.gen.js +136 -0
  591. package/lib/util/api/core/serverSentEvents.gen.js.map +1 -0
  592. package/lib/util/api/core/types.gen.d.ts +79 -0
  593. package/lib/util/api/core/types.gen.d.ts.map +1 -0
  594. package/lib/util/api/core/types.gen.js +2 -0
  595. package/lib/util/api/core/types.gen.js.map +1 -0
  596. package/lib/util/api/core/utils.gen.d.ts +20 -0
  597. package/lib/util/api/core/utils.gen.d.ts.map +1 -0
  598. package/lib/util/api/core/utils.gen.js +88 -0
  599. package/lib/util/api/core/utils.gen.js.map +1 -0
  600. package/lib/util/http.d.ts +7 -2
  601. package/lib/util/http.d.ts.map +1 -1
  602. package/lib/util/http.js +29 -11
  603. package/lib/util/http.js.map +1 -1
  604. package/lib/util/idempotent-spawn.d.ts.map +1 -1
  605. package/lib/util/idempotent-spawn.js +5 -8
  606. package/lib/util/idempotent-spawn.js.map +1 -1
  607. package/lib/util/lock.d.ts +20 -0
  608. package/lib/util/lock.d.ts.map +1 -0
  609. package/lib/util/lock.js +45 -0
  610. package/lib/util/lock.js.map +1 -0
  611. package/lib/util/memoize.d.ts +6 -0
  612. package/lib/util/memoize.d.ts.map +1 -1
  613. package/lib/util/memoize.js +23 -0
  614. package/lib/util/memoize.js.map +1 -1
  615. package/lib/util/oauth-client.d.ts +71 -0
  616. package/lib/util/oauth-client.d.ts.map +1 -0
  617. package/lib/util/oauth-client.js +188 -0
  618. package/lib/util/oauth-client.js.map +1 -0
  619. package/lib/util/poll.d.ts +33 -0
  620. package/lib/util/poll.d.ts.map +1 -0
  621. package/lib/util/poll.js +19 -0
  622. package/lib/util/poll.js.map +1 -0
  623. package/lib/vercel/project-domain.d.ts +1 -2
  624. package/lib/vercel/project-domain.d.ts.map +1 -1
  625. package/lib/vercel/project-domain.js.map +1 -1
  626. package/lib/vercel/project.d.ts +1 -2
  627. package/lib/vercel/project.d.ts.map +1 -1
  628. package/lib/vercel/project.js +2 -2
  629. package/lib/vercel/project.js.map +1 -1
  630. package/package.json +5 -1
  631. package/src/alchemy.ts +7 -0
  632. package/src/apply.ts +32 -29
  633. package/src/auth.ts +253 -0
  634. package/src/aws/bucket.ts +3 -3
  635. package/src/aws/control/resource.ts +4 -6
  636. package/src/aws/ec2/internet-gateway-attachment.ts +5 -6
  637. package/src/aws/ec2/internet-gateway.ts +3 -5
  638. package/src/aws/ec2/nat-gateway.ts +3 -5
  639. package/src/aws/ec2/route-table-association.ts +3 -5
  640. package/src/aws/ec2/route-table.ts +3 -5
  641. package/src/aws/ec2/route.ts +3 -3
  642. package/src/aws/ec2/security-group-rule.ts +3 -5
  643. package/src/aws/ec2/security-group.ts +3 -5
  644. package/src/aws/ec2/subnet.ts +3 -3
  645. package/src/aws/ec2/vpc.ts +3 -3
  646. package/src/aws/function.ts +3 -3
  647. package/src/aws/oidc/oidc-provider.ts +3 -5
  648. package/src/aws/policy-attachment.ts +2 -4
  649. package/src/aws/policy.ts +5 -5
  650. package/src/aws/queue.ts +5 -5
  651. package/src/aws/role.ts +3 -3
  652. package/src/aws/ses.ts +3 -3
  653. package/src/aws/ssm-parameter.ts +3 -3
  654. package/src/aws/table.ts +3 -3
  655. package/src/cloudflare/account-api-token.ts +3 -4
  656. package/src/cloudflare/ai-gateway.ts +3 -5
  657. package/src/cloudflare/api-gateway-operation.ts +3 -4
  658. package/src/cloudflare/api-schema.ts +25 -26
  659. package/src/cloudflare/api-shield.ts +3 -4
  660. package/src/cloudflare/api.ts +122 -57
  661. package/src/cloudflare/assets.ts +95 -136
  662. package/src/cloudflare/auth.ts +160 -95
  663. package/src/cloudflare/bindings.ts +21 -4
  664. package/src/cloudflare/bound.ts +50 -52
  665. package/src/cloudflare/bucket.ts +321 -58
  666. package/src/cloudflare/bundle/internal-worker-bundle.ts +2 -1
  667. package/src/cloudflare/bundle/plugin-wasm.ts +5 -5
  668. package/src/cloudflare/certificate-pack.ts +5 -6
  669. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  670. package/src/cloudflare/container.ts +7 -8
  671. package/src/cloudflare/custom-domain.ts +3 -5
  672. package/src/cloudflare/d1-database.ts +33 -34
  673. package/src/cloudflare/dispatch-namespace.ts +5 -6
  674. package/src/cloudflare/dns-records.ts +5 -5
  675. package/src/cloudflare/email-address.ts +7 -7
  676. package/src/cloudflare/email-catch-all.ts +6 -6
  677. package/src/cloudflare/email-routing.ts +5 -5
  678. package/src/cloudflare/email-rule.ts +5 -5
  679. package/src/cloudflare/hyperdrive-ref.ts +98 -0
  680. package/src/cloudflare/hyperdrive.ts +35 -36
  681. package/src/cloudflare/index.ts +2 -0
  682. package/src/cloudflare/kv-namespace.ts +31 -32
  683. package/src/cloudflare/miniflare/build-worker-options.ts +21 -12
  684. package/src/cloudflare/miniflare/delete.ts +1 -1
  685. package/src/cloudflare/miniflare/miniflare-controller.ts +27 -12
  686. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +117 -102
  687. package/src/cloudflare/miniflare/remote-binding-proxy.ts +16 -4
  688. package/src/cloudflare/miniflare/tunnel.ts +116 -0
  689. package/src/cloudflare/next.ts +3 -0
  690. package/src/cloudflare/permission-groups.ts +4 -6
  691. package/src/cloudflare/pipeline.ts +29 -30
  692. package/src/cloudflare/queue-consumer.ts +5 -7
  693. package/src/cloudflare/queue.ts +42 -43
  694. package/src/cloudflare/react-router/plugin.ts +20 -0
  695. package/src/cloudflare/redirect-rule.ts +5 -5
  696. package/src/cloudflare/route.ts +5 -5
  697. package/src/cloudflare/ruleset.ts +3 -4
  698. package/src/cloudflare/secret-ref.ts +56 -0
  699. package/src/cloudflare/secret.ts +35 -36
  700. package/src/cloudflare/secrets-store.ts +5 -8
  701. package/src/cloudflare/tunnel.ts +5 -7
  702. package/src/cloudflare/user.ts +12 -9
  703. package/src/cloudflare/vectorize-index.ts +8 -12
  704. package/src/cloudflare/vectorize-metadata-index.ts +6 -8
  705. package/src/cloudflare/website.ts +1 -1
  706. package/src/cloudflare/worker-assets.ts +10 -56
  707. package/src/cloudflare/worker-metadata.ts +14 -12
  708. package/src/cloudflare/worker-stub.ts +5 -5
  709. package/src/cloudflare/worker-subdomain.ts +6 -7
  710. package/src/cloudflare/worker.ts +123 -92
  711. package/src/cloudflare/wrangler.json.ts +13 -11
  712. package/src/cloudflare/zone.ts +3 -3
  713. package/src/context.ts +9 -7
  714. package/src/destroy.ts +2 -2
  715. package/src/dns/import-dns.ts +3 -5
  716. package/src/docker/container.ts +3 -6
  717. package/src/docker/image.ts +13 -13
  718. package/src/docker/network.ts +3 -4
  719. package/src/docker/remote-image.ts +3 -6
  720. package/src/docker/volume.ts +3 -4
  721. package/src/esbuild/bundle.ts +10 -8
  722. package/src/fs/copy-file.ts +3 -3
  723. package/src/fs/file.ts +3 -3
  724. package/src/fs/folder.ts +3 -3
  725. package/src/github/comment.ts +5 -7
  726. package/src/github/repository-environment.ts +3 -5
  727. package/src/github/repository-webhook.ts +3 -5
  728. package/src/github/secret.ts +3 -5
  729. package/src/llms.cloudflare.txt +1 -1
  730. package/src/neon/api/client.gen.ts +28 -0
  731. package/src/neon/api/sdk.gen.ts +2596 -0
  732. package/src/neon/api/types.gen.ts +8287 -0
  733. package/src/neon/api.ts +51 -147
  734. package/src/neon/branch.ts +278 -0
  735. package/src/neon/index.ts +1 -1
  736. package/src/neon/project.ts +136 -721
  737. package/src/neon/utils.ts +105 -0
  738. package/src/os/exec.ts +3 -3
  739. package/src/planetscale/api/client.gen.ts +28 -2882
  740. package/src/planetscale/api/sdk.gen.ts +3336 -0
  741. package/src/planetscale/api/types.gen.ts +778 -450
  742. package/src/planetscale/api.ts +101 -0
  743. package/src/planetscale/branch.ts +20 -19
  744. package/src/planetscale/database.ts +69 -70
  745. package/src/planetscale/index.ts +1 -1
  746. package/src/planetscale/password.ts +18 -22
  747. package/src/planetscale/role.ts +21 -21
  748. package/src/planetscale/utils.ts +20 -74
  749. package/src/random/random-string.ts +4 -4
  750. package/src/resource.ts +6 -2
  751. package/src/scope.ts +12 -1
  752. package/src/sentry/client-key.ts +3 -5
  753. package/src/sentry/project.ts +3 -5
  754. package/src/sentry/team.ts +3 -3
  755. package/src/state/r2-rest-state-store.ts +15 -57
  756. package/src/stripe/card.ts +3 -3
  757. package/src/stripe/coupon.ts +3 -3
  758. package/src/stripe/customer.ts +3 -3
  759. package/src/stripe/entitlements-feature.ts +3 -5
  760. package/src/stripe/file.ts +3 -3
  761. package/src/stripe/meter.ts +3 -3
  762. package/src/stripe/portal-configuration.ts +3 -5
  763. package/src/stripe/price.ts +3 -3
  764. package/src/stripe/product-feature.ts +3 -5
  765. package/src/stripe/product.ts +3 -3
  766. package/src/stripe/promotion-code.ts +3 -5
  767. package/src/stripe/shipping-rate.ts +3 -5
  768. package/src/stripe/tax-rate.ts +3 -3
  769. package/src/stripe/webhook.ts +3 -5
  770. package/src/test/bun.ts +1 -0
  771. package/src/test/options.ts +6 -0
  772. package/src/test/vitest.ts +1 -0
  773. package/src/upstash/redis.ts +1 -3
  774. package/src/util/api/client/client.gen.ts +268 -0
  775. package/src/util/api/client/index.ts +25 -0
  776. package/src/util/api/client/types.gen.ts +268 -0
  777. package/src/util/api/client/utils.gen.ts +331 -0
  778. package/src/util/api/core/auth.gen.ts +42 -0
  779. package/src/util/api/core/bodySerializer.gen.ts +92 -0
  780. package/src/util/api/core/params.gen.ts +153 -0
  781. package/src/util/api/core/pathSerializer.gen.ts +181 -0
  782. package/src/util/api/core/serverSentEvents.gen.ts +264 -0
  783. package/src/util/api/core/types.gen.ts +118 -0
  784. package/src/util/api/core/utils.gen.ts +143 -0
  785. package/src/util/http.ts +38 -11
  786. package/src/util/idempotent-spawn.ts +5 -6
  787. package/src/util/lock.ts +48 -0
  788. package/src/util/memoize.ts +26 -0
  789. package/src/util/oauth-client.ts +238 -0
  790. package/src/util/poll.ts +55 -0
  791. package/src/vercel/project-domain.ts +1 -3
  792. package/src/vercel/project.ts +3 -3
  793. package/templates/rwsdk/.cursor/rules/alchemy_cloudflare.mdc +1 -1
  794. package/templates/rwsdk/package.json +3 -3
  795. package/workers/cloudflare-state-store.js +8 -5619
  796. package/workers/dofs-state-store.js +2 -802
  797. package/workers/remote-binding-proxy.js +3 -39
  798. package/workers/remote-binding-proxy.ts +126 -35
  799. package/workers/tunnel-proxy.js +43 -0
  800. package/workers/tunnel-proxy.ts +121 -0
  801. package/lib/cloudflare/asset-manifest.d.ts +0 -15
  802. package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
  803. package/lib/cloudflare/asset-manifest.js +0 -1
  804. package/lib/cloudflare/asset-manifest.js.map +0 -1
  805. package/lib/cloudflare/oauth.d.ts +0 -22
  806. package/lib/cloudflare/oauth.d.ts.map +0 -1
  807. package/lib/cloudflare/oauth.js +0 -214
  808. package/lib/cloudflare/oauth.js.map +0 -1
  809. package/lib/neon/api-error.d.ts +0 -31
  810. package/lib/neon/api-error.d.ts.map +0 -1
  811. package/lib/neon/api-error.js +0 -73
  812. package/lib/neon/api-error.js.map +0 -1
  813. package/lib/planetscale/api/index.d.ts +0 -3
  814. package/lib/planetscale/api/index.d.ts.map +0 -1
  815. package/lib/planetscale/api/index.js +0 -4
  816. package/lib/planetscale/api/index.js.map +0 -1
  817. package/lib/util/neverthrow.d.ts +0 -16
  818. package/lib/util/neverthrow.d.ts.map +0 -1
  819. package/lib/util/neverthrow.js +0 -46
  820. package/lib/util/neverthrow.js.map +0 -1
  821. package/src/cloudflare/asset-manifest.ts +0 -16
  822. package/src/cloudflare/oauth.ts +0 -301
  823. package/src/neon/api-error.ts +0 -81
  824. package/src/planetscale/api/index.ts +0 -4
  825. package/src/util/neverthrow.ts +0 -64
@@ -190,46 +190,45 @@ export interface HyperdriveProps extends CloudflareApiOptions {
190
190
  * Output returned after Cloudflare Hyperdrive creation/update.
191
191
  * IMPORTANT: The interface name MUST match the exported resource name.
192
192
  */
193
- export type Hyperdrive = Resource<"cloudflare::Hyperdrive"> &
194
- Omit<HyperdriveProps, "origin" | "dev"> & {
195
- /**
196
- * The ID of the resource
197
- */
198
- id: string;
199
-
200
- /**
201
- * Name of the Hyperdrive configuration
202
- */
203
- name: string;
193
+ export type Hyperdrive = Omit<HyperdriveProps, "origin" | "dev"> & {
194
+ /**
195
+ * The ID of the resource
196
+ */
197
+ id: string;
204
198
 
205
- /**
206
- * The Cloudflare-generated UUID of the hyperdrive
207
- */
208
- hyperdriveId: string;
199
+ /**
200
+ * Name of the Hyperdrive configuration
201
+ */
202
+ name: string;
209
203
 
210
- /**
211
- * Database connection origin configuration
212
- */
213
- origin: HyperdrivePublicOrigin | HyperdriveOriginWithAccess;
204
+ /**
205
+ * The Cloudflare-generated UUID of the hyperdrive
206
+ */
207
+ hyperdriveId: string;
214
208
 
215
- /**
216
- * Local development configuration
217
- * @internal
218
- */
219
- dev: {
220
- /**
221
- * The connection string to use for local development
222
- */
223
- origin: Secret;
224
- };
209
+ /**
210
+ * Database connection origin configuration
211
+ */
212
+ origin: HyperdrivePublicOrigin | HyperdriveOriginWithAccess;
225
213
 
214
+ /**
215
+ * Local development configuration
216
+ * @internal
217
+ */
218
+ dev: {
226
219
  /**
227
- * Resource type identifier for binding.
228
- * @internal
220
+ * The connection string to use for local development
229
221
  */
230
- type: "hyperdrive";
222
+ origin: Secret;
231
223
  };
232
224
 
225
+ /**
226
+ * Resource type identifier for binding.
227
+ * @internal
228
+ */
229
+ type: "hyperdrive";
230
+ };
231
+
233
232
  /**
234
233
  * Represents a Cloudflare Hyperdrive configuration.
235
234
  *
@@ -356,7 +355,7 @@ const _Hyperdrive = Resource(
356
355
  props.name ?? this.output?.name ?? this.scope.createPhysicalName(id);
357
356
 
358
357
  if (this.scope.local) {
359
- return this({
358
+ return {
360
359
  id,
361
360
  hyperdriveId: hyperdriveId || "",
362
361
  name,
@@ -365,7 +364,7 @@ const _Hyperdrive = Resource(
365
364
  mtls: props.mtls,
366
365
  dev: props.dev,
367
366
  type: "hyperdrive",
368
- });
367
+ };
369
368
  }
370
369
  const api = await createCloudflareApi(props);
371
370
 
@@ -445,7 +444,7 @@ const _Hyperdrive = Resource(
445
444
  }
446
445
 
447
446
  // Construct the output object from API response and props
448
- return this({
447
+ return {
449
448
  id,
450
449
  hyperdriveId: result.id, // Store the Cloudflare-assigned UUID
451
450
  name: result.name,
@@ -454,7 +453,7 @@ const _Hyperdrive = Resource(
454
453
  mtls: result.mtls,
455
454
  dev: props.dev,
456
455
  type: "hyperdrive",
457
- });
456
+ };
458
457
  },
459
458
  );
460
459
 
@@ -30,6 +30,7 @@ export * from "./email-address.ts";
30
30
  export * from "./email-catch-all.ts";
31
31
  export * from "./email-routing.ts";
32
32
  export * from "./email-rule.ts";
33
+ export * from "./hyperdrive-ref.ts";
33
34
  export * from "./hyperdrive.ts";
34
35
  export * from "./images.ts";
35
36
  export * from "./kv-namespace.ts";
@@ -49,6 +50,7 @@ export * from "./route.ts";
49
50
  export * from "./rule.ts";
50
51
  export * from "./ruleset.ts";
51
52
  export * from "./secret-key.ts";
53
+ export * from "./secret-ref.ts";
52
54
  export * from "./secret.ts";
53
55
  export * from "./secrets-store.ts";
54
56
  export * from "./state.ts";
@@ -95,47 +95,46 @@ export interface KVPair {
95
95
  metadata?: any;
96
96
  }
97
97
 
98
- export function isKVNamespace(resource: Resource): resource is KVNamespace {
99
- return resource[ResourceKind] === "cloudflare::KVNamespace";
98
+ export function isKVNamespace(resource: any): resource is KVNamespace {
99
+ return resource?.[ResourceKind] === "cloudflare::KVNamespace";
100
100
  }
101
101
 
102
102
  /**
103
103
  * Output returned after KV Namespace creation/update
104
104
  */
105
- export type KVNamespace = Resource<"cloudflare::KVNamespace"> &
106
- Omit<KVNamespaceProps, "delete" | "dev"> & {
107
- type: "kv_namespace";
108
- /**
109
- * The ID of the namespace
110
- */
111
- namespaceId: string;
105
+ export type KVNamespace = Omit<KVNamespaceProps, "delete" | "dev"> & {
106
+ type: "kv_namespace";
107
+ /**
108
+ * The ID of the namespace
109
+ */
110
+ namespaceId: string;
112
111
 
113
- /**
114
- * Time at which the namespace was created
115
- */
116
- createdAt: number;
112
+ /**
113
+ * Time at which the namespace was created
114
+ */
115
+ createdAt: number;
116
+
117
+ /**
118
+ * Time at which the namespace was last modified
119
+ */
120
+ modifiedAt: number;
117
121
 
122
+ /**
123
+ * Development mode properties
124
+ * @internal
125
+ */
126
+ dev: {
118
127
  /**
119
- * Time at which the namespace was last modified
128
+ * The ID of the KV namespace in development mode
120
129
  */
121
- modifiedAt: number;
130
+ id: string;
122
131
 
123
132
  /**
124
- * Development mode properties
125
- * @internal
133
+ * Whether the KV namespace is running remotely
126
134
  */
127
- dev: {
128
- /**
129
- * The ID of the KV namespace in development mode
130
- */
131
- id: string;
132
-
133
- /**
134
- * Whether the KV namespace is running remotely
135
- */
136
- remote: boolean;
137
- };
135
+ remote: boolean;
138
136
  };
137
+ };
139
138
 
140
139
  /**
141
140
  * A Cloudflare KV Namespace is a key-value store that can be used to store data for your application.
@@ -221,7 +220,7 @@ const _KVNamespace = Resource(
221
220
  };
222
221
 
223
222
  if (local) {
224
- return this({
223
+ return {
225
224
  type: "kv_namespace",
226
225
  namespaceId: this.output?.namespaceId ?? "",
227
226
  title,
@@ -229,7 +228,7 @@ const _KVNamespace = Resource(
229
228
  dev,
230
229
  createdAt: this.output?.createdAt ?? Date.now(),
231
230
  modifiedAt: Date.now(),
232
- });
231
+ };
233
232
  }
234
233
 
235
234
  const api = await createCloudflareApi(props);
@@ -260,7 +259,7 @@ const _KVNamespace = Resource(
260
259
 
261
260
  await insertKVRecords(api, result.namespaceId, props);
262
261
 
263
- return this({
262
+ return {
264
263
  type: "kv_namespace",
265
264
  namespaceId: result.namespaceId,
266
265
  title,
@@ -268,7 +267,7 @@ const _KVNamespace = Resource(
268
267
  dev,
269
268
  createdAt: result.createdAt,
270
269
  modifiedAt: Date.now(),
271
- });
270
+ };
272
271
  },
273
272
  );
274
273
 
@@ -2,12 +2,11 @@ import * as miniflare from "miniflare";
2
2
  import { assertNever } from "../../util/assert-never.ts";
3
3
  import type { HTTPServer } from "../../util/http.ts";
4
4
  import type { CloudflareApi } from "../api.ts";
5
- import {
6
- Self,
7
- type Binding,
8
- type Bindings,
9
- type WorkerBindingService,
10
- type WorkerBindingSpec,
5
+ import type {
6
+ Binding,
7
+ Bindings,
8
+ WorkerBindingService,
9
+ WorkerBindingSpec,
11
10
  } from "../bindings.ts";
12
11
  import { isQueueEventSource, type EventSource } from "../event-source.ts";
13
12
  import type { WorkerBundle, WorkerBundleSource } from "../worker-bundle.ts";
@@ -25,11 +24,11 @@ export interface MiniflareWorkerInput {
25
24
  assets: AssetsConfig | undefined;
26
25
  bundle: WorkerBundleSource;
27
26
  port: number | undefined;
27
+ tunnel: boolean | undefined;
28
28
  }
29
29
 
30
30
  type RemoteOnlyBindingType =
31
31
  | "ai"
32
- | "ai_gateway"
33
32
  | "browser"
34
33
  | "dispatch_namespace"
35
34
  | "mtls_certificate"
@@ -92,13 +91,18 @@ export const buildWorkerOptions = async (
92
91
  (options.bindings ??= {})[key] = binding;
93
92
  continue;
94
93
  }
95
- if (binding === Self) {
94
+ if (binding.type === "cloudflare::Worker::Self") {
96
95
  (options.serviceBindings ??= {})[key] = miniflare.kCurrentWorker;
97
96
  continue;
98
97
  }
99
98
  switch (binding.type) {
100
- case "ai":
101
- case "ai_gateway": {
99
+ case "ai": {
100
+ const existing = remoteBindings.find((b) => b.type === "ai");
101
+ if (existing) {
102
+ throw new Error(
103
+ `Workers cannot have multiple AI bindings. Binding "${key}" conflicts with "${existing.name}".`,
104
+ );
105
+ }
102
106
  remoteBindings.push({
103
107
  type: "ai",
104
108
  name: key,
@@ -180,7 +184,9 @@ export const buildWorkerOptions = async (
180
184
  break;
181
185
  }
182
186
  case "hyperdrive": {
183
- (options.hyperdrives ??= {})[key] = binding.dev.origin.unencrypted;
187
+ if (binding.dev) {
188
+ (options.hyperdrives ??= {})[key] = binding.dev.origin.unencrypted;
189
+ }
184
190
  break;
185
191
  }
186
192
  case "images": {
@@ -459,7 +465,10 @@ const normalizeBundle = (bundle: WorkerBundle) => {
459
465
  };
460
466
 
461
467
  const isRemoteBinding = (binding: Binding) => {
462
- if (typeof binding === "string" || binding === Self) {
468
+ if (
469
+ typeof binding === "string" ||
470
+ binding.type === "cloudflare::Worker::Self"
471
+ ) {
463
472
  return false;
464
473
  }
465
474
  return (
@@ -113,7 +113,7 @@ async function cleanMiniflareDirectory(dotAlchemy: string) {
113
113
 
114
114
  const removeDirectory = async (path: string, options?: RmDirOptions) => {
115
115
  try {
116
- await fs.rmdir(path, options);
116
+ await fs.rm(path, options);
117
117
  } catch (error) {
118
118
  if (!isENOENT(error)) {
119
119
  throw error;
@@ -10,8 +10,12 @@ import {
10
10
  buildWorkerOptions,
11
11
  type MiniflareWorkerInput,
12
12
  } from "./build-worker-options.ts";
13
- import { MiniflareWorkerProxy } from "./miniflare-worker-proxy.ts";
13
+ import {
14
+ createMiniflareWorkerProxy,
15
+ type MiniflareWorkerProxy,
16
+ } from "./miniflare-worker-proxy.ts";
14
17
  import { getDefaultPersistPath } from "./paths.ts";
18
+ import { createTunnel, type Tunnel } from "./tunnel.ts";
15
19
 
16
20
  declare global {
17
21
  var ALCHEMY_MINIFLARE_CONTROLLER: MiniflareController | undefined;
@@ -21,6 +25,7 @@ export class MiniflareController {
21
25
  abort = new AbortController();
22
26
  miniflare: miniflare.Miniflare | undefined;
23
27
  options = new Map<string, miniflare.WorkerOptions>();
28
+ tunnel: Tunnel | undefined;
24
29
  localProxies = new Map<string, MiniflareWorkerProxy>();
25
30
  remoteProxies = new Map<string, HTTPServer>();
26
31
  mutex = new AsyncMutex();
@@ -40,21 +45,32 @@ export class MiniflareController {
40
45
  assert(first.value, "First value is undefined");
41
46
  this.options.set(input.name, first.value);
42
47
  const miniflare = await this.update();
43
- const proxy = new MiniflareWorkerProxy({
44
- name: input.name,
45
- port: input.port ?? (await findOpenPort()),
46
- miniflare,
47
- });
48
- this.localProxies.set(input.name, proxy);
48
+ let url: URL;
49
+ if (input.tunnel) {
50
+ this.tunnel ??= await createTunnel(miniflare);
51
+ url = await this.tunnel.configureWorker({
52
+ api: input.api,
53
+ name: input.name,
54
+ });
55
+ } else {
56
+ const proxy = await createMiniflareWorkerProxy({
57
+ port: input.port ?? (await findOpenPort()),
58
+ getWorkerName: () => input.name,
59
+ miniflare,
60
+ mode: "local",
61
+ });
62
+ this.localProxies.set(input.name, proxy);
63
+ url = proxy.url;
64
+ }
49
65
  void this.watch(input.id, watcher);
50
66
  logger.task(input.id, {
51
- message: `Ready at ${proxy.url}`,
67
+ message: `Ready at ${url}`,
52
68
  status: "success",
53
69
  resource: input.id,
54
70
  prefix: "dev",
55
71
  prefixColor: "cyanBright",
56
72
  });
57
- return proxy.url;
73
+ return url.toString();
58
74
  }
59
75
 
60
76
  private async watch(
@@ -76,9 +92,7 @@ export class MiniflareController {
76
92
 
77
93
  private async update() {
78
94
  return await this.mutex.lock(async () => {
79
- const options: miniflare.MiniflareOptions & {
80
- workers: miniflare.WorkerOptions[];
81
- } = {
95
+ const options: miniflare.MiniflareOptions = {
82
96
  workers: [],
83
97
  defaultPersistRoot: path.resolve(
84
98
  getDefaultPersistPath(Scope.current.rootDir),
@@ -147,6 +161,7 @@ export class MiniflareController {
147
161
  this.abort.abort();
148
162
  await Promise.all([
149
163
  this.miniflare?.dispose(),
164
+ this.tunnel?.close(),
150
165
  ...this.localProxies.values().map((proxy) => proxy.close()),
151
166
  ...this.remoteProxies.values().map((proxy) => proxy.close()),
152
167
  ]);
@@ -1,126 +1,103 @@
1
1
  import * as miniflare from "miniflare";
2
2
  import { once } from "node:events";
3
3
  import http from "node:http";
4
- import type Stream from "node:stream";
5
4
  import { Readable } from "node:stream";
6
5
  import { WebSocket, WebSocketServer } from "ws";
7
- import { logger } from "../../util/logger.ts";
6
+ import { coupleWebSocket } from "../../util/http.ts";
8
7
 
9
- interface MiniflareWorkerProxyOptions {
10
- name: string;
11
- port: number;
12
- miniflare: miniflare.Miniflare;
8
+ export interface MiniflareWorkerProxy {
9
+ url: URL;
10
+ close: () => Promise<void>;
13
11
  }
14
12
 
15
- export class MiniflareWorkerProxy {
16
- private server = http.createServer();
17
- private wss = new WebSocketServer({ noServer: true });
18
-
19
- constructor(private readonly options: MiniflareWorkerProxyOptions) {
20
- this.server.on("upgrade", async (req, socket, head) => {
21
- await this.handleUpgrade(req, socket, head);
22
- });
23
- this.server.on("request", async (req, res) => {
24
- await this.handleRequest(req, res);
25
- });
26
- this.server.listen(this.options.port);
27
- }
28
-
29
- get ready() {
30
- if (!this.server.listening) {
31
- return once(this.server, "listening");
32
- }
33
- return Promise.resolve();
34
- }
35
-
36
- get url() {
37
- return `http://localhost:${this.options.port}`;
38
- }
39
-
40
- async close() {
41
- await Promise.all([
42
- new Promise((resolve) => this.wss.close(resolve)),
43
- new Promise((resolve) => this.server.close(resolve)),
44
- ]);
45
- }
13
+ export async function createMiniflareWorkerProxy(options: {
14
+ port: number;
15
+ transformRequest?: (request: RequestInfo) => void;
16
+ getWorkerName: (request: miniflare.Request) => string;
17
+ miniflare: miniflare.Miniflare;
18
+ mode: "local" | "remote";
19
+ }) {
20
+ const server = http.createServer();
21
+ const wss = new WebSocketServer({ noServer: true });
46
22
 
47
- private async handleUpgrade(
48
- req: http.IncomingMessage,
49
- socket: Stream.Duplex,
50
- head: Buffer,
51
- ) {
52
- const server = await this.createServerWebSocket(req);
53
- if (!server) {
23
+ server.on("upgrade", async (req, socket, head) => {
24
+ try {
25
+ const server = await createServerWebSocket(req);
26
+ coupleWebSocket(wss, req, socket, head, server);
27
+ } catch (error) {
28
+ console.error(error);
54
29
  socket.destroy();
55
- return;
56
30
  }
57
- this.wss.handleUpgrade(req, socket, head, (client) => {
58
- client.on("message", (event, binary) => server.send(event, { binary }));
59
- client.on("close", (code, reason) => server.close(code, reason));
60
- server.on("message", (event, binary) => client.send(event, { binary }));
61
- server.on("close", (code, reason) => client.close(code, reason));
62
- this.wss.emit("connection", client, req);
63
- });
64
- }
65
-
66
- private async createServerWebSocket(req: http.IncomingMessage) {
67
- const target = await this.options.miniflare.unsafeGetDirectURL(
68
- this.options.name,
69
- );
70
- if (!target) {
71
- logger.error(
72
- `[Alchemy] Websocket connection failed: The worker "${this.options.name}" is not running.`,
31
+ });
32
+ server.on("request", async (req, res) => {
33
+ try {
34
+ const request = toMiniflareRequest(req);
35
+ const name = options.getWorkerName(request);
36
+ const worker = await options.miniflare.getWorker(name);
37
+ const response = await worker.fetch(request);
38
+ writeMiniflareResponseToNode(response, res);
39
+ } catch (error) {
40
+ console.error(error);
41
+ const response = MiniflareWorkerProxyError.fromUnknown(error).toResponse(
42
+ options.mode,
73
43
  );
74
- return null;
44
+ writeMiniflareResponseToNode(response, res);
75
45
  }
46
+ });
47
+
48
+ const toMiniflareRequest = (req: http.IncomingMessage): miniflare.Request => {
49
+ const info = parseIncomingMessage(req);
50
+ options.transformRequest?.(info);
51
+ return new miniflare.Request(info.url, {
52
+ method: info.method,
53
+ headers: info.headers,
54
+ body: info.body,
55
+ redirect: info.redirect,
56
+ duplex: info.duplex,
57
+ });
58
+ };
59
+
60
+ const createServerWebSocket = async (req: http.IncomingMessage) => {
61
+ const name = options.getWorkerName(toMiniflareRequest(req));
62
+ const target = await options.miniflare.unsafeGetDirectURL(name);
76
63
  const url = new URL(req.url ?? "/", target);
77
64
  url.protocol = url.protocol.replace("http", "ws");
78
65
  const protocols = req.headers["sec-websocket-protocol"]
79
66
  ?.split(",")
80
67
  .map((p) => p.trim());
81
68
  const server = new WebSocket(url, protocols);
82
- const controller = new AbortController();
83
- return await Promise.race([
84
- once(server, "open", { signal: controller.signal }).then(() => server),
85
- once(server, "close", { signal: controller.signal }).then((args) => {
86
- const [code, reason] = args as [number, string];
87
- logger.error(
88
- `[Alchemy] Websocket connection failed for worker "${this.options.name}": ${code} ${reason}`,
89
- );
90
- return null;
91
- }),
92
- ]).finally(() => controller.abort());
93
- }
69
+ await once(server, "open");
70
+ return server;
71
+ };
94
72
 
95
- private async handleRequest(
96
- req: http.IncomingMessage,
97
- res: http.ServerResponse,
98
- ) {
99
- const worker = await this.options.miniflare.getWorker(this.options.name);
100
- if (!worker) {
101
- res.statusCode = 503;
102
- res.end(`[Alchemy] The worker "${this.options.name}" is not running.`);
103
- return;
104
- }
105
- try {
106
- const response = await worker.fetch(toMiniflareRequest(req));
107
- writeMiniflareResponseToNode(response, res);
108
- } catch (rawError) {
109
- const message =
110
- rawError instanceof Error
111
- ? (rawError.stack ?? rawError.message)
112
- : String(rawError);
113
- res.statusCode = 500;
114
- res.end(
115
- `[Alchemy] The worker "${this.options.name}" threw an error:\n\n${message}`,
116
- );
117
- }
118
- }
73
+ server.listen(options.port);
74
+ await once(server, "listening");
75
+ const url = new URL(`http://localhost:${options.port}`);
76
+
77
+ return {
78
+ url,
79
+ close: async () => {
80
+ await Promise.all([
81
+ new Promise((resolve) => server.close(resolve)),
82
+ new Promise((resolve) => wss.close(resolve)),
83
+ ]);
84
+ },
85
+ };
86
+ }
87
+
88
+ interface RequestInfo {
89
+ method: string;
90
+ url: URL;
91
+ headers: miniflare.Headers;
92
+ body: miniflare.BodyInit | undefined;
93
+ redirect: "manual";
94
+ duplex: "half" | undefined;
119
95
  }
120
96
 
121
- const toMiniflareRequest = (req: http.IncomingMessage) => {
97
+ const parseIncomingMessage = (req: http.IncomingMessage): RequestInfo => {
122
98
  const method = req.method ?? "GET";
123
- const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
99
+ const protocol = req.headers["x-forwarded-proto"] ?? "http";
100
+ const url = new URL(req.url ?? "/", `${protocol}://${req.headers.host}`);
124
101
  const headers = new miniflare.Headers();
125
102
  for (const [key, value] of Object.entries(req.headers)) {
126
103
  if (Array.isArray(value)) {
@@ -135,13 +112,14 @@ const toMiniflareRequest = (req: http.IncomingMessage) => {
135
112
  ["GET", "HEAD", "OPTIONS"].includes(method) || !req.readable
136
113
  ? undefined
137
114
  : Readable.toWeb(req);
138
- return new miniflare.Request(url, {
115
+ return {
139
116
  method,
117
+ url,
140
118
  headers,
141
119
  body,
142
120
  redirect: "manual",
143
121
  duplex: body ? "half" : undefined,
144
- });
122
+ };
145
123
  };
146
124
 
147
125
  const writeMiniflareResponseToNode = (
@@ -159,3 +137,40 @@ const writeMiniflareResponseToNode = (
159
137
  out.end();
160
138
  }
161
139
  };
140
+
141
+ export class MiniflareWorkerProxyError extends Error {
142
+ constructor(
143
+ message: string,
144
+ readonly status: number,
145
+ options?: ErrorOptions,
146
+ ) {
147
+ super(message, options);
148
+ }
149
+
150
+ toResponse(mode: "local" | "remote"): miniflare.Response {
151
+ let text = `[Alchemy] ${this.message}`;
152
+ if (mode === "local" && this.cause) {
153
+ const cause =
154
+ this.cause instanceof Error
155
+ ? (this.cause.stack ?? this.cause.message)
156
+ : String(this.cause);
157
+ text += `\n\n${cause}`;
158
+ }
159
+ return new miniflare.Response(text, {
160
+ status: this.status,
161
+ headers: {
162
+ "Content-Type": "text/plain",
163
+ "Alchemy-Error": this.message,
164
+ },
165
+ });
166
+ }
167
+
168
+ static fromUnknown(error: unknown): MiniflareWorkerProxyError {
169
+ if (error instanceof MiniflareWorkerProxyError) {
170
+ return error;
171
+ }
172
+ return new MiniflareWorkerProxyError("An unknown error occurred.", 500, {
173
+ cause: error,
174
+ });
175
+ }
176
+ }