alchemy 0.24.1 → 0.26.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 (500) hide show
  1. package/README.md +7 -0
  2. package/lib/ai/astro-file.d.ts.map +1 -1
  3. package/lib/ai/astro-file.js +2 -1
  4. package/lib/ai/astro-file.js.map +1 -1
  5. package/lib/ai/client.d.ts.map +1 -1
  6. package/lib/ai/client.js +3 -2
  7. package/lib/ai/client.js.map +1 -1
  8. package/lib/alchemy.d.ts +7 -0
  9. package/lib/alchemy.d.ts.map +1 -1
  10. package/lib/alchemy.js +19 -3
  11. package/lib/alchemy.js.map +1 -1
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +63 -5
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/control/client.js +5 -4
  16. package/lib/aws/control/client.js.map +1 -1
  17. package/lib/aws/control/properties.d.ts +6 -0
  18. package/lib/aws/control/properties.d.ts.map +1 -1
  19. package/lib/aws/control/properties.js +48 -0
  20. package/lib/aws/control/properties.js.map +1 -1
  21. package/lib/aws/control/resource.d.ts.map +1 -1
  22. package/lib/aws/control/resource.js +5 -3
  23. package/lib/aws/control/resource.js.map +1 -1
  24. package/lib/aws/control/types.d.ts +3969 -4862
  25. package/lib/aws/control/types.d.ts.map +1 -1
  26. package/lib/aws/control/types.js.map +1 -1
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +9 -8
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
  31. package/lib/aws/oidc/oidc-provider.js +3 -2
  32. package/lib/aws/oidc/oidc-provider.js.map +1 -1
  33. package/lib/aws/queue.d.ts.map +1 -1
  34. package/lib/aws/queue.js +3 -2
  35. package/lib/aws/queue.js.map +1 -1
  36. package/lib/aws/role.d.ts.map +1 -1
  37. package/lib/aws/role.js +3 -1
  38. package/lib/aws/role.js.map +1 -1
  39. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  40. package/lib/aws/ssm-parameter.js +2 -1
  41. package/lib/aws/ssm-parameter.js.map +1 -1
  42. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  43. package/lib/cloudflare/account-api-token.js +3 -2
  44. package/lib/cloudflare/account-api-token.js.map +1 -1
  45. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  46. package/lib/cloudflare/ai-gateway.js +4 -3
  47. package/lib/cloudflare/ai-gateway.js.map +1 -1
  48. package/lib/cloudflare/ai.d.ts +21 -0
  49. package/lib/cloudflare/ai.d.ts.map +1 -1
  50. package/lib/cloudflare/ai.js +21 -0
  51. package/lib/cloudflare/ai.js.map +1 -1
  52. package/lib/cloudflare/api-error.d.ts +0 -9
  53. package/lib/cloudflare/api-error.d.ts.map +1 -1
  54. package/lib/cloudflare/api-error.js +24 -0
  55. package/lib/cloudflare/api-error.js.map +1 -1
  56. package/lib/cloudflare/api.d.ts.map +1 -1
  57. package/lib/cloudflare/api.js +5 -4
  58. package/lib/cloudflare/api.js.map +1 -1
  59. package/lib/cloudflare/assets.d.ts.map +1 -1
  60. package/lib/cloudflare/assets.js +26 -6
  61. package/lib/cloudflare/assets.js.map +1 -1
  62. package/lib/cloudflare/astro.d.ts +63 -0
  63. package/lib/cloudflare/astro.d.ts.map +1 -0
  64. package/lib/cloudflare/astro.js +133 -0
  65. package/lib/cloudflare/astro.js.map +1 -0
  66. package/lib/cloudflare/auth.d.ts.map +1 -1
  67. package/lib/cloudflare/auth.js +3 -2
  68. package/lib/cloudflare/auth.js.map +1 -1
  69. package/lib/cloudflare/bindings.d.ts +23 -2
  70. package/lib/cloudflare/bindings.d.ts.map +1 -1
  71. package/lib/cloudflare/bindings.js.map +1 -1
  72. package/lib/cloudflare/bound.d.ts +7 -1
  73. package/lib/cloudflare/bound.d.ts.map +1 -1
  74. package/lib/cloudflare/bucket.d.ts.map +1 -1
  75. package/lib/cloudflare/bucket.js +12 -8
  76. package/lib/cloudflare/bucket.js.map +1 -1
  77. package/lib/cloudflare/bundle/bundle-worker.d.ts.map +1 -1
  78. package/lib/cloudflare/bundle/bundle-worker.js +2 -1
  79. package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
  80. package/lib/cloudflare/bundle/nodejs-compat-mode.d.ts.map +1 -1
  81. package/lib/cloudflare/bundle/nodejs-compat-mode.js +2 -1
  82. package/lib/cloudflare/bundle/nodejs-compat-mode.js.map +1 -1
  83. package/lib/cloudflare/custom-domain.d.ts.map +1 -1
  84. package/lib/cloudflare/custom-domain.js +10 -9
  85. package/lib/cloudflare/custom-domain.js.map +1 -1
  86. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  87. package/lib/cloudflare/d1-database.js +11 -10
  88. package/lib/cloudflare/d1-database.js.map +1 -1
  89. package/lib/cloudflare/d1-export.d.ts.map +1 -1
  90. package/lib/cloudflare/d1-export.js +2 -1
  91. package/lib/cloudflare/d1-export.js.map +1 -1
  92. package/lib/cloudflare/d1-import.d.ts.map +1 -1
  93. package/lib/cloudflare/d1-import.js +2 -1
  94. package/lib/cloudflare/d1-import.js.map +1 -1
  95. package/lib/cloudflare/d1-migrations.d.ts.map +1 -1
  96. package/lib/cloudflare/d1-migrations.js +2 -1
  97. package/lib/cloudflare/d1-migrations.js.map +1 -1
  98. package/lib/cloudflare/dns-records.d.ts.map +1 -1
  99. package/lib/cloudflare/dns-records.js +5 -4
  100. package/lib/cloudflare/dns-records.js.map +1 -1
  101. package/lib/cloudflare/do-state-store/worker.d.ts.map +1 -1
  102. package/lib/cloudflare/do-state-store/worker.js +4 -0
  103. package/lib/cloudflare/do-state-store/worker.js.map +1 -1
  104. package/lib/cloudflare/email-address.d.ts +79 -0
  105. package/lib/cloudflare/email-address.d.ts.map +1 -0
  106. package/lib/cloudflare/email-address.js +112 -0
  107. package/lib/cloudflare/email-address.js.map +1 -0
  108. package/lib/cloudflare/email-catch-all.d.ts +123 -0
  109. package/lib/cloudflare/email-catch-all.d.ts.map +1 -0
  110. package/lib/cloudflare/email-catch-all.js +124 -0
  111. package/lib/cloudflare/email-catch-all.js.map +1 -0
  112. package/lib/cloudflare/email-routing.d.ts +89 -0
  113. package/lib/cloudflare/email-routing.d.ts.map +1 -0
  114. package/lib/cloudflare/email-routing.js +120 -0
  115. package/lib/cloudflare/email-routing.js.map +1 -0
  116. package/lib/cloudflare/email-rule.d.ts +196 -0
  117. package/lib/cloudflare/email-rule.d.ts.map +1 -0
  118. package/lib/cloudflare/email-rule.js +153 -0
  119. package/lib/cloudflare/email-rule.js.map +1 -0
  120. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  121. package/lib/cloudflare/hyperdrive.js +5 -4
  122. package/lib/cloudflare/hyperdrive.js.map +1 -1
  123. package/lib/cloudflare/images.d.ts +60 -0
  124. package/lib/cloudflare/images.d.ts.map +1 -0
  125. package/lib/cloudflare/images.js +60 -0
  126. package/lib/cloudflare/images.js.map +1 -0
  127. package/lib/cloudflare/index.d.ts +9 -0
  128. package/lib/cloudflare/index.d.ts.map +1 -1
  129. package/lib/cloudflare/index.js +9 -0
  130. package/lib/cloudflare/index.js.map +1 -1
  131. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  132. package/lib/cloudflare/kv-namespace.js +2 -1
  133. package/lib/cloudflare/kv-namespace.js.map +1 -1
  134. package/lib/cloudflare/pipeline.d.ts +7 -0
  135. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  136. package/lib/cloudflare/pipeline.js +28 -2
  137. package/lib/cloudflare/pipeline.js.map +1 -1
  138. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  139. package/lib/cloudflare/queue-consumer.js +2 -1
  140. package/lib/cloudflare/queue-consumer.js.map +1 -1
  141. package/lib/cloudflare/queue.d.ts.map +1 -1
  142. package/lib/cloudflare/queue.js +0 -8
  143. package/lib/cloudflare/queue.js.map +1 -1
  144. package/lib/cloudflare/route.d.ts +26 -1
  145. package/lib/cloudflare/route.d.ts.map +1 -1
  146. package/lib/cloudflare/route.js +84 -16
  147. package/lib/cloudflare/route.js.map +1 -1
  148. package/lib/cloudflare/secret.d.ts +137 -0
  149. package/lib/cloudflare/secret.d.ts.map +1 -0
  150. package/lib/cloudflare/secret.js +122 -0
  151. package/lib/cloudflare/secret.js.map +1 -0
  152. package/lib/cloudflare/secrets-store.d.ts +145 -0
  153. package/lib/cloudflare/secrets-store.d.ts.map +1 -0
  154. package/lib/cloudflare/secrets-store.js +213 -0
  155. package/lib/cloudflare/secrets-store.js.map +1 -0
  156. package/lib/cloudflare/sveltekit.d.ts +49 -0
  157. package/lib/cloudflare/sveltekit.d.ts.map +1 -0
  158. package/lib/cloudflare/sveltekit.js +56 -0
  159. package/lib/cloudflare/sveltekit.js.map +1 -0
  160. package/lib/cloudflare/user.d.ts.map +1 -1
  161. package/lib/cloudflare/user.js +2 -1
  162. package/lib/cloudflare/user.js.map +1 -1
  163. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  164. package/lib/cloudflare/vectorize-index.js +6 -5
  165. package/lib/cloudflare/vectorize-index.js.map +1 -1
  166. package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
  167. package/lib/cloudflare/vectorize-metadata-index.js +2 -1
  168. package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
  169. package/lib/cloudflare/website.d.ts.map +1 -1
  170. package/lib/cloudflare/website.js +7 -2
  171. package/lib/cloudflare/website.js.map +1 -1
  172. package/lib/cloudflare/worker-assets.d.ts +18 -0
  173. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  174. package/lib/cloudflare/worker-assets.js +61 -57
  175. package/lib/cloudflare/worker-assets.js.map +1 -1
  176. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  177. package/lib/cloudflare/worker-metadata.js +16 -1
  178. package/lib/cloudflare/worker-metadata.js.map +1 -1
  179. package/lib/cloudflare/worker.d.ts +31 -1
  180. package/lib/cloudflare/worker.d.ts.map +1 -1
  181. package/lib/cloudflare/worker.js +34 -8
  182. package/lib/cloudflare/worker.js.map +1 -1
  183. package/lib/cloudflare/wrangler.json.d.ts +14 -0
  184. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  185. package/lib/cloudflare/wrangler.json.js +23 -0
  186. package/lib/cloudflare/wrangler.json.js.map +1 -1
  187. package/lib/cloudflare/zone.d.ts +30 -2
  188. package/lib/cloudflare/zone.d.ts.map +1 -1
  189. package/lib/cloudflare/zone.js +57 -3
  190. package/lib/cloudflare/zone.js.map +1 -1
  191. package/lib/destroy.d.ts.map +1 -1
  192. package/lib/destroy.js +30 -13
  193. package/lib/destroy.js.map +1 -1
  194. package/lib/dns/godaddy.d.ts.map +1 -1
  195. package/lib/dns/godaddy.js +3 -2
  196. package/lib/dns/godaddy.js.map +1 -1
  197. package/lib/dns/import-dns.d.ts.map +1 -1
  198. package/lib/dns/import-dns.js +2 -1
  199. package/lib/dns/import-dns.js.map +1 -1
  200. package/lib/esbuild/bundle.d.ts +1 -1
  201. package/lib/esbuild/bundle.d.ts.map +1 -1
  202. package/lib/esbuild/bundle.js +2 -1
  203. package/lib/esbuild/bundle.js.map +1 -1
  204. package/lib/fs/copy-file.d.ts.map +1 -1
  205. package/lib/fs/copy-file.js +2 -1
  206. package/lib/fs/copy-file.js.map +1 -1
  207. package/lib/fs/file.d.ts.map +1 -1
  208. package/lib/fs/file.js +2 -1
  209. package/lib/fs/file.js.map +1 -1
  210. package/lib/github/client.d.ts.map +1 -1
  211. package/lib/github/client.js +11 -10
  212. package/lib/github/client.js.map +1 -1
  213. package/lib/github/repository-environment.d.ts.map +1 -1
  214. package/lib/github/repository-environment.js +5 -4
  215. package/lib/github/repository-environment.js.map +1 -1
  216. package/lib/github/secret.d.ts.map +1 -1
  217. package/lib/github/secret.js +7 -6
  218. package/lib/github/secret.js.map +1 -1
  219. package/lib/index.d.ts +2 -1
  220. package/lib/index.d.ts.map +1 -1
  221. package/lib/index.js +1 -0
  222. package/lib/index.js.map +1 -1
  223. package/lib/neon/project.d.ts.map +1 -1
  224. package/lib/neon/project.js +3 -2
  225. package/lib/neon/project.js.map +1 -1
  226. package/lib/planetscale/api.d.ts +53 -0
  227. package/lib/planetscale/api.d.ts.map +1 -0
  228. package/lib/planetscale/api.js +84 -0
  229. package/lib/planetscale/api.js.map +1 -0
  230. package/lib/planetscale/branch.d.ts +129 -0
  231. package/lib/planetscale/branch.d.ts.map +1 -0
  232. package/lib/planetscale/branch.js +161 -0
  233. package/lib/planetscale/branch.js.map +1 -0
  234. package/lib/planetscale/database.d.ts +143 -0
  235. package/lib/planetscale/database.d.ts.map +1 -0
  236. package/lib/planetscale/database.js +184 -0
  237. package/lib/planetscale/database.js.map +1 -0
  238. package/lib/planetscale/index.d.ts +5 -0
  239. package/lib/planetscale/index.d.ts.map +1 -0
  240. package/lib/planetscale/index.js +5 -0
  241. package/lib/planetscale/index.js.map +1 -0
  242. package/lib/planetscale/utils.d.ts +15 -0
  243. package/lib/planetscale/utils.d.ts.map +1 -0
  244. package/lib/planetscale/utils.js +95 -0
  245. package/lib/planetscale/utils.js.map +1 -0
  246. package/lib/resource.js +7 -1
  247. package/lib/resource.js.map +1 -1
  248. package/lib/runtime/plugin.d.ts.map +1 -1
  249. package/lib/runtime/plugin.js +2 -1
  250. package/lib/runtime/plugin.js.map +1 -1
  251. package/lib/scope.d.ts +13 -2
  252. package/lib/scope.d.ts.map +1 -1
  253. package/lib/scope.js +53 -10
  254. package/lib/scope.js.map +1 -1
  255. package/lib/sentry/client-key.d.ts.map +1 -1
  256. package/lib/sentry/client-key.js +5 -4
  257. package/lib/sentry/client-key.js.map +1 -1
  258. package/lib/sentry/project.d.ts.map +1 -1
  259. package/lib/sentry/project.js +5 -4
  260. package/lib/sentry/project.js.map +1 -1
  261. package/lib/sentry/team.d.ts.map +1 -1
  262. package/lib/sentry/team.js +5 -4
  263. package/lib/sentry/team.js.map +1 -1
  264. package/lib/stripe/card.d.ts.map +1 -1
  265. package/lib/stripe/card.js +2 -1
  266. package/lib/stripe/card.js.map +1 -1
  267. package/lib/stripe/client.d.ts.map +1 -1
  268. package/lib/stripe/client.js +3 -2
  269. package/lib/stripe/client.js.map +1 -1
  270. package/lib/stripe/coupon.d.ts.map +1 -1
  271. package/lib/stripe/coupon.js +2 -1
  272. package/lib/stripe/coupon.js.map +1 -1
  273. package/lib/stripe/customer.d.ts.map +1 -1
  274. package/lib/stripe/customer.js +2 -1
  275. package/lib/stripe/customer.js.map +1 -1
  276. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  277. package/lib/stripe/entitlements-feature.js +2 -1
  278. package/lib/stripe/entitlements-feature.js.map +1 -1
  279. package/lib/stripe/file.d.ts.map +1 -1
  280. package/lib/stripe/file.js +2 -1
  281. package/lib/stripe/file.js.map +1 -1
  282. package/lib/stripe/meter.d.ts.map +1 -1
  283. package/lib/stripe/meter.js +4 -2
  284. package/lib/stripe/meter.js.map +1 -1
  285. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  286. package/lib/stripe/portal-configuration.js +2 -1
  287. package/lib/stripe/portal-configuration.js.map +1 -1
  288. package/lib/stripe/price.d.ts.map +1 -1
  289. package/lib/stripe/price.js +2 -1
  290. package/lib/stripe/price.js.map +1 -1
  291. package/lib/stripe/product-feature.d.ts.map +1 -1
  292. package/lib/stripe/product-feature.js +2 -1
  293. package/lib/stripe/product-feature.js.map +1 -1
  294. package/lib/stripe/product.d.ts.map +1 -1
  295. package/lib/stripe/product.js +2 -1
  296. package/lib/stripe/product.js.map +1 -1
  297. package/lib/stripe/promotion-code.d.ts.map +1 -1
  298. package/lib/stripe/promotion-code.js +2 -1
  299. package/lib/stripe/promotion-code.js.map +1 -1
  300. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  301. package/lib/stripe/shipping-rate.js +2 -1
  302. package/lib/stripe/shipping-rate.js.map +1 -1
  303. package/lib/stripe/tax-rate.d.ts.map +1 -1
  304. package/lib/stripe/tax-rate.js +2 -1
  305. package/lib/stripe/tax-rate.js.map +1 -1
  306. package/lib/stripe/webhook.d.ts.map +1 -1
  307. package/lib/stripe/webhook.js +3 -2
  308. package/lib/stripe/webhook.js.map +1 -1
  309. package/lib/test/bun.d.ts.map +1 -1
  310. package/lib/test/bun.js +6 -1
  311. package/lib/test/bun.js.map +1 -1
  312. package/lib/test/prune.js +7 -1
  313. package/lib/test/prune.js.map +1 -1
  314. package/lib/test/vitest.d.ts.map +1 -1
  315. package/lib/test/vitest.js +2 -0
  316. package/lib/test/vitest.js.map +1 -1
  317. package/lib/upstash/redis.d.ts.map +1 -1
  318. package/lib/upstash/redis.js +2 -1
  319. package/lib/upstash/redis.js.map +1 -1
  320. package/lib/util/async-queue.d.ts +35 -0
  321. package/lib/util/async-queue.d.ts.map +1 -0
  322. package/lib/util/async-queue.js +87 -0
  323. package/lib/util/async-queue.js.map +1 -0
  324. package/lib/util/cli.d.ts +37 -0
  325. package/lib/util/cli.d.ts.map +1 -0
  326. package/lib/util/cli.js +90 -0
  327. package/lib/util/cli.js.map +1 -0
  328. package/lib/util/ignore-matcher.d.ts +94 -0
  329. package/lib/util/ignore-matcher.d.ts.map +1 -0
  330. package/lib/util/ignore-matcher.js +616 -0
  331. package/lib/util/ignore-matcher.js.map +1 -0
  332. package/lib/util/logger.d.ts +3 -0
  333. package/lib/util/logger.d.ts.map +1 -0
  334. package/lib/util/logger.js +15 -0
  335. package/lib/util/logger.js.map +1 -0
  336. package/lib/util/retry.d.ts.map +1 -1
  337. package/lib/util/retry.js +0 -1
  338. package/lib/util/retry.js.map +1 -1
  339. package/lib/util/safe-fetch.d.ts.map +1 -1
  340. package/lib/util/safe-fetch.js +2 -1
  341. package/lib/util/safe-fetch.js.map +1 -1
  342. package/lib/util/telemetry/client.d.ts +32 -0
  343. package/lib/util/telemetry/client.d.ts.map +1 -0
  344. package/lib/util/telemetry/client.js +94 -0
  345. package/lib/util/telemetry/client.js.map +1 -0
  346. package/lib/util/telemetry/constants.d.ts +4 -0
  347. package/lib/util/telemetry/constants.d.ts.map +1 -0
  348. package/lib/util/telemetry/constants.js +8 -0
  349. package/lib/util/telemetry/constants.js.map +1 -0
  350. package/lib/util/telemetry/context.d.ts +15 -0
  351. package/lib/util/telemetry/context.d.ts.map +1 -0
  352. package/lib/util/telemetry/context.js +128 -0
  353. package/lib/util/telemetry/context.js.map +1 -0
  354. package/lib/util/telemetry/index.d.ts +3 -0
  355. package/lib/util/telemetry/index.d.ts.map +1 -0
  356. package/lib/util/telemetry/index.js +3 -0
  357. package/lib/util/telemetry/index.js.map +1 -0
  358. package/lib/util/telemetry/types.d.ts +59 -0
  359. package/lib/util/telemetry/types.d.ts.map +1 -0
  360. package/lib/util/telemetry/types.js +1 -0
  361. package/lib/util/telemetry/types.js.map +1 -0
  362. package/lib/util/xdg-paths.d.ts +9 -0
  363. package/lib/util/xdg-paths.d.ts.map +1 -0
  364. package/lib/util/xdg-paths.js +41 -0
  365. package/lib/util/xdg-paths.js.map +1 -0
  366. package/lib/vercel/project.d.ts.map +1 -1
  367. package/lib/vercel/project.js +2 -1
  368. package/lib/vercel/project.js.map +1 -1
  369. package/lib/web/astro.d.ts.map +1 -1
  370. package/lib/web/astro.js +2 -1
  371. package/lib/web/astro.js.map +1 -1
  372. package/lib/web/shadcn.d.ts.map +1 -1
  373. package/lib/web/shadcn.js +2 -1
  374. package/lib/web/shadcn.js.map +1 -1
  375. package/lib/web/vite.d.ts.map +1 -1
  376. package/lib/web/vite.js +3 -2
  377. package/lib/web/vite.js.map +1 -1
  378. package/lib/web/vitepress/dependencies.d.ts.map +1 -1
  379. package/lib/web/vitepress/dependencies.js +2 -1
  380. package/lib/web/vitepress/dependencies.js.map +1 -1
  381. package/lib/web/vitepress/vitepress.d.ts.map +1 -1
  382. package/lib/web/vitepress/vitepress.js +2 -1
  383. package/lib/web/vitepress/vitepress.js.map +1 -1
  384. package/package.json +7 -5
  385. package/src/ai/astro-file.ts +2 -1
  386. package/src/ai/client.ts +3 -2
  387. package/src/alchemy.ts +28 -3
  388. package/src/apply.ts +66 -5
  389. package/src/aws/control/client.ts +5 -5
  390. package/src/aws/control/properties.ts +48 -0
  391. package/src/aws/control/resource.ts +5 -3
  392. package/src/aws/control/types.ts +3988 -6301
  393. package/src/aws/function.ts +9 -8
  394. package/src/aws/oidc/oidc-provider.ts +3 -2
  395. package/src/aws/queue.ts +3 -2
  396. package/src/aws/role.ts +3 -1
  397. package/src/aws/ssm-parameter.ts +2 -1
  398. package/src/cloudflare/account-api-token.ts +3 -2
  399. package/src/cloudflare/ai-gateway.ts +4 -3
  400. package/src/cloudflare/ai.ts +21 -0
  401. package/src/cloudflare/api-error.ts +36 -0
  402. package/src/cloudflare/api.ts +9 -4
  403. package/src/cloudflare/assets.ts +30 -6
  404. package/src/cloudflare/astro.ts +176 -0
  405. package/src/cloudflare/auth.ts +3 -2
  406. package/src/cloudflare/bindings.ts +27 -0
  407. package/src/cloudflare/bound.ts +31 -17
  408. package/src/cloudflare/bucket.ts +15 -8
  409. package/src/cloudflare/bundle/bundle-worker.ts +2 -1
  410. package/src/cloudflare/bundle/nodejs-compat-mode.ts +2 -1
  411. package/src/cloudflare/custom-domain.ts +10 -9
  412. package/src/cloudflare/d1-database.ts +11 -10
  413. package/src/cloudflare/d1-export.ts +2 -1
  414. package/src/cloudflare/d1-import.ts +2 -1
  415. package/src/cloudflare/d1-migrations.ts +2 -1
  416. package/src/cloudflare/dns-records.ts +5 -4
  417. package/src/cloudflare/do-state-store/worker.ts +4 -0
  418. package/src/cloudflare/email-address.ts +203 -0
  419. package/src/cloudflare/email-catch-all.ts +248 -0
  420. package/src/cloudflare/email-routing.ts +230 -0
  421. package/src/cloudflare/email-rule.ts +322 -0
  422. package/src/cloudflare/hyperdrive.ts +5 -4
  423. package/src/cloudflare/images.ts +59 -0
  424. package/src/cloudflare/index.ts +9 -0
  425. package/src/cloudflare/kv-namespace.ts +2 -1
  426. package/src/cloudflare/pipeline.ts +38 -2
  427. package/src/cloudflare/queue-consumer.ts +2 -1
  428. package/src/cloudflare/queue.ts +0 -12
  429. package/src/cloudflare/route.ts +118 -18
  430. package/src/cloudflare/secret.ts +253 -0
  431. package/src/cloudflare/secrets-store.ts +420 -0
  432. package/src/cloudflare/sveltekit.ts +72 -0
  433. package/src/cloudflare/user.ts +2 -1
  434. package/src/cloudflare/vectorize-index.ts +6 -5
  435. package/src/cloudflare/vectorize-metadata-index.ts +2 -1
  436. package/src/cloudflare/website.ts +76 -66
  437. package/src/cloudflare/worker-assets.ts +95 -77
  438. package/src/cloudflare/worker-metadata.ts +14 -1
  439. package/src/cloudflare/worker.ts +76 -9
  440. package/src/cloudflare/wrangler.json.ts +42 -0
  441. package/src/cloudflare/zone.ts +79 -5
  442. package/src/destroy.ts +35 -17
  443. package/src/dns/godaddy.ts +3 -2
  444. package/src/dns/import-dns.ts +2 -1
  445. package/src/esbuild/bundle.ts +2 -1
  446. package/src/fs/copy-file.ts +2 -1
  447. package/src/fs/file.ts +3 -1
  448. package/src/github/client.ts +11 -10
  449. package/src/github/repository-environment.ts +5 -4
  450. package/src/github/secret.ts +7 -6
  451. package/src/index.ts +2 -1
  452. package/src/neon/project.ts +3 -2
  453. package/src/planetscale/api.ts +115 -0
  454. package/src/planetscale/branch.ts +352 -0
  455. package/src/planetscale/database.ts +394 -0
  456. package/src/planetscale/index.ts +4 -0
  457. package/src/planetscale/utils.ts +189 -0
  458. package/src/resource.ts +7 -1
  459. package/src/runtime/plugin.ts +2 -1
  460. package/src/scope.ts +64 -13
  461. package/src/sentry/client-key.ts +5 -4
  462. package/src/sentry/project.ts +5 -4
  463. package/src/sentry/team.ts +5 -4
  464. package/src/stripe/card.ts +2 -1
  465. package/src/stripe/client.ts +3 -2
  466. package/src/stripe/coupon.ts +2 -1
  467. package/src/stripe/customer.ts +2 -1
  468. package/src/stripe/entitlements-feature.ts +2 -1
  469. package/src/stripe/file.ts +2 -1
  470. package/src/stripe/meter.ts +4 -2
  471. package/src/stripe/portal-configuration.ts +2 -1
  472. package/src/stripe/price.ts +2 -1
  473. package/src/stripe/product-feature.ts +2 -1
  474. package/src/stripe/product.ts +2 -1
  475. package/src/stripe/promotion-code.ts +2 -1
  476. package/src/stripe/shipping-rate.ts +2 -1
  477. package/src/stripe/tax-rate.ts +2 -1
  478. package/src/stripe/webhook.ts +3 -2
  479. package/src/test/bun.ts +6 -1
  480. package/src/test/prune.ts +7 -1
  481. package/src/test/vitest.ts +2 -0
  482. package/src/upstash/redis.ts +2 -1
  483. package/src/util/async-queue.ts +97 -0
  484. package/src/util/cli.tsx +221 -0
  485. package/src/util/ignore-matcher.ts +873 -0
  486. package/src/util/logger.ts +17 -0
  487. package/src/util/retry.ts +0 -1
  488. package/src/util/safe-fetch.ts +2 -1
  489. package/src/util/telemetry/client.ts +127 -0
  490. package/src/util/telemetry/constants.ts +13 -0
  491. package/src/util/telemetry/context.ts +154 -0
  492. package/src/util/telemetry/index.ts +2 -0
  493. package/src/util/telemetry/types.ts +83 -0
  494. package/src/util/xdg-paths.ts +48 -0
  495. package/src/vercel/project.ts +2 -1
  496. package/src/web/astro.ts +2 -1
  497. package/src/web/shadcn.ts +2 -1
  498. package/src/web/vite.ts +3 -2
  499. package/src/web/vitepress/dependencies.ts +2 -1
  500. package/src/web/vitepress/vitepress.ts +2 -1
