@effect-kit/storage 0.0.0-stage → 0.0.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 (614) hide show
  1. package/LICENSE +204 -0
  2. package/README.md +369 -2
  3. package/dist/_virtual/_rolldown/runtime.js +17 -0
  4. package/dist/azure/account-admin.d.ts +116 -0
  5. package/dist/azure/account-admin.js +90 -0
  6. package/dist/azure/account-admin.js.map +1 -0
  7. package/dist/azure/admin.d.ts +68 -0
  8. package/dist/azure/admin.js +85 -0
  9. package/dist/azure/admin.js.map +1 -0
  10. package/dist/azure/archive.d.ts +95 -0
  11. package/dist/azure/archive.js +52 -0
  12. package/dist/azure/archive.js.map +1 -0
  13. package/dist/azure/events.d.ts +40 -0
  14. package/dist/azure/events.js +62 -0
  15. package/dist/azure/events.js.map +1 -0
  16. package/dist/azure/governance.d.ts +139 -0
  17. package/dist/azure/governance.js +59 -0
  18. package/dist/azure/governance.js.map +1 -0
  19. package/dist/azure/identity.d.ts +4 -0
  20. package/dist/azure/identity.js +8 -0
  21. package/dist/azure/identity.js.map +1 -0
  22. package/dist/azure/lifecycle.d.ts +21 -0
  23. package/dist/azure/lifecycle.js +193 -0
  24. package/dist/azure/lifecycle.js.map +1 -0
  25. package/dist/azure/signing.d.ts +17 -0
  26. package/dist/azure/signing.js +71 -0
  27. package/dist/azure/signing.js.map +1 -0
  28. package/dist/azure/uploads.d.ts +11 -0
  29. package/dist/azure/uploads.js +83 -0
  30. package/dist/azure/uploads.js.map +1 -0
  31. package/dist/azure.d.ts +427 -0
  32. package/dist/azure.js +77 -0
  33. package/dist/azure.js.map +1 -0
  34. package/dist/b2/admin.d.ts +149 -0
  35. package/dist/b2/admin.js +157 -0
  36. package/dist/b2/admin.js.map +1 -0
  37. package/dist/b2.d.ts +15 -0
  38. package/dist/b2.js +15 -0
  39. package/dist/b2.js.map +1 -0
  40. package/dist/browser.d.ts +7 -0
  41. package/dist/browser.js +11 -0
  42. package/dist/browser.js.map +1 -0
  43. package/dist/bun.d.ts +14 -0
  44. package/dist/bun.js +17 -0
  45. package/dist/bun.js.map +1 -0
  46. package/dist/cache.d.ts +18 -0
  47. package/dist/cache.js +116 -0
  48. package/dist/cache.js.map +1 -0
  49. package/dist/client/atoms/controller.d.ts +10 -0
  50. package/dist/client/atoms/controller.js +267 -0
  51. package/dist/client/atoms/controller.js.map +1 -0
  52. package/dist/client/atoms/state.d.ts +17 -0
  53. package/dist/client/atoms/state.js +11 -0
  54. package/dist/client/atoms/state.js.map +1 -0
  55. package/dist/client/atoms.d.ts +59 -0
  56. package/dist/client/atoms.js +39 -0
  57. package/dist/client/atoms.js.map +1 -0
  58. package/dist/client/fingerprint.js +28 -0
  59. package/dist/client/fingerprint.js.map +1 -0
  60. package/dist/client/store.d.ts +31 -0
  61. package/dist/client/store.js +56 -0
  62. package/dist/client/store.js.map +1 -0
  63. package/dist/client/transport.d.ts +11 -0
  64. package/dist/client/transport.js +78 -0
  65. package/dist/client/transport.js.map +1 -0
  66. package/dist/client.d.ts +259 -0
  67. package/dist/client.js +350 -0
  68. package/dist/client.js.map +1 -0
  69. package/dist/composition/layer.js +22 -0
  70. package/dist/composition/layer.js.map +1 -0
  71. package/dist/composition/representation/staging.js +46 -0
  72. package/dist/composition/representation/staging.js.map +1 -0
  73. package/dist/composition/representation/storage.js +188 -0
  74. package/dist/composition/representation/storage.js.map +1 -0
  75. package/dist/composition.d.ts +20 -0
  76. package/dist/composition.js +124 -0
  77. package/dist/composition.js.map +1 -0
  78. package/dist/compression.d.ts +16 -0
  79. package/dist/compression.js +38 -0
  80. package/dist/compression.js.map +1 -0
  81. package/dist/content.d.ts +590 -0
  82. package/dist/content.js +168 -0
  83. package/dist/content.js.map +1 -0
  84. package/dist/core/capabilities.d.ts +53 -0
  85. package/dist/core/capabilities.js +9 -0
  86. package/dist/core/capabilities.js.map +1 -0
  87. package/dist/core/contracts/multipart.d.ts +56 -0
  88. package/dist/core/contracts/resumable.d.ts +70 -0
  89. package/dist/core/errors.d.ts +55 -0
  90. package/dist/core/errors.js +55 -0
  91. package/dist/core/errors.js.map +1 -0
  92. package/dist/core/object.d.ts +97 -0
  93. package/dist/core/object.js +55 -0
  94. package/dist/core/object.js.map +1 -0
  95. package/dist/core/ranges.d.ts +17 -0
  96. package/dist/core/ranges.js +27 -0
  97. package/dist/core/ranges.js.map +1 -0
  98. package/dist/core/requests.d.ts +185 -0
  99. package/dist/core/requests.js +42 -0
  100. package/dist/core/requests.js.map +1 -0
  101. package/dist/core/storage.d.ts +249 -0
  102. package/dist/core/storage.js +173 -0
  103. package/dist/core/storage.js.map +1 -0
  104. package/dist/deno.d.ts +14 -0
  105. package/dist/deno.js +17 -0
  106. package/dist/deno.js.map +1 -0
  107. package/dist/encryption/age.d.ts +14 -0
  108. package/dist/encryption/age.js +46 -0
  109. package/dist/encryption/age.js.map +1 -0
  110. package/dist/encryption.d.ts +16 -0
  111. package/dist/encryption.js +16 -0
  112. package/dist/encryption.js.map +1 -0
  113. package/dist/events.d.ts +57 -0
  114. package/dist/events.js +106 -0
  115. package/dist/events.js.map +1 -0
  116. package/dist/filesystem.d.ts +23 -0
  117. package/dist/filesystem.js +75 -0
  118. package/dist/filesystem.js.map +1 -0
  119. package/dist/gcs/admin.d.ts +470 -0
  120. package/dist/gcs/admin.js +206 -0
  121. package/dist/gcs/admin.js.map +1 -0
  122. package/dist/gcs/events.d.ts +41 -0
  123. package/dist/gcs/events.js +45 -0
  124. package/dist/gcs/events.js.map +1 -0
  125. package/dist/gcs/governance.d.ts +158 -0
  126. package/dist/gcs/governance.js +100 -0
  127. package/dist/gcs/governance.js.map +1 -0
  128. package/dist/gcs/lifecycle.d.ts +161 -0
  129. package/dist/gcs/lifecycle.js +174 -0
  130. package/dist/gcs/lifecycle.js.map +1 -0
  131. package/dist/gcs/post.d.ts +31 -0
  132. package/dist/gcs/post.js +70 -0
  133. package/dist/gcs/post.js.map +1 -0
  134. package/dist/gcs/signing.d.ts +10 -0
  135. package/dist/gcs/signing.js +61 -0
  136. package/dist/gcs/signing.js.map +1 -0
  137. package/dist/gcs/uploads.d.ts +10 -0
  138. package/dist/gcs/uploads.js +76 -0
  139. package/dist/gcs/uploads.js.map +1 -0
  140. package/dist/gcs.d.ts +888 -0
  141. package/dist/gcs.js +91 -0
  142. package/dist/gcs.js.map +1 -0
  143. package/dist/hetzner/admin.d.ts +112 -0
  144. package/dist/hetzner/admin.js +19 -0
  145. package/dist/hetzner/admin.js.map +1 -0
  146. package/dist/hetzner.d.ts +15 -0
  147. package/dist/hetzner.js +15 -0
  148. package/dist/hetzner.js.map +1 -0
  149. package/dist/http/api.d.ts +236 -0
  150. package/dist/http/api.js +54 -0
  151. package/dist/http/api.js.map +1 -0
  152. package/dist/http/download.js +99 -0
  153. package/dist/http/download.js.map +1 -0
  154. package/dist/http/schema.d.ts +3 -0
  155. package/dist/http/schema.js +4 -0
  156. package/dist/http.d.ts +35 -0
  157. package/dist/http.js +178 -0
  158. package/dist/http.js.map +1 -0
  159. package/dist/index.d.ts +10 -0
  160. package/dist/index.js +9 -0
  161. package/dist/internal/http/control-plane.js +71 -0
  162. package/dist/internal/http/control-plane.js.map +1 -0
  163. package/dist/internal/listing-cursor.js +44 -0
  164. package/dist/internal/listing-cursor.js.map +1 -0
  165. package/dist/internal/node/provider-errors.js +16 -0
  166. package/dist/internal/node/provider-errors.js.map +1 -0
  167. package/dist/internal/node/upload-body.js +111 -0
  168. package/dist/internal/node/upload-body.js.map +1 -0
  169. package/dist/internal/provider-response.js +14 -0
  170. package/dist/internal/provider-response.js.map +1 -0
  171. package/dist/internal/public-urls.js +30 -0
  172. package/dist/internal/public-urls.js.map +1 -0
  173. package/dist/internal/read-condition.js +11 -0
  174. package/dist/internal/read-condition.js.map +1 -0
  175. package/dist/internal/request-validation.js +24 -0
  176. package/dist/internal/request-validation.js.map +1 -0
  177. package/dist/internal/signing-request.js +22 -0
  178. package/dist/internal/signing-request.js.map +1 -0
  179. package/dist/internal/web-upload-body.js +71 -0
  180. package/dist/internal/web-upload-body.js.map +1 -0
  181. package/dist/lifecycle/configuration-state.js +26 -0
  182. package/dist/lifecycle/configuration-state.js.map +1 -0
  183. package/dist/lifecycle/metadata.js +28 -0
  184. package/dist/lifecycle/metadata.js.map +1 -0
  185. package/dist/lifecycle.d.ts +269 -0
  186. package/dist/lifecycle.js +72 -0
  187. package/dist/lifecycle.js.map +1 -0
  188. package/dist/migrations.d.ts +537 -0
  189. package/dist/migrations.js +296 -0
  190. package/dist/migrations.js.map +1 -0
  191. package/dist/minio/admin.d.ts +112 -0
  192. package/dist/minio/admin.js +19 -0
  193. package/dist/minio/admin.js.map +1 -0
  194. package/dist/minio.d.ts +15 -0
  195. package/dist/minio.js +15 -0
  196. package/dist/minio.js.map +1 -0
  197. package/dist/mirror.d.ts +830 -0
  198. package/dist/mirror.js +290 -0
  199. package/dist/mirror.js.map +1 -0
  200. package/dist/node.d.ts +14 -0
  201. package/dist/node.js +17 -0
  202. package/dist/node.js.map +1 -0
  203. package/dist/providers/azure/blocks.js +94 -0
  204. package/dist/providers/azure/blocks.js.map +1 -0
  205. package/dist/providers/azure/config.d.ts +41 -0
  206. package/dist/providers/azure/config.js +62 -0
  207. package/dist/providers/azure/config.js.map +1 -0
  208. package/dist/providers/azure/mapping.js +83 -0
  209. package/dist/providers/azure/mapping.js.map +1 -0
  210. package/dist/providers/azure/native.js +88 -0
  211. package/dist/providers/azure/native.js.map +1 -0
  212. package/dist/providers/azure/primitives.js +203 -0
  213. package/dist/providers/azure/primitives.js.map +1 -0
  214. package/dist/providers/azure/properties.d.ts +180 -0
  215. package/dist/providers/azure/properties.js +55 -0
  216. package/dist/providers/azure/properties.js.map +1 -0
  217. package/dist/providers/azure/transport.js +14 -0
  218. package/dist/providers/azure/transport.js.map +1 -0
  219. package/dist/providers/azure/validation.js +11 -0
  220. package/dist/providers/azure/validation.js.map +1 -0
  221. package/dist/providers/filesystem/envelope.js +56 -0
  222. package/dist/providers/filesystem/envelope.js.map +1 -0
  223. package/dist/providers/filesystem/identity.js +68 -0
  224. package/dist/providers/filesystem/identity.js.map +1 -0
  225. package/dist/providers/filesystem/layout.d.ts +15 -0
  226. package/dist/providers/filesystem/layout.js +112 -0
  227. package/dist/providers/filesystem/layout.js.map +1 -0
  228. package/dist/providers/filesystem/list.js +82 -0
  229. package/dist/providers/filesystem/list.js.map +1 -0
  230. package/dist/providers/filesystem/operations.js +134 -0
  231. package/dist/providers/filesystem/operations.js.map +1 -0
  232. package/dist/providers/gcs/config.d.ts +34 -0
  233. package/dist/providers/gcs/config.js +60 -0
  234. package/dist/providers/gcs/config.js.map +1 -0
  235. package/dist/providers/gcs/iam.js +45 -0
  236. package/dist/providers/gcs/iam.js.map +1 -0
  237. package/dist/providers/gcs/mapping.js +118 -0
  238. package/dist/providers/gcs/mapping.js.map +1 -0
  239. package/dist/providers/gcs/native.d.ts +11 -0
  240. package/dist/providers/gcs/native.js +122 -0
  241. package/dist/providers/gcs/native.js.map +1 -0
  242. package/dist/providers/gcs/primitives.js +194 -0
  243. package/dist/providers/gcs/primitives.js.map +1 -0
  244. package/dist/providers/gcs/resumable.js +145 -0
  245. package/dist/providers/gcs/resumable.js.map +1 -0
  246. package/dist/providers/gcs/tier.d.ts +176 -0
  247. package/dist/providers/gcs/tier.js +34 -0
  248. package/dist/providers/gcs/tier.js.map +1 -0
  249. package/dist/providers/gcs/transport.js +123 -0
  250. package/dist/providers/gcs/transport.js.map +1 -0
  251. package/dist/providers/gcs/upload.js +28 -0
  252. package/dist/providers/gcs/upload.js.map +1 -0
  253. package/dist/providers/gcs/validation.js +10 -0
  254. package/dist/providers/gcs/validation.js.map +1 -0
  255. package/dist/providers/r2-workers/binding.d.ts +102 -0
  256. package/dist/providers/r2-workers/body.js +82 -0
  257. package/dist/providers/r2-workers/body.js.map +1 -0
  258. package/dist/providers/r2-workers/list.js +62 -0
  259. package/dist/providers/r2-workers/list.js.map +1 -0
  260. package/dist/providers/r2-workers/mapping.js +140 -0
  261. package/dist/providers/r2-workers/mapping.js.map +1 -0
  262. package/dist/providers/r2-workers/multipart.js +121 -0
  263. package/dist/providers/r2-workers/multipart.js.map +1 -0
  264. package/dist/providers/r2-workers/primitives.js +80 -0
  265. package/dist/providers/r2-workers/primitives.js.map +1 -0
  266. package/dist/providers/s3/admin-configuration.d.ts +19 -0
  267. package/dist/providers/s3/admin-configuration.js +171 -0
  268. package/dist/providers/s3/admin-configuration.js.map +1 -0
  269. package/dist/providers/s3/bulk-delete.d.ts +43 -0
  270. package/dist/providers/s3/bulk-delete.js +58 -0
  271. package/dist/providers/s3/bulk-delete.js.map +1 -0
  272. package/dist/providers/s3/config.d.ts +43 -0
  273. package/dist/providers/s3/config.js +89 -0
  274. package/dist/providers/s3/config.js.map +1 -0
  275. package/dist/providers/s3/copy.d.ts +115 -0
  276. package/dist/providers/s3/copy.js +122 -0
  277. package/dist/providers/s3/copy.js.map +1 -0
  278. package/dist/providers/s3/lifecycle-validation.js +33 -0
  279. package/dist/providers/s3/lifecycle-validation.js.map +1 -0
  280. package/dist/providers/s3/listing.js +56 -0
  281. package/dist/providers/s3/listing.js.map +1 -0
  282. package/dist/providers/s3/metadata.d.ts +10 -0
  283. package/dist/providers/s3/metadata.js +90 -0
  284. package/dist/providers/s3/metadata.js.map +1 -0
  285. package/dist/providers/s3/multipart.d.ts +41 -0
  286. package/dist/providers/s3/multipart.js +299 -0
  287. package/dist/providers/s3/multipart.js.map +1 -0
  288. package/dist/providers/s3/native-models.d.ts +82 -0
  289. package/dist/providers/s3/native-models.js +91 -0
  290. package/dist/providers/s3/native-models.js.map +1 -0
  291. package/dist/providers/s3/object-mapping.js +114 -0
  292. package/dist/providers/s3/object-mapping.js.map +1 -0
  293. package/dist/providers/s3/primitives.d.ts +8 -0
  294. package/dist/providers/s3/primitives.js +235 -0
  295. package/dist/providers/s3/primitives.js.map +1 -0
  296. package/dist/providers/s3/profile.d.ts +25 -0
  297. package/dist/providers/s3/profile.js +46 -0
  298. package/dist/providers/s3/profile.js.map +1 -0
  299. package/dist/providers/s3/request-extension.js +29 -0
  300. package/dist/providers/s3/request-extension.js.map +1 -0
  301. package/dist/providers/s3/service.js +55 -0
  302. package/dist/providers/s3/service.js.map +1 -0
  303. package/dist/providers/s3/signing-credentials.js +32 -0
  304. package/dist/providers/s3/signing-credentials.js.map +1 -0
  305. package/dist/providers/s3/tags.d.ts +10 -0
  306. package/dist/providers/s3/tags.js +65 -0
  307. package/dist/providers/s3/tags.js.map +1 -0
  308. package/dist/providers/s3/tier.d.ts +171 -0
  309. package/dist/providers/s3/tier.js +100 -0
  310. package/dist/providers/s3/tier.js.map +1 -0
  311. package/dist/providers/s3/transfer-driver.js +72 -0
  312. package/dist/providers/s3/transfer-driver.js.map +1 -0
  313. package/dist/providers/s3/transport.js +94 -0
  314. package/dist/providers/s3/transport.js.map +1 -0
  315. package/dist/providers/s3/upload-body.js +10 -0
  316. package/dist/providers/s3/upload-body.js.map +1 -0
  317. package/dist/providers/s3/validation.js +31 -0
  318. package/dist/providers/s3/validation.js.map +1 -0
  319. package/dist/providers/s3/versions.d.ts +10 -0
  320. package/dist/providers/s3/versions.js +143 -0
  321. package/dist/providers/s3/versions.js.map +1 -0
  322. package/dist/providers/s3-compatible/config.d.ts +36 -0
  323. package/dist/providers/s3-compatible/config.js +174 -0
  324. package/dist/providers/s3-compatible/config.js.map +1 -0
  325. package/dist/providers/s3-compatible/service.js +48 -0
  326. package/dist/providers/s3-compatible/service.js.map +1 -0
  327. package/dist/providers/supabase/config.d.ts +20 -0
  328. package/dist/providers/supabase/config.js +41 -0
  329. package/dist/providers/supabase/config.js.map +1 -0
  330. package/dist/providers/supabase/mapping.js +60 -0
  331. package/dist/providers/supabase/mapping.js.map +1 -0
  332. package/dist/providers/supabase/primitives.js +205 -0
  333. package/dist/providers/supabase/primitives.js.map +1 -0
  334. package/dist/providers/supabase/transport.js +64 -0
  335. package/dist/providers/supabase/transport.js.map +1 -0
  336. package/dist/providers/supabase/tus.js +163 -0
  337. package/dist/providers/supabase/tus.js.map +1 -0
  338. package/dist/providers/tigris/configuration.js +118 -0
  339. package/dist/providers/tigris/configuration.js.map +1 -0
  340. package/dist/providers/tigris/snapshots.js +87 -0
  341. package/dist/providers/tigris/snapshots.js.map +1 -0
  342. package/dist/providers/tigris/transport.js +18 -0
  343. package/dist/providers/tigris/transport.js.map +1 -0
  344. package/dist/providers/vercel/config.d.ts +16 -0
  345. package/dist/providers/vercel/config.js +48 -0
  346. package/dist/providers/vercel/config.js.map +1 -0
  347. package/dist/providers/vercel/mapping.js +79 -0
  348. package/dist/providers/vercel/mapping.js.map +1 -0
  349. package/dist/providers/vercel/multipart.js +113 -0
  350. package/dist/providers/vercel/multipart.js.map +1 -0
  351. package/dist/providers/vercel/primitives.js +168 -0
  352. package/dist/providers/vercel/primitives.js.map +1 -0
  353. package/dist/providers/vercel/transport.js +32 -0
  354. package/dist/providers/vercel/transport.js.map +1 -0
  355. package/dist/providers/wasabi/compliance.d.ts +52 -0
  356. package/dist/providers/wasabi/compliance.js +89 -0
  357. package/dist/providers/wasabi/compliance.js.map +1 -0
  358. package/dist/providers/wasabi/xml.js +55 -0
  359. package/dist/providers/wasabi/xml.js.map +1 -0
  360. package/dist/r2/admin.d.ts +126 -0
  361. package/dist/r2/admin.js +138 -0
  362. package/dist/r2/admin.js.map +1 -0
  363. package/dist/r2/events.d.ts +41 -0
  364. package/dist/r2/events.js +37 -0
  365. package/dist/r2/events.js.map +1 -0
  366. package/dist/r2-workers.d.ts +24 -0
  367. package/dist/r2-workers.js +115 -0
  368. package/dist/r2-workers.js.map +1 -0
  369. package/dist/r2.d.ts +15 -0
  370. package/dist/r2.js +15 -0
  371. package/dist/r2.js.map +1 -0
  372. package/dist/react.d.ts +73 -0
  373. package/dist/react.js +49 -0
  374. package/dist/react.js.map +1 -0
  375. package/dist/representation.d.ts +24 -0
  376. package/dist/representation.js +7 -0
  377. package/dist/representation.js.map +1 -0
  378. package/dist/runtime/bun-filesystem.js +136 -0
  379. package/dist/runtime/bun-filesystem.js.map +1 -0
  380. package/dist/runtime/file-target.d.ts +10 -0
  381. package/dist/runtime/file-target.js +66 -0
  382. package/dist/runtime/file-target.js.map +1 -0
  383. package/dist/runtime/filesystem.d.ts +6 -0
  384. package/dist/runtime/filesystem.js +68 -0
  385. package/dist/runtime/filesystem.js.map +1 -0
  386. package/dist/runtime/node-hash.d.ts +4 -0
  387. package/dist/runtime/node-hash.js +31 -0
  388. package/dist/runtime/node-hash.js.map +1 -0
  389. package/dist/runtime/node-protection.d.ts +4 -0
  390. package/dist/runtime/node-protection.js +46 -0
  391. package/dist/runtime/node-protection.js.map +1 -0
  392. package/dist/runtime/portable-hash.d.ts +3 -0
  393. package/dist/runtime/portable-hash.js +31 -0
  394. package/dist/runtime/portable-hash.js.map +1 -0
  395. package/dist/runtime/session-store.d.ts +12 -0
  396. package/dist/runtime/session-store.js +19 -0
  397. package/dist/runtime/session-store.js.map +1 -0
  398. package/dist/runtime/web-protection.d.ts +7 -0
  399. package/dist/runtime/web-protection.js +54 -0
  400. package/dist/runtime/web-protection.js.map +1 -0
  401. package/dist/s3/admin.d.ts +183 -0
  402. package/dist/s3/admin.js +197 -0
  403. package/dist/s3/admin.js.map +1 -0
  404. package/dist/s3/archive.d.ts +25 -0
  405. package/dist/s3/archive.js +113 -0
  406. package/dist/s3/archive.js.map +1 -0
  407. package/dist/s3/events.d.ts +42 -0
  408. package/dist/s3/events.js +69 -0
  409. package/dist/s3/events.js.map +1 -0
  410. package/dist/s3/governance.d.ts +319 -0
  411. package/dist/s3/governance.js +108 -0
  412. package/dist/s3/governance.js.map +1 -0
  413. package/dist/s3/lifecycle.d.ts +4 -0
  414. package/dist/s3/lifecycle.js +5 -0
  415. package/dist/s3/post.d.ts +31 -0
  416. package/dist/s3/post.js +93 -0
  417. package/dist/s3/post.js.map +1 -0
  418. package/dist/s3/signing.d.ts +105 -0
  419. package/dist/s3/signing.js +198 -0
  420. package/dist/s3/signing.js.map +1 -0
  421. package/dist/s3/uploads.d.ts +11 -0
  422. package/dist/s3/uploads.js +173 -0
  423. package/dist/s3/uploads.js.map +1 -0
  424. package/dist/s3.d.ts +37 -0
  425. package/dist/s3.js +114 -0
  426. package/dist/s3.js.map +1 -0
  427. package/dist/scaleway/admin.d.ts +112 -0
  428. package/dist/scaleway/admin.js +19 -0
  429. package/dist/scaleway/admin.js.map +1 -0
  430. package/dist/scaleway.d.ts +15 -0
  431. package/dist/scaleway.js +15 -0
  432. package/dist/scaleway.js.map +1 -0
  433. package/dist/session-events.d.ts +22 -0
  434. package/dist/session-events.js +22 -0
  435. package/dist/session-events.js.map +1 -0
  436. package/dist/sessions/checkpoint.d.ts +423 -0
  437. package/dist/sessions/checkpoint.js +102 -0
  438. package/dist/sessions/checkpoint.js.map +1 -0
  439. package/dist/sessions/download.d.ts +17 -0
  440. package/dist/sessions/download.js +111 -0
  441. package/dist/sessions/download.js.map +1 -0
  442. package/dist/sessions/native-upload.js +168 -0
  443. package/dist/sessions/native-upload.js.map +1 -0
  444. package/dist/sessions/store.d.ts +40 -0
  445. package/dist/sessions/store.js +77 -0
  446. package/dist/sessions/store.js.map +1 -0
  447. package/dist/sessions/upload.d.ts +10 -0
  448. package/dist/sessions/upload.js +329 -0
  449. package/dist/sessions/upload.js.map +1 -0
  450. package/dist/sessions.d.ts +98 -0
  451. package/dist/sessions.js +268 -0
  452. package/dist/sessions.js.map +1 -0
  453. package/dist/spaces/admin.d.ts +112 -0
  454. package/dist/spaces/admin.js +19 -0
  455. package/dist/spaces/admin.js.map +1 -0
  456. package/dist/spaces.d.ts +15 -0
  457. package/dist/spaces.js +15 -0
  458. package/dist/spaces.js.map +1 -0
  459. package/dist/supabase/admin.d.ts +77 -0
  460. package/dist/supabase/admin.js +74 -0
  461. package/dist/supabase/admin.js.map +1 -0
  462. package/dist/supabase/s3.d.ts +311 -0
  463. package/dist/supabase/s3.js +153 -0
  464. package/dist/supabase/s3.js.map +1 -0
  465. package/dist/supabase/signing.d.ts +23 -0
  466. package/dist/supabase/signing.js +93 -0
  467. package/dist/supabase/signing.js.map +1 -0
  468. package/dist/supabase/tus-uploads.d.ts +13 -0
  469. package/dist/supabase/tus-uploads.js +109 -0
  470. package/dist/supabase/tus-uploads.js.map +1 -0
  471. package/dist/supabase/uploads.d.ts +5 -0
  472. package/dist/supabase/uploads.js +32 -0
  473. package/dist/supabase/uploads.js.map +1 -0
  474. package/dist/supabase.d.ts +100 -0
  475. package/dist/supabase.js +50 -0
  476. package/dist/supabase.js.map +1 -0
  477. package/dist/testing/body-failure.js +18 -0
  478. package/dist/testing/body-failure.js.map +1 -0
  479. package/dist/testing/conformance/assertions.d.ts +10 -0
  480. package/dist/testing/conformance/assertions.js +21 -0
  481. package/dist/testing/conformance/assertions.js.map +1 -0
  482. package/dist/testing/conformance/core-cases.js +107 -0
  483. package/dist/testing/conformance/core-cases.js.map +1 -0
  484. package/dist/testing/conformance/list-cases.js +72 -0
  485. package/dist/testing/conformance/list-cases.js.map +1 -0
  486. package/dist/testing/conformance/read-cases.js +105 -0
  487. package/dist/testing/conformance/read-cases.js.map +1 -0
  488. package/dist/testing/conformance.d.ts +23 -0
  489. package/dist/testing/conformance.js +37 -0
  490. package/dist/testing/conformance.js.map +1 -0
  491. package/dist/testing/faults.d.ts +258 -0
  492. package/dist/testing/faults.js +111 -0
  493. package/dist/testing/faults.js.map +1 -0
  494. package/dist/testing/memory-list.js +79 -0
  495. package/dist/testing/memory-list.js.map +1 -0
  496. package/dist/testing/memory-state.d.ts +18 -0
  497. package/dist/testing/memory-state.js +57 -0
  498. package/dist/testing/memory-state.js.map +1 -0
  499. package/dist/testing/memory-upload.js +123 -0
  500. package/dist/testing/memory-upload.js.map +1 -0
  501. package/dist/testing/memory.d.ts +23 -0
  502. package/dist/testing/memory.js +121 -0
  503. package/dist/testing/memory.js.map +1 -0
  504. package/dist/testing.d.ts +6 -0
  505. package/dist/testing.js +6 -0
  506. package/dist/tigris/events.d.ts +42 -0
  507. package/dist/tigris/events.js +42 -0
  508. package/dist/tigris/events.js.map +1 -0
  509. package/dist/tigris/native.d.ts +438 -0
  510. package/dist/tigris/native.js +166 -0
  511. package/dist/tigris/native.js.map +1 -0
  512. package/dist/tigris.d.ts +15 -0
  513. package/dist/tigris.js +15 -0
  514. package/dist/tigris.js.map +1 -0
  515. package/dist/transfers/budget.js +50 -0
  516. package/dist/transfers/budget.js.map +1 -0
  517. package/dist/transfers/copy.js +250 -0
  518. package/dist/transfers/copy.js.map +1 -0
  519. package/dist/transfers/dependencies.d.ts +10 -0
  520. package/dist/transfers/dependencies.js +11 -0
  521. package/dist/transfers/dependencies.js.map +1 -0
  522. package/dist/transfers/download.js +132 -0
  523. package/dist/transfers/download.js.map +1 -0
  524. package/dist/transfers/managed-runtime.d.ts +34 -0
  525. package/dist/transfers/managed-runtime.js +30 -0
  526. package/dist/transfers/managed-runtime.js.map +1 -0
  527. package/dist/transfers/models.d.ts +160 -0
  528. package/dist/transfers/native-upload.js +195 -0
  529. package/dist/transfers/native-upload.js.map +1 -0
  530. package/dist/transfers/part-receipts.js +32 -0
  531. package/dist/transfers/part-receipts.js.map +1 -0
  532. package/dist/transfers/planner.d.ts +19 -0
  533. package/dist/transfers/planner.js +153 -0
  534. package/dist/transfers/planner.js.map +1 -0
  535. package/dist/transfers/reader.js +81 -0
  536. package/dist/transfers/reader.js.map +1 -0
  537. package/dist/transfers/runtime.d.ts +19 -0
  538. package/dist/transfers/runtime.js +132 -0
  539. package/dist/transfers/runtime.js.map +1 -0
  540. package/dist/transfers/sources.d.ts +22 -0
  541. package/dist/transfers/sources.js +83 -0
  542. package/dist/transfers/sources.js.map +1 -0
  543. package/dist/transfers/upload.js +235 -0
  544. package/dist/transfers/upload.js.map +1 -0
  545. package/dist/transfers.d.ts +31 -0
  546. package/dist/transfers.js +82 -0
  547. package/dist/transfers.js.map +1 -0
  548. package/dist/uploads/driver.d.ts +22 -0
  549. package/dist/uploads/driver.js +18 -0
  550. package/dist/uploads/driver.js.map +1 -0
  551. package/dist/uploads/policy.d.ts +39 -0
  552. package/dist/uploads/schema.d.ts +278 -0
  553. package/dist/uploads/schema.js +167 -0
  554. package/dist/uploads/schema.js.map +1 -0
  555. package/dist/uploads/signed-driver.d.ts +8 -0
  556. package/dist/uploads/signed-driver.js +36 -0
  557. package/dist/uploads/signed-driver.js.map +1 -0
  558. package/dist/uploads/store.d.ts +26 -0
  559. package/dist/uploads/store.js +51 -0
  560. package/dist/uploads/store.js.map +1 -0
  561. package/dist/uploads/verification.js +86 -0
  562. package/dist/uploads/verification.js.map +1 -0
  563. package/dist/uploads.d.ts +518 -0
  564. package/dist/uploads.js +330 -0
  565. package/dist/uploads.js.map +1 -0
  566. package/dist/vercel/authorized-uploads.d.ts +7 -0
  567. package/dist/vercel/authorized-uploads.js +15 -0
  568. package/dist/vercel/authorized-uploads.js.map +1 -0
  569. package/dist/vercel/client.d.ts +16 -0
  570. package/dist/vercel/client.js +28 -0
  571. package/dist/vercel/client.js.map +1 -0
  572. package/dist/vercel/signing.d.ts +19 -0
  573. package/dist/vercel/signing.js +120 -0
  574. package/dist/vercel/signing.js.map +1 -0
  575. package/dist/vercel/uploads.d.ts +36 -0
  576. package/dist/vercel/uploads.js +161 -0
  577. package/dist/vercel/uploads.js.map +1 -0
  578. package/dist/vercel.d.ts +86 -0
  579. package/dist/vercel.js +46 -0
  580. package/dist/vercel.js.map +1 -0
  581. package/dist/wasabi/admin.d.ts +112 -0
  582. package/dist/wasabi/admin.js +19 -0
  583. package/dist/wasabi/admin.js.map +1 -0
  584. package/dist/wasabi/native.d.ts +200 -0
  585. package/dist/wasabi/native.js +132 -0
  586. package/dist/wasabi/native.js.map +1 -0
  587. package/dist/wasabi.d.ts +15 -0
  588. package/dist/wasabi.js +15 -0
  589. package/dist/wasabi.js.map +1 -0
  590. package/dist/workflows/content/collection.js +122 -0
  591. package/dist/workflows/content/collection.js.map +1 -0
  592. package/dist/workflows/content/references.js +113 -0
  593. package/dist/workflows/content/references.js.map +1 -0
  594. package/dist/workflows/content/schema.d.ts +58 -0
  595. package/dist/workflows/content/schema.js +64 -0
  596. package/dist/workflows/content/schema.js.map +1 -0
  597. package/dist/workflows/endpoint.js +16 -0
  598. package/dist/workflows/endpoint.js.map +1 -0
  599. package/dist/workflows/migrations/schema.d.ts +149 -0
  600. package/dist/workflows/migrations/schema.js +58 -0
  601. package/dist/workflows/migrations/schema.js.map +1 -0
  602. package/dist/workflows/mirror/operations.js +175 -0
  603. package/dist/workflows/mirror/operations.js.map +1 -0
  604. package/dist/workflows/mirror/schema.d.ts +68 -0
  605. package/dist/workflows/mirror/schema.js +57 -0
  606. package/dist/workflows/mirror/schema.js.map +1 -0
  607. package/dist/workflows/mirror/view.js +103 -0
  608. package/dist/workflows/mirror/view.js.map +1 -0
  609. package/dist/workflows/objects.js +54 -0
  610. package/dist/workflows/objects.js.map +1 -0
  611. package/dist/workflows/store.d.ts +13 -0
  612. package/dist/workflows/store.js +58 -0
  613. package/dist/workflows/store.js.map +1 -0
  614. package/package.json +513 -3
