alchemy 0.24.0 → 0.25.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 (184) hide show
  1. package/lib/aws/control/client.js +1 -1
  2. package/lib/aws/control/client.js.map +1 -1
  3. package/lib/aws/control/resource.d.ts.map +1 -1
  4. package/lib/aws/control/resource.js +2 -1
  5. package/lib/aws/control/resource.js.map +1 -1
  6. package/lib/aws/function.d.ts.map +1 -1
  7. package/lib/aws/function.js +1 -4
  8. package/lib/aws/function.js.map +1 -1
  9. package/lib/cloudflare/ai.d.ts +21 -0
  10. package/lib/cloudflare/ai.d.ts.map +1 -1
  11. package/lib/cloudflare/ai.js +21 -0
  12. package/lib/cloudflare/ai.js.map +1 -1
  13. package/lib/cloudflare/bindings.d.ts +3 -3
  14. package/lib/cloudflare/bindings.d.ts.map +1 -1
  15. package/lib/cloudflare/bindings.js.map +1 -1
  16. package/lib/cloudflare/bound.d.ts +3 -3
  17. package/lib/cloudflare/bound.d.ts.map +1 -1
  18. package/lib/cloudflare/do-state-store/index.d.ts +2 -0
  19. package/lib/cloudflare/do-state-store/index.d.ts.map +1 -0
  20. package/lib/cloudflare/do-state-store/index.js +2 -0
  21. package/lib/cloudflare/do-state-store/index.js.map +1 -0
  22. package/lib/cloudflare/do-state-store/internal.d.ts +19 -0
  23. package/lib/cloudflare/do-state-store/internal.d.ts.map +1 -0
  24. package/lib/cloudflare/do-state-store/internal.js +163 -0
  25. package/lib/cloudflare/do-state-store/internal.js.map +1 -0
  26. package/lib/cloudflare/do-state-store/store.d.ts +59 -0
  27. package/lib/cloudflare/do-state-store/store.d.ts.map +1 -0
  28. package/lib/cloudflare/do-state-store/store.js +120 -0
  29. package/lib/cloudflare/do-state-store/store.js.map +1 -0
  30. package/lib/cloudflare/do-state-store/types.d.ts +82 -0
  31. package/lib/cloudflare/do-state-store/types.d.ts.map +1 -0
  32. package/lib/cloudflare/do-state-store/types.js +1 -0
  33. package/lib/cloudflare/do-state-store/types.js.map +1 -0
  34. package/lib/cloudflare/do-state-store/worker.d.ts +27 -0
  35. package/lib/cloudflare/do-state-store/worker.d.ts.map +1 -0
  36. package/lib/cloudflare/do-state-store/worker.js +170 -0
  37. package/lib/cloudflare/do-state-store/worker.js.map +1 -0
  38. package/lib/cloudflare/index.d.ts +1 -0
  39. package/lib/cloudflare/index.d.ts.map +1 -1
  40. package/lib/cloudflare/index.js +1 -0
  41. package/lib/cloudflare/index.js.map +1 -1
  42. package/lib/cloudflare/pipeline.js +1 -1
  43. package/lib/cloudflare/pipeline.js.map +1 -1
  44. package/lib/cloudflare/queue-consumer.d.ts +14 -1
  45. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  46. package/lib/cloudflare/queue-consumer.js +17 -0
  47. package/lib/cloudflare/queue-consumer.js.map +1 -1
  48. package/lib/cloudflare/website.d.ts +30 -1
  49. package/lib/cloudflare/website.d.ts.map +1 -1
  50. package/lib/cloudflare/website.js +8 -5
  51. package/lib/cloudflare/website.js.map +1 -1
  52. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  53. package/lib/cloudflare/worker-assets.js +13 -3
  54. package/lib/cloudflare/worker-assets.js.map +1 -1
  55. package/lib/cloudflare/worker-metadata.js +1 -1
  56. package/lib/cloudflare/worker-metadata.js.map +1 -1
  57. package/lib/cloudflare/worker.d.ts +40 -1
  58. package/lib/cloudflare/worker.d.ts.map +1 -1
  59. package/lib/cloudflare/worker.js +40 -38
  60. package/lib/cloudflare/worker.js.map +1 -1
  61. package/lib/cloudflare/wrangler.json.js +1 -1
  62. package/lib/cloudflare/wrangler.json.js.map +1 -1
  63. package/lib/cloudflare/zone.d.ts +30 -2
  64. package/lib/cloudflare/zone.d.ts.map +1 -1
  65. package/lib/cloudflare/zone.js +53 -0
  66. package/lib/cloudflare/zone.js.map +1 -1
  67. package/lib/fs/file-system-state-store.d.ts +3 -1
  68. package/lib/fs/file-system-state-store.d.ts.map +1 -1
  69. package/lib/fs/file-system-state-store.js +2 -2
  70. package/lib/fs/file-system-state-store.js.map +1 -1
  71. package/lib/stripe/card.d.ts +171 -0
  72. package/lib/stripe/card.d.ts.map +1 -0
  73. package/lib/stripe/card.js +148 -0
  74. package/lib/stripe/card.js.map +1 -0
  75. package/lib/stripe/client.d.ts +9 -0
  76. package/lib/stripe/client.d.ts.map +1 -0
  77. package/lib/stripe/client.js +94 -0
  78. package/lib/stripe/client.js.map +1 -0
  79. package/lib/stripe/coupon.d.ts +135 -0
  80. package/lib/stripe/coupon.d.ts.map +1 -0
  81. package/lib/stripe/coupon.js +161 -0
  82. package/lib/stripe/coupon.js.map +1 -0
  83. package/lib/stripe/customer.d.ts +269 -0
  84. package/lib/stripe/customer.d.ts.map +1 -0
  85. package/lib/stripe/customer.js +289 -0
  86. package/lib/stripe/customer.js.map +1 -0
  87. package/lib/stripe/entitlements-feature.d.ts +84 -0
  88. package/lib/stripe/entitlements-feature.d.ts.map +1 -0
  89. package/lib/stripe/entitlements-feature.js +102 -0
  90. package/lib/stripe/entitlements-feature.js.map +1 -0
  91. package/lib/stripe/file.d.ts +143 -0
  92. package/lib/stripe/file.d.ts.map +1 -0
  93. package/lib/stripe/file.js +97 -0
  94. package/lib/stripe/file.js.map +1 -0
  95. package/lib/stripe/index.d.ts +11 -0
  96. package/lib/stripe/index.d.ts.map +1 -1
  97. package/lib/stripe/index.js +11 -0
  98. package/lib/stripe/index.js.map +1 -1
  99. package/lib/stripe/meter.d.ts +10 -1
  100. package/lib/stripe/meter.d.ts.map +1 -1
  101. package/lib/stripe/meter.js +13 -7
  102. package/lib/stripe/meter.js.map +1 -1
  103. package/lib/stripe/portal-configuration.d.ts +286 -0
  104. package/lib/stripe/portal-configuration.d.ts.map +1 -0
  105. package/lib/stripe/portal-configuration.js +320 -0
  106. package/lib/stripe/portal-configuration.js.map +1 -0
  107. package/lib/stripe/price.d.ts +10 -1
  108. package/lib/stripe/price.d.ts.map +1 -1
  109. package/lib/stripe/price.js +34 -13
  110. package/lib/stripe/price.js.map +1 -1
  111. package/lib/stripe/product-feature.d.ts +76 -0
  112. package/lib/stripe/product-feature.d.ts.map +1 -0
  113. package/lib/stripe/product-feature.js +74 -0
  114. package/lib/stripe/product-feature.js.map +1 -0
  115. package/lib/stripe/product.d.ts +10 -1
  116. package/lib/stripe/product.d.ts.map +1 -1
  117. package/lib/stripe/product.js +33 -14
  118. package/lib/stripe/product.js.map +1 -1
  119. package/lib/stripe/promotion-code.d.ts +138 -0
  120. package/lib/stripe/promotion-code.d.ts.map +1 -0
  121. package/lib/stripe/promotion-code.js +150 -0
  122. package/lib/stripe/promotion-code.js.map +1 -0
  123. package/lib/stripe/shipping-rate.d.ts +188 -0
  124. package/lib/stripe/shipping-rate.d.ts.map +1 -0
  125. package/lib/stripe/shipping-rate.js +198 -0
  126. package/lib/stripe/shipping-rate.js.map +1 -0
  127. package/lib/stripe/tax-rate.d.ts +130 -0
  128. package/lib/stripe/tax-rate.d.ts.map +1 -0
  129. package/lib/stripe/tax-rate.js +126 -0
  130. package/lib/stripe/tax-rate.js.map +1 -0
  131. package/lib/stripe/webhook.d.ts +10 -1
  132. package/lib/stripe/webhook.d.ts.map +1 -1
  133. package/lib/stripe/webhook.js +59 -14
  134. package/lib/stripe/webhook.js.map +1 -1
  135. package/lib/test/bun.d.ts.map +1 -1
  136. package/lib/test/bun.js +2 -6
  137. package/lib/test/bun.js.map +1 -1
  138. package/lib/test/vitest.d.ts.map +1 -1
  139. package/lib/test/vitest.js +3 -7
  140. package/lib/test/vitest.js.map +1 -1
  141. package/lib/util/retry.d.ts +1 -1
  142. package/lib/util/retry.d.ts.map +1 -1
  143. package/lib/util/retry.js.map +1 -1
  144. package/package.json +3 -2
  145. package/src/aws/control/client.ts +1 -1
  146. package/src/aws/control/resource.ts +2 -1
  147. package/src/aws/function.ts +3 -6
  148. package/src/cloudflare/ai.ts +21 -0
  149. package/src/cloudflare/bindings.ts +3 -2
  150. package/src/cloudflare/bound.ts +3 -3
  151. package/src/cloudflare/do-state-store/index.ts +1 -0
  152. package/src/cloudflare/do-state-store/internal.ts +215 -0
  153. package/src/cloudflare/do-state-store/store.ts +188 -0
  154. package/src/cloudflare/do-state-store/types.ts +74 -0
  155. package/src/cloudflare/do-state-store/worker.ts +199 -0
  156. package/src/cloudflare/index.ts +1 -0
  157. package/src/cloudflare/pipeline.ts +1 -1
  158. package/src/cloudflare/queue-consumer.ts +59 -1
  159. package/src/cloudflare/website.ts +38 -6
  160. package/src/cloudflare/worker-assets.ts +15 -3
  161. package/src/cloudflare/worker-metadata.ts +1 -1
  162. package/src/cloudflare/worker.ts +66 -46
  163. package/src/cloudflare/wrangler.json.ts +1 -1
  164. package/src/cloudflare/zone.ts +75 -2
  165. package/src/fs/file-system-state-store.ts +7 -2
  166. package/src/stripe/card.ts +320 -0
  167. package/src/stripe/client.ts +145 -0
  168. package/src/stripe/coupon.ts +280 -0
  169. package/src/stripe/customer.ts +528 -0
  170. package/src/stripe/entitlements-feature.ts +169 -0
  171. package/src/stripe/file.ts +219 -0
  172. package/src/stripe/index.ts +11 -0
  173. package/src/stripe/meter.ts +23 -7
  174. package/src/stripe/portal-configuration.ts +609 -0
  175. package/src/stripe/price.ts +47 -14
  176. package/src/stripe/product-feature.ts +150 -0
  177. package/src/stripe/product.ts +48 -15
  178. package/src/stripe/promotion-code.ts +268 -0
  179. package/src/stripe/shipping-rate.ts +362 -0
  180. package/src/stripe/tax-rate.ts +218 -0
  181. package/src/stripe/webhook.ts +82 -15
  182. package/src/test/bun.ts +2 -7
  183. package/src/test/vitest.ts +3 -8
  184. package/src/util/retry.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAYpC;;GAEG;AACH,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAuEpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,IAAI,CAAC,IAAgB,EAAE,cAA4B;IACjE,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;IACtC,IACE,cAAc,CAAC,UAAU,KAAK,SAAS;QACvC,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,YAAY,EAChD,CAAC;QACD,cAAc,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CACpC,IAAI,gBAAgB,CAAC,KAAK,EAAE;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACnC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAuB;SAChD,CAAC,CAAC;IACP,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEjC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,SAAS,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACvG,2BAA2B;QAC3B,UAAU,EAAE,cAAc,EAAE,UAAU;QACtC,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,GAAG,CAAC,EAAmC,EAAE,EAAE;QACvD,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAmC,EAAE,EAAE;QACtD,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,OAAO,IAAY,CAAC;IAEpB,SAAS,IAAI,CACX,GAAG,IAMoD;QAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ;YACvC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAY;YACnC,CAAC,CAAC,MAAM,CAAC;QACb,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE,CAC1B,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAC5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAChC,CACF;YACH,CAAC,CAAC,EAAE,CAAC;QAET,8BAA8B;QAC9B,MAAM,OAAO,GAAgB;YAC3B,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,eAAe;YACzB,GAAG,MAAM,CAAC,cAAc,CAAC;YACzB,GAAG,MAAM,CAAC,QAAQ,CAAC;SACpB,CAAC;QAEF,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;QAE9D,OAAO,EAAE,CACP,QAAQ,EACR,GAAG,EAAE,CACH,OAAO,CAAC,GAAG,CACT,QAAQ,EACR;YACE,GAAG,OAAO;YACV,MAAM,EAAE,KAAK;SACd,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC,CACF,EACH,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,OAAO;QACf,IAAI,EAAE,OAAO,IAAI,CAAC;KACnB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,IAAI,GAAG;IACV;;;;;OAKG;IACH,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3E;;;;;;OAMG;IACH,CACE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAAC;IAER;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAErD,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CA6FzE"}
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,OAAO;QACf,IAAI,EAAE,OAAO,IAAI,CAAC;KACnB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,IAAI,GAAG;IACV;;;;;OAKG;IACH,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3E;;;;;;OAMG;IACH,CACE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAAC;IAER;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAErD,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CAwFzE"}
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { afterAll, beforeAll, it } from "vitest";
3
3
  import { alchemy } from "../alchemy.js";