@@ -1,6 +1,8 @@
1
1
  import { Resource } from "../resource.js";
2
+ import { logger } from "../util/logger.js";
2
3
  import { CloudflareApiError, handleApiError } from "./api-error.js";
3
4
  import { createCloudflareApi, } from "./api.js";
5
+ import { getZoneByDomain } from "./zone.js";
4
6
  /**
5
7
  * Creates and manages Cloudflare Worker Routes.
6
8
  *
@@ -33,31 +35,61 @@ import { createCloudflareApi, } from "./api.js";
33
35
  * zoneId: "your-zone-id"
34
36
  * });
35
37
  *
38
+ * @example
39
+ * // Create a route with automatic zone ID inference
40
+ * // The zone ID will be automatically determined from the domain in the pattern
41
+ * const autoRoute = await Route("auto-route", {
42
+ * pattern: "api.example.com/*", // Zone ID inferred from example.com
43
+ * script: "my-worker"
44
+ * });
45
+ *
46
+ * @example
47
+ * // Works with wildcard patterns too
48
+ * const wildcardRoute = await Route("wildcard-route", {
49
+ * pattern: "*.example.com/api/*", // Zone ID inferred from example.com
50
+ * script: "api-worker"
51
+ * });
52
+ *
36
53
  * @see https://developers.cloudflare.com/workers/configuration/routes/
37
54
  */
