alchemy 0.67.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 (750) hide show
  1. package/bin/alchemy.js +25563 -26265
  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/trpc.ts +27 -2
  7. package/lib/apply.d.ts +2 -2
  8. package/lib/apply.d.ts.map +1 -1
  9. package/lib/apply.js +18 -15
  10. package/lib/apply.js.map +1 -1
  11. package/lib/auth.d.ts +72 -0
  12. package/lib/auth.d.ts.map +1 -0
  13. package/lib/auth.js +163 -0
  14. package/lib/auth.js.map +1 -0
  15. package/lib/aws/bucket.d.ts +12 -3
  16. package/lib/aws/bucket.d.ts.map +1 -1
  17. package/lib/aws/bucket.js +2 -2
  18. package/lib/aws/bucket.js.map +1 -1
  19. package/lib/aws/control/resource.d.ts +34 -3
  20. package/lib/aws/control/resource.d.ts.map +1 -1
  21. package/lib/aws/control/resource.js +3 -3
  22. package/lib/aws/control/resource.js.map +1 -1
  23. package/lib/aws/ec2/internet-gateway-attachment.d.ts +1 -2
  24. package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -1
  25. package/lib/aws/ec2/internet-gateway-attachment.js +4 -4
  26. package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -1
  27. package/lib/aws/ec2/internet-gateway.d.ts +1 -2
  28. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
  29. package/lib/aws/ec2/internet-gateway.js +2 -2
  30. package/lib/aws/ec2/internet-gateway.js.map +1 -1
  31. package/lib/aws/ec2/nat-gateway.d.ts +1 -2
  32. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -1
  33. package/lib/aws/ec2/nat-gateway.js +2 -2
  34. package/lib/aws/ec2/nat-gateway.js.map +1 -1
  35. package/lib/aws/ec2/route-table-association.d.ts +1 -2
  36. package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
  37. package/lib/aws/ec2/route-table-association.js +2 -2
  38. package/lib/aws/ec2/route-table-association.js.map +1 -1
  39. package/lib/aws/ec2/route-table.d.ts +1 -2
  40. package/lib/aws/ec2/route-table.d.ts.map +1 -1
  41. package/lib/aws/ec2/route-table.js +2 -2
  42. package/lib/aws/ec2/route-table.js.map +1 -1
  43. package/lib/aws/ec2/route.d.ts +1 -2
  44. package/lib/aws/ec2/route.d.ts.map +1 -1
  45. package/lib/aws/ec2/route.js +2 -2
  46. package/lib/aws/ec2/route.js.map +1 -1
  47. package/lib/aws/ec2/security-group-rule.d.ts +1 -2
  48. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -1
  49. package/lib/aws/ec2/security-group-rule.js +2 -2
  50. package/lib/aws/ec2/security-group-rule.js.map +1 -1
  51. package/lib/aws/ec2/security-group.d.ts +1 -2
  52. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  53. package/lib/aws/ec2/security-group.js +2 -2
  54. package/lib/aws/ec2/security-group.js.map +1 -1
  55. package/lib/aws/ec2/subnet.d.ts +1 -2
  56. package/lib/aws/ec2/subnet.d.ts.map +1 -1
  57. package/lib/aws/ec2/subnet.js +2 -2
  58. package/lib/aws/ec2/subnet.js.map +1 -1
  59. package/lib/aws/ec2/vpc.d.ts +1 -2
  60. package/lib/aws/ec2/vpc.d.ts.map +1 -1
  61. package/lib/aws/ec2/vpc.js +2 -2
  62. package/lib/aws/ec2/vpc.js.map +1 -1
  63. package/lib/aws/function.d.ts +116 -3
  64. package/lib/aws/function.d.ts.map +1 -1
  65. package/lib/aws/function.js +2 -2
  66. package/lib/aws/function.js.map +1 -1
  67. package/lib/aws/oidc/github-oidc-provider.d.ts +13 -2
  68. package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -1
  69. package/lib/aws/oidc/oidc-provider.d.ts +48 -3
  70. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
  71. package/lib/aws/oidc/oidc-provider.js +2 -2
  72. package/lib/aws/oidc/oidc-provider.js.map +1 -1
  73. package/lib/aws/policy-attachment.d.ts +2 -3
  74. package/lib/aws/policy-attachment.d.ts.map +1 -1
  75. package/lib/aws/policy-attachment.js +1 -1
  76. package/lib/aws/policy-attachment.js.map +1 -1
  77. package/lib/aws/policy.d.ts +1 -2
  78. package/lib/aws/policy.d.ts.map +1 -1
  79. package/lib/aws/policy.js +4 -4
  80. package/lib/aws/policy.js.map +1 -1
  81. package/lib/aws/queue.d.ts +1 -2
  82. package/lib/aws/queue.d.ts.map +1 -1
  83. package/lib/aws/queue.js +4 -4
  84. package/lib/aws/queue.js.map +1 -1
  85. package/lib/aws/role.d.ts +1 -2
  86. package/lib/aws/role.d.ts.map +1 -1
  87. package/lib/aws/role.js +2 -2
  88. package/lib/aws/role.js.map +1 -1
  89. package/lib/aws/ses.d.ts +1 -2
  90. package/lib/aws/ses.d.ts.map +1 -1
  91. package/lib/aws/ses.js +2 -2
  92. package/lib/aws/ses.js.map +1 -1
  93. package/lib/aws/ssm-parameter.d.ts +1 -2
  94. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  95. package/lib/aws/ssm-parameter.js +2 -2
  96. package/lib/aws/ssm-parameter.js.map +1 -1
  97. package/lib/aws/table.d.ts +1 -2
  98. package/lib/aws/table.d.ts.map +1 -1
  99. package/lib/aws/table.js +2 -2
  100. package/lib/aws/table.js.map +1 -1
  101. package/lib/cloudflare/account-api-token.d.ts +1 -2
  102. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  103. package/lib/cloudflare/account-api-token.js +2 -2
  104. package/lib/cloudflare/account-api-token.js.map +1 -1
  105. package/lib/cloudflare/ai-gateway.d.ts +1 -2
  106. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  107. package/lib/cloudflare/ai-gateway.js +2 -2
  108. package/lib/cloudflare/ai-gateway.js.map +1 -1
  109. package/lib/cloudflare/api-gateway-operation.d.ts +1 -2
  110. package/lib/cloudflare/api-gateway-operation.d.ts.map +1 -1
  111. package/lib/cloudflare/api-gateway-operation.js +2 -2
  112. package/lib/cloudflare/api-gateway-operation.js.map +1 -1
  113. package/lib/cloudflare/api-schema.d.ts +1 -2
  114. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  115. package/lib/cloudflare/api-schema.js +2 -2
  116. package/lib/cloudflare/api-schema.js.map +1 -1
  117. package/lib/cloudflare/api-shield.d.ts +1 -2
  118. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  119. package/lib/cloudflare/api-shield.js +2 -2
  120. package/lib/cloudflare/api-shield.js.map +1 -1
  121. package/lib/cloudflare/api.d.ts +18 -10
  122. package/lib/cloudflare/api.d.ts.map +1 -1
  123. package/lib/cloudflare/api.js +93 -38
  124. package/lib/cloudflare/api.js.map +1 -1
  125. package/lib/cloudflare/assets.d.ts +21 -43
  126. package/lib/cloudflare/assets.d.ts.map +1 -1
  127. package/lib/cloudflare/assets.js +78 -70
  128. package/lib/cloudflare/assets.js.map +1 -1
  129. package/lib/cloudflare/auth.d.ts +91 -17
  130. package/lib/cloudflare/auth.d.ts.map +1 -1
  131. package/lib/cloudflare/auth.js +141 -62
  132. package/lib/cloudflare/auth.js.map +1 -1
  133. package/lib/cloudflare/bound.d.ts +1 -1
  134. package/lib/cloudflare/bound.d.ts.map +1 -1
  135. package/lib/cloudflare/bucket.d.ts +60 -8
  136. package/lib/cloudflare/bucket.d.ts.map +1 -1
  137. package/lib/cloudflare/bucket.js +161 -18
  138. package/lib/cloudflare/bucket.js.map +1 -1
  139. package/lib/cloudflare/bundle/plugin-wasm.js +4 -2
  140. package/lib/cloudflare/bundle/plugin-wasm.js.map +1 -1
  141. package/lib/cloudflare/certificate-pack.d.ts +1 -2
  142. package/lib/cloudflare/certificate-pack.d.ts.map +1 -1
  143. package/lib/cloudflare/certificate-pack.js +4 -4
  144. package/lib/cloudflare/certificate-pack.js.map +1 -1
  145. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  146. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  147. package/lib/cloudflare/container.d.ts +1 -2
  148. package/lib/cloudflare/container.d.ts.map +1 -1
  149. package/lib/cloudflare/container.js +6 -6
  150. package/lib/cloudflare/container.js.map +1 -1
  151. package/lib/cloudflare/custom-domain.d.ts +1 -2
  152. package/lib/cloudflare/custom-domain.d.ts.map +1 -1
  153. package/lib/cloudflare/custom-domain.js +2 -2
  154. package/lib/cloudflare/custom-domain.js.map +1 -1
  155. package/lib/cloudflare/d1-database.d.ts +2 -3
  156. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  157. package/lib/cloudflare/d1-database.js +5 -5
  158. package/lib/cloudflare/d1-database.js.map +1 -1
  159. package/lib/cloudflare/dispatch-namespace.d.ts +2 -3
  160. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  161. package/lib/cloudflare/dispatch-namespace.js +3 -3
  162. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  163. package/lib/cloudflare/dns-records.d.ts +1 -2
  164. package/lib/cloudflare/dns-records.d.ts.map +1 -1
  165. package/lib/cloudflare/dns-records.js +4 -4
  166. package/lib/cloudflare/dns-records.js.map +1 -1
  167. package/lib/cloudflare/email-address.d.ts +1 -2
  168. package/lib/cloudflare/email-address.d.ts.map +1 -1
  169. package/lib/cloudflare/email-address.js +6 -6
  170. package/lib/cloudflare/email-address.js.map +1 -1
  171. package/lib/cloudflare/email-catch-all.d.ts +1 -2
  172. package/lib/cloudflare/email-catch-all.d.ts.map +1 -1
  173. package/lib/cloudflare/email-catch-all.js +4 -4
  174. package/lib/cloudflare/email-catch-all.js.map +1 -1
  175. package/lib/cloudflare/email-routing.d.ts +1 -2
  176. package/lib/cloudflare/email-routing.d.ts.map +1 -1
  177. package/lib/cloudflare/email-routing.js +4 -4
  178. package/lib/cloudflare/email-routing.js.map +1 -1
  179. package/lib/cloudflare/email-rule.d.ts +1 -2
  180. package/lib/cloudflare/email-rule.d.ts.map +1 -1
  181. package/lib/cloudflare/email-rule.js +4 -4
  182. package/lib/cloudflare/email-rule.js.map +1 -1
  183. package/lib/cloudflare/hyperdrive.d.ts +1 -2
  184. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  185. package/lib/cloudflare/hyperdrive.js +4 -4
  186. package/lib/cloudflare/hyperdrive.js.map +1 -1
  187. package/lib/cloudflare/kv-namespace.d.ts +2 -3
  188. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  189. package/lib/cloudflare/kv-namespace.js +5 -5
  190. package/lib/cloudflare/kv-namespace.js.map +1 -1
  191. package/lib/cloudflare/miniflare/delete.js +1 -1
  192. package/lib/cloudflare/miniflare/delete.js.map +1 -1
  193. package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts.map +1 -1
  194. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +2 -7
  195. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  196. package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
  197. package/lib/cloudflare/miniflare/remote-binding-proxy.js +15 -4
  198. package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
  199. package/lib/cloudflare/permission-groups.d.ts +1 -2
  200. package/lib/cloudflare/permission-groups.d.ts.map +1 -1
  201. package/lib/cloudflare/permission-groups.js +1 -1
  202. package/lib/cloudflare/permission-groups.js.map +1 -1
  203. package/lib/cloudflare/pipeline.d.ts +2 -3
  204. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  205. package/lib/cloudflare/pipeline.js +5 -5
  206. package/lib/cloudflare/pipeline.js.map +1 -1
  207. package/lib/cloudflare/queue-consumer.d.ts +1 -2
  208. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  209. package/lib/cloudflare/queue-consumer.js +4 -4
  210. package/lib/cloudflare/queue-consumer.js.map +1 -1
  211. package/lib/cloudflare/queue.d.ts +1 -2
  212. package/lib/cloudflare/queue.d.ts.map +1 -1
  213. package/lib/cloudflare/queue.js +4 -4
  214. package/lib/cloudflare/queue.js.map +1 -1
  215. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  216. package/lib/cloudflare/react-router/plugin.js +13 -0
  217. package/lib/cloudflare/react-router/plugin.js.map +1 -1
  218. package/lib/cloudflare/redirect-rule.d.ts +1 -2
  219. package/lib/cloudflare/redirect-rule.d.ts.map +1 -1
  220. package/lib/cloudflare/redirect-rule.js +4 -4
  221. package/lib/cloudflare/redirect-rule.js.map +1 -1
  222. package/lib/cloudflare/route.d.ts +1 -2
  223. package/lib/cloudflare/route.d.ts.map +1 -1
  224. package/lib/cloudflare/route.js +4 -4
  225. package/lib/cloudflare/route.js.map +1 -1
  226. package/lib/cloudflare/ruleset.d.ts +1 -2
  227. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  228. package/lib/cloudflare/ruleset.js +2 -2
  229. package/lib/cloudflare/ruleset.js.map +1 -1
  230. package/lib/cloudflare/secret.d.ts +2 -3
  231. package/lib/cloudflare/secret.d.ts.map +1 -1
  232. package/lib/cloudflare/secret.js +3 -3
  233. package/lib/cloudflare/secret.js.map +1 -1
  234. package/lib/cloudflare/secrets-store.d.ts +2 -3
  235. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  236. package/lib/cloudflare/secrets-store.js +3 -3
  237. package/lib/cloudflare/secrets-store.js.map +1 -1
  238. package/lib/cloudflare/tunnel.d.ts +2 -3
  239. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  240. package/lib/cloudflare/tunnel.js +3 -3
  241. package/lib/cloudflare/tunnel.js.map +1 -1
  242. package/lib/cloudflare/user.d.ts +3 -2
  243. package/lib/cloudflare/user.d.ts.map +1 -1
  244. package/lib/cloudflare/user.js +7 -5
  245. package/lib/cloudflare/user.js.map +1 -1
  246. package/lib/cloudflare/vectorize-index.d.ts +2 -3
  247. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  248. package/lib/cloudflare/vectorize-index.js +6 -6
  249. package/lib/cloudflare/vectorize-index.js.map +1 -1
  250. package/lib/cloudflare/vectorize-metadata-index.d.ts +2 -3
  251. package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
  252. package/lib/cloudflare/vectorize-metadata-index.js +4 -4
  253. package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
  254. package/lib/cloudflare/website.js +1 -1
  255. package/lib/cloudflare/website.js.map +1 -1
  256. package/lib/cloudflare/worker-assets.d.ts +1 -29
  257. package/lib/cloudflare/worker-assets.d.ts.map +1 -1
  258. package/lib/cloudflare/worker-assets.js +9 -42
  259. package/lib/cloudflare/worker-assets.js.map +1 -1
  260. package/lib/cloudflare/worker-stub.d.ts +2 -3
  261. package/lib/cloudflare/worker-stub.d.ts.map +1 -1
  262. package/lib/cloudflare/worker-stub.js +3 -3
  263. package/lib/cloudflare/worker-stub.js.map +1 -1
  264. package/lib/cloudflare/worker-subdomain.d.ts +4 -3
  265. package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
  266. package/lib/cloudflare/worker-subdomain.js +5 -5
  267. package/lib/cloudflare/worker-subdomain.js.map +1 -1
  268. package/lib/cloudflare/worker.d.ts +3 -4
  269. package/lib/cloudflare/worker.d.ts.map +1 -1
  270. package/lib/cloudflare/worker.js +6 -5
  271. package/lib/cloudflare/worker.js.map +1 -1
  272. package/lib/cloudflare/zone.d.ts +1 -2
  273. package/lib/cloudflare/zone.d.ts.map +1 -1
  274. package/lib/cloudflare/zone.js +2 -2
  275. package/lib/cloudflare/zone.js.map +1 -1
  276. package/lib/context.d.ts +8 -8
  277. package/lib/context.d.ts.map +1 -1
  278. package/lib/context.js.map +1 -1
  279. package/lib/destroy.d.ts +1 -1
  280. package/lib/destroy.d.ts.map +1 -1
  281. package/lib/destroy.js.map +1 -1
  282. package/lib/dns/import-dns.d.ts +1 -2
  283. package/lib/dns/import-dns.d.ts.map +1 -1
  284. package/lib/dns/import-dns.js +2 -2
  285. package/lib/dns/import-dns.js.map +1 -1
  286. package/lib/docker/container.d.ts +1 -2
  287. package/lib/docker/container.d.ts.map +1 -1
  288. package/lib/docker/container.js +2 -3
  289. package/lib/docker/container.js.map +1 -1
  290. package/lib/docker/image.d.ts +1 -2
  291. package/lib/docker/image.d.ts.map +1 -1
  292. package/lib/docker/image.js +9 -9
  293. package/lib/docker/image.js.map +1 -1
  294. package/lib/docker/network.d.ts +1 -2
  295. package/lib/docker/network.d.ts.map +1 -1
  296. package/lib/docker/network.js +2 -3
  297. package/lib/docker/network.js.map +1 -1
  298. package/lib/docker/remote-image.d.ts +1 -2
  299. package/lib/docker/remote-image.d.ts.map +1 -1
  300. package/lib/docker/remote-image.js +2 -3
  301. package/lib/docker/remote-image.js.map +1 -1
  302. package/lib/docker/volume.d.ts +1 -2
  303. package/lib/docker/volume.d.ts.map +1 -1
  304. package/lib/docker/volume.js +2 -3
  305. package/lib/docker/volume.js.map +1 -1
  306. package/lib/esbuild/bundle.d.ts +1 -2
  307. package/lib/esbuild/bundle.d.ts.map +1 -1
  308. package/lib/esbuild/bundle.js +4 -4
  309. package/lib/esbuild/bundle.js.map +1 -1
  310. package/lib/fs/copy-file.d.ts +1 -2
  311. package/lib/fs/copy-file.d.ts.map +1 -1
  312. package/lib/fs/copy-file.js +2 -2
  313. package/lib/fs/copy-file.js.map +1 -1
  314. package/lib/fs/file.d.ts +1 -2
  315. package/lib/fs/file.d.ts.map +1 -1
  316. package/lib/fs/file.js +2 -2
  317. package/lib/fs/file.js.map +1 -1
  318. package/lib/fs/folder.d.ts +1 -2
  319. package/lib/fs/folder.d.ts.map +1 -1
  320. package/lib/fs/folder.js +2 -2
  321. package/lib/fs/folder.js.map +1 -1
  322. package/lib/github/comment.d.ts +1 -2
  323. package/lib/github/comment.d.ts.map +1 -1
  324. package/lib/github/comment.js +4 -4
  325. package/lib/github/comment.js.map +1 -1
  326. package/lib/github/repository-environment.d.ts +1 -2
  327. package/lib/github/repository-environment.d.ts.map +1 -1
  328. package/lib/github/repository-environment.js +2 -2
  329. package/lib/github/repository-environment.js.map +1 -1
  330. package/lib/github/repository-webhook.d.ts +1 -2
  331. package/lib/github/repository-webhook.d.ts.map +1 -1
  332. package/lib/github/repository-webhook.js +2 -2
  333. package/lib/github/repository-webhook.js.map +1 -1
  334. package/lib/github/secret.d.ts +1 -2
  335. package/lib/github/secret.d.ts.map +1 -1
  336. package/lib/github/secret.js +2 -2
  337. package/lib/github/secret.js.map +1 -1
  338. package/lib/neon/api/client.gen.d.ts +13 -0
  339. package/lib/neon/api/client.gen.d.ts.map +1 -0
  340. package/lib/neon/api/client.gen.js +7 -0
  341. package/lib/neon/api/client.gen.js.map +1 -0
  342. package/lib/neon/api/sdk.gen.d.ts +880 -0
  343. package/lib/neon/api/sdk.gen.d.ts.map +1 -0
  344. package/lib/neon/api/sdk.gen.js +1527 -0
  345. package/lib/neon/api/sdk.gen.js.map +1 -0
  346. package/lib/neon/api/types.gen.d.ts +7250 -0
  347. package/lib/neon/api/types.gen.d.ts.map +1 -0
  348. package/lib/neon/api/types.gen.js +2 -0
  349. package/lib/neon/api/types.gen.js.map +1 -0
  350. package/lib/neon/api.d.ts +14 -49
  351. package/lib/neon/api.d.ts.map +1 -1
  352. package/lib/neon/api.js +36 -114
  353. package/lib/neon/api.js.map +1 -1
  354. package/lib/neon/branch.d.ts +141 -0
  355. package/lib/neon/branch.d.ts.map +1 -0
  356. package/lib/neon/branch.js +112 -0
  357. package/lib/neon/branch.js.map +1 -0
  358. package/lib/neon/index.d.ts +1 -1
  359. package/lib/neon/index.d.ts.map +1 -1
  360. package/lib/neon/index.js +1 -1
  361. package/lib/neon/index.js.map +1 -1
  362. package/lib/neon/project.d.ts +32 -242
  363. package/lib/neon/project.d.ts.map +1 -1
  364. package/lib/neon/project.js +90 -269
  365. package/lib/neon/project.js.map +1 -1
  366. package/lib/neon/utils.d.ts +49 -0
  367. package/lib/neon/utils.d.ts.map +1 -0
  368. package/lib/neon/utils.js +44 -0
  369. package/lib/neon/utils.js.map +1 -0
  370. package/lib/os/exec.d.ts +1 -2
  371. package/lib/os/exec.d.ts.map +1 -1
  372. package/lib/os/exec.js +2 -2
  373. package/lib/os/exec.js.map +1 -1
  374. package/lib/planetscale/api/client.gen.d.ts +12 -1749
  375. package/lib/planetscale/api/client.gen.d.ts.map +1 -1
  376. package/lib/planetscale/api/client.gen.js +6 -2400
  377. package/lib/planetscale/api/client.gen.js.map +1 -1
  378. package/lib/planetscale/api/sdk.gen.d.ts +1582 -0
  379. package/lib/planetscale/api/sdk.gen.d.ts.map +1 -0
  380. package/lib/planetscale/api/sdk.gen.js +2219 -0
  381. package/lib/planetscale/api/sdk.gen.js.map +1 -0
  382. package/lib/planetscale/api/types.gen.d.ts +594 -449
  383. package/lib/planetscale/api/types.gen.d.ts.map +1 -1
  384. package/lib/planetscale/api.d.ts +43 -0
  385. package/lib/planetscale/api.d.ts.map +1 -0
  386. package/lib/planetscale/api.js +53 -0
  387. package/lib/planetscale/api.js.map +1 -0
  388. package/lib/planetscale/branch.d.ts +2 -3
  389. package/lib/planetscale/branch.d.ts.map +1 -1
  390. package/lib/planetscale/branch.js +17 -15
  391. package/lib/planetscale/branch.js.map +1 -1
  392. package/lib/planetscale/database.d.ts +2 -3
  393. package/lib/planetscale/database.d.ts.map +1 -1
  394. package/lib/planetscale/database.js +34 -34
  395. package/lib/planetscale/database.js.map +1 -1
  396. package/lib/planetscale/index.d.ts +1 -1
  397. package/lib/planetscale/index.d.ts.map +1 -1
  398. package/lib/planetscale/index.js +1 -1
  399. package/lib/planetscale/index.js.map +1 -1
  400. package/lib/planetscale/password.d.ts +2 -3
  401. package/lib/planetscale/password.d.ts.map +1 -1
  402. package/lib/planetscale/password.js +11 -11
  403. package/lib/planetscale/password.js.map +1 -1
  404. package/lib/planetscale/role.d.ts +2 -3
  405. package/lib/planetscale/role.d.ts.map +1 -1
  406. package/lib/planetscale/role.js +18 -18
  407. package/lib/planetscale/role.js.map +1 -1
  408. package/lib/planetscale/utils.d.ts +1 -1
  409. package/lib/planetscale/utils.d.ts.map +1 -1
  410. package/lib/planetscale/utils.js +17 -33
  411. package/lib/planetscale/utils.js.map +1 -1
  412. package/lib/random/random-string.d.ts +1 -2
  413. package/lib/random/random-string.d.ts.map +1 -1
  414. package/lib/random/random-string.js +3 -3
  415. package/lib/random/random-string.js.map +1 -1
  416. package/lib/resource.d.ts +4 -1
  417. package/lib/resource.d.ts.map +1 -1
  418. package/lib/resource.js.map +1 -1
  419. package/lib/sentry/client-key.d.ts +1 -2
  420. package/lib/sentry/client-key.d.ts.map +1 -1
  421. package/lib/sentry/client-key.js +2 -2
  422. package/lib/sentry/client-key.js.map +1 -1
  423. package/lib/sentry/project.d.ts +1 -2
  424. package/lib/sentry/project.d.ts.map +1 -1
  425. package/lib/sentry/project.js +2 -2
  426. package/lib/sentry/project.js.map +1 -1
  427. package/lib/sentry/team.d.ts +1 -2
  428. package/lib/sentry/team.d.ts.map +1 -1
  429. package/lib/sentry/team.js +2 -2
  430. package/lib/sentry/team.js.map +1 -1
  431. package/lib/state/r2-rest-state-store.d.ts +1 -0
  432. package/lib/state/r2-rest-state-store.d.ts.map +1 -1
  433. package/lib/state/r2-rest-state-store.js +15 -34
  434. package/lib/state/r2-rest-state-store.js.map +1 -1
  435. package/lib/stripe/card.d.ts +1 -2
  436. package/lib/stripe/card.d.ts.map +1 -1
  437. package/lib/stripe/card.js +2 -2
  438. package/lib/stripe/card.js.map +1 -1
  439. package/lib/stripe/coupon.d.ts +1 -2
  440. package/lib/stripe/coupon.d.ts.map +1 -1
  441. package/lib/stripe/coupon.js +2 -2
  442. package/lib/stripe/coupon.js.map +1 -1
  443. package/lib/stripe/customer.d.ts +1 -2
  444. package/lib/stripe/customer.d.ts.map +1 -1
  445. package/lib/stripe/customer.js +2 -2
  446. package/lib/stripe/customer.js.map +1 -1
  447. package/lib/stripe/entitlements-feature.d.ts +1 -2
  448. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  449. package/lib/stripe/entitlements-feature.js +2 -2
  450. package/lib/stripe/entitlements-feature.js.map +1 -1
  451. package/lib/stripe/file.d.ts +1 -2
  452. package/lib/stripe/file.d.ts.map +1 -1
  453. package/lib/stripe/file.js +2 -2
  454. package/lib/stripe/file.js.map +1 -1
  455. package/lib/stripe/meter.d.ts +1 -2
  456. package/lib/stripe/meter.d.ts.map +1 -1
  457. package/lib/stripe/meter.js +1 -1
  458. package/lib/stripe/meter.js.map +1 -1
  459. package/lib/stripe/portal-configuration.d.ts +1 -2
  460. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  461. package/lib/stripe/portal-configuration.js +2 -2
  462. package/lib/stripe/portal-configuration.js.map +1 -1
  463. package/lib/stripe/price.d.ts +1 -2
  464. package/lib/stripe/price.d.ts.map +1 -1
  465. package/lib/stripe/price.js +2 -2
  466. package/lib/stripe/price.js.map +1 -1
  467. package/lib/stripe/product-feature.d.ts +1 -2
  468. package/lib/stripe/product-feature.d.ts.map +1 -1
  469. package/lib/stripe/product-feature.js +2 -2
  470. package/lib/stripe/product-feature.js.map +1 -1
  471. package/lib/stripe/product.d.ts +1 -2
  472. package/lib/stripe/product.d.ts.map +1 -1
  473. package/lib/stripe/product.js +2 -2
  474. package/lib/stripe/product.js.map +1 -1
  475. package/lib/stripe/promotion-code.d.ts +1 -2
  476. package/lib/stripe/promotion-code.d.ts.map +1 -1
  477. package/lib/stripe/promotion-code.js +2 -2
  478. package/lib/stripe/promotion-code.js.map +1 -1
  479. package/lib/stripe/shipping-rate.d.ts +1 -2
  480. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  481. package/lib/stripe/shipping-rate.js +2 -2
  482. package/lib/stripe/shipping-rate.js.map +1 -1
  483. package/lib/stripe/tax-rate.d.ts +1 -2
  484. package/lib/stripe/tax-rate.d.ts.map +1 -1
  485. package/lib/stripe/tax-rate.js +2 -2
  486. package/lib/stripe/tax-rate.js.map +1 -1
  487. package/lib/stripe/webhook.d.ts +16 -3
  488. package/lib/stripe/webhook.d.ts.map +1 -1
  489. package/lib/stripe/webhook.js +2 -2
  490. package/lib/stripe/webhook.js.map +1 -1
  491. package/lib/test/bun.d.ts.map +1 -1
  492. package/lib/test/bun.js +1 -0
  493. package/lib/test/bun.js.map +1 -1
  494. package/lib/test/options.d.ts +5 -0
  495. package/lib/test/options.d.ts.map +1 -1
  496. package/lib/test/vitest.d.ts.map +1 -1
  497. package/lib/test/vitest.js +1 -0
  498. package/lib/test/vitest.js.map +1 -1
  499. package/lib/upstash/redis.d.ts +1 -2
  500. package/lib/upstash/redis.d.ts.map +1 -1
  501. package/lib/upstash/redis.js.map +1 -1
  502. package/lib/util/api/client/client.gen.d.ts +3 -0
  503. package/lib/util/api/client/client.gen.d.ts.map +1 -0
  504. package/lib/util/api/client/client.gen.js +205 -0
  505. package/lib/util/api/client/client.gen.js.map +1 -0
  506. package/lib/util/api/client/index.d.ts +8 -0
  507. package/lib/util/api/client/index.d.ts.map +1 -0
  508. package/lib/util/api/client/index.js +6 -0
  509. package/lib/util/api/client/index.js.map +1 -0
  510. package/lib/util/api/client/types.gen.d.ts +125 -0
  511. package/lib/util/api/client/types.gen.d.ts.map +1 -0
  512. package/lib/util/api/client/types.gen.js +2 -0
  513. package/lib/util/api/client/types.gen.js.map +1 -0
  514. package/lib/util/api/client/utils.gen.d.ts +34 -0
  515. package/lib/util/api/client/utils.gen.d.ts.map +1 -0
  516. package/lib/util/api/client/utils.gen.js +231 -0
  517. package/lib/util/api/client/utils.gen.js.map +1 -0
  518. package/lib/util/api/core/auth.gen.d.ts +19 -0
  519. package/lib/util/api/core/auth.gen.d.ts.map +1 -0
  520. package/lib/util/api/core/auth.gen.js +15 -0
  521. package/lib/util/api/core/auth.gen.js.map +1 -0
  522. package/lib/util/api/core/bodySerializer.gen.d.ts +18 -0
  523. package/lib/util/api/core/bodySerializer.gen.d.ts.map +1 -0
  524. package/lib/util/api/core/bodySerializer.gen.js +58 -0
  525. package/lib/util/api/core/bodySerializer.gen.js.map +1 -0
  526. package/lib/util/api/core/params.gen.d.ts +34 -0
  527. package/lib/util/api/core/params.gen.d.ts.map +1 -0
  528. package/lib/util/api/core/params.gen.js +89 -0
  529. package/lib/util/api/core/params.gen.js.map +1 -0
  530. package/lib/util/api/core/pathSerializer.gen.d.ts +34 -0
  531. package/lib/util/api/core/pathSerializer.gen.d.ts.map +1 -0
  532. package/lib/util/api/core/pathSerializer.gen.js +115 -0
  533. package/lib/util/api/core/pathSerializer.gen.js.map +1 -0
  534. package/lib/util/api/core/serverSentEvents.gen.d.ts +72 -0
  535. package/lib/util/api/core/serverSentEvents.gen.d.ts.map +1 -0
  536. package/lib/util/api/core/serverSentEvents.gen.js +136 -0
  537. package/lib/util/api/core/serverSentEvents.gen.js.map +1 -0
  538. package/lib/util/api/core/types.gen.d.ts +79 -0
  539. package/lib/util/api/core/types.gen.d.ts.map +1 -0
  540. package/lib/util/api/core/types.gen.js +2 -0
  541. package/lib/util/api/core/types.gen.js.map +1 -0
  542. package/lib/util/api/core/utils.gen.d.ts +20 -0
  543. package/lib/util/api/core/utils.gen.d.ts.map +1 -0
  544. package/lib/util/api/core/utils.gen.js +88 -0
  545. package/lib/util/api/core/utils.gen.js.map +1 -0
  546. package/lib/util/http.d.ts +7 -2
  547. package/lib/util/http.d.ts.map +1 -1
  548. package/lib/util/http.js +29 -11
  549. package/lib/util/http.js.map +1 -1
  550. package/lib/util/lock.d.ts +20 -0
  551. package/lib/util/lock.d.ts.map +1 -0
  552. package/lib/util/lock.js +45 -0
  553. package/lib/util/lock.js.map +1 -0
  554. package/lib/util/memoize.d.ts +6 -0
  555. package/lib/util/memoize.d.ts.map +1 -1
  556. package/lib/util/memoize.js +23 -0
  557. package/lib/util/memoize.js.map +1 -1
  558. package/lib/util/oauth-client.d.ts +71 -0
  559. package/lib/util/oauth-client.d.ts.map +1 -0
  560. package/lib/util/oauth-client.js +188 -0
  561. package/lib/util/oauth-client.js.map +1 -0
  562. package/lib/util/poll.d.ts +33 -0
  563. package/lib/util/poll.d.ts.map +1 -0
  564. package/lib/util/poll.js +19 -0
  565. package/lib/util/poll.js.map +1 -0
  566. package/lib/vercel/project-domain.d.ts +1 -2
  567. package/lib/vercel/project-domain.d.ts.map +1 -1
  568. package/lib/vercel/project-domain.js.map +1 -1
  569. package/lib/vercel/project.d.ts +1 -2
  570. package/lib/vercel/project.d.ts.map +1 -1
  571. package/lib/vercel/project.js +2 -2
  572. package/lib/vercel/project.js.map +1 -1
  573. package/package.json +5 -1
  574. package/src/apply.ts +32 -29
  575. package/src/auth.ts +253 -0
  576. package/src/aws/bucket.ts +3 -3
  577. package/src/aws/control/resource.ts +4 -6
  578. package/src/aws/ec2/internet-gateway-attachment.ts +5 -6
  579. package/src/aws/ec2/internet-gateway.ts +3 -5
  580. package/src/aws/ec2/nat-gateway.ts +3 -5
  581. package/src/aws/ec2/route-table-association.ts +3 -5
  582. package/src/aws/ec2/route-table.ts +3 -5
  583. package/src/aws/ec2/route.ts +3 -3
  584. package/src/aws/ec2/security-group-rule.ts +3 -5
  585. package/src/aws/ec2/security-group.ts +3 -5
  586. package/src/aws/ec2/subnet.ts +3 -3
  587. package/src/aws/ec2/vpc.ts +3 -3
  588. package/src/aws/function.ts +3 -3
  589. package/src/aws/oidc/oidc-provider.ts +3 -5
  590. package/src/aws/policy-attachment.ts +2 -4
  591. package/src/aws/policy.ts +5 -5
  592. package/src/aws/queue.ts +5 -5
  593. package/src/aws/role.ts +3 -3
  594. package/src/aws/ses.ts +3 -3
  595. package/src/aws/ssm-parameter.ts +3 -3
  596. package/src/aws/table.ts +3 -3
  597. package/src/cloudflare/account-api-token.ts +3 -4
  598. package/src/cloudflare/ai-gateway.ts +3 -5
  599. package/src/cloudflare/api-gateway-operation.ts +3 -4
  600. package/src/cloudflare/api-schema.ts +25 -26
  601. package/src/cloudflare/api-shield.ts +3 -4
  602. package/src/cloudflare/api.ts +122 -57
  603. package/src/cloudflare/assets.ts +95 -136
  604. package/src/cloudflare/auth.ts +160 -95
  605. package/src/cloudflare/bound.ts +1 -1
  606. package/src/cloudflare/bucket.ts +321 -58
  607. package/src/cloudflare/bundle/plugin-wasm.ts +5 -5
  608. package/src/cloudflare/certificate-pack.ts +5 -6
  609. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  610. package/src/cloudflare/container.ts +7 -8
  611. package/src/cloudflare/custom-domain.ts +3 -5
  612. package/src/cloudflare/d1-database.ts +33 -34
  613. package/src/cloudflare/dispatch-namespace.ts +5 -6
  614. package/src/cloudflare/dns-records.ts +5 -5
  615. package/src/cloudflare/email-address.ts +7 -7
  616. package/src/cloudflare/email-catch-all.ts +6 -6
  617. package/src/cloudflare/email-routing.ts +5 -5
  618. package/src/cloudflare/email-rule.ts +5 -5
  619. package/src/cloudflare/hyperdrive.ts +35 -36
  620. package/src/cloudflare/kv-namespace.ts +31 -32
  621. package/src/cloudflare/miniflare/delete.ts +1 -1
  622. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +2 -7
  623. package/src/cloudflare/miniflare/remote-binding-proxy.ts +16 -4
  624. package/src/cloudflare/permission-groups.ts +4 -6
  625. package/src/cloudflare/pipeline.ts +29 -30
  626. package/src/cloudflare/queue-consumer.ts +5 -7
  627. package/src/cloudflare/queue.ts +42 -43
  628. package/src/cloudflare/react-router/plugin.ts +20 -0
  629. package/src/cloudflare/redirect-rule.ts +5 -5
  630. package/src/cloudflare/route.ts +5 -5
  631. package/src/cloudflare/ruleset.ts +3 -4
  632. package/src/cloudflare/secret.ts +35 -36
  633. package/src/cloudflare/secrets-store.ts +5 -8
  634. package/src/cloudflare/tunnel.ts +5 -7
  635. package/src/cloudflare/user.ts +12 -9
  636. package/src/cloudflare/vectorize-index.ts +8 -12
  637. package/src/cloudflare/vectorize-metadata-index.ts +6 -8
  638. package/src/cloudflare/website.ts +1 -1
  639. package/src/cloudflare/worker-assets.ts +10 -56
  640. package/src/cloudflare/worker-stub.ts +5 -5
  641. package/src/cloudflare/worker-subdomain.ts +6 -7
  642. package/src/cloudflare/worker.ts +91 -91
  643. package/src/cloudflare/zone.ts +3 -3
  644. package/src/context.ts +9 -7
  645. package/src/destroy.ts +2 -2
  646. package/src/dns/import-dns.ts +3 -5
  647. package/src/docker/container.ts +3 -6
  648. package/src/docker/image.ts +13 -13
  649. package/src/docker/network.ts +3 -4
  650. package/src/docker/remote-image.ts +3 -6
  651. package/src/docker/volume.ts +3 -4
  652. package/src/esbuild/bundle.ts +10 -8
  653. package/src/fs/copy-file.ts +3 -3
  654. package/src/fs/file.ts +3 -3
  655. package/src/fs/folder.ts +3 -3
  656. package/src/github/comment.ts +5 -7
  657. package/src/github/repository-environment.ts +3 -5
  658. package/src/github/repository-webhook.ts +3 -5
  659. package/src/github/secret.ts +3 -5
  660. package/src/neon/api/client.gen.ts +28 -0
  661. package/src/neon/api/sdk.gen.ts +2596 -0
  662. package/src/neon/api/types.gen.ts +8287 -0
  663. package/src/neon/api.ts +51 -147
  664. package/src/neon/branch.ts +278 -0
  665. package/src/neon/index.ts +1 -1
  666. package/src/neon/project.ts +136 -721
  667. package/src/neon/utils.ts +105 -0
  668. package/src/os/exec.ts +3 -3
  669. package/src/planetscale/api/client.gen.ts +28 -2882
  670. package/src/planetscale/api/sdk.gen.ts +3336 -0
  671. package/src/planetscale/api/types.gen.ts +778 -450
  672. package/src/planetscale/api.ts +101 -0
  673. package/src/planetscale/branch.ts +20 -19
  674. package/src/planetscale/database.ts +69 -70
  675. package/src/planetscale/index.ts +1 -1
  676. package/src/planetscale/password.ts +18 -22
  677. package/src/planetscale/role.ts +21 -21
  678. package/src/planetscale/utils.ts +20 -74
  679. package/src/random/random-string.ts +4 -4
  680. package/src/resource.ts +6 -2
  681. package/src/sentry/client-key.ts +3 -5
  682. package/src/sentry/project.ts +3 -5
  683. package/src/sentry/team.ts +3 -3
  684. package/src/state/r2-rest-state-store.ts +15 -57
  685. package/src/stripe/card.ts +3 -3
  686. package/src/stripe/coupon.ts +3 -3
  687. package/src/stripe/customer.ts +3 -3
  688. package/src/stripe/entitlements-feature.ts +3 -5
  689. package/src/stripe/file.ts +3 -3
  690. package/src/stripe/meter.ts +3 -3
  691. package/src/stripe/portal-configuration.ts +3 -5
  692. package/src/stripe/price.ts +3 -3
  693. package/src/stripe/product-feature.ts +3 -5
  694. package/src/stripe/product.ts +3 -3
  695. package/src/stripe/promotion-code.ts +3 -5
  696. package/src/stripe/shipping-rate.ts +3 -5
  697. package/src/stripe/tax-rate.ts +3 -3
  698. package/src/stripe/webhook.ts +3 -5
  699. package/src/test/bun.ts +1 -0
  700. package/src/test/options.ts +6 -0
  701. package/src/test/vitest.ts +1 -0
  702. package/src/upstash/redis.ts +1 -3
  703. package/src/util/api/client/client.gen.ts +268 -0
  704. package/src/util/api/client/index.ts +25 -0
  705. package/src/util/api/client/types.gen.ts +268 -0
  706. package/src/util/api/client/utils.gen.ts +331 -0
  707. package/src/util/api/core/auth.gen.ts +42 -0
  708. package/src/util/api/core/bodySerializer.gen.ts +92 -0
  709. package/src/util/api/core/params.gen.ts +153 -0
  710. package/src/util/api/core/pathSerializer.gen.ts +181 -0
  711. package/src/util/api/core/serverSentEvents.gen.ts +264 -0
  712. package/src/util/api/core/types.gen.ts +118 -0
  713. package/src/util/api/core/utils.gen.ts +143 -0
  714. package/src/util/http.ts +38 -11
  715. package/src/util/lock.ts +48 -0
  716. package/src/util/memoize.ts +26 -0
  717. package/src/util/oauth-client.ts +238 -0
  718. package/src/util/poll.ts +55 -0
  719. package/src/vercel/project-domain.ts +1 -3
  720. package/src/vercel/project.ts +3 -3
  721. package/workers/cloudflare-state-store.js +8 -5619
  722. package/workers/dofs-state-store.js +2 -802
  723. package/workers/remote-binding-proxy.js +3 -39
  724. package/workers/remote-binding-proxy.ts +126 -35
  725. package/workers/tunnel-proxy.js +6 -73
  726. package/lib/cloudflare/asset-manifest.d.ts +0 -15
  727. package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
  728. package/lib/cloudflare/asset-manifest.js +0 -1
  729. package/lib/cloudflare/asset-manifest.js.map +0 -1
  730. package/lib/cloudflare/oauth.d.ts +0 -22
  731. package/lib/cloudflare/oauth.d.ts.map +0 -1
  732. package/lib/cloudflare/oauth.js +0 -214
  733. package/lib/cloudflare/oauth.js.map +0 -1
  734. package/lib/neon/api-error.d.ts +0 -31
  735. package/lib/neon/api-error.d.ts.map +0 -1
  736. package/lib/neon/api-error.js +0 -73
  737. package/lib/neon/api-error.js.map +0 -1
  738. package/lib/planetscale/api/index.d.ts +0 -3
  739. package/lib/planetscale/api/index.d.ts.map +0 -1
  740. package/lib/planetscale/api/index.js +0 -4
  741. package/lib/planetscale/api/index.js.map +0 -1
  742. package/lib/util/neverthrow.d.ts +0 -16
  743. package/lib/util/neverthrow.d.ts.map +0 -1
  744. package/lib/util/neverthrow.js +0 -46
  745. package/lib/util/neverthrow.js.map +0 -1
  746. package/src/cloudflare/asset-manifest.ts +0 -16
  747. package/src/cloudflare/oauth.ts +0 -301
  748. package/src/neon/api-error.ts +0 -81
  749. package/src/planetscale/api/index.ts +0 -4
  750. package/src/util/neverthrow.ts +0 -64