4
- import { R2RestStateStore } from "../cloudflare/r2-rest-state-store.js";
4
+ import { DOStateStore } from "../cloudflare/index.js";
5
5
  import { Scope } from "../scope.js";
6
6
  /**
7
7
  * Add test functionality to alchemy instance
@@ -36,11 +36,7 @@ export function test(meta, defaultOptions) {
36
36
  defaultOptions = defaultOptions ?? {};
37
37
  if (defaultOptions.stateStore === undefined &&
38
38
  process.env.ALCHEMY_STATE_STORE === "cloudflare") {
39
- defaultOptions.stateStore = (scope) => new R2RestStateStore(scope, {
40
- apiKey: alchemy.secret(process.env.CLOUDFLARE_API_KEY),
41
- email: process.env.CLOUDFLARE_EMAIL,
42
- bucketName: process.env.CLOUDFLARE_BUCKET_NAME,
43
- });
39
+ defaultOptions.stateStore = (scope) => new DOStateStore(scope);
44
40
  }
45
41
  test.skipIf = (condition) => {
46
42
  if (condition) {
@@ -79,7 +75,7 @@ export function test(meta, defaultOptions) {
79
75
  return it(testName, (ctx) => {
80
76
  // Get the current describe block name from the test context
81
77
  let describeBlockName = "";
82
- if (ctx.task.suite?.name) {
78
+ if (ctx?.task?.suite?.name) {
83
79
  describeBlockName = `${ctx.task.suite.name}/`;
84
80
  }
85
81
  return alchemy.run(`${describeBlockName}${testName}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@
9
9
  * @returns Result of the operation
10
10
  * @throws The last error encountered if all retries fail
11
11
  */