38
55
  export const Route = Resource("cloudflare::Route", async function (_id, props) {
39
56
  const api = await createCloudflareApi(props);
40
57
  // Get script name from script prop (either a string or a Worker resource)
41
58
  const scriptName = typeof props.script === "string" ? props.script : props.script.name;
42
- // Get zone ID from props
43
- const { zoneId } = props;
44
59
  if (this.phase === "delete") {
45
- console.log("Deleting Route:", props.pattern);
46
- // Only delete if we have an ID
47
- if (this.output?.id) {
48
- await deleteRoute(api, zoneId, this.output.id);
60
+ logger.log("Deleting Route:", props.pattern);
61
+ // Only delete if we have complete output data (both ID and zoneId)
62
+ // If creation failed, we won't have proper output, so just skip deletion
63
+ if (this.output?.id && this.output?.zoneId) {
64
+ await deleteRoute(api, this.output.zoneId, this.output.id);
49
65
  }
50
66
  // Return void (a deleted route has no content)
51
67
  return this.destroy();
52
68
  }
69
+ // Get or infer zone ID (only needed for create/update phases)
70
+ let zoneId = props.zoneId;
71
+ if (!zoneId) {
72
+ const inferredZoneId = await inferZoneIdFromPattern(props.pattern, {
73
+ accountId: props.accountId,
74
+ apiKey: props.apiKey,
75
+ apiToken: props.apiToken,
76
+ baseUrl: props.baseUrl,
77
+ email: props.email,
78
+ });
79
+ if (!inferredZoneId) {
80
+ throw new Error(`Could not infer zone ID for route pattern "${props.pattern}". ` +
81
+ "Please ensure the domain is managed by Cloudflare or specify an explicit zoneId.");
82
+ }
83
+ zoneId = inferredZoneId;
84
+ }
53
85
  let routeData;
54
86
  if (this.phase === "update" && this.output?.id) {
55
- console.log("Updating Route:", props.pattern);
87
+ logger.log("Updating Route:", props.pattern);
56
88
  // Update existing route
57
89
  routeData = await updateRoute(api, zoneId, this.output.id, props.pattern, scriptName);
58
90
  }
59
91
  else {
60
- console.log("Creating Route:", props.pattern);
92
+ logger.log("Creating Route:", props.pattern);
61
93
  try {
62
94
  // Create new route
63
95
  routeData = await createRoute(api, zoneId, props.pattern, scriptName);
@@ -67,19 +99,14 @@ export const Route = Resource("cloudflare::Route", async function (_id, props) {
67
99
  if (props.adopt &&
68
100
  error instanceof CloudflareApiError &&
69
101
  error.status === 409) {
70
- console.log(`Route with pattern '${props.pattern}' already exists, adopting it`);
102
+ logger.log(`Route with pattern '${props.pattern}' already exists, adopting it`);
71
103
  // Find the existing route by pattern
72
104
  const existingRoute = await findRouteByPattern(api, zoneId, props.pattern);
73
105
  if (!existingRoute) {
74
106
  throw new Error(`Failed to find existing route with pattern '${props.pattern}' for adoption`);
75
107
  }
76
- // Use the existing route data
77
- routeData = {
78
- result: existingRoute,
79
- success: true,
80
- errors: [],
81
- messages: [],
82
- };
108
+ // Update the existing route to point to our script
109
+ routeData = await updateRoute(api, zoneId, existingRoute.id, props.pattern, scriptName);
83
110
  }
84
111
  else {
85
112
  // Re-throw the error if adopt is false or it's not a 409 error
@@ -169,4 +196,45 @@ async function findRouteByPattern(api, zoneId, pattern) {
169
196
  const match = data.result.find((route) => route.pattern === pattern);
170
197
  return match || null;
171
198
  }
199
+ /**
200
+ * Extract domain from a route pattern, similar to wrangler's logic
201
+ * @param pattern The route pattern (e.g., "api.example.com/*", "*.example.com/api/*")
202
+ * @returns The domain part of the pattern
203
+ */
204
+ function extractDomainFromPattern(pattern) {
205
+ // Remove protocol if present
206
+ let domain = pattern.replace(/^https?:\/\//, "");
207
+ // Remove path part (everything after the first '/')
208
+ domain = domain.split("/")[0];
209
+ // Remove port if present
210
+ domain = domain.split(":")[0];
211
+ return domain;
212
+ }
213
+ /**
214
+ * Infer zone ID from a route pattern using Cloudflare API
215
+ * This implements similar logic to wrangler's zone inference
216
+ * @param pattern The route pattern
217
+ * @param apiOptions API options for Cloudflare API calls
218
+ * @returns Promise resolving to zone ID or null if not found
219
+ */
220
+ async function inferZoneIdFromPattern(pattern, apiOptions) {
221
+ const domain = extractDomainFromPattern(pattern);
222
+ // Handle wildcard domains by removing the wildcard part
223
+ const cleanDomain = domain.replace(/^\*\./, "");
224
+ // Try to find zone for the exact domain first
225
+ let zone = await getZoneByDomain(cleanDomain, apiOptions);
226
+ if (zone) {
227
+ return zone.id;
228
+ }
229
+ // If not found, try parent domains (similar to wrangler's logic)
230
+ const domainParts = cleanDomain.split(".");
231
+ for (let i = 1; i < domainParts.length - 1; i++) {
232
+ const parentDomain = domainParts.slice(i).join(".");
233
+ zone = await getZoneByDomain(parentDomain, apiOptions);
234
+ if (zone) {
235
+ return zone.id;
236
+ }
237
+ }
238
+ return null;
239
+ }
172
240
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/cloudflare/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/cloudflare/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ import { Resource } from "../resource.ts";
2
+ import { type Secret as AlchemySecret } from "../secret.ts";
3
+ import { type CloudflareApi, type CloudflareApiOptions } from "./api.ts";
4
+ import type { SecretsStore } from "./secrets-store.ts";
5
+ /**
6
+ * Properties for creating or updating a Secret in a Secrets Store (internal interface)
7
+ */
8
+ interface _SecretProps extends CloudflareApiOptions {
9
+ /**
10
+ * The secrets store to add this secret to
11
+ */
12
+ store: SecretsStore<any>;
13
+ /**
14
+ * The secret value to store (must be an AlchemySecret for security)
15
+ */
16
+ value: AlchemySecret;
17
+ /**
18
+ * Whether to delete the secret.
19
+ * If set to false, the secret will remain but the resource will be removed from state
20
+ *
21
+ * @default true
22
+ */
23
+ delete?: boolean;
24
+ }
25
+ /**
26
+ * Properties for creating or updating a Secret in a Secrets Store (public interface)
27
+ */
28
+ export interface SecretProps extends CloudflareApiOptions {
29
+ /**
30
+ * The secrets store to add this secret to
31
+ */
32
+ store: SecretsStore<any>;
33
+ /**
34
+ * The secret value to store
35
+ * Can be a string or an existing Secret instance
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const secret = await Secret("api-key", {
40
+ * store: mySecretsStore,
41
+ * value: alchemy.secret(process.env.API_KEY)
42
+ * });
43
+ * ```
44
+ */
45
+ value: string | AlchemySecret;
46
+ /**
47
+ * Whether to delete the secret.
48
+ * If set to false, the secret will remain but the resource will be removed from state
49
+ *
50
+ * @default true
51
+ */
52
+ delete?: boolean;
53
+ }
54
+ export declare function isSecret(resource: Resource): resource is Secret;
55
+ export interface Secret extends Resource<"cloudflare::Secret">, Omit<_SecretProps, "delete"> {
56
+ /**
57
+ * The name of the secret
58
+ */
59
+ name: string;
60
+ /**
61
+ * The unique identifier of the secrets store this secret belongs to
62
+ */
63
+ storeId: string;
64
+ /**
65
+ * The secret value (as an alchemy Secret instance)
66
+ */
67
+ value: AlchemySecret;
68
+ /**
69
+ * Timestamp when the secret was created
70
+ */
71
+ createdAt: number;
72
+ /**
73
+ * Timestamp when the secret was last modified
74
+ */
75
+ modifiedAt: number;
76
+ }
77
+ /**
78
+ * A Cloudflare Secret represents an individual secret stored in a Secrets Store.
79
+ *
80
+ * Use this resource to add individual secrets to an existing Secrets Store,
81
+ * providing fine-grained control over secret management.
82
+ *
83
+ * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/subresources/secrets/
84
+ *
85
+ * @example
86
+ * // Create a secrets store first
87
+ * const store = await SecretsStore("my-store", {
88
+ * name: "production-secrets"
89
+ * });
90
+ *
91
+ * // Add individual secrets to the store
92
+ * const apiKey = await Secret("api-key", {
93
+ * store: store,
94
+ * value: alchemy.secret(process.env.API_KEY)
95
+ * });
96
+ *
97
+ * const dbUrl = await Secret("database-url", {
98
+ * store: store,
99
+ * value: process.env.DATABASE_URL
100
+ * });
101
+ *
102
+ * @example
103
+ * // Use in a Worker binding
104
+ * const worker = await Worker("my-worker", {
105
+ * bindings: {
106
+ * SECRETS: store
107
+ * },
108
+ * code: `
109
+ * export default {
110
+ * async fetch(request, env) {
111
+ * const apiKey = await env.SECRETS.get("api-key");
112
+ * const dbUrl = await env.SECRETS.get("database-url");
113
+ * return new Response(\`API: \${apiKey ? "set" : "unset"}\`);
114
+ * }
115
+ * }
116
+ * `
117
+ * });
118
+ *
119
+ * @example
120
+ * // When removing from Alchemy state, keep the secret in Cloudflare
121
+ * const preservedSecret = await Secret("preserve-secret", {
122
+ * store: myStore,
123
+ * value: "preserved-value",
124
+ * delete: false
125
+ * });
126
+ */
127
+ export declare function Secret(name: string, props: SecretProps): Promise<Secret>;
128
+ /**
129
+ * Insert or update a secret in a secrets store
130
+ */
131
+ export declare function insertSecret(api: CloudflareApi, storeId: string, secretName: string, secretValue: AlchemySecret): Promise<void>;
132
+ /**
133
+ * Delete a secret from a secrets store
134
+ */
135
+ export declare function deleteSecret(api: CloudflareApi, storeId: string, secretName: string): Promise<void>;
136
+ export {};
137
+ //# sourceMappingURL=secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../src/cloudflare/secret.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAEL,KAAK,MAAM,IAAI,aAAa,EAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,UAAU,YAAa,SAAQ,oBAAoB;IACjD;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAEzB;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAE9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAE/D;AAED,MAAM,WAAW,MACf,SAAQ,QAAQ,CAAC,oBAAoB,CAAC,EACpC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAqCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,122 @@
1
+ import { Resource, ResourceKind } from "../resource.js";
2
+ import { secret as alchemySecret, } from "../secret.js";
3
+ import { handleApiError } from "./api-error.js";
4
+ import { createCloudflareApi, } from "./api.js";
5
+ export function isSecret(resource) {
6
+ return resource[ResourceKind] === "cloudflare::Secret";
7
+ }
8
+ /**
9
+ * A Cloudflare Secret represents an individual secret stored in a Secrets Store.
10
+ *
11
+ * Use this resource to add individual secrets to an existing Secrets Store,
12
+ * providing fine-grained control over secret management.
13
+ *
14
+ * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/subresources/secrets/
15
+ *
16
+ * @example
17
+ * // Create a secrets store first
18
+ * const store = await SecretsStore("my-store", {
19
+ * name: "production-secrets"
20
+ * });
21
+ *
22
+ * // Add individual secrets to the store
23
+ * const apiKey = await Secret("api-key", {
24
+ * store: store,
25
+ * value: alchemy.secret(process.env.API_KEY)
26
+ * });
27
+ *
28
+ * const dbUrl = await Secret("database-url", {
29
+ * store: store,
30
+ * value: process.env.DATABASE_URL
31
+ * });
32
+ *
33
+ * @example
34
+ * // Use in a Worker binding
35
+ * const worker = await Worker("my-worker", {
36
+ * bindings: {
37
+ * SECRETS: store
38
+ * },
39
+ * code: `
40
+ * export default {
41
+ * async fetch(request, env) {
42
+ * const apiKey = await env.SECRETS.get("api-key");
43
+ * const dbUrl = await env.SECRETS.get("database-url");
44
+ * return new Response(\`API: \${apiKey ? "set" : "unset"}\`);
45
+ * }
46
+ * }
47
+ * `
48
+ * });
49
+ *
50
+ * @example
51
+ * // When removing from Alchemy state, keep the secret in Cloudflare
52
+ * const preservedSecret = await Secret("preserve-secret", {
53
+ * store: myStore,
54
+ * value: "preserved-value",
55
+ * delete: false
56
+ * });
57
+ */
58
+ export async function Secret(name, props) {
59
+ // Convert string value to AlchemySecret if needed to prevent plain text serialization
60
+ const secretValue = typeof props.value === "string" ? alchemySecret(props.value) : props.value;
61
+ // Call the internal resource with secure props
62
+ return _Secret(name, {
63
+ ...props,
64
+ value: secretValue,
65
+ });
66
+ }
67
+ const _Secret = Resource("cloudflare::Secret", async function (name, props) {
68
+ const api = await createCloudflareApi(props);
69
+ if (this.phase === "delete") {
70
+ if (props.delete !== false) {
71
+ await deleteSecret(api, props.store.id, name);
72
+ }
73
+ return this.destroy();
74
+ }
75
+ const createdAt = this.phase === "update"
76
+ ? this.output?.createdAt || Date.now()
77
+ : Date.now();
78
+ // Insert or update the secret
79
+ await insertSecret(api, props.store.id, name, props.value);
80
+ return this({
81
+ name,
82
+ storeId: props.store.id,
83
+ store: props.store,
84
+ value: props.value,
85
+ createdAt,
86
+ modifiedAt: Date.now(),
87
+ });
88
+ });
89
+ /**
90
+ * Insert or update a secret in a secrets store
91
+ */
92
+ export async function insertSecret(api, storeId, secretName, secretValue) {
93
+ const response = await api.post(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, [
94
+ {
95
+ name: secretName,
96
+ value: secretValue.unencrypted,
97
+ scopes: [],
98
+ },
99
+ ]);
100
+ if (!response.ok) {
101
+ const errorData = await response.json().catch(() => ({
102
+ errors: [{ message: response.statusText }],
103
+ }));
104
+ const errorMessage = errorData.errors?.[0]?.message || response.statusText;
105
+ throw new Error(`Error creating secret '${secretName}': ${errorMessage}`);
106
+ }
107
+ }
108
+ /**
109
+ * Delete a secret from a secrets store
110
+ */
111
+ export async function deleteSecret(api, storeId, secretName) {
112
+ const response = await api.delete(`/accounts/${api.accountId}/secrets_store/stores/${storeId}/secrets`, {
113
+ body: JSON.stringify([secretName]),
114
+ headers: {
115
+ "Content-Type": "application/json",
116
+ },
117
+ });
118
+ if (!response.ok && response.status !== 404) {
119
+ await handleApiError(response, "delete", "secret", secretName);
120
+ }
121
+ }
122
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/cloudflare/secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { Resource } from "../resource.ts";
2
+ import { type Secret } from "../secret.ts";
3
+ import { type CloudflareApi, type CloudflareApiOptions } from "./api.ts";
4
+ import type { Bound } from "./bound.ts";
5
+ /**
6
+ * Properties for creating or updating a Secrets Store
7
+ */
8
+ export interface SecretsStoreProps<S extends Record<string, Secret> | undefined = undefined> extends CloudflareApiOptions {
9
+ /**
10
+ * Name of the secrets store
11
+ *
12
+ * @default id
13
+ */
14
+ name?: string;
15
+ /**
16
+ * Secrets to store in the secrets store
17
+ * Maps secret names to secret values (string) or Secret instances
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const store = await SecretsStore("my-store", {
22
+ * secrets: {
23
+ * API_KEY: "my-api-key-value",
24
+ * DATABASE_URL: alchemy.secret(process.env.DATABASE_URL)
25
+ * }
26
+ * });
27
+ * ```
28
+ */
29
+ secrets?: {
30
+ [K in keyof S]: string | Secret;
31
+ };
32
+ /**
33
+ * Whether to adopt an existing store with the same name if it exists
34
+ * If true and a store with the same name exists, it will be adopted rather than creating a new one
35
+ *
36
+ * @default false
37
+ */
38
+ adopt?: boolean;
39
+ /**
40
+ * Whether to delete the store.
41
+ * If set to false, the store will remain but the resource will be removed from state
42
+ *
43
+ * @default true
44
+ */
45
+ delete?: boolean;
46
+ }
47
+ export declare function isSecretsStore(resource: Resource): resource is SecretsStore<any>;
48
+ export interface SecretsStore<S extends Record<string, Secret> | undefined = undefined> extends Resource<"cloudflare::SecretsStore">, Omit<SecretsStoreProps<S>, "delete"> {
49
+ /**
50
+ * The binding type for Cloudflare Workers
51
+ */
52
+ type: "secrets_store";
53
+ /**
54
+ * The unique identifier of the secrets store
55
+ */
56
+ id: string;
57
+ /**
58
+ * The name of the secrets store
59
+ */
60
+ name: string;
61
+ /**
62
+ * The secrets stored in this secrets store
63
+ * Maps secret names to Secret instances created with alchemy.secret()
64
+ */
65
+ secrets?: S;
66
+ /**
67
+ * Timestamp when the secrets store was created
68
+ */
69
+ createdAt: number;
70
+ /**
71
+ * Timestamp when the secrets store was last modified
72
+ */
73
+ modifiedAt: number;
74
+ }
75
+ export type SecretsStoreWithBinding<S extends Record<string, Secret> | undefined = undefined> = SecretsStore<S> & Bound<SecretsStore<S>>;
76
+ /**
77
+ * A Cloudflare Secrets Store is a secure, centralized location for storing account-level secrets.
78
+ *
79
+ * @see https://developers.cloudflare.com/secrets-store/
80
+ *
81
+ * @example
82
+ * // Create a basic secrets store
83
+ * const store = await SecretsStore("my-secrets", {
84
+ * name: "production-secrets"
85
+ * });
86
+ *
87
+ * @example
88
+ * // Create a secrets store with initial secrets
89
+ * const store = await SecretsStore("my-secrets", {
90
+ * name: "production-secrets",
91
+ * secrets: {
92
+ * API_KEY: alchemy.secret(process.env.API_KEY),
93
+ * DATABASE_URL: alchemy.secret(process.env.DATABASE_URL),
94
+ * JWT_SECRET: alchemy.secret(process.env.JWT_SECRET)
95
+ * }
96
+ * });
97
+ *
98
+ * @example
99
+ * // Adopt an existing store if it already exists
100
+ * const existingStore = await SecretsStore("existing-store", {
101
+ * name: "existing-secrets-store",
102
+ * adopt: true,
103
+ * secrets: {
104
+ * NEW_SECRET: alchemy.secret("new-value")
105
+ * }
106
+ * });
107
+ *
108
+ * @example
109
+ * // When removing from Alchemy state, keep the store in Cloudflare
110
+ * const preservedStore = await SecretsStore("preserve-store", {
111
+ * name: "preserved-secrets-store",
112
+ * delete: false
113
+ * });
114
+ *
115
+ * @example
116
+ * // Use in a Worker binding to access secrets
117
+ * const worker = await Worker("my-worker", {
118
+ * bindings: {
119
+ * SECRETS: store
120
+ * },
121
+ * code: `
122
+ * export default {
123
+ * async fetch(request, env) {
124
+ * const apiKey = await env.SECRETS.get("API_KEY");
125
+ * return new Response(apiKey ? "Secret found" : "No secret");
126
+ * }
127
+ * }
128
+ * `
129
+ * });
130
+ */
131
+ export declare function SecretsStore<const S extends Record<string, Secret> | undefined = undefined>(name: string, props?: SecretsStoreProps<S>): Promise<SecretsStoreWithBinding<S>>;
132
+ export declare function createSecretsStore<S extends Record<string, Secret> | undefined = undefined>(api: CloudflareApi, props: SecretsStoreProps<S> & {
133
+ name: string;
134
+ }): Promise<{
135
+ id: string;
136
+ }>;
137
+ export declare function deleteSecretsStore(api: CloudflareApi, storeId: string): Promise<void>;
138
+ export declare function findSecretsStoreByName(api: CloudflareApi, name: string): Promise<{
139
+ id: string;
140
+ createdAt?: number;
141
+ } | null>;
142
+ export declare function insertSecrets<S extends Record<string, Secret> | undefined = undefined>(api: CloudflareApi, storeId: string, props: SecretsStoreProps<S>): Promise<void>;
143
+ export declare function deleteSecrets(api: CloudflareApi, storeId: string, secretNames: string[]): Promise<void>;
144
+ export declare function listSecrets(api: CloudflareApi, storeId: string): Promise<string[]>;
145
+ //# sourceMappingURL=secrets-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-store.d.ts","sourceRoot":"","sources":["../../src/cloudflare/secrets-store.ts"],"names":[],"mappings":"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"}