@@ -0,0 +1,168 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { Storage } from "../../core/storage.js";
3
+ import { decodeCursor, encodeCursor } from "../../internal/listing-cursor.js";
4
+ import { readCondition } from "../../internal/read-condition.js";
5
+ import { webUploadBody } from "../../internal/web-upload-body.js";
6
+ import { metadata, providerError, validateKey, writeOptions } from "./mapping.js";
7
+ import { call } from "./transport.js";
8
+ import { Effect, Stream } from "effect";
9
+ import * as Blob from "@vercel/blob";
10
+
11
+ // src/providers/vercel/primitives.ts
12
+ const get = Effect.fnUntraced(function* (connection, input) {
13
+ const key = "ref" in input ? input.ref.key : input.key;
14
+ yield* validateKey(key, "get");
15
+ const controller = yield* Effect.acquireRelease(Effect.sync(() => new AbortController()), (owned) => Effect.sync(() => owned.abort()));
16
+ const range = input.range;
17
+ const response = yield* call(connection, "get", false, (options) => Blob.get(`${connection.config.apiOrigin ?? `https://${connection.config.storeId}.${connection.config.access}.blob.vercel-storage.com`}/${key.split("/").map(encodeURIComponent).join("/")}`, {
18
+ ...options,
19
+ abortSignal: AbortSignal.any([options.abortSignal, controller.signal]),
20
+ access: connection.config.access,
21
+ useCache: false,
22
+ ...input.condition?._tag === "IfNoneMatch" ? { ifNoneMatch: input.condition.etag } : {},
23
+ headers: {
24
+ "accept-encoding": "identity",
25
+ ...input.condition?._tag === "IfMatch" ? { "if-match": input.condition.etag } : {},
26
+ ...range ? { range: range._tag === "Suffix" ? `bytes=-${range.length}` : `bytes=${range.start}-${range._tag === "Bounded" ? range.end : ""}` } : {}
27
+ }
28
+ }));
29
+ if (!response) return yield* storageError("get", "vercel", { _tag: "NotFound" });
30
+ if (response.stream) yield* Effect.addFinalizer(() => Effect.promise(() => response.stream?.cancel().catch(() => void 0) ?? Promise.resolve()));
31
+ if (response.headers.get("content-encoding") && response.headers.get("content-encoding") !== "identity") return yield* storageError("get", "vercel", {
32
+ _tag: "Unsupported",
33
+ capability: "encoded-representation"
34
+ });
35
+ if (response.statusCode === 304 && input.condition?._tag !== "IfNoneMatch") return yield* storageError("get", "vercel", { _tag: "ProviderFailure" });
36
+ let observed = yield* metadata(connection, {
37
+ ...response.blob,
38
+ pathname: key
39
+ }, "get", key);
40
+ const outcome = readCondition(input.condition, observed.etag);
41
+ if (outcome === "failed") return yield* storageError("get", "vercel", { _tag: "PreconditionFailed" });
42
+ if (response.statusCode === 304 || outcome === "not-modified") return {
43
+ _tag: "NotModified",
44
+ metadata: observed
45
+ };
46
+ let resolved;
47
+ if (range) {
48
+ const match = /^bytes (\d+)-(\d+)\/(\d+)$/u.exec(response.headers.get("content-range") ?? "");
49
+ if (!match) return yield* storageError("get", "vercel", {
50
+ _tag: "Unsupported",
51
+ capability: "range-response"
52
+ });
53
+ resolved = {
54
+ start: Number(match[1]),
55
+ end: Number(match[2]),
56
+ totalSize: Number(match[3])
57
+ };
58
+ const start = range._tag === "Suffix" ? Math.max(0, resolved.totalSize - range.length) : range.start;
59
+ const end = range._tag === "Bounded" ? Math.min(range.end, resolved.totalSize - 1) : resolved.totalSize - 1;
60
+ if (resolved.start !== start || resolved.end !== end || !Object.values(resolved).every(Number.isSafeInteger)) return yield* storageError("get", "vercel", { _tag: "ProviderFailure" });
61
+ observed = {
62
+ ...observed,
63
+ size: resolved.totalSize
64
+ };
65
+ }
66
+ return {
67
+ _tag: "Object",
68
+ metadata: observed,
69
+ contentLength: resolved ? resolved.end - resolved.start + 1 : observed.size,
70
+ ...resolved ? { range: resolved } : {},
71
+ body: Stream.fromReadableStream({
72
+ evaluate: () => response.stream,
73
+ onError: () => providerError("get", false, {})
74
+ })
75
+ };
76
+ });
77
+ const put = Effect.fnUntraced(function* (connection, input) {
78
+ yield* validateKey(input.key, "put");
79
+ const settings = yield* writeOptions(input, "put");
80
+ return yield* webUploadBody("vercel", {
81
+ ...input,
82
+ maxBytes: Math.min(input.maxBytes ?? Infinity, connection.config.maxObjectBytes)
83
+ }, connection.config.maxUnknownLengthBytes, (body, length) => call(connection, "put", true, (options) => Blob.put(input.key, body instanceof Uint8Array ? new ReadableStream({ start(controller) {
84
+ controller.enqueue(body);
85
+ controller.close();
86
+ } }) : body, {
87
+ ...options,
88
+ ...settings,
89
+ access: connection.config.access,
90
+ multipart: false,
91
+ allowOverwrite: input.condition?._tag !== "CreateOnly",
92
+ ...input.condition?._tag === "IfMatch" ? { ifMatch: input.condition.etag } : {}
93
+ })).pipe(Effect.flatMap((result) => metadata(connection, result, "put", input.key, true)), Effect.map((result) => ({
94
+ ...result,
95
+ size: length
96
+ }))));
97
+ });
98
+ function primitives(connection) {
99
+ return Storage.make({
100
+ provider: "vercel",
101
+ storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,
102
+ capabilities: {
103
+ putConditions: ["create-only", "if-match"],
104
+ getConditions: ["if-match", "if-none-match"],
105
+ deleteConditions: ["if-match"],
106
+ ranges: [
107
+ "bounded",
108
+ "from",
109
+ "suffix"
110
+ ],
111
+ versionedReads: "none",
112
+ list: {
113
+ maxPageSize: 1e3,
114
+ delimiter: true,
115
+ cursorPersistence: "provider",
116
+ snapshot: false
117
+ }
118
+ },
119
+ put: (input) => put(connection, input),
120
+ get: (input) => get(connection, input),
121
+ head: Effect.fnUntraced(function* (input) {
122
+ const key = "ref" in input ? input.ref.key : input.key;
123
+ yield* validateKey(key, "head");
124
+ return yield* call(connection, "head", false, (options) => Blob.head(key, options)).pipe(Effect.flatMap((result) => metadata(connection, result, "head", key)));
125
+ }),
126
+ delete: Effect.fnUntraced(function* (input) {
127
+ const key = "ref" in input ? input.ref.key : input.key;
128
+ yield* validateKey(key, "delete");
129
+ yield* call(connection, "delete", true, (options) => Blob.del(key, {
130
+ ...options,
131
+ ...input.condition ? { ifMatch: input.condition.etag } : {}
132
+ }));
133
+ }),
134
+ listPage: Effect.fnUntraced(function* (input = {}) {
135
+ const query = JSON.stringify([
136
+ input.prefix ?? "",
137
+ input.delimiter ?? null,
138
+ input.limit ?? null
139
+ ]);
140
+ const token = yield* decodeCursor("vercel", input.cursor, `vercel:${connection.config.access}:${connection.config.storeId}`, query, "list");
141
+ if (input.delimiter && input.delimiter !== "/") return yield* storageError("list", "vercel", {
142
+ _tag: "Unsupported",
143
+ capability: "delimiter"
144
+ });
145
+ const result = yield* call(connection, "list", false, (options) => Blob.list({
146
+ ...options,
147
+ prefix: input.prefix ?? "",
148
+ limit: Math.min(input.limit ?? 1e3, 1e3),
149
+ ...token ? { cursor: token } : {},
150
+ mode: input.delimiter ? "folded" : "expanded"
151
+ }));
152
+ if (result.hasMore && !result.cursor) return yield* storageError("list", "vercel", { _tag: "ProviderFailure" });
153
+ return {
154
+ entries: [...yield* Effect.forEach(result.blobs, (blob) => metadata(connection, blob, "list").pipe(Effect.map((value) => ({
155
+ _tag: "Object",
156
+ metadata: value
157
+ })))), ..."folders" in result && Array.isArray(result.folders) ? result.folders.map((prefix) => ({
158
+ _tag: "CommonPrefix",
159
+ prefix
160
+ })) : []],
161
+ ...result.hasMore ? { cursor: encodeCursor(`vercel:${connection.config.access}:${connection.config.storeId}`, query, result.cursor ?? "") } : {}
162
+ };
163
+ })
164
+ });
165
+ }
166
+
167
+ export { get, primitives, put };
168
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","names":[],"sources":["../../../src/providers/vercel/primitives.ts"],"sourcesContent":["import { Effect, Stream } from \"effect\";\nimport type { Scope } from \"effect\";\n\nimport * as Blob from \"@vercel/blob\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { GetRequest, GetResult, PutRequest } from \"../../core/requests.js\";\nimport { Storage } from \"../../core/storage.js\";\nimport { decodeCursor, encodeCursor } from \"../../internal/listing-cursor.js\";\nimport { readCondition } from \"../../internal/read-condition.js\";\nimport { webUploadBody } from \"../../internal/web-upload-body.js\";\nimport type { VercelConnection } from \"./config.js\";\nimport { metadata, providerError, validateKey, writeOptions } from \"./mapping.js\";\nimport { call } from \"./transport.js\";\n\nexport const get = Effect.fnUntraced(function* (\n connection: VercelConnection,\n input: GetRequest,\n): Effect.fn.Return<GetResult, ReturnType<typeof storageError>, Scope.Scope> {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"get\");\n const controller = yield* Effect.acquireRelease(\n Effect.sync(() => new AbortController()),\n (owned) => Effect.sync(() => owned.abort()),\n );\n const range = input.range;\n const response = yield* call(connection, \"get\", false, (options) =>\n Blob.get(\n `${connection.config.apiOrigin ?? `https://${connection.config.storeId}.${connection.config.access}.blob.vercel-storage.com`}/${key.split(\"/\").map(encodeURIComponent).join(\"/\")}`,\n {\n ...options,\n abortSignal: AbortSignal.any([options.abortSignal, controller.signal]),\n access: connection.config.access,\n useCache: false,\n ...(input.condition?._tag === \"IfNoneMatch\" ? { ifNoneMatch: input.condition.etag } : {}),\n headers: {\n // CDN compression changes response lengths and range validators for the stored bytes.\n \"accept-encoding\": \"identity\",\n ...(input.condition?._tag === \"IfMatch\" ? { \"if-match\": input.condition.etag } : {}),\n ...(range\n ? {\n range:\n range._tag === \"Suffix\"\n ? `bytes=-${range.length}`\n : `bytes=${range.start}-${range._tag === \"Bounded\" ? range.end : \"\"}`,\n }\n : {}),\n },\n },\n ),\n );\n if (!response) return yield* storageError(\"get\", \"vercel\", { _tag: \"NotFound\" });\n if (response.stream)\n yield* Effect.addFinalizer(() =>\n Effect.promise(() => response.stream?.cancel().catch(() => undefined) ?? Promise.resolve()),\n );\n if (\n response.headers.get(\"content-encoding\") &&\n response.headers.get(\"content-encoding\") !== \"identity\"\n )\n return yield* storageError(\"get\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"encoded-representation\",\n });\n if (response.statusCode === 304 && input.condition?._tag !== \"IfNoneMatch\")\n return yield* storageError(\"get\", \"vercel\", { _tag: \"ProviderFailure\" });\n let observed = yield* metadata(connection, { ...response.blob, pathname: key }, \"get\", key);\n const outcome = readCondition(input.condition, observed.etag);\n if (outcome === \"failed\")\n return yield* storageError(\"get\", \"vercel\", { _tag: \"PreconditionFailed\" });\n if (response.statusCode === 304 || outcome === \"not-modified\")\n return { _tag: \"NotModified\", metadata: observed };\n let resolved: { start: number; end: number; totalSize: number } | undefined;\n if (range) {\n const match = /^bytes (\\d+)-(\\d+)\\/(\\d+)$/u.exec(response.headers.get(\"content-range\") ?? \"\");\n if (!match)\n return yield* storageError(\"get\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"range-response\",\n });\n resolved = { start: Number(match[1]), end: Number(match[2]), totalSize: Number(match[3]) };\n const start =\n range._tag === \"Suffix\" ? Math.max(0, resolved.totalSize - range.length) : range.start;\n const end =\n range._tag === \"Bounded\"\n ? Math.min(range.end, resolved.totalSize - 1)\n : resolved.totalSize - 1;\n if (\n resolved.start !== start ||\n resolved.end !== end ||\n !Object.values(resolved).every(Number.isSafeInteger)\n )\n return yield* storageError(\"get\", \"vercel\", { _tag: \"ProviderFailure\" });\n observed = { ...observed, size: resolved.totalSize };\n }\n return {\n _tag: \"Object\",\n metadata: observed,\n contentLength: resolved ? resolved.end - resolved.start + 1 : observed.size,\n ...(resolved ? { range: resolved } : {}),\n body: Stream.fromReadableStream({\n evaluate: () => response.stream,\n onError: () => providerError(\"get\", false, {}),\n }),\n };\n});\n\nexport const put = Effect.fnUntraced(function* <E, R>(\n connection: VercelConnection,\n input: PutRequest<E, R>,\n) {\n yield* validateKey(input.key, \"put\");\n const settings = yield* writeOptions(input, \"put\");\n return yield* webUploadBody(\n \"vercel\",\n { ...input, maxBytes: Math.min(input.maxBytes ?? Infinity, connection.config.maxObjectBytes) },\n connection.config.maxUnknownLengthBytes,\n (body, length) =>\n call(connection, \"put\", true, (options) =>\n Blob.put(\n input.key,\n body instanceof Uint8Array\n ? new ReadableStream({\n start(controller) {\n controller.enqueue(body);\n controller.close();\n },\n })\n : body,\n {\n ...options,\n ...settings,\n access: connection.config.access,\n multipart: false,\n allowOverwrite: input.condition?._tag !== \"CreateOnly\",\n ...(input.condition?._tag === \"IfMatch\" ? { ifMatch: input.condition.etag } : {}),\n },\n ),\n ).pipe(\n Effect.flatMap((result) => metadata(connection, result, \"put\", input.key, true)),\n Effect.map((result) => ({ ...result, size: length })),\n ),\n );\n});\n\nexport function primitives(connection: VercelConnection) {\n return Storage.make({\n provider: \"vercel\",\n storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,\n capabilities: {\n putConditions: [\"create-only\", \"if-match\"],\n getConditions: [\"if-match\", \"if-none-match\"],\n deleteConditions: [\"if-match\"],\n ranges: [\"bounded\", \"from\", \"suffix\"],\n versionedReads: \"none\",\n list: { maxPageSize: 1000, delimiter: true, cursorPersistence: \"provider\", snapshot: false },\n },\n put: (input) => put(connection, input),\n get: (input) => get(connection, input),\n head: Effect.fnUntraced(function* (input) {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"head\");\n return yield* call(connection, \"head\", false, (options) => Blob.head(key, options)).pipe(\n Effect.flatMap((result) => metadata(connection, result, \"head\", key)),\n );\n }),\n delete: Effect.fnUntraced(function* (input) {\n const key = \"ref\" in input ? input.ref.key : input.key;\n yield* validateKey(key, \"delete\");\n yield* call(connection, \"delete\", true, (options) =>\n Blob.del(key, {\n ...options,\n ...(input.condition ? { ifMatch: input.condition.etag } : {}),\n }),\n );\n }),\n listPage: Effect.fnUntraced(function* (input = {}) {\n const query = JSON.stringify([\n input.prefix ?? \"\",\n input.delimiter ?? null,\n input.limit ?? null,\n ]);\n const token = yield* decodeCursor(\n \"vercel\",\n input.cursor,\n `vercel:${connection.config.access}:${connection.config.storeId}`,\n query,\n \"list\",\n );\n if (input.delimiter && input.delimiter !== \"/\")\n return yield* storageError(\"list\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"delimiter\",\n });\n const result = yield* call(connection, \"list\", false, (options) =>\n Blob.list({\n ...options,\n prefix: input.prefix ?? \"\",\n limit: Math.min(input.limit ?? 1000, 1000),\n ...(token ? { cursor: token } : {}),\n mode: input.delimiter ? \"folded\" : \"expanded\",\n }),\n );\n if (result.hasMore && !result.cursor)\n return yield* storageError(\"list\", \"vercel\", { _tag: \"ProviderFailure\" });\n const entries = yield* Effect.forEach(result.blobs, (blob) =>\n metadata(connection, blob, \"list\").pipe(\n Effect.map((value) => ({ _tag: \"Object\" as const, metadata: value })),\n ),\n );\n return {\n entries: [\n ...entries,\n ...(\"folders\" in result && Array.isArray(result.folders)\n ? result.folders.map((prefix: string) => ({ _tag: \"CommonPrefix\" as const, prefix }))\n : []),\n ],\n ...(result.hasMore\n ? {\n cursor: encodeCursor(\n `vercel:${connection.config.access}:${connection.config.storeId}`,\n query,\n result.cursor ?? \"\",\n ),\n }\n : {}),\n };\n }),\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { retryPolicy } from "./config.js";
3
+ import { providerError } from "./mapping.js";
4
+ import { Effect, Redacted } from "effect";
5
+
6
+ // src/providers/vercel/transport.ts
7
+ const call = Effect.fnUntraced(function* (connection, operation, mutation, execute) {
8
+ yield* retryPolicy();
9
+ const currentEndpoint = process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;
10
+ if ((currentEndpoint ? URL.parse(currentEndpoint)?.origin : void 0) !== connection.config.apiOrigin) return yield* storageError(operation, "vercel", {
11
+ _tag: "InvalidConfiguration",
12
+ field: "changed-sdk-endpoint"
13
+ }, "not-started");
14
+ const credential = connection.config.credential;
15
+ const token = yield* Effect.isEffect(credential.token) ? credential.token : Effect.succeed(credential.token);
16
+ if (!Redacted.isRedacted(token) || !Redacted.value(token)) return yield* storageError(operation, "vercel", { _tag: "AccessDenied" }, "not-started");
17
+ if (credential.mode === "token" && Redacted.value(token).split("_")[3] !== connection.config.storeId) return yield* storageError(operation, "vercel", {
18
+ _tag: "InvalidConfiguration",
19
+ field: "credential.storeId"
20
+ }, "not-started");
21
+ return yield* Effect.tryPromise({
22
+ try: (signal) => execute({
23
+ [credential.mode === "token" ? "token" : "oidcToken"]: Redacted.value(token),
24
+ storeId: connection.config.storeId,
25
+ abortSignal: signal
26
+ }),
27
+ catch: (error) => providerError(operation, mutation, error)
28
+ }).pipe(Effect.timeout(connection.config.requestTimeoutMillis), Effect.mapError((error) => error._tag === "StorageError" ? error : providerError(operation, mutation, error)));
29
+ });
30
+
31
+ export { call };
32
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","names":[],"sources":["../../../src/providers/vercel/transport.ts"],"sourcesContent":["import { Effect, Redacted } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { VercelConnection } from \"./config.js\";\nimport { retryPolicy } from \"./config.js\";\nimport { providerError } from \"./mapping.js\";\n\nexport const call = Effect.fnUntraced(function* <A>(\n connection: VercelConnection,\n operation: string,\n mutation: boolean,\n execute: (options: {\n token?: string;\n oidcToken?: string;\n storeId: string;\n abortSignal: AbortSignal;\n }) => Promise<A>,\n) {\n yield* retryPolicy();\n const currentEndpoint =\n process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;\n if (\n (currentEndpoint ? URL.parse(currentEndpoint)?.origin : undefined) !==\n connection.config.apiOrigin\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"InvalidConfiguration\", field: \"changed-sdk-endpoint\" },\n \"not-started\",\n );\n const credential = connection.config.credential;\n const token = yield* Effect.isEffect(credential.token)\n ? credential.token\n : Effect.succeed(credential.token);\n if (!Redacted.isRedacted(token) || !Redacted.value(token))\n return yield* storageError(operation, \"vercel\", { _tag: \"AccessDenied\" }, \"not-started\");\n if (\n credential.mode === \"token\" &&\n Redacted.value(token).split(\"_\")[3] !== connection.config.storeId\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"InvalidConfiguration\", field: \"credential.storeId\" },\n \"not-started\",\n );\n return yield* Effect.tryPromise({\n try: (signal) =>\n execute({\n [credential.mode === \"token\" ? \"token\" : \"oidcToken\"]: Redacted.value(token),\n storeId: connection.config.storeId,\n abortSignal: signal,\n }),\n catch: (error) => providerError(operation, mutation, error),\n }).pipe(\n Effect.timeout(connection.config.requestTimeoutMillis),\n Effect.mapError((error) =>\n error._tag === \"StorageError\" ? error : providerError(operation, mutation, error),\n ),\n );\n});\n"],"mappings":";;;;;;AAOA,MAAa,OAAO,OAAO,WAAW,WACpC,YACA,WACA,UACA,SAMA;CACA,OAAO,YAAY;CACnB,MAAM,kBACJ,QAAQ,IAAI,uBAAuB,QAAQ,IAAI;CACjD,KACG,kBAAkB,IAAI,MAAM,eAAe,CAAC,EAAE,SAAS,YACxD,WAAW,OAAO,WAElB,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAwB,OAAO;CAAuB,GAC9D,aACF;CACF,MAAM,aAAa,WAAW,OAAO;CACrC,MAAM,QAAQ,OAAO,OAAO,SAAS,WAAW,KAAK,IACjD,WAAW,QACX,OAAO,QAAQ,WAAW,KAAK;CACnC,IAAI,CAAC,SAAS,WAAW,KAAK,KAAK,CAAC,SAAS,MAAM,KAAK,GACtD,OAAO,OAAO,aAAa,WAAW,UAAU,EAAE,MAAM,eAAe,GAAG,aAAa;CACzF,IACE,WAAW,SAAS,WACpB,SAAS,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,WAAW,OAAO,SAE1D,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAwB,OAAO;CAAqB,GAC5D,aACF;CACF,OAAO,OAAO,OAAO,WAAW;EAC9B,MAAM,WACJ,QAAQ;IACL,WAAW,SAAS,UAAU,UAAU,cAAc,SAAS,MAAM,KAAK;GAC3E,SAAS,WAAW,OAAO;GAC3B,aAAa;EACf,CAAC;EACH,QAAQ,UAAU,cAAc,WAAW,UAAU,KAAK;CAC5D,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,WAAW,OAAO,oBAAoB,GACrD,OAAO,UAAU,UACf,MAAM,SAAS,iBAAiB,QAAQ,cAAc,WAAW,UAAU,KAAK,CAClF,CACF;AACF,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { StorageError } from "../../core/errors.js";
2
+ import "../../index.js";
3
+ import { S3Storage, S3StorageService } from "../../s3.js";
4
+ import { Context, Effect, Layer, Schema } from "effect";
5
+ declare const Policy: Schema.Struct<{
6
+ readonly status: Schema.Literals<readonly ["enabled", "disabled"]>;
7
+ readonly retentionDays: Schema.Natural;
8
+ readonly conditionalHold: Schema.Boolean;
9
+ readonly deleteAfterRetention: Schema.Boolean;
10
+ readonly lockTime: Schema.String;
11
+ }>;
12
+ declare const make: (storage: S3StorageService) => {
13
+ inspect: () => Effect.Effect<{
14
+ readonly Status: "disabled" | "enabled";
15
+ readonly LockTime?: string | undefined;
16
+ readonly IsLocked?: "false" | "true" | undefined;
17
+ readonly RetentionDays: string;
18
+ readonly ConditionalHold?: "false" | "true" | undefined;
19
+ readonly DeleteAfterRetention?: "false" | "true" | undefined;
20
+ }, StorageError, never>;
21
+ set: (input: {
22
+ readonly policy: typeof Policy.Type;
23
+ readonly intent: "change-legacy-compliance";
24
+ readonly lockIntent?: "irreversibly-lock-compliance";
25
+ }) => Effect.Effect<{
26
+ _tag: "Accepted";
27
+ }, StorageError, never>;
28
+ };
29
+ declare const WasabiCompliance_base: Context.ServiceClass<WasabiCompliance, "@effect-kit/storage/wasabi/WasabiCompliance", {
30
+ inspect: () => Effect.Effect<{
31
+ readonly Status: "disabled" | "enabled";
32
+ readonly LockTime?: string | undefined;
33
+ readonly IsLocked?: "false" | "true" | undefined;
34
+ readonly RetentionDays: string;
35
+ readonly ConditionalHold?: "false" | "true" | undefined;
36
+ readonly DeleteAfterRetention?: "false" | "true" | undefined;
37
+ }, StorageError, never>;
38
+ set: (input: {
39
+ readonly policy: typeof Policy.Type;
40
+ readonly intent: "change-legacy-compliance";
41
+ readonly lockIntent?: "irreversibly-lock-compliance";
42
+ }) => Effect.Effect<{
43
+ _tag: "Accepted";
44
+ }, StorageError, never>;
45
+ }>;
46
+ /** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */
47
+ export declare class WasabiCompliance extends WasabiCompliance_base {
48
+ static readonly make: typeof make;
49
+ static readonly layer: Layer.Layer<WasabiCompliance, never, S3Storage>;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=compliance.d.ts.map
@@ -0,0 +1,89 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { decodeRequest } from "../../internal/request-validation.js";
3
+ import { request } from "../s3/transport.js";
4
+ import { S3Storage } from "../../s3.js";
5
+ import { decodeResponse } from "../../internal/provider-response.js";
6
+ import { extendRequest } from "../s3/request-extension.js";
7
+ import { readXml } from "./xml.js";
8
+ import { Context, Effect, Layer, Schema } from "effect";
9
+ import { GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
10
+ import { XMLBuilder } from "fast-xml-parser";
11
+
12
+ // src/providers/wasabi/compliance.ts
13
+ const Policy = Schema.Struct({
14
+ status: Schema.Literals(["enabled", "disabled"]),
15
+ retentionDays: Schema.Natural,
16
+ conditionalHold: Schema.Boolean,
17
+ deleteAfterRetention: Schema.Boolean,
18
+ lockTime: Schema.String.check(Schema.makeFilter((value) => value === "off" || value === "now" || Number.isFinite(Date.parse(value))))
19
+ });
20
+ const make = (storage) => {
21
+ const guard = () => storage.provider === "wasabi" ? Effect.void : Effect.fail(storageError("compliance", "wasabi", {
22
+ _tag: "InvalidConfiguration",
23
+ field: "provider"
24
+ }));
25
+ return {
26
+ inspect: Effect.fnUntraced(function* () {
27
+ yield* guard();
28
+ return yield* Effect.scoped(Effect.gen(function* () {
29
+ const command = new GetObjectCommand({
30
+ Bucket: storage.config.bucket,
31
+ Key: "compliance"
32
+ });
33
+ extendRequest(command, {
34
+ bucketRoot: true,
35
+ query: { compliance: "" }
36
+ });
37
+ const response = yield* request(storage, "getLegacyCompliance", false, (signal) => storage.client.send(command, { abortSignal: signal }));
38
+ const receipt = yield* readXml(response.Body, "getLegacyCompliance");
39
+ return yield* decodeResponse(Schema.Struct({ BucketComplianceConfiguration: Schema.Struct({
40
+ Status: Schema.Literals(["enabled", "disabled"]),
41
+ LockTime: Schema.optional(Schema.String),
42
+ IsLocked: Schema.optional(Schema.Literals(["true", "false"])),
43
+ RetentionDays: Schema.String,
44
+ ConditionalHold: Schema.optional(Schema.Literals(["true", "false"])),
45
+ DeleteAfterRetention: Schema.optional(Schema.Literals(["true", "false"]))
46
+ }) }), receipt.decoded, "getLegacyCompliance", "wasabi").pipe(Effect.map((value) => value.BucketComplianceConfiguration));
47
+ }));
48
+ }),
49
+ set: Effect.fnUntraced(function* (input) {
50
+ const value = yield* decodeRequest(Schema.Struct({
51
+ policy: Policy,
52
+ intent: Schema.Literal("change-legacy-compliance"),
53
+ lockIntent: Schema.optional(Schema.Literal("irreversibly-lock-compliance"))
54
+ }), input, "setLegacyCompliance", "wasabi", true);
55
+ yield* guard();
56
+ if (value.policy.lockTime !== "off" && !value.lockIntent) return yield* storageError("setLegacyCompliance", "wasabi", {
57
+ _tag: "InvalidInput",
58
+ field: "lockIntent"
59
+ }, "not-started");
60
+ const body = new XMLBuilder({}).build({ BucketComplianceConfiguration: {
61
+ Status: value.policy.status,
62
+ LockTime: value.policy.lockTime,
63
+ RetentionDays: value.policy.retentionDays,
64
+ ConditionalHold: value.policy.conditionalHold,
65
+ DeleteAfterRetention: value.policy.deleteAfterRetention
66
+ } });
67
+ const command = new PutObjectCommand({
68
+ Bucket: storage.config.bucket,
69
+ Key: "compliance",
70
+ Body: body,
71
+ ContentType: "application/xml"
72
+ });
73
+ extendRequest(command, {
74
+ bucketRoot: true,
75
+ query: { compliance: "" }
76
+ });
77
+ yield* request(storage, "setLegacyCompliance", true, (signal) => storage.client.send(command, { abortSignal: signal }));
78
+ return { _tag: "Accepted" };
79
+ })
80
+ };
81
+ };
82
+ /** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */
83
+ var WasabiCompliance = class WasabiCompliance extends Context.Service()("@effect-kit/storage/wasabi/WasabiCompliance") {
84
+ static make = make;
85
+ static layer = Layer.effect(WasabiCompliance, Effect.map(S3Storage, make));
86
+ };
87
+
88
+ export { WasabiCompliance };
89
+ //# sourceMappingURL=compliance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance.js","names":[],"sources":["../../../src/providers/wasabi/compliance.ts"],"sourcesContent":["import { Context, Effect, Layer, Schema } from \"effect\";\n\nimport { GetObjectCommand, PutObjectCommand } from \"@aws-sdk/client-s3\";\nimport { XMLBuilder } from \"fast-xml-parser\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeResponse } from \"../../internal/provider-response.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { S3Storage } from \"../s3/index.js\";\nimport type { S3StorageService } from \"../s3/index.js\";\nimport { extendRequest } from \"../s3/request-extension.js\";\nimport { request } from \"../s3/transport.js\";\nimport { readXml } from \"./xml.js\";\n\nconst Policy = Schema.Struct({\n status: Schema.Literals([\"enabled\", \"disabled\"]),\n retentionDays: Schema.Natural,\n conditionalHold: Schema.Boolean,\n deleteAfterRetention: Schema.Boolean,\n lockTime: Schema.String.check(\n Schema.makeFilter(\n (value) => value === \"off\" || value === \"now\" || Number.isFinite(Date.parse(value)),\n ),\n ),\n});\nconst make = (storage: S3StorageService) => {\n const guard = () =>\n storage.provider === \"wasabi\"\n ? Effect.void\n : Effect.fail(\n storageError(\"compliance\", \"wasabi\", { _tag: \"InvalidConfiguration\", field: \"provider\" }),\n );\n return {\n inspect: Effect.fnUntraced(function* () {\n yield* guard();\n return yield* Effect.scoped(\n Effect.gen(function* () {\n const command = new GetObjectCommand({\n Bucket: storage.config.bucket,\n Key: \"compliance\",\n });\n extendRequest(command, { bucketRoot: true, query: { compliance: \"\" } });\n const response = yield* request(storage, \"getLegacyCompliance\", false, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n const receipt = yield* readXml(response.Body, \"getLegacyCompliance\");\n return yield* decodeResponse(\n Schema.Struct({\n BucketComplianceConfiguration: Schema.Struct({\n Status: Schema.Literals([\"enabled\", \"disabled\"]),\n LockTime: Schema.optional(Schema.String),\n IsLocked: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n RetentionDays: Schema.String,\n ConditionalHold: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n DeleteAfterRetention: Schema.optional(Schema.Literals([\"true\", \"false\"])),\n }),\n }),\n receipt.decoded,\n \"getLegacyCompliance\",\n \"wasabi\",\n ).pipe(Effect.map((value) => value.BucketComplianceConfiguration));\n }),\n );\n }),\n set: Effect.fnUntraced(function* (input: {\n readonly policy: typeof Policy.Type;\n readonly intent: \"change-legacy-compliance\";\n readonly lockIntent?: \"irreversibly-lock-compliance\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n policy: Policy,\n intent: Schema.Literal(\"change-legacy-compliance\"),\n lockIntent: Schema.optional(Schema.Literal(\"irreversibly-lock-compliance\")),\n }),\n input,\n \"setLegacyCompliance\",\n \"wasabi\",\n true,\n );\n yield* guard();\n if (value.policy.lockTime !== \"off\" && !value.lockIntent)\n return yield* storageError(\n \"setLegacyCompliance\",\n \"wasabi\",\n { _tag: \"InvalidInput\", field: \"lockIntent\" },\n \"not-started\",\n );\n const body = new XMLBuilder({}).build({\n BucketComplianceConfiguration: {\n Status: value.policy.status,\n LockTime: value.policy.lockTime,\n RetentionDays: value.policy.retentionDays,\n ConditionalHold: value.policy.conditionalHold,\n DeleteAfterRetention: value.policy.deleteAfterRetention,\n },\n }) as string;\n const command = new PutObjectCommand({\n Bucket: storage.config.bucket,\n Key: \"compliance\",\n Body: body,\n ContentType: \"application/xml\",\n });\n extendRequest(command, { bucketRoot: true, query: { compliance: \"\" } });\n yield* request(storage, \"setLegacyCompliance\", true, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n return { _tag: \"Accepted\" as const };\n }),\n };\n};\n/** Wasabi legacy bucket Compliance is separate from S3 Object Lock. */\nexport class WasabiCompliance extends Context.Service<WasabiCompliance, ReturnType<typeof make>>()(\n \"@effect-kit/storage/wasabi/WasabiCompliance\",\n) {\n static readonly make = make;\n static readonly layer = Layer.effect(WasabiCompliance, Effect.map(S3Storage, make));\n}\n"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { Effect } from "effect";
3
+ import { XMLParser, XMLValidator } from "fast-xml-parser";
4
+
5
+ // src/providers/wasabi/xml.ts
6
+ const parser = new XMLParser({
7
+ ignoreAttributes: false,
8
+ parseTagValue: false,
9
+ processEntities: true
10
+ });
11
+ const readXml = Effect.fnUntraced(function* (body, operation) {
12
+ if (!body || !(Symbol.asyncIterator in body)) return yield* storageError(operation, "wasabi", {
13
+ _tag: "ProviderFailure",
14
+ code: "MissingXmlReceipt"
15
+ }, "unknown");
16
+ yield* Effect.addFinalizer(() => Effect.sync(() => {
17
+ if ("destroy" in body && typeof body.destroy === "function") body.destroy();
18
+ }));
19
+ return yield* Effect.tryPromise({
20
+ try: async () => {
21
+ const chunks = [];
22
+ let size = 0;
23
+ for await (const chunk of body) {
24
+ size += chunk.byteLength;
25
+ if (size > 4 * 1024 ** 2) throw new Error("Receipt exceeds limit");
26
+ chunks.push(chunk);
27
+ }
28
+ const bytes = new Uint8Array(size);
29
+ let offset = 0;
30
+ for (const chunk of chunks) {
31
+ bytes.set(chunk, offset);
32
+ offset += chunk.byteLength;
33
+ }
34
+ const xml = new TextDecoder().decode(bytes);
35
+ if (/<!DOCTYPE|<!ENTITY/iu.test(xml) || XMLValidator.validate(xml) !== true) throw new Error("Invalid receipt");
36
+ return {
37
+ xml,
38
+ decoded: parser.parse(xml)
39
+ };
40
+ },
41
+ catch: () => storageError(operation, "wasabi", {
42
+ _tag: "ProviderFailure",
43
+ code: "InvalidXmlReceipt"
44
+ }, "unknown")
45
+ }).pipe(Effect.timeoutOrElse({
46
+ duration: "30 seconds",
47
+ orElse: () => Effect.fail(storageError(operation, "wasabi", {
48
+ _tag: "TransportFailure",
49
+ code: "ReceiptDeadline"
50
+ }, "unknown"))
51
+ }));
52
+ });
53
+
54
+ export { readXml };
55
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","names":[],"sources":["../../../src/providers/wasabi/xml.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport type { GetObjectCommandOutput } from \"@aws-sdk/client-s3\";\nimport { XMLParser, XMLValidator } from \"fast-xml-parser\";\n\nimport { storageError } from \"../../core/errors.js\";\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n parseTagValue: false,\n processEntities: true,\n});\nexport const readXml = Effect.fnUntraced(function* (\n body: GetObjectCommandOutput[\"Body\"],\n operation: string,\n) {\n if (!body || !(Symbol.asyncIterator in body))\n return yield* storageError(\n operation,\n \"wasabi\",\n { _tag: \"ProviderFailure\", code: \"MissingXmlReceipt\" },\n \"unknown\",\n );\n yield* Effect.addFinalizer(() =>\n Effect.sync(() => {\n if (\"destroy\" in body && typeof body.destroy === \"function\") body.destroy();\n }),\n );\n return yield* Effect.tryPromise({\n try: async () => {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of body) {\n size += chunk.byteLength;\n if (size > 4 * 1024 ** 2) throw new Error(\"Receipt exceeds limit\");\n chunks.push(chunk);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n const xml = new TextDecoder().decode(bytes);\n if (/<!DOCTYPE|<!ENTITY/iu.test(xml) || XMLValidator.validate(xml) !== true)\n throw new Error(\"Invalid receipt\");\n return { xml, decoded: parser.parse(xml) as unknown };\n },\n catch: () =>\n storageError(\n operation,\n \"wasabi\",\n { _tag: \"ProviderFailure\", code: \"InvalidXmlReceipt\" },\n \"unknown\",\n ),\n }).pipe(\n Effect.timeoutOrElse({\n duration: \"30 seconds\",\n orElse: () =>\n Effect.fail(\n storageError(\n operation,\n \"wasabi\",\n { _tag: \"TransportFailure\", code: \"ReceiptDeadline\" },\n \"unknown\",\n ),\n ),\n }),\n );\n});\n"],"mappings":";;;;;AAOA,MAAM,SAAS,IAAI,UAAU;CAC3B,kBAAkB;CAClB,eAAe;CACf,iBAAiB;AACnB,CAAC;AACD,MAAa,UAAU,OAAO,WAAW,WACvC,MACA,WACA;CACA,IAAI,CAAC,QAAQ,EAAE,OAAO,iBAAiB,OACrC,OAAO,OAAO,aACZ,WACA,UACA;EAAE,MAAM;EAAmB,MAAM;CAAoB,GACrD,SACF;CACF,OAAO,OAAO,mBACZ,OAAO,WAAW;EAChB,IAAI,aAAa,QAAQ,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ;CAC5E,CAAC,CACH;CACA,OAAO,OAAO,OAAO,WAAW;EAC9B,KAAK,YAAY;GACf,MAAM,SAAuB,CAAC;GAC9B,IAAI,OAAO;GACX,WAAW,MAAM,SAAS,MAAM;IAC9B,QAAQ,MAAM;IACd,IAAI,OAAO,IAAI,QAAQ,GAAG,MAAM,IAAI,MAAM,uBAAuB;IACjE,OAAO,KAAK,KAAK;GACnB;GACA,MAAM,QAAQ,IAAI,WAAW,IAAI;GACjC,IAAI,SAAS;GACb,KAAK,MAAM,SAAS,QAAQ;IAC1B,MAAM,IAAI,OAAO,MAAM;IACvB,UAAU,MAAM;GAClB;GACA,MAAM,MAAM,IAAI,YAAY,CAAC,CAAC,OAAO,KAAK;GAC1C,IAAI,uBAAuB,KAAK,GAAG,KAAK,aAAa,SAAS,GAAG,MAAM,MACrE,MAAM,IAAI,MAAM,iBAAiB;GACnC,OAAO;IAAE;IAAK,SAAS,OAAO,MAAM,GAAG;GAAa;EACtD;EACA,aACE,aACE,WACA,UACA;GAAE,MAAM;GAAmB,MAAM;EAAoB,GACrD,SACF;CACJ,CAAC,CAAC,CAAC,KACD,OAAO,cAAc;EACnB,UAAU;EACV,cACE,OAAO,KACL,aACE,WACA,UACA;GAAE,MAAM;GAAoB,MAAM;EAAkB,GACpD,SACF,CACF;CACJ,CAAC,CACH;AACF,CAAC"}
@@ -0,0 +1,126 @@
1
+ import { StorageError } from "../core/errors.js";
2
+ import "../index.js";
3
+ import { Context, Effect, Layer, Redacted, Schema } from "effect";
4
+ import { HttpClient } from "effect/http";
5
+ declare const Rule: Schema.Struct<{
6
+ readonly id: Schema.NonEmptyString;
7
+ readonly enabled: Schema.Boolean;
8
+ readonly prefix: Schema.optional<Schema.String>;
9
+ readonly condition: Schema.Union<readonly [Schema.Struct<{
10
+ readonly type: Schema.Literal<"Age">;
11
+ readonly maxAgeSeconds: Schema.Natural;
12
+ }>, Schema.Struct<{
13
+ readonly type: Schema.Literal<"Date">;
14
+ readonly date: Schema.String;
15
+ }>, Schema.Struct<{
16
+ readonly type: Schema.Literal<"Indefinite">;
17
+ }>]>;
18
+ }>;
19
+ export interface R2AdminConfig {
20
+ readonly accountId: string;
21
+ readonly token: Redacted.Redacted<string>;
22
+ readonly endpoint?: string;
23
+ readonly jurisdiction?: "default" | "eu" | "fedramp";
24
+ }
25
+ declare const R2Administration_base: Context.ServiceClass<R2Administration, "@effect-kit/storage/r2/R2Administration", {
26
+ list: () => Effect.Effect<unknown, StorageError, never>;
27
+ head: (input: {
28
+ readonly bucket: string;
29
+ }) => Effect.Effect<unknown, StorageError, never>;
30
+ create: (input: {
31
+ readonly bucket: string;
32
+ readonly locationHint?: string;
33
+ }) => Effect.Effect<unknown, StorageError, never>;
34
+ deleteEmpty: (input: {
35
+ readonly bucket: string;
36
+ }) => Effect.Effect<unknown, StorageError, never>;
37
+ notifications: {
38
+ get: (input: {
39
+ readonly bucket: string;
40
+ }) => Effect.Effect<unknown, StorageError, never>;
41
+ createRules: (input: {
42
+ readonly bucket: string;
43
+ readonly queueId: string;
44
+ readonly rules: ReadonlyArray<{
45
+ readonly actions: ReadonlyArray<"PutObject" | "CopyObject" | "DeleteObject" | "CompleteMultipartUpload" | "LifecycleDeletion">;
46
+ readonly prefix?: string;
47
+ readonly suffix?: string;
48
+ readonly description?: string;
49
+ }>;
50
+ }) => Effect.Effect<unknown, StorageError, never>;
51
+ };
52
+ configuration: {
53
+ get: (input: {
54
+ readonly bucket: string;
55
+ readonly section: "cors" | "lifecycle" | "locks" | "domains/managed";
56
+ }) => Effect.Effect<unknown, StorageError, never>;
57
+ setCors: (input: {
58
+ readonly bucket: string;
59
+ readonly rules: ReadonlyArray<Record<string, unknown>>;
60
+ }) => Effect.Effect<unknown, StorageError, never>;
61
+ setLifecycle: (input: {
62
+ readonly bucket: string;
63
+ readonly rules: ReadonlyArray<Record<string, unknown>>;
64
+ readonly intent: "change-storage-protection";
65
+ }) => Effect.Effect<unknown, StorageError, never>;
66
+ setLocks: (input: {
67
+ readonly bucket: string;
68
+ readonly rules: ReadonlyArray<typeof Rule.Type>;
69
+ readonly intent: "change-bucket-locks";
70
+ }) => Effect.Effect<unknown, StorageError, never>;
71
+ };
72
+ }>;
73
+ export declare class R2Administration extends R2Administration_base {
74
+ static readonly make: (settings: R2AdminConfig) => Effect.Effect<{
75
+ list: () => Effect.Effect<unknown, StorageError, never>;
76
+ head: (input: {
77
+ readonly bucket: string;
78
+ }) => Effect.Effect<unknown, StorageError, never>;
79
+ create: (input: {
80
+ readonly bucket: string;
81
+ readonly locationHint?: string;
82
+ }) => Effect.Effect<unknown, StorageError, never>;
83
+ deleteEmpty: (input: {
84
+ readonly bucket: string;
85
+ }) => Effect.Effect<unknown, StorageError, never>;
86
+ notifications: {
87
+ get: (input: {
88
+ readonly bucket: string;
89
+ }) => Effect.Effect<unknown, StorageError, never>;
90
+ createRules: (input: {
91
+ readonly bucket: string;
92
+ readonly queueId: string;
93
+ readonly rules: ReadonlyArray<{
94
+ readonly actions: ReadonlyArray<"PutObject" | "CopyObject" | "DeleteObject" | "CompleteMultipartUpload" | "LifecycleDeletion">;
95
+ readonly prefix?: string;
96
+ readonly suffix?: string;
97
+ readonly description?: string;
98
+ }>;
99
+ }) => Effect.Effect<unknown, StorageError, never>;
100
+ };
101
+ configuration: {
102
+ get: (input: {
103
+ readonly bucket: string;
104
+ readonly section: "cors" | "lifecycle" | "locks" | "domains/managed";
105
+ }) => Effect.Effect<unknown, StorageError, never>;
106
+ setCors: (input: {
107
+ readonly bucket: string;
108
+ readonly rules: ReadonlyArray<Record<string, unknown>>;
109
+ }) => Effect.Effect<unknown, StorageError, never>;
110
+ setLifecycle: (input: {
111
+ readonly bucket: string;
112
+ readonly rules: ReadonlyArray<Record<string, unknown>>;
113
+ readonly intent: "change-storage-protection";
114
+ }) => Effect.Effect<unknown, StorageError, never>;
115
+ setLocks: (input: {
116
+ readonly bucket: string;
117
+ readonly rules: ReadonlyArray<typeof Rule.Type>;
118
+ readonly intent: "change-bucket-locks";
119
+ }) => Effect.Effect<unknown, StorageError, never>;
120
+ };
121
+ }, StorageError, HttpClient.HttpClient>;
122
+ static layerHttp(config: R2AdminConfig): Layer.Layer<R2Administration, StorageError, HttpClient.HttpClient>;
123
+ static layer(config: R2AdminConfig): Layer.Layer<R2Administration, StorageError, never>;
124
+ }
125
+ export {};
126
+ //# sourceMappingURL=admin.d.ts.map