12
- export declare function withExponentialBackoff<T>(operation: () => Promise<T>, isRetryable: (error: any) => boolean, maxAttempts?: number, initialDelayMs?: number): Promise<T>;
12
+ export declare function withExponentialBackoff<T>(operation: () => Promise<T>, isRetryable: (error: any) => any, maxAttempts?: number, initialDelayMs?: number): Promise<T>;
13
13
  //# sourceMappingURL=retry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,EACpC,WAAW,SAAI,EACf,cAAc,SAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,EAChC,WAAW,SAAI,EACf,cAAc,SAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2B,EAC3B,WAAoC,EACpC,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,GAAG;IAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,cAAc,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC,CAAC,oCAAoC;YAChD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;QACtD,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/util/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2B,EAC3B,WAAgC,EAChC,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,GAAG;IAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,cAAc,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC,CAAC,oCAAoC;YAChD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;QACtD,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.24.0",
3
+ "version": "0.25.0",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "license": "Apache-2.0",
@@ -124,7 +124,7 @@
124
124
  "@aws-sdk/client-ssm": "^3.0.0",
125
125
  "@aws-sdk/client-sts": "^3.0.0",
126
126
  "@aws-sdk/credential-providers": "^3.0.0",
127
- "@aws-sdk/node-config-provider": "^3.374.0",
127
+ "@smithy/node-config-provider": "^4.0.0",
128
128
  "@cloudflare/unenv-preset": "^2.3.1",