@@ -1,509 +1,4 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
5
- var __typeError = (msg) => {
6
- throw TypeError(msg);
7
- };
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
- var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
- var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
- var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
- var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
- var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
- var __runInitializers = (array, flags, self, value) => {
16
- for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
- return value;
18
- };
19
- var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
- var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
- var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
- var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
- var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
- return __privateGet(this, extra);
25
- }, set [name](x) {
26
- return __privateSet(this, extra, x);
27
- } }, name));
28
- k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
- for (var i = decorators.length - 1; i >= 0; i--) {
30
- ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
- if (k) {
32
- ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
- if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
- if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
- }
36
- it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
- if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
- else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
- else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
- }
41
- return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
- };
43
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
- var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
45
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
47
- var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
48
-
49
- // workers/dofs-state-store.ts
50
- import { DurableObject as DurableObject2, WorkerEntrypoint } from "cloudflare:workers";
51
-
52
- // ../node_modules/.bun/dofs@0.1.0+0c4a1c984fc5a71c/node_modules/dofs/dist/index.js
53
- import { DurableObject, RpcTarget } from "cloudflare:workers";
54
- var Fs = class extends RpcTarget {
55
- ctx;
56
- env;
57
- chunkSize;
58
- constructor(ctx, env, options) {
59
- super();
60
- this.env = env;
61
- this.ctx = ctx;
62
- this.chunkSize = options?.chunkSize ?? 64 * 1024;
63
- this.ctx.blockConcurrencyWhile(async () => {
64
- this.ensureSchema();
65
- });
66
- }
67
- readFile(path, options) {
68
- const ino = this.resolvePathToInode(path);
69
- const statCursor = this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?", ino);
70
- const statRow = statCursor.next().value;
71
- if (!statRow || !statRow.attr) throw new Error("ENOENT");
72
- const attr = typeof statRow.attr === "string" ? JSON.parse(statRow.attr) : statRow.attr;
73
- const fileSize = attr.size || 0;
74
- let currentOffset = 0;
75
- const self = this;
76
- return new ReadableStream({ pull(controller) {
77
- console.log("pull", {
78
- currentOffset,
79
- fileSize
80
- });
81
- if (currentOffset >= fileSize) {
82
- controller.close();
83
- return;
84
- }
85
- const readLength = Math.min(self.chunkSize, fileSize - currentOffset);
86
- const chunkCursor = self.ctx.storage.sql.exec("SELECT data FROM dofs_chunks WHERE ino = ? AND offset = ? LIMIT 1", ino, currentOffset);
87
- const chunkRow = chunkCursor.next().value;
88
- let chunk;
89
- if (chunkRow && chunkRow.data) if (chunkRow.data instanceof ArrayBuffer) chunk = new Uint8Array(chunkRow.data);
90
- else if (ArrayBuffer.isView(chunkRow.data)) chunk = new Uint8Array(chunkRow.data.buffer);
91
- else if (typeof chunkRow.data === "string") chunk = Uint8Array.from(chunkRow.data);
92
- else chunk = new Uint8Array(0);
93
- else chunk = new Uint8Array(0);
94
- console.log("chunk", { chunk });
95
- controller.enqueue(chunk);
96
- currentOffset += readLength;
97
- } });
98
- }
99
- async writeFile(path, data, options) {
100
- try {
101
- this.unlink(path);
102
- } catch (e) {
103
- if (!(e instanceof Error && e.message === "ENOENT")) throw e;
104
- }
105
- const deviceSize = this.getDeviceSize();
106
- const spaceUsed = this.getSpaceUsed();
107
- this.create(path);
108
- if (typeof data === "object" && data !== null && typeof data.getReader === "function") {
109
- const CHUNK_SIZE = 1024 * 1024;
110
- let offset = 0;
111
- let total = 0;
112
- const reader = data.getReader();
113
- while (true) {
114
- const { value, done } = await reader.read();
115
- if (done) break;
116
- if (!value) continue;
117
- if (spaceUsed + total + value.length > deviceSize) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
118
- this.write(path, value, {
119
- offset,
120
- encoding: options?.encoding
121
- });
122
- offset += value.length;
123
- total += value.length;
124
- }
125
- return;
126
- }
127
- if (typeof data === "string") {
128
- const buf = new TextEncoder().encode(data);
129
- if (spaceUsed + buf.length > deviceSize) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
130
- this.write(path, buf, {
131
- offset: 0,
132
- encoding: options?.encoding
133
- });
134
- return;
135
- }
136
- if (data instanceof ArrayBuffer) {
137
- const buf = new Uint8Array(data);
138
- if (spaceUsed + buf.length > deviceSize) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
139
- this.write(path, buf, {
140
- offset: 0,
141
- encoding: options?.encoding
142
- });
143
- return;
144
- }
145
- if (ArrayBuffer.isView(data)) {
146
- const buf = new Uint8Array(data.buffer);
147
- if (spaceUsed + buf.length > deviceSize) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
148
- this.write(path, buf, {
149
- offset: 0,
150
- encoding: options?.encoding
151
- });
152
- return;
153
- }
154
- throw new Error("Unsupported data type for writeFile");
155
- }
156
- read(path, options) {
157
- const ino = this.resolvePathToInode(path);
158
- const offset = options?.offset ?? 0;
159
- const length = options?.length ?? void 0;
160
- const cursor = this.ctx.storage.sql.exec("SELECT offset, data, length FROM dofs_chunks WHERE ino = ? ORDER BY offset ASC", ino);
161
- let chunks = [];
162
- let fileEnd = 0;
163
- for (let row of cursor) if (row.data && (row.data instanceof ArrayBuffer || ArrayBuffer.isView(row.data))) {
164
- const arr = row.data instanceof ArrayBuffer ? new Uint8Array(row.data) : new Uint8Array(row.data.buffer);
165
- chunks.push({
166
- offset: Number(row.offset),
167
- data: arr
168
- });
169
- fileEnd = Math.max(fileEnd, Number(row.offset) + arr.length);
170
- }
171
- const end = length !== void 0 ? offset + length : fileEnd;
172
- const result = new Uint8Array(end - offset);
173
- for (const chunk of chunks) {
174
- const chunkStart = chunk.offset;
175
- const chunkEnd = chunk.offset + chunk.data.length;
176
- const readStart = Math.max(offset, chunkStart);
177
- const readEnd = Math.min(end, chunkEnd);
178
- if (readStart < readEnd) {
179
- const destStart = readStart - offset;
180
- const srcStart = readStart - chunkStart;
181
- const len = readEnd - readStart;
182
- result.set(chunk.data.subarray(srcStart, srcStart + len), destStart);
183
- }
184
- }
185
- return result.buffer;
186
- }
187
- write(path, data, options) {
188
- let ino;
189
- try {
190
- ino = this.resolvePathToInode(path);
191
- } catch (e) {
192
- if (e instanceof Error && e.message === "ENOENT") {
193
- this.create(path);
194
- ino = this.resolvePathToInode(path);
195
- } else throw e;
196
- }
197
- const offset = options?.offset ?? 0;
198
- const buf = typeof data === "string" ? new TextEncoder().encode(data) : new Uint8Array(data);
199
- const deviceSize = this.getDeviceSize();
200
- const spaceUsed = this.getSpaceUsed();
201
- const fileCursor = this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?", ino);
202
- const fileRow = fileCursor.next().value;
203
- let fileSize = 0;
204
- if (fileRow && fileRow.attr) {
205
- const attr = typeof fileRow.attr === "string" ? JSON.parse(fileRow.attr) : fileRow.attr;
206
- fileSize = attr.size || 0;
207
- }
208
- const endOffset = offset + buf.length;
209
- const additional = endOffset > fileSize ? endOffset - fileSize : 0;
210
- if (spaceUsed + additional > deviceSize) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
211
- const CHUNK_SIZE = this.chunkSize;
212
- let written = 0;
213
- let maxEnd = 0;
214
- while (written < buf.length) {
215
- const absOffset = offset + written;
216
- const chunkIdx = Math.floor(absOffset / CHUNK_SIZE);
217
- const chunkOffset = chunkIdx * CHUNK_SIZE;
218
- const chunkOffInChunk = absOffset % CHUNK_SIZE;
219
- const writeLen = Math.min(CHUNK_SIZE - chunkOffInChunk, buf.length - written);
220
- let chunkData = this.loadChunk(ino, chunkOffset, CHUNK_SIZE);
221
- chunkData.set(buf.subarray(written, written + writeLen), chunkOffInChunk);
222
- let chunkLength = CHUNK_SIZE;
223
- const thisEnd = chunkOffInChunk + writeLen;
224
- if (thisEnd < CHUNK_SIZE) chunkLength = thisEnd;
225
- this.ctx.storage.sql.exec("INSERT INTO dofs_chunks (ino, offset, data, length) VALUES (?, ?, ?, ?) ON CONFLICT(ino, offset) DO UPDATE SET data=excluded.data, length=excluded.length", ino, chunkOffset, chunkData.subarray(0, chunkLength), chunkLength);
226
- written += writeLen;
227
- maxEnd = Math.max(maxEnd, absOffset + writeLen);
228
- }
229
- this.updateFileSizeAndSpaceUsed(ino);
230
- }
231
- mkdir(path, options) {
232
- const parts = path.split("/").filter(Boolean);
233
- if (parts.length === 0) throw Object.assign(new Error("EEXIST"), { code: "EEXIST" });
234
- const name = parts[parts.length - 1];
235
- const parentPath = "/" + parts.slice(0, -1).join("/");
236
- let parent;
237
- try {
238
- parent = this.resolvePathToInode(parentPath);
239
- } catch (e) {
240
- if (e.message === "ENOENT" && options?.recursive) {
241
- this.mkdir(parentPath, options);
242
- parent = this.resolvePathToInode(parentPath);
243
- } else throw e;
244
- }
245
- const cursor = this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?", parent, name);
246
- if (cursor.next().value) {
247
- if (options?.recursive) return;
248
- throw Object.assign(new Error("EEXIST"), { code: "EEXIST" });
249
- }
250
- const ino = this.allocInode();
251
- const now = Date.now();
252
- const mode = options?.mode ?? 493;
253
- const umask = options?.umask ?? 0;
254
- const perm = mode & ~umask & 4095;
255
- const attr = {
256
- ino,
257
- size: 0,
258
- blocks: 0,
259
- atime: now,
260
- mtime: now,
261
- ctime: now,
262
- crtime: now,
263
- kind: "Directory",
264
- perm,
265
- nlink: 2,
266
- uid: 0,
267
- gid: 0,
268
- rdev: 0,
269
- flags: 0,
270
- blksize: 512
271
- };
272
- this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)", ino, name, parent, 1, JSON.stringify(attr));
273
- }
274
- rmdir(path, options) {
275
- let ino;
276
- try {
277
- ino = this.resolvePathToInode(path);
278
- } catch (e) {
279
- if (e.message === "ENOENT" && options?.recursive) return;
280
- throw e;
281
- }
282
- if (options?.recursive) {
283
- const cursor = this.ctx.storage.sql.exec("SELECT name, is_dir FROM dofs_files WHERE parent = ?", ino);
284
- for (let row of cursor) {
285
- const childPath = path === "/" ? `/${row.name}` : `${path}/${row.name}`;
286
- if (row.is_dir) this.rmdir(childPath, options);
287
- else this.unlink(childPath);
288
- }
289
- } else {
290
- const cursor = this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE parent = ?", ino);
291
- const row = cursor.next().value;
292
- if (!row) throw new Error("ENOENT");
293
- if (Number(row.count) > 0) throw new Error("ENOTEMPTY");
294
- }
295
- this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?", ino);
296
- }
297
- listDir(path, options) {
298
- const ino = this.resolvePathToInode(path);
299
- const cursor = this.ctx.storage.sql.exec("SELECT name, is_dir FROM dofs_files WHERE parent = ?", ino);
300
- const names = [".", ".."];
301
- for (let row of cursor) if (typeof row.name === "string") {
302
- names.push(row.name);
303
- if (options?.recursive && row.is_dir) {
304
- const childPath = path === "/" ? `/${row.name}` : `${path}/${row.name}`;
305
- const childNames = this.listDir(childPath, options);
306
- for (const childName of childNames) if (childName !== "." && childName !== "..") names.push(`${row.name}/${childName}`);
307
- }
308
- }
309
- return names;
310
- }
311
- stat(path) {
312
- const ino = this.resolvePathToInode(path);
313
- const cursor = this.ctx.storage.sql.exec("SELECT attr, is_dir FROM dofs_files WHERE ino = ?", ino);
314
- const row = cursor.next().value;
315
- if (!row) throw new Error("ENOENT");
316
- const attr = typeof row.attr === "string" ? JSON.parse(row.attr) : row.attr;
317
- return {
318
- isFile: !row.is_dir,
319
- isDirectory: !!row.is_dir,
320
- size: attr.size,
321
- mode: attr.perm,
322
- uid: attr.uid,
323
- gid: attr.gid,
324
- mtime: attr.mtime,
325
- ctime: attr.ctime,
326
- atime: attr.atime,
327
- crtime: attr.crtime,
328
- blocks: attr.blocks,
329
- nlink: attr.nlink,
330
- rdev: attr.rdev,
331
- flags: attr.flags,
332
- blksize: attr.blksize,
333
- kind: attr.kind
334
- };
335
- }
336
- setattr(path, options) {
337
- const ino = this.resolvePathToInode(path);
338
- const cursor = this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?", ino);
339
- const row = cursor.next().value;
340
- if (!row) throw new Error("ENOENT");
341
- const attr = typeof row.attr === "string" ? JSON.parse(row.attr) : row.attr;
342
- if (options.mode !== void 0) attr.perm = options.mode;
343
- if (options.uid !== void 0) attr.uid = options.uid;
344
- if (options.gid !== void 0) attr.gid = options.gid;
345
- this.ctx.storage.sql.exec("UPDATE dofs_files SET attr = ? WHERE ino = ?", JSON.stringify(attr), ino);
346
- }
347
- symlink(target, path) {
348
- const parts = path.split("/").filter(Boolean);
349
- if (parts.length === 0) throw new Error("EEXIST");
350
- const name = parts[parts.length - 1];
351
- const parentPath = "/" + parts.slice(0, -1).join("/");
352
- const parent = this.resolvePathToInode(parentPath);
353
- const cursor = this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?", parent, name);
354
- if (cursor.next().value) throw new Error("EEXIST");
355
- const ino = this.allocInode();
356
- const now = Date.now();
357
- const attr = {
358
- ino,
359
- size: target.length,
360
- blocks: 0,
361
- atime: now,
362
- mtime: now,
363
- ctime: now,
364
- crtime: now,
365
- kind: "Symlink",
366
- perm: 511,
367
- nlink: 1,
368
- uid: 0,
369
- gid: 0,
370
- rdev: 0,
371
- flags: 0,
372
- blksize: 512
373
- };
374
- const data = new TextEncoder().encode(target);
375
- this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, ?)", ino, name, parent, 0, JSON.stringify(attr), data);
376
- }
377
- readlink(path) {
378
- const ino = this.resolvePathToInode(path);
379
- const cursor = this.ctx.storage.sql.exec("SELECT data FROM dofs_files WHERE ino = ?", ino);
380
- const row = cursor.next().value;
381
- if (!row || !row.data) throw new Error("ENOENT");
382
- let arr;
383
- if (row.data instanceof ArrayBuffer) arr = new Uint8Array(row.data);
384
- else if (ArrayBuffer.isView(row.data)) arr = new Uint8Array(row.data.buffer);
385
- else throw new Error("ENOENT");
386
- return new TextDecoder().decode(arr);
387
- }
388
- rename(oldPath, newPath) {
389
- const oldParts = oldPath.split("/").filter(Boolean);
390
- const newParts = newPath.split("/").filter(Boolean);
391
- if (oldParts.length === 0 || newParts.length === 0) throw Object.assign(new Error("ENOENT"), { code: "ENOENT" });
392
- const oldName = oldParts[oldParts.length - 1];
393
- const oldParentPath = "/" + oldParts.slice(0, -1).join("/");
394
- const newName = newParts[newParts.length - 1];
395
- const newParentPath = "/" + newParts.slice(0, -1).join("/");
396
- const oldParent = this.resolvePathToInode(oldParentPath);
397
- const newParent = this.resolvePathToInode(newParentPath);
398
- const oldCursor = this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?", oldParent, oldName);
399
- const oldRow = oldCursor.next().value;
400
- if (!oldRow) throw Object.assign(new Error("ENOENT"), { code: "ENOENT" });
401
- const ino = oldRow.ino;
402
- const newCursor = this.ctx.storage.sql.exec("SELECT ino, is_dir FROM dofs_files WHERE parent = ? AND name = ?", newParent, newName);
403
- const newRow = newCursor.next().value;
404
- if (newRow) {
405
- if (newRow.is_dir) {
406
- const childCursor = this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE parent = ?", newRow.ino);
407
- const childRow = childCursor.next().value;
408
- if (childRow && Number(childRow.count) > 0) throw Object.assign(new Error("ENOTEMPTY"), { code: "ENOTEMPTY" });
409
- }
410
- this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?", newRow.ino);
411
- this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ?", newRow.ino);
412
- }
413
- this.ctx.storage.sql.exec("UPDATE dofs_files SET parent = ?, name = ? WHERE ino = ?", newParent, newName, ino);
414
- }
415
- unlink(path) {
416
- const ino = this.resolvePathToInode(path);
417
- const cursor = this.ctx.storage.sql.exec("SELECT is_dir FROM dofs_files WHERE ino = ?", ino);
418
- const row = cursor.next().value;
419
- if (!row) throw Object.assign(new Error("ENOENT"), { code: "ENOENT" });
420
- if (row.is_dir) throw Object.assign(new Error("EISDIR"), { code: "EISDIR" });
421
- this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?", ino);
422
- this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ?", ino);
423
- this.updateFileSizeAndSpaceUsed(ino);
424
- }
425
- create(path, options) {
426
- const parts = path.split("/").filter(Boolean);
427
- if (parts.length === 0) throw Object.assign(new Error("EEXIST"), { code: "EEXIST" });
428
- const name = parts[parts.length - 1];
429
- const parentPath = "/" + parts.slice(0, -1).join("/");
430
- const parent = this.resolvePathToInode(parentPath);
431
- const cursor = this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?", parent, name);
432
- if (cursor.next().value) throw Object.assign(new Error("EEXIST"), { code: "EEXIST" });
433
- const ino = this.allocInode();
434
- const now = Date.now();
435
- const mode = options?.mode ?? 420;
436
- const umask = options?.umask ?? 0;
437
- const perm = mode & ~umask & 4095;
438
- const attr = {
439
- ino,
440
- size: 0,
441
- blocks: 0,
442
- atime: now,
443
- mtime: now,
444
- ctime: now,
445
- crtime: now,
446
- kind: "File",
447
- perm,
448
- nlink: 1,
449
- uid: 0,
450
- gid: 0,
451
- rdev: 0,
452
- flags: 0,
453
- blksize: 512
454
- };
455
- this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)", ino, name, parent, 0, JSON.stringify(attr));
456
- }
457
- truncate(path, size) {
458
- const ino = this.resolvePathToInode(path);
459
- const CHUNK_SIZE = this.chunkSize;
460
- const firstExcessChunk = Math.floor(size / CHUNK_SIZE) * CHUNK_SIZE;
461
- this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ? AND offset >= ?", ino, firstExcessChunk);
462
- if (size % CHUNK_SIZE !== 0) {
463
- const lastChunkOffset = Math.floor(size / CHUNK_SIZE) * CHUNK_SIZE;
464
- const lastLen = size % CHUNK_SIZE;
465
- let chunkData = this.loadChunk(ino, lastChunkOffset, CHUNK_SIZE);
466
- chunkData = chunkData.subarray(0, lastLen);
467
- this.ctx.storage.sql.exec("UPDATE dofs_chunks SET data = ?, length = ? WHERE ino = ? AND offset = ?", chunkData, lastLen, ino, lastChunkOffset);
468
- }
469
- this.updateFileSizeAndSpaceUsed(ino);
470
- }
471
- getDeviceStats() {
472
- const size = this.getDeviceSize();
473
- const used = this.getSpaceUsed();
474
- return {
475
- deviceSize: size,
476
- spaceUsed: used,
477
- spaceAvailable: size - used
478
- };
479
- }
480
- setDeviceSize(newSize) {
481
- const used = this.getSpaceUsed();
482
- if (newSize < used) throw Object.assign(new Error("ENOSPC"), { code: "ENOSPC" });
483
- this.ctx.storage.sql.exec("UPDATE dofs_meta SET value = ? WHERE key = ?", newSize.toString(), "device_size");
484
- }
485
- rootDirAttr() {
486
- const now = Date.now();
487
- return {
488
- ino: 1,
489
- size: 0,
490
- blocks: 0,
491
- atime: now,
492
- mtime: now,
493
- ctime: now,
494
- crtime: now,
495
- kind: "Directory",
496
- perm: 493,
497
- nlink: 2,
498
- uid: 0,
499
- gid: 0,
500
- rdev: 0,
501
- flags: 0,
502
- blksize: 512
503
- };
504
- }
505
- ensureSchema() {
506
- this.ctx.storage.sql.exec(`
1
+ var B=Object.create;var k=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var F=(s,e)=>(e=Symbol[s])?e:Symbol.for("Symbol."+s),R=s=>{throw TypeError(s)};var $=(s,e,t)=>e in s?k(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var D=(s,e)=>k(s,"name",{value:e,configurable:!0});var U=s=>[,,,B(s?.[F("metadata")]??null)],M=["class","method","getter","setter","accessor","field","value","get","set"],N=s=>s!==void 0&&typeof s!="function"?R("Function expected"):s,V=(s,e,t,r,n)=>({kind:M[s],name:e,metadata:r,addInitializer:o=>t._?R("Already initialized"):n.push(N(o||null))}),J=(s,e)=>$(e,F("metadata"),s[3]),q=(s,e,t,r)=>{for(var n=0,o=s[e>>1],l=o&&o.length;n<l;n++)e&1?o[n].call(t):r=o[n].call(t,r);return r},z=(s,e,t,r,n,o)=>{var l,i,f,u,E,a=e&7,d=!!(e&8),c=!!(e&16),h=a>3?s.length+1:a?d?1:2:0,m=M[a+5],T=a>3&&(s[h-1]=[]),v=s[h]||(s[h]=[]),S=a&&(!c&&!d&&(n=n.prototype),a<5&&(a>3||!c)&&X(a<4?n:{get[t](){return L(this,o)},set[t](g){return P(this,o,g)}},t));a?c&&a<4&&D(o,(a>2?"set ":a>1?"get ":"")+t):D(n,t);for(var O=r.length-1;O>=0;O--)u=V(a,t,f={},s[3],v),a&&(u.static=d,u.private=c,E=u.access={has:c?g=>Y(n,g):g=>t in g},a^3&&(E.get=c?g=>(a^1?L:K)(g,n,a^4?o:S.get):g=>g[t]),a>2&&(E.set=c?(g,x)=>P(g,n,x,a^4?o:S.set):(g,x)=>g[t]=x)),i=(0,r[O])(a?a<4?c?o:S[m]:a>4?void 0:{get:S.get,set:S.set}:n,u),f._=1,a^4||i===void 0?N(i)&&(a>4?T.unshift(i):a?c?o=i:S[m]=i:n=i):typeof i!="object"||i===null?R("Object expected"):(N(l=i.get)&&(S.get=l),N(l=i.set)&&(S.set=l),N(l=i.init)&&T.unshift(l));return a||J(s,n),S&&k(n,t,S),c?a^4?o:S:n};var y=(s,e,t)=>e.has(s)||R("Cannot "+t),Y=(s,e)=>Object(e)!==e?R('Cannot use the "in" operator on this value'):s.has(e),L=(s,e,t)=>(y(s,e,"read from private field"),t?t.call(s):e.get(s));var P=(s,e,t,r)=>(y(s,e,"write to private field"),r?r.call(s,t):e.set(s,t),t),K=(s,e,t)=>(y(s,e,"access private method"),t);import{DurableObject as te,WorkerEntrypoint as se}from"cloudflare:workers";import{DurableObject as G,RpcTarget as Z}from"cloudflare:workers";var A=class extends Z{ctx;env;chunkSize;constructor(s,e,t){super(),this.env=e,this.ctx=s,this.chunkSize=t?.chunkSize??64*1024,this.ctx.blockConcurrencyWhile(async()=>{this.ensureSchema()})}readFile(s,e){let t=this.resolvePathToInode(s),n=this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?",t).next().value;if(!n||!n.attr)throw new Error("ENOENT");let l=(typeof n.attr=="string"?JSON.parse(n.attr):n.attr).size||0,i=0,f=this;return new ReadableStream({pull(u){if(console.log("pull",{currentOffset:i,fileSize:l}),i>=l){u.close();return}let E=Math.min(f.chunkSize,l-i),d=f.ctx.storage.sql.exec("SELECT data FROM dofs_chunks WHERE ino = ? AND offset = ? LIMIT 1",t,i).next().value,c;d&&d.data?d.data instanceof ArrayBuffer?c=new Uint8Array(d.data):ArrayBuffer.isView(d.data)?c=new Uint8Array(d.data.buffer):typeof d.data=="string"?c=Uint8Array.from(d.data):c=new Uint8Array(0):c=new Uint8Array(0),console.log("chunk",{chunk:c}),u.enqueue(c),i+=E}})}async writeFile(s,e,t){try{this.unlink(s)}catch(o){if(!(o instanceof Error&&o.message==="ENOENT"))throw o}let r=this.getDeviceSize(),n=this.getSpaceUsed();if(this.create(s),typeof e=="object"&&e!==null&&typeof e.getReader=="function"){let l=0,i=0,f=e.getReader();for(;;){let{value:u,done:E}=await f.read();if(E)break;if(u){if(n+i+u.length>r)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});this.write(s,u,{offset:l,encoding:t?.encoding}),l+=u.length,i+=u.length}}return}if(typeof e=="string"){let o=new TextEncoder().encode(e);if(n+o.length>r)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});this.write(s,o,{offset:0,encoding:t?.encoding});return}if(e instanceof ArrayBuffer){let o=new Uint8Array(e);if(n+o.length>r)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});this.write(s,o,{offset:0,encoding:t?.encoding});return}if(ArrayBuffer.isView(e)){let o=new Uint8Array(e.buffer);if(n+o.length>r)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});this.write(s,o,{offset:0,encoding:t?.encoding});return}throw new Error("Unsupported data type for writeFile")}read(s,e){let t=this.resolvePathToInode(s),r=e?.offset??0,n=e?.length??void 0,o=this.ctx.storage.sql.exec("SELECT offset, data, length FROM dofs_chunks WHERE ino = ? ORDER BY offset ASC",t),l=[],i=0;for(let E of o)if(E.data&&(E.data instanceof ArrayBuffer||ArrayBuffer.isView(E.data))){let a=E.data instanceof ArrayBuffer?new Uint8Array(E.data):new Uint8Array(E.data.buffer);l.push({offset:Number(E.offset),data:a}),i=Math.max(i,Number(E.offset)+a.length)}let f=n!==void 0?r+n:i,u=new Uint8Array(f-r);for(let E of l){let a=E.offset,d=E.offset+E.data.length,c=Math.max(r,a),h=Math.min(f,d);if(c<h){let m=c-r,T=c-a,v=h-c;u.set(E.data.subarray(T,T+v),m)}}return u.buffer}write(s,e,t){let r;try{r=this.resolvePathToInode(s)}catch(T){if(T instanceof Error&&T.message==="ENOENT")this.create(s),r=this.resolvePathToInode(s);else throw T}let n=t?.offset??0,o=typeof e=="string"?new TextEncoder().encode(e):new Uint8Array(e),l=this.getDeviceSize(),i=this.getSpaceUsed(),u=this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?",r).next().value,E=0;u&&u.attr&&(E=(typeof u.attr=="string"?JSON.parse(u.attr):u.attr).size||0);let a=n+o.length,d=a>E?a-E:0;if(i+d>l)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});let c=this.chunkSize,h=0,m=0;for(;h<o.length;){let T=n+h,S=Math.floor(T/c)*c,O=T%c,g=Math.min(c-O,o.length-h),x=this.loadChunk(r,S,c);x.set(o.subarray(h,h+g),O);let _=c,b=O+g;b<c&&(_=b),this.ctx.storage.sql.exec("INSERT INTO dofs_chunks (ino, offset, data, length) VALUES (?, ?, ?, ?) ON CONFLICT(ino, offset) DO UPDATE SET data=excluded.data, length=excluded.length",r,S,x.subarray(0,_),_),h+=g,m=Math.max(m,T+g)}this.updateFileSizeAndSpaceUsed(r)}mkdir(s,e){let t=s.split("/").filter(Boolean);if(t.length===0)throw Object.assign(new Error("EEXIST"),{code:"EEXIST"});let r=t[t.length-1],n="/"+t.slice(0,-1).join("/"),o;try{o=this.resolvePathToInode(n)}catch(c){if(c.message==="ENOENT"&&e?.recursive)this.mkdir(n,e),o=this.resolvePathToInode(n);else throw c}if(this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?",o,r).next().value){if(e?.recursive)return;throw Object.assign(new Error("EEXIST"),{code:"EEXIST"})}let i=this.allocInode(),f=Date.now(),u=e?.mode??493,E=e?.umask??0,a=u&~E&4095,d={ino:i,size:0,blocks:0,atime:f,mtime:f,ctime:f,crtime:f,kind:"Directory",perm:a,nlink:2,uid:0,gid:0,rdev:0,flags:0,blksize:512};this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)",i,r,o,1,JSON.stringify(d))}rmdir(s,e){let t;try{t=this.resolvePathToInode(s)}catch(r){if(r.message==="ENOENT"&&e?.recursive)return;throw r}if(e?.recursive){let r=this.ctx.storage.sql.exec("SELECT name, is_dir FROM dofs_files WHERE parent = ?",t);for(let n of r){let o=s==="/"?`/${n.name}`:`${s}/${n.name}`;n.is_dir?this.rmdir(o,e):this.unlink(o)}}else{let n=this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE parent = ?",t).next().value;if(!n)throw new Error("ENOENT");if(Number(n.count)>0)throw new Error("ENOTEMPTY")}this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?",t)}listDir(s,e){let t=this.resolvePathToInode(s),r=this.ctx.storage.sql.exec("SELECT name, is_dir FROM dofs_files WHERE parent = ?",t),n=[".",".."];for(let o of r)if(typeof o.name=="string"&&(n.push(o.name),e?.recursive&&o.is_dir)){let l=s==="/"?`/${o.name}`:`${s}/${o.name}`,i=this.listDir(l,e);for(let f of i)f!=="."&&f!==".."&&n.push(`${o.name}/${f}`)}return n}stat(s){let e=this.resolvePathToInode(s),r=this.ctx.storage.sql.exec("SELECT attr, is_dir FROM dofs_files WHERE ino = ?",e).next().value;if(!r)throw new Error("ENOENT");let n=typeof r.attr=="string"?JSON.parse(r.attr):r.attr;return{isFile:!r.is_dir,isDirectory:!!r.is_dir,size:n.size,mode:n.perm,uid:n.uid,gid:n.gid,mtime:n.mtime,ctime:n.ctime,atime:n.atime,crtime:n.crtime,blocks:n.blocks,nlink:n.nlink,rdev:n.rdev,flags:n.flags,blksize:n.blksize,kind:n.kind}}setattr(s,e){let t=this.resolvePathToInode(s),n=this.ctx.storage.sql.exec("SELECT attr FROM dofs_files WHERE ino = ?",t).next().value;if(!n)throw new Error("ENOENT");let o=typeof n.attr=="string"?JSON.parse(n.attr):n.attr;e.mode!==void 0&&(o.perm=e.mode),e.uid!==void 0&&(o.uid=e.uid),e.gid!==void 0&&(o.gid=e.gid),this.ctx.storage.sql.exec("UPDATE dofs_files SET attr = ? WHERE ino = ?",JSON.stringify(o),t)}symlink(s,e){let t=e.split("/").filter(Boolean);if(t.length===0)throw new Error("EEXIST");let r=t[t.length-1],n="/"+t.slice(0,-1).join("/"),o=this.resolvePathToInode(n);if(this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?",o,r).next().value)throw new Error("EEXIST");let i=this.allocInode(),f=Date.now(),u={ino:i,size:s.length,blocks:0,atime:f,mtime:f,ctime:f,crtime:f,kind:"Symlink",perm:511,nlink:1,uid:0,gid:0,rdev:0,flags:0,blksize:512},E=new TextEncoder().encode(s);this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, ?)",i,r,o,0,JSON.stringify(u),E)}readlink(s){let e=this.resolvePathToInode(s),r=this.ctx.storage.sql.exec("SELECT data FROM dofs_files WHERE ino = ?",e).next().value;if(!r||!r.data)throw new Error("ENOENT");let n;if(r.data instanceof ArrayBuffer)n=new Uint8Array(r.data);else if(ArrayBuffer.isView(r.data))n=new Uint8Array(r.data.buffer);else throw new Error("ENOENT");return new TextDecoder().decode(n)}rename(s,e){let t=s.split("/").filter(Boolean),r=e.split("/").filter(Boolean);if(t.length===0||r.length===0)throw Object.assign(new Error("ENOENT"),{code:"ENOENT"});let n=t[t.length-1],o="/"+t.slice(0,-1).join("/"),l=r[r.length-1],i="/"+r.slice(0,-1).join("/"),f=this.resolvePathToInode(o),u=this.resolvePathToInode(i),a=this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?",f,n).next().value;if(!a)throw Object.assign(new Error("ENOENT"),{code:"ENOENT"});let d=a.ino,h=this.ctx.storage.sql.exec("SELECT ino, is_dir FROM dofs_files WHERE parent = ? AND name = ?",u,l).next().value;if(h){if(h.is_dir){let T=this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE parent = ?",h.ino).next().value;if(T&&Number(T.count)>0)throw Object.assign(new Error("ENOTEMPTY"),{code:"ENOTEMPTY"})}this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?",h.ino),this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ?",h.ino)}this.ctx.storage.sql.exec("UPDATE dofs_files SET parent = ?, name = ? WHERE ino = ?",u,l,d)}unlink(s){let e=this.resolvePathToInode(s),r=this.ctx.storage.sql.exec("SELECT is_dir FROM dofs_files WHERE ino = ?",e).next().value;if(!r)throw Object.assign(new Error("ENOENT"),{code:"ENOENT"});if(r.is_dir)throw Object.assign(new Error("EISDIR"),{code:"EISDIR"});this.ctx.storage.sql.exec("DELETE FROM dofs_files WHERE ino = ?",e),this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ?",e),this.updateFileSizeAndSpaceUsed(e)}create(s,e){let t=s.split("/").filter(Boolean);if(t.length===0)throw Object.assign(new Error("EEXIST"),{code:"EEXIST"});let r=t[t.length-1],n="/"+t.slice(0,-1).join("/"),o=this.resolvePathToInode(n);if(this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?",o,r).next().value)throw Object.assign(new Error("EEXIST"),{code:"EEXIST"});let i=this.allocInode(),f=Date.now(),u=e?.mode??420,E=e?.umask??0,a=u&~E&4095,d={ino:i,size:0,blocks:0,atime:f,mtime:f,ctime:f,crtime:f,kind:"File",perm:a,nlink:1,uid:0,gid:0,rdev:0,flags:0,blksize:512};this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)",i,r,o,0,JSON.stringify(d))}truncate(s,e){let t=this.resolvePathToInode(s),r=this.chunkSize,n=Math.floor(e/r)*r;if(this.ctx.storage.sql.exec("DELETE FROM dofs_chunks WHERE ino = ? AND offset >= ?",t,n),e%r!==0){let o=Math.floor(e/r)*r,l=e%r,i=this.loadChunk(t,o,r);i=i.subarray(0,l),this.ctx.storage.sql.exec("UPDATE dofs_chunks SET data = ?, length = ? WHERE ino = ? AND offset = ?",i,l,t,o)}this.updateFileSizeAndSpaceUsed(t)}getDeviceStats(){let s=this.getDeviceSize(),e=this.getSpaceUsed();return{deviceSize:s,spaceUsed:e,spaceAvailable:s-e}}setDeviceSize(s){let e=this.getSpaceUsed();if(s<e)throw Object.assign(new Error("ENOSPC"),{code:"ENOSPC"});this.ctx.storage.sql.exec("UPDATE dofs_meta SET value = ? WHERE key = ?",s.toString(),"device_size")}rootDirAttr(){let s=Date.now();return{ino:1,size:0,blocks:0,atime:s,mtime:s,ctime:s,crtime:s,kind:"Directory",perm:493,nlink:2,uid:0,gid:0,rdev:0,flags:0,blksize:512}}ensureSchema(){this.ctx.storage.sql.exec(`
507
2
  CREATE TABLE IF NOT EXISTS dofs_meta (
508
3
  key TEXT PRIMARY KEY,
509
4
  value TEXT
@@ -528,299 +23,4 @@ var Fs = class extends RpcTarget {
528
23
  CREATE INDEX IF NOT EXISTS idx_dofs_files_name ON dofs_files(name);
529
24
  CREATE INDEX IF NOT EXISTS idx_dofs_chunks_ino ON dofs_chunks(ino);
530
25
  CREATE INDEX IF NOT EXISTS idx_dofs_chunks_ino_offset ON dofs_chunks(ino, offset);
531
- `);
532
- const metaCursor = this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?", "device_size");
533
- if (!metaCursor.next().value) this.ctx.storage.sql.exec("INSERT INTO dofs_meta (key, value) VALUES (?, ?)", "device_size", (1024 * 1024 * 1024).toString());
534
- const usedCursor = this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?", "space_used");
535
- if (!usedCursor.next().value) this.ctx.storage.sql.exec("INSERT INTO dofs_meta (key, value) VALUES (?, ?)", "space_used", "0");
536
- const cursor = this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE ino = ?", 1);
537
- const row = cursor.next().value;
538
- if (!row || row.count === 0) {
539
- const attr = this.rootDirAttr();
540
- this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)", 1, "/", void 0, 1, JSON.stringify(attr));
541
- }
542
- }
543
- resolvePathToInode(path) {
544
- if (path === "/" || path === "") return 1;
545
- const parts = path.split("/").filter(Boolean);
546
- let parent = 1;
547
- for (const name of parts) {
548
- const cursor = this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?", parent, name);
549
- const row = cursor.next().value;
550
- if (!row || row.ino == null) throw new Error("ENOENT");
551
- parent = Number(row.ino);
552
- }
553
- return parent;
554
- }
555
- allocInode() {
556
- const cursor = this.ctx.storage.sql.exec("SELECT MAX(ino) as max FROM dofs_files");
557
- const row = cursor.next().value;
558
- return row && row.max != null ? Number(row.max) + 1 : 2;
559
- }
560
- loadChunk(ino, chunkOffset, chunkSize) {
561
- const chunkCursor = this.ctx.storage.sql.exec("SELECT data FROM dofs_chunks WHERE ino = ? AND offset = ?", ino, chunkOffset);
562
- const chunkRow = chunkCursor.next().value;
563
- if (chunkRow && chunkRow.data) {
564
- if (chunkRow.data instanceof ArrayBuffer) return new Uint8Array(chunkRow.data);
565
- else if (ArrayBuffer.isView(chunkRow.data)) return new Uint8Array(chunkRow.data.buffer);
566
- }
567
- return new Uint8Array(chunkSize);
568
- }
569
- getDeviceSize() {
570
- const cursor = this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?", "device_size");
571
- const row = cursor.next().value;
572
- return row ? Number(row.value) : 1024 * 1024 * 1024;
573
- }
574
- getSpaceUsed() {
575
- const cursor = this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?", "space_used");
576
- const row = cursor.next().value;
577
- return row ? Number(row.value) : 0;
578
- }
579
- setSpaceUsed(val) {
580
- this.ctx.storage.sql.exec("UPDATE dofs_meta SET value = ? WHERE key = ?", val.toString(), "space_used");
581
- }
582
- updateFileSizeAndSpaceUsed(ino) {
583
- const cursor = this.ctx.storage.sql.exec("SELECT SUM(length) as total FROM dofs_chunks WHERE ino = ?", ino);
584
- const row = cursor.next().value;
585
- const size = row && row.total ? Number(row.total) : 0;
586
- this.ctx.storage.sql.exec('UPDATE dofs_files SET attr = json_set(attr, "$.size", ?) WHERE ino = ?', size, ino);
587
- const usedCursor = this.ctx.storage.sql.exec("SELECT SUM(length) as total FROM dofs_chunks");
588
- const usedRow = usedCursor.next().value;
589
- const used = usedRow && usedRow.total ? Number(usedRow.total) : 0;
590
- this.setSpaceUsed(used);
591
- }
592
- };
593
- function Dofs(options = {}) {
594
- return function(target) {
595
- return class extends target {
596
- fs;
597
- constructor(ctx, env) {
598
- super(ctx, env);
599
- this.fs = new Fs(ctx, env, options);
600
- }
601
- getFs() {
602
- return this.fs;
603
- }
604
- };
605
- };
606
- }
607
- var _MyAttributeObject_decorators, _init, _a, _b;
608
- var MyAttributeObject = (_MyAttributeObject_decorators = [Dofs({ chunkSize: 4 * 1024 })], _a = class extends (_b = DurableObject) {
609
- constructor(ctx, env) {
610
- super(ctx, env);
611
- }
612
- }, _init = __decoratorStart(_b), _a = __decorateElement(_init, 0, "MyAttributeObject", _MyAttributeObject_decorators, _a), __runInitializers(_init, 1, _a), _a);
613
-
614
- // workers/dofs-state-store.ts
615
- import { timingSafeEqual } from "node:crypto";
616
- var dofs_state_store_default = class extends WorkerEntrypoint {
617
- async fetch(request) {
618
- const url = new URL(request.url);
619
- if (url.pathname === "/health-check") {
620
- return new Response("OK", { status: 200 });
621
- }
622
- try {
623
- const result = await this.handle(request);
624
- const body = {
625
- success: true,
626
- status: 200,
627
- result: result ?? void 0
628
- };
629
- return Response.json(body, { status: body.status });
630
- } catch (error) {
631
- return APIError.fromUnknown(error).toResponse();
632
- }
633
- }
634
- async handle(request) {
635
- if (!this.authorize(request)) {
636
- throw new APIError("Unauthorized", 401);
637
- }
638
- const stub = this.getStub(request);
639
- const body = await this.parseBody(request);
640
- switch (body.method) {
641
- case "validate":
642
- return null;
643
- case "all":
644
- return await stub.all(body.params.prefix);
645
- case "count":
646
- return await stub.count(body.params.prefix);
647
- case "delete":
648
- return await stub.delete(body.params.key);
649
- case "get":
650
- return await stub.get(body.params.key);
651
- case "getBatch":
652
- return await stub.getBatch(body.params.keys);
653
- case "list":
654
- return await stub.list(body.params.prefix);
655
- case "set":
656
- return await stub.set(body.params.key, body.params.value);
657
- default: {
658
- const _ = body;
659
- throw new APIError("Method not found", 404);
660
- }
661
- }
662
- }
663
- authorize(request) {
664
- const token = request.headers.get("Authorization")?.split(" ")[1];
665
- if (!token) {
666
- return false;
667
- }
668
- const expectedBuffer = Buffer.from(this.env.DOFS_TOKEN, "utf8");
669
- const providedBuffer = Buffer.alloc(expectedBuffer.length);
670
- Buffer.from(token, "utf8").copy(
671
- providedBuffer,
672
- 0,
673
- 0,
674
- expectedBuffer.length
675
- );
676
- return timingSafeEqual(expectedBuffer, providedBuffer);
677
- }
678
- getStub(request) {
679
- const url = new URL(request.url);
680
- const app = url.searchParams.get("app");
681
- const stage = url.searchParams.get("stage");
682
- if (!app || !stage) {
683
- throw new APIError("Missing app or stage", 400);
684
- }
685
- return this.env.DOFS_STATE_STORE.get(
686
- this.env.DOFS_STATE_STORE.idFromName(`${app}/${stage}`)
687
- );
688
- }
689
- async parseBody(request) {
690
- try {
691
- return await request.json();
692
- } catch {
693
- throw new APIError("Invalid JSON", 400);
694
- }
695
- }
696
- };
697
- var APIError = class _APIError extends Error {
698
- constructor(message, status) {
699
- super(message);
700
- this.status = status;
701
- }
702
- toResponse() {
703
- return Response.json(
704
- {
705
- success: false,
706
- status: this.status,
707
- error: this.message
708
- },
709
- { status: this.status }
710
- );
711
- }
712
- static fromUnknown(error) {
713
- if (error instanceof _APIError) {
714
- return error;
715
- }
716
- if (error instanceof Error) {
717
- return new _APIError(error.message, 500);
718
- }
719
- return new _APIError("An unknown error occurred.", 500);
720
- }
721
- };
722
- var DOFSStateStore = class extends DurableObject2 {
723
- fs = new Fs(this.ctx, this.env, {
724
- chunkSize: 256 * 1024
725
- });
726
- async all(prefix) {
727
- const keys = this.list(prefix);
728
- const result = {};
729
- await Promise.all(
730
- keys.map(async (key) => {
731
- const value = await this.get(`${prefix}/${key}`);
732
- if (value) {
733
- result[key] = value;
734
- }
735
- })
736
- );
737
- return result;
738
- }
739
- count(prefix) {
740
- return this.list(prefix).length;
741
- }
742
- delete(key) {
743
- if (this.isFile(`${key}.json`)) {
744
- this.fs.unlink(`${key}.json`);
745
- }
746
- if (this.isDirectory(key)) {
747
- this.fs.rmdir(key);
748
- }
749
- }
750
- async get(key) {
751
- try {
752
- const file = this.fs.readFile(`${key}.json`);
753
- return new Response(file).text();
754
- } catch (error) {
755
- if (isErrorCode(error, "ENOENT")) {
756
- return void 0;
757
- }
758
- throw error;
759
- }
760
- }
761
- async getBatch(keys) {
762
- const result = {};
763
- await Promise.all(
764
- keys.map(async (key) => {
765
- const value = await this.get(key);
766
- if (value) {
767
- result[key] = value;
768
- }
769
- })
770
- );
771
- return result;
772
- }
773
- list(prefix) {
774
- const path = prefix.endsWith("/") ? prefix.slice(0, -1) : prefix;
775
- if (!this.isDirectory(path)) {
776
- return [];
777
- }
778
- const files = this.fs.listDir(path);
779
- return files.filter((item) => item.endsWith(".json")).map((item) => item.slice(0, -5));
780
- }
781
- async set(key, value) {
782
- this.ensureDir(key);
783
- await this.fs.writeFile(`${key}.json`, JSON.stringify(value));
784
- }
785
- ensureDir(path) {
786
- const dir = path.split("/").slice(0, -1).join("/");
787
- try {
788
- this.fs.mkdir(dir, { recursive: true });
789
- } catch (error) {
790
- if (isErrorCode(error, "EEXIST")) {
791
- return;
792
- }
793
- throw error;
794
- }
795
- }
796
- stat(path) {
797
- try {
798
- const stat = this.fs.stat(path);
799
- if (stat.isDirectory) {
800
- return "directory";
801
- }
802
- if (stat.isFile) {
803
- return "file";
804
- }
805
- throw new APIError(`Invalid file type for ${path}`, 500);
806
- } catch (error) {
807
- if (isErrorCode(error, "ENOENT")) {
808
- return "not-found";
809
- }
810
- throw error;
811
- }
812
- }
813
- isFile(path) {
814
- return this.stat(path) === "file";
815
- }
816
- isDirectory(path) {
817
- return this.stat(path) === "directory";
818
- }
819
- };
820
- var isErrorCode = (error, code) => {
821
- return error instanceof Error && "message" in error && error.message === code;
822
- };
823
- export {
824
- DOFSStateStore,
825
- dofs_state_store_default as default
826
- };
26
+ `),this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?","device_size").next().value||this.ctx.storage.sql.exec("INSERT INTO dofs_meta (key, value) VALUES (?, ?)","device_size",(1024*1024*1024).toString()),this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?","space_used").next().value||this.ctx.storage.sql.exec("INSERT INTO dofs_meta (key, value) VALUES (?, ?)","space_used","0");let r=this.ctx.storage.sql.exec("SELECT COUNT(*) as count FROM dofs_files WHERE ino = ?",1).next().value;if(!r||r.count===0){let n=this.rootDirAttr();this.ctx.storage.sql.exec("INSERT INTO dofs_files (ino, name, parent, is_dir, attr, data) VALUES (?, ?, ?, ?, ?, NULL)",1,"/",void 0,1,JSON.stringify(n))}}resolvePathToInode(s){if(s==="/"||s==="")return 1;let e=s.split("/").filter(Boolean),t=1;for(let r of e){let o=this.ctx.storage.sql.exec("SELECT ino FROM dofs_files WHERE parent = ? AND name = ?",t,r).next().value;if(!o||o.ino==null)throw new Error("ENOENT");t=Number(o.ino)}return t}allocInode(){let e=this.ctx.storage.sql.exec("SELECT MAX(ino) as max FROM dofs_files").next().value;return e&&e.max!=null?Number(e.max)+1:2}loadChunk(s,e,t){let n=this.ctx.storage.sql.exec("SELECT data FROM dofs_chunks WHERE ino = ? AND offset = ?",s,e).next().value;if(n&&n.data){if(n.data instanceof ArrayBuffer)return new Uint8Array(n.data);if(ArrayBuffer.isView(n.data))return new Uint8Array(n.data.buffer)}return new Uint8Array(t)}getDeviceSize(){let e=this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?","device_size").next().value;return e?Number(e.value):1024*1024*1024}getSpaceUsed(){let e=this.ctx.storage.sql.exec("SELECT value FROM dofs_meta WHERE key = ?","space_used").next().value;return e?Number(e.value):0}setSpaceUsed(s){this.ctx.storage.sql.exec("UPDATE dofs_meta SET value = ? WHERE key = ?",s.toString(),"space_used")}updateFileSizeAndSpaceUsed(s){let t=this.ctx.storage.sql.exec("SELECT SUM(length) as total FROM dofs_chunks WHERE ino = ?",s).next().value,r=t&&t.total?Number(t.total):0;this.ctx.storage.sql.exec('UPDATE dofs_files SET attr = json_set(attr, "$.size", ?) WHERE ino = ?',r,s);let o=this.ctx.storage.sql.exec("SELECT SUM(length) as total FROM dofs_chunks").next().value,l=o&&o.total?Number(o.total):0;this.setSpaceUsed(l)}};function Q(s={}){return function(e){return class extends e{fs;constructor(t,r){super(t,r),this.fs=new A(t,r,s)}getFs(){return this.fs}}}}var W,I,p,ee,ie=(W=[Q({chunkSize:4*1024})],p=class extends(ee=G){constructor(s,e){super(s,e)}},I=U(ee),p=z(I,0,"MyAttributeObject",W,p),q(I,1,p),p);import{timingSafeEqual as re}from"node:crypto";var H=class extends se{async fetch(s){if(new URL(s.url).pathname==="/health-check")return new Response("OK",{status:200});try{let r={success:!0,status:200,result:await this.handle(s)??void 0};return Response.json(r,{status:r.status})}catch(t){return w.fromUnknown(t).toResponse()}}async handle(s){if(!this.authorize(s))throw new w("Unauthorized",401);let e=this.getStub(s),t=await this.parseBody(s);switch(t.method){case"validate":return null;case"all":return await e.all(t.params.prefix);case"count":return await e.count(t.params.prefix);case"delete":return await e.delete(t.params.key);case"get":return await e.get(t.params.key);case"getBatch":return await e.getBatch(t.params.keys);case"list":return await e.list(t.params.prefix);case"set":return await e.set(t.params.key,t.params.value);default:{let r=t;throw new w("Method not found",404)}}}authorize(s){let e=s.headers.get("Authorization")?.split(" ")[1];if(!e)return!1;let t=Buffer.from(this.env.DOFS_TOKEN,"utf8"),r=Buffer.alloc(t.length);return Buffer.from(e,"utf8").copy(r,0,0,t.length),re(t,r)}getStub(s){let e=new URL(s.url),t=e.searchParams.get("app"),r=e.searchParams.get("stage");if(!t||!r)throw new w("Missing app or stage",400);return this.env.DOFS_STATE_STORE.get(this.env.DOFS_STATE_STORE.idFromName(`${t}/${r}`))}async parseBody(s){try{return await s.json()}catch{throw new w("Invalid JSON",400)}}},w=class s extends Error{constructor(t,r){super(t);this.status=r}toResponse(){return Response.json({success:!1,status:this.status,error:this.message},{status:this.status})}static fromUnknown(t){return t instanceof s?t:t instanceof Error?new s(t.message,500):new s("An unknown error occurred.",500)}},j=class extends te{fs=new A(this.ctx,this.env,{chunkSize:256*1024});async all(e){let t=this.list(e),r={};return await Promise.all(t.map(async n=>{let o=await this.get(`${e}/${n}`);o&&(r[n]=o)})),r}count(e){return this.list(e).length}delete(e){this.isFile(`${e}.json`)&&this.fs.unlink(`${e}.json`),this.isDirectory(e)&&this.fs.rmdir(e)}async get(e){try{let t=this.fs.readFile(`${e}.json`);return new Response(t).text()}catch(t){if(C(t,"ENOENT"))return;throw t}}async getBatch(e){let t={};return await Promise.all(e.map(async r=>{let n=await this.get(r);n&&(t[r]=n)})),t}list(e){let t=e.endsWith("/")?e.slice(0,-1):e;return this.isDirectory(t)?this.fs.listDir(t).filter(n=>n.endsWith(".json")).map(n=>n.slice(0,-5)):[]}async set(e,t){this.ensureDir(e),await this.fs.writeFile(`${e}.json`,JSON.stringify(t))}ensureDir(e){let t=e.split("/").slice(0,-1).join("/");try{this.fs.mkdir(t,{recursive:!0})}catch(r){if(C(r,"EEXIST"))return;throw r}}stat(e){try{let t=this.fs.stat(e);if(t.isDirectory)return"directory";if(t.isFile)return"file";throw new w(`Invalid file type for ${e}`,500)}catch(t){if(C(t,"ENOENT"))return"not-found";throw t}}isFile(e){return this.stat(e)==="file"}isDirectory(e){return this.stat(e)==="directory"}},C=(s,e)=>s instanceof Error&&"message"in s&&s.message===e;export{j as DOFSStateStore,H as default};