129
129
  "@cloudflare/workers-shared": "^0.17.5",
130
130
  "@iarna/toml": "^2.2.5",
@@ -135,6 +135,7 @@
135
135
  "aws4fetch": "^1.0.20",
136
136
  "cloudflare": "^4.0.0",
137
137
  "diff": "^7.0.0",
138
+ "dofs": "^0.0.1",
138
139
  "esbuild": "^0.25.1",
139
140
  "fast-json-patch": "^3.1.1",
140
141
  "glob": "^10.0.0",
@@ -1,5 +1,5 @@
1
1
  import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
2
- import { loadConfig } from "@aws-sdk/node-config-provider";
2
+ import { loadConfig } from "@smithy/node-config-provider";
3
3
  import { AwsClient } from "aws4fetch";
4
4
 
5
5
  import { safeFetch } from "../../util/safe-fetch.ts";
@@ -1,4 +1,5 @@
1
- import { compare } from "fast-json-patch";
1
+ import jsonpatch from "fast-json-patch";
2
+ const compare = jsonpatch.compare;
2
3
  import type { Context } from "../../context.ts";
3
4
  import {
4
5
  registerDynamicResource,
@@ -312,8 +312,6 @@ export const Function = Resource(
312
312
  const client = new LambdaClient({});
313
313
  const region = await resolveRegion(client);
314
314
 
315
- const code = await zipCode(props);
316
-
317
315
  if (this.phase === "delete") {
318
316
  // Delete function URL if it exists
319
317
  if (this.output?.url) {
@@ -344,6 +342,9 @@ export const Function = Resource(
344
342
 
345
343
  return this.destroy();
346
344
  }
345
+
346
+ const code = await zipCode(props);
347
+
347
348
  let functionUrl: string | undefined;
348
349
  try {
349
350
  // Check if function exists
@@ -795,10 +796,6 @@ async function zipCode(props: FunctionProps): Promise<Buffer> {
795
796
  parseFile(props.handler) +
796
797
  (props.bundle.format === "cjs" ? ".cjs" : ".mjs");
797
798
 
798
- if (!fileContent || fileContent.length === 0) {
799
- throw new Error("Bundle content is empty");
800
- }
801
-
802
799
  // Create a zip buffer in memory
803
800
  const zip = new (await import("jszip")).default();
804
801
  zip.file(fileName, fileContent);
@@ -1,4 +1,25 @@
1
1
  /**
2
+ * Cloudflare Workers AI binding for running machine learning models.
3
+ *
4
+ * The AI binding provides access to Cloudflare's Workers AI platform, allowing you to run
5
+ * inference on various AI models including text generation, image classification, embeddings,
6
+ * and more directly from your Workers.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { Worker, Ai } from "alchemy/cloudflare";
11
+ *
12
+ * const ai = new Ai();
13
+ *
14
+ * await Worker("my-worker", {
15
+ * name: "my-worker",
16
+ * entrypoint: "./src/worker.ts",
17
+ * bindings: {
18
+ * AI: ai
19
+ * }
20
+ * });
21
+ * ```
22
+ *
2
23
  * @see https://developers.cloudflare.com/workers-ai/
3
24
  */
4
25
  export class Ai<Models extends AiModelListType = AiModelListType> {
@@ -18,10 +18,10 @@ import type { KVNamespaceResource } from "./kv-namespace.ts";
18
18
  import type { PipelineResource } from "./pipeline.ts";
19
19
  import type { QueueResource } from "./queue.ts";
20
20
  import type { VectorizeIndexResource } from "./vectorize-index.ts";
21
+ import type { VersionMetadata } from "./version-metadata.ts";
21
22
  import type { WorkerStub } from "./worker-stub.ts";
22
- import type { Worker } from "./worker.ts";
23
+ import type { Worker, WorkerRef } from "./worker.ts";
23
24
  import type { Workflow } from "./workflow.ts";
24
- import type { VersionMetadata } from "./version-metadata.ts";
25
25
 
26
26
  export type Bindings = {
27
27
  [bindingName: string]: Binding;
@@ -57,6 +57,7 @@ export type Binding =
57
57
  | VectorizeIndexResource
58
58
  | Worker
59
59
  | WorkerStub
60
+ | WorkerRef
60
61
  | Workflow
61
62
  | BrowserRendering
62
63
  | VersionMetadata
@@ -13,9 +13,9 @@ import type { HyperdriveResource as _Hyperdrive } from "./hyperdrive.ts";
13
13
  import type { PipelineResource as _Pipeline } from "./pipeline.ts";
14
14
  import type { QueueResource as _Queue } from "./queue.ts";
15
15
  import type { VectorizeIndexResource as _VectorizeIndex } from "./vectorize-index.ts";
16
- import type { Worker as _Worker } from "./worker.ts";
17
- import type { Workflow as _Workflow } from "./workflow.ts";
18
16
  import type { VersionMetadata as _VersionMetadata } from "./version-metadata.ts";
17
+ import type { Worker as _Worker, WorkerRef } from "./worker.ts";
18
+ import type { Workflow as _Workflow } from "./workflow.ts";
19
19
 
20
20
  export type Bound<T extends Binding> = T extends _DurableObjectNamespace<
21
21
  infer O
@@ -23,7 +23,7 @@ export type Bound<T extends Binding> = T extends _DurableObjectNamespace<
23
23
  ? DurableObjectNamespace<O>
24
24
  : T extends { type: "kv_namespace" }
25
25
  ? KVNamespace
26
- : T extends _Worker<any, infer RPC>
26
+ : T extends _Worker<any, infer RPC> | WorkerRef<infer RPC>
27
27
  ? Service<RPC> & {
28
28
  // cloudflare's Rpc.Provider type loses mapping between properties (jump to definition)
29
29
  // we fix that using Pick to re-connect mappings
@@ -0,0 +1 @@
1
+ export * from "./store.ts";
@@ -0,0 +1,215 @@
1
+ import path from "node:path";
2
+ import { bundle } from "../../esbuild/index.ts";
3
+ import { withExponentialBackoff } from "../../util/retry.ts";
4
+ import { handleApiError } from "../api-error.ts";
5
+ import type { CloudflareApi } from "../api.ts";
6
+ import { putWorker } from "../worker.ts";
7
+ import type { DOStateStoreAPI } from "./types.ts";
8
+
9
+ interface DOStateStoreClientOptions {
10
+ app: string;
11
+ stage: string;
12
+ url: string;
13
+ token: string;
14
+ }
15
+
16
+ class StateStoreError extends Error {
17
+ constructor(
18
+ message: string,
19
+ readonly retryable: boolean,
20
+ ) {
21
+ super(message);
22
+ }
23
+ }
24
+
25
+ export class DOStateStoreClient {
26
+ constructor(private readonly options: DOStateStoreClientOptions) {}
27
+
28
+ async rpc<T extends keyof DOStateStoreAPI.API>(
29
+ method: T,
30
+ params: DOStateStoreAPI.API[T]["params"],
31
+ ): Promise<DOStateStoreAPI.API[T]["result"]> {
32
+ return await withExponentialBackoff(
33
+ async () => {
34
+ const res = await this.fetch("/rpc", {
35
+ method: "POST",
36
+ headers: {
37
+ Accept: "application/json",
38
+ "Content-Type": "application/json",
39
+ },
40
+ body: JSON.stringify({
41
+ method,
42
+ params,
43
+ }),
44
+ });
45
+ if (!res.headers.get("Content-Type")?.includes("application/json")) {
46
+ throw new StateStoreError(
47
+ `Unexpected response of type "${res.headers.get("Content-Type")}" from state store: ${res.status} ${res.statusText} ${await res.text()}`,
48
+ true,
49
+ );
50
+ }
51
+ const body = await res.json<DOStateStoreAPI.Response>();
52
+ if (!body.success) {
53
+ throw new StateStoreError(
54
+ `State store "${method}" request failed with status ${res.status}: ${body.error}`,
55
+ res.status >= 500,
56
+ );
57
+ }
58
+ return body.result;
59
+ },
60
+ (error) => {
61
+ if (error instanceof StateStoreError) {
62
+ return error.retryable;
63
+ }
64
+ return true;
65
+ },
66
+ 5,
67
+ 500,
68
+ );
69
+ }
70
+
71
+ async validate(): Promise<Response> {
72
+ return await this.fetch("/rpc", {
73
+ method: "POST",
74
+ headers: {
75
+ Accept: "application/json",
76
+ "Content-Type": "application/json",
77
+ },
78
+ body: JSON.stringify({
79
+ method: "validate",
80
+ params: null,
81
+ }),
82
+ });
83
+ }
84
+
85
+ async fetch(path: string, init: RequestInit = {}): Promise<Response> {
86
+ const url = new URL(path, this.options.url);
87
+ url.searchParams.set("app", this.options.app);
88
+ url.searchParams.set("stage", this.options.stage);
89
+ return await fetch(url, {
90
+ ...init,
91
+ headers: {
92
+ Authorization: `Bearer ${this.options.token}`,
93
+ ...init.headers,
94
+ },
95
+ });
96
+ }
97
+ }
98
+
99
+ const TAG = "alchemy-state-store:2025-06-03";
100
+
101
+ const cache = new Map<string, string>();
102
+
103
+ export async function upsertStateStoreWorker(
104
+ api: CloudflareApi,
105
+ workerName: string,
106
+ token: string,
107
+ ) {
108
+ const key = `worker:${workerName}`;
109
+ const cached = cache.get(key);
110
+ if (cached === TAG) {
111
+ return;
112
+ }
113
+ const { found, tag } = await getWorkerStatus(api, workerName);
114
+ if (found && tag === TAG) {
115
+ cache.set(key, TAG);
116
+ return;
117
+ }
118
+ const script = await bundleWorkerScript();
119
+ await putWorker(api, workerName, script, {
120
+ main_module: "worker.js",
121
+ compatibility_date: "2025-06-01",
122
+ compatibility_flags: ["nodejs_compat"],
123
+ bindings: [
124
+ {
125
+ name: "DOFS_STATE_STORE",
126
+ type: "durable_object_namespace",
127
+ class_name: "DOFSStateStore",
128
+ },
129
+ {
130
+ name: "DOFS_TOKEN",
131
+ type: "secret_text",
132
+ text: token,
133
+ },
134
+ ],
135
+ migrations: !found
136
+ ? {
137
+ new_sqlite_classes: ["DOFSStateStore"],
138
+ }
139
+ : undefined,
140
+ tags: [TAG],
141
+ observability: {
142
+ enabled: true,
143
+ },
144
+ });
145
+ const subdomainRes = await api.post(
146
+ `/accounts/${api.accountId}/workers/scripts/${workerName}/subdomain`,
147
+ { enabled: true, preview_enabled: false },
148
+ {
149
+ headers: { "Content-Type": "application/json" },
150
+ },
151
+ );
152
+ if (!subdomainRes.ok) {
153
+ await handleApiError(
154
+ subdomainRes,
155
+ "creating worker subdomain",
156
+ "worker",
157
+ workerName,
158
+ );
159
+ }
160
+ cache.set(key, TAG);
161
+ }
162
+
163
+ async function getWorkerStatus(api: CloudflareApi, workerName: string) {
164
+ const res = await api.get(
165
+ `/accounts/${api.accountId}/workers/scripts/${workerName}/settings`,
166
+ );
167
+ if (!res.ok) {
168
+ return {
169
+ found: false,
170
+ tag: undefined,
171
+ };
172
+ }
173
+ const json: {
174
+ result: {
175
+ tags: string[];
176
+ };
177
+ } = await res.json();
178
+ return {
179
+ found: true,
180
+ tag: json.result.tags.find((tag) => tag.startsWith("alchemy-state-store:")),
181
+ };
182
+ }
183
+
184
+ export async function getAccountSubdomain(api: CloudflareApi) {
185
+ const key = `subdomain:${api.accountId}`;
186
+ const cached = cache.get(key);
187
+ if (cached) {
188
+ return cached;
189
+ }
190
+ const res = await api.get(`/accounts/${api.accountId}/workers/subdomain`);
191
+ if (!res.ok) {
192
+ throw new Error(
193
+ `Failed to get account subdomain: ${res.status} ${res.statusText}`,
194
+ );
195
+ }
196
+ const json: { result: { subdomain: string } } = await res.json();
197
+ const subdomain = json.result.subdomain;
198
+ cache.set(key, subdomain);
199
+ return subdomain;
200
+ }
201
+
202
+ async function bundleWorkerScript() {
203
+ const result = await bundle({
204
+ entryPoint: path.join(__dirname, "worker.ts"),
205
+ bundle: true,
206
+ format: "esm",
207
+ target: "es2022",
208
+ external: ["cloudflare:*", "node:crypto"],
209
+ write: false,
210
+ });
211
+ if (!result.outputFiles?.[0]) {
212
+ throw new Error("Failed to bundle worker.ts");
213
+ }
214
+ return result.outputFiles[0].text;
215
+ }
@@ -0,0 +1,188 @@
1
+ import { alchemy } from "../../alchemy.ts";
2
+ import { ResourceScope } from "../../resource.ts";
3
+ import type { Scope } from "../../scope.ts";
4
+ import type { State, StateStore } from "../../state.ts";
5
+ import { deserializeState } from "../../state.ts";
6
+ import { createCloudflareApi, type CloudflareApiOptions } from "../api.ts";
7
+ import {
8
+ DOStateStoreClient,
9
+ getAccountSubdomain,
10
+ upsertStateStoreWorker,
11
+ } from "./internal.ts";
12
+
13
+ export interface DOStateStoreOptions extends CloudflareApiOptions {
14
+ /**
15
+ * The prefix to use for state keys.
16
+ * Each app and stage has its own state store, so this is primarily for testing.
17
+ * @default "alchemy"
18
+ */
19
+ prefix?: string;
20
+ worker?:
21
+ | {
22
+ /**
23
+ * The name of the worker to use
24
+ * @default "alchemy-state"
25
+ */
26
+ name?: string;
27
+ /**
28
+ * The token to use for the worker
29
+ * @default the value of the ALCHEMY_STATE_TOKEN environment variable
30
+ */
31
+ token?: string;
32
+ /**
33
+ * Whether to force the creation of a new worker
34
+ */
35
+ force?: boolean;
36
+ }
37
+ | {
38
+ /**
39
+ * The URL of an existing state store worker to use
40
+ */
41
+ url: string;
42
+ /**
43
+ * The token to use for the worker
44
+ * @default the value of the ALCHEMY_STATE_TOKEN environment variable
45
+ */
46
+ token?: string;
47
+ };
48
+ }
49
+
50
+ export class DOStateStore implements StateStore {
51
+ private prefix: string;
52
+ private client?: Promise<DOStateStoreClient>;
53
+
54
+ constructor(
55
+ private readonly scope: Scope,
56
+ private readonly options: DOStateStoreOptions = {},
57
+ ) {
58
+ this.prefix = [options.prefix ?? "alchemy", ...scope.chain, ""].join("/");
59
+ }
60
+
61
+ private async createClient() {
62
+ const token =
63
+ this.options.worker?.token ??
64
+ (await alchemy.secret.env.ALCHEMY_STATE_TOKEN).unencrypted;
65
+ if (this.options.worker && "url" in this.options.worker) {
66
+ const client = new DOStateStoreClient({
67
+ app: this.scope.appName ?? "alchemy",
68
+ stage: this.scope.stage,
69
+ url: this.options.worker.url,
70
+ token,
71
+ });
72
+ // The worker is already created and should be ready to use.
73
+ // If it's not, we'll fail fast with a helpful error message.
74
+ const res = await client.validate();
75
+ if (res.status === 200) {
76
+ return client;
77
+ }
78
+ if (res.status === 401) {
79
+ throw new Error(
80
+ "A worker URL was provided to DOStateStore, but the token is incorrect. Correct the token or remove the worker URL to create a new worker.",
81
+ );
82
+ }
83
+ throw new Error(
84
+ `A worker URL was provided to DOStateStore, but the worker status is ${res.status} ${res.statusText}.`,
85
+ );
86
+ }
87
+ const workerName = this.options.worker?.name ?? "alchemy-state";
88
+ const api = await createCloudflareApi(this.options);
89
+ const [subdomain, _] = await Promise.all([
90
+ getAccountSubdomain(api),
91
+ upsertStateStoreWorker(api, workerName, token),
92
+ ]);
93
+ const client = new DOStateStoreClient({
94
+ app: this.scope.appName ?? "alchemy",
95
+ stage: this.scope.stage,
96
+ url: `https://${workerName}.${subdomain}.workers.dev`,
97
+ token,
98
+ });
99
+ // This ensures the token is correct and the worker is ready to use.
100
+ // RPC methods are retried, which is what we want here in case the worker is not ready yet.
101
+ await client.rpc("validate", null);
102
+ return client;
103
+ }
104
+
105
+ private async getClient() {
106
+ this.client ??= this.createClient();
107
+ return await this.client;
108
+ }
109
+
110
+ async init() {
111
+ await this.getClient();
112
+ }
113
+
114
+ async list(): Promise<string[]> {
115
+ const client = await this.getClient();
116
+ const res = await client.rpc("list", { prefix: this.prefix });
117
+ return res.map((key) => this.deserializeKey(key));
118
+ }
119
+
120
+ async count(): Promise<number> {
121
+ const client = await this.getClient();
122
+ const res = await client.rpc("count", { prefix: this.prefix });
123
+ return res;
124
+ }
125
+
126
+ async get(key: string): Promise<State | undefined> {
127
+ const client = await this.getClient();
128
+ const res = await client.rpc("get", { key: this.serializeKey(key) });
129
+ if (res) {
130
+ return await this.deserializeState(res);
131
+ }
132
+ return undefined;
133
+ }
134
+
135
+ async getBatch(ids: string[]): Promise<Record<string, State>> {
136
+ const client = await this.getClient();
137
+ const res = await client.rpc("getBatch", {
138
+ keys: ids.map((id) => this.serializeKey(id)),
139
+ });
140
+ return await this.deserializeStates(res);
141
+ }
142
+
143
+ async all(): Promise<Record<string, State>> {
144
+ const client = await this.getClient();
145
+ const res = await client.rpc("all", { prefix: this.prefix });
146
+ return await this.deserializeStates(res);
147
+ }
148
+
149
+ async set(key: string, value: State): Promise<void> {
150
+ const client = await this.getClient();
151
+ await client.rpc("set", { key: this.serializeKey(key), value });
152
+ }
153
+
154
+ async delete(key: string): Promise<void> {
155
+ const client = await this.getClient();
156
+ await client.rpc("delete", { key: this.serializeKey(key) });
157
+ }
158
+
159
+ private async deserializeStates(
160
+ input: Record<string, string>,
161
+ ): Promise<Record<string, State>> {
162
+ return Object.fromEntries(
163
+ await Promise.all(
164
+ Object.entries(input).map(async ([key, value]) => [
165
+ this.deserializeKey(key),
166
+ await this.deserializeState(value),
167
+ ]),
168
+ ),
169
+ );
170
+ }
171
+
172
+ private async deserializeState(input: string): Promise<State> {
173
+ const state = await deserializeState(this.scope, input);
174
+ if (state.output === undefined) {
175
+ state.output = {} as any;
176
+ }
177
+ state.output[ResourceScope] = this.scope;
178
+ return state;
179
+ }
180
+
181
+ private deserializeKey(key: string): string {
182
+ return key.replace(this.prefix, "").replaceAll(":", "/");
183
+ }
184
+
185
+ private serializeKey(key: string): string {
186
+ return `${this.prefix}${key.replaceAll("/", ":")}`;
187
+ }
188
+ }