@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,118 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { decodeRequest } from "../../internal/request-validation.js";
3
+ import { call } from "./transport.js";
4
+ import { Effect, Redacted, Schema } from "effect";
5
+ import * as Tigris from "@tigrisdata/storage";
6
+
7
+ // src/providers/tigris/configuration.ts
8
+ const Bucket = Schema.NonEmptyString;
9
+ const Strings = Schema.Union([Schema.String, Schema.Array(Schema.String)]);
10
+ const Cors = Schema.Struct({
11
+ allowedOrigins: Strings,
12
+ allowedMethods: Schema.optional(Strings),
13
+ allowedHeaders: Schema.optional(Strings),
14
+ exposeHeaders: Schema.optional(Strings),
15
+ maxAge: Schema.optional(Schema.Natural)
16
+ });
17
+ const Tier = Schema.Literals([
18
+ "STANDARD",
19
+ "STANDARD_IA",
20
+ "GLACIER",
21
+ "GLACIER_IR"
22
+ ]);
23
+ const Lifecycle = Schema.Struct({
24
+ id: Schema.optional(Schema.String),
25
+ enabled: Schema.optional(Schema.Boolean),
26
+ storageClass: Schema.optional(Schema.Literals([
27
+ "STANDARD_IA",
28
+ "GLACIER",
29
+ "GLACIER_IR"
30
+ ])),
31
+ days: Schema.optional(Schema.Natural),
32
+ date: Schema.optional(Schema.String),
33
+ expiration: Schema.optional(Schema.Struct({
34
+ days: Schema.optional(Schema.Natural),
35
+ date: Schema.optional(Schema.String)
36
+ })),
37
+ filter: Schema.optional(Schema.Struct({ prefix: Schema.String }))
38
+ });
39
+ const Settings = Schema.Struct({
40
+ access: Schema.optional(Schema.Literals(["public", "private"])),
41
+ allowObjectAcl: Schema.optional(Schema.Boolean),
42
+ defaultTier: Schema.optional(Tier),
43
+ disableDirectoryListing: Schema.optional(Schema.Boolean),
44
+ cacheControl: Schema.optional(Schema.String),
45
+ customDomain: Schema.optional(Schema.String),
46
+ enableAdditionalHeaders: Schema.optional(Schema.Boolean),
47
+ softDelete: Schema.optional(Schema.Union([Schema.Struct({
48
+ enabled: Schema.Literal(true),
49
+ retentionDays: Schema.Int.check(Schema.isGreaterThan(0))
50
+ }), Schema.Struct({ enabled: Schema.Literal(false) })]))
51
+ });
52
+ /** Native replacement operations have no provider CAS. Inspect with head before applying. */
53
+ const configuration = (native) => ({
54
+ update: Effect.fnUntraced(function* (input) {
55
+ const value = yield* decodeRequest(Schema.Struct({
56
+ bucket: Bucket,
57
+ settings: Settings,
58
+ intent: Schema.Literal("change-storage-protection")
59
+ }), input, "updateBucket", "tigris", true);
60
+ const config = yield* native;
61
+ return yield* call("updateBucket", true, () => Tigris.updateBucket(value.bucket, {
62
+ ...structuredClone(value.settings),
63
+ config
64
+ }));
65
+ }),
66
+ setCors: Effect.fnUntraced(function* (input) {
67
+ const value = yield* decodeRequest(Schema.Struct({
68
+ bucket: Bucket,
69
+ rules: Schema.Array(Cors)
70
+ }), input, "setCors", "tigris", true);
71
+ const config = yield* native;
72
+ return yield* call("setCors", true, () => Tigris.setBucketCors(value.bucket, {
73
+ rules: structuredClone(value.rules),
74
+ override: true,
75
+ config
76
+ }));
77
+ }),
78
+ setLifecycle: Effect.fnUntraced(function* (input) {
79
+ const value = yield* decodeRequest(Schema.Struct({
80
+ bucket: Bucket,
81
+ rules: Schema.Array(Lifecycle),
82
+ intent: Schema.Literal("change-storage-protection")
83
+ }), input, "setLifecycle", "tigris", true);
84
+ const config = yield* native;
85
+ return yield* call("setLifecycle", true, () => Tigris.setBucketLifecycle(value.bucket, {
86
+ lifecycleRules: structuredClone(value.rules),
87
+ config
88
+ }));
89
+ }),
90
+ setNotifications: Effect.fnUntraced(function* (input) {
91
+ const value = yield* decodeRequest(Schema.Struct({
92
+ bucket: Bucket,
93
+ enabled: Schema.Boolean,
94
+ url: Schema.optional(Schema.String),
95
+ filter: Schema.optional(Schema.String),
96
+ token: Schema.optional(Schema.Redacted(Schema.NonEmptyString))
97
+ }), input, "setNotifications", "tigris", true);
98
+ const url = value.url ? URL.parse(value.url) : void 0;
99
+ if (value.enabled && (!url || url.protocol !== "https:" || url.username || url.password || !value.token)) return yield* storageError("setNotifications", "tigris", {
100
+ _tag: "InvalidInput",
101
+ field: "authenticated-https-webhook"
102
+ }, "not-started");
103
+ const config = yield* native;
104
+ return yield* call("setNotifications", true, () => Tigris.setBucketNotifications(value.bucket, {
105
+ override: true,
106
+ notificationConfig: {
107
+ enabled: value.enabled,
108
+ ...value.url ? { url: value.url } : {},
109
+ ...value.filter ? { filter: value.filter } : {},
110
+ ...value.token ? { auth: { token: Redacted.value(value.token) } } : {}
111
+ },
112
+ config
113
+ }));
114
+ })
115
+ });
116
+
117
+ export { configuration };
118
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","names":[],"sources":["../../../src/providers/tigris/configuration.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport * as Tigris from \"@tigrisdata/storage\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { call } from \"./transport.js\";\n\nconst Bucket = Schema.NonEmptyString;\nconst Strings = Schema.Union([Schema.String, Schema.Array(Schema.String)]);\nconst Cors = Schema.Struct({\n allowedOrigins: Strings,\n allowedMethods: Schema.optional(Strings),\n allowedHeaders: Schema.optional(Strings),\n exposeHeaders: Schema.optional(Strings),\n maxAge: Schema.optional(Schema.Natural),\n});\nconst Tier = Schema.Literals([\"STANDARD\", \"STANDARD_IA\", \"GLACIER\", \"GLACIER_IR\"]);\nconst Lifecycle = Schema.Struct({\n id: Schema.optional(Schema.String),\n enabled: Schema.optional(Schema.Boolean),\n storageClass: Schema.optional(Schema.Literals([\"STANDARD_IA\", \"GLACIER\", \"GLACIER_IR\"])),\n days: Schema.optional(Schema.Natural),\n date: Schema.optional(Schema.String),\n expiration: Schema.optional(\n Schema.Struct({ days: Schema.optional(Schema.Natural), date: Schema.optional(Schema.String) }),\n ),\n filter: Schema.optional(Schema.Struct({ prefix: Schema.String })),\n});\nconst Settings = Schema.Struct({\n access: Schema.optional(Schema.Literals([\"public\", \"private\"])),\n allowObjectAcl: Schema.optional(Schema.Boolean),\n defaultTier: Schema.optional(Tier),\n disableDirectoryListing: Schema.optional(Schema.Boolean),\n cacheControl: Schema.optional(Schema.String),\n customDomain: Schema.optional(Schema.String),\n enableAdditionalHeaders: Schema.optional(Schema.Boolean),\n softDelete: Schema.optional(\n Schema.Union([\n Schema.Struct({\n enabled: Schema.Literal(true),\n retentionDays: Schema.Int.check(Schema.isGreaterThan(0)),\n }),\n Schema.Struct({ enabled: Schema.Literal(false) }),\n ]),\n ),\n});\n\n/** Native replacement operations have no provider CAS. Inspect with head before applying. */\nexport const configuration = (\n native: Effect.Effect<Tigris.TigrisConfig, ReturnType<typeof storageError>>,\n) => ({\n update: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly settings: typeof Settings.Type;\n readonly intent: \"change-storage-protection\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n settings: Settings,\n intent: Schema.Literal(\"change-storage-protection\"),\n }),\n input,\n \"updateBucket\",\n \"tigris\",\n true,\n );\n const config = yield* native;\n return yield* call(\"updateBucket\", true, () =>\n Tigris.updateBucket(value.bucket, {\n ...(structuredClone(value.settings) as Omit<Tigris.UpdateBucketOptions, \"config\">),\n config,\n }),\n );\n }),\n setCors: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly rules: ReadonlyArray<typeof Cors.Type>;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({ bucket: Bucket, rules: Schema.Array(Cors) }),\n input,\n \"setCors\",\n \"tigris\",\n true,\n );\n const config = yield* native;\n return yield* call(\"setCors\", true, () =>\n Tigris.setBucketCors(value.bucket, {\n rules: structuredClone(value.rules) as Tigris.BucketCorsRule[],\n override: true,\n config,\n }),\n );\n }),\n setLifecycle: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly rules: ReadonlyArray<typeof Lifecycle.Type>;\n readonly intent: \"change-storage-protection\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n rules: Schema.Array(Lifecycle),\n intent: Schema.Literal(\"change-storage-protection\"),\n }),\n input,\n \"setLifecycle\",\n \"tigris\",\n true,\n );\n const config = yield* native;\n return yield* call(\"setLifecycle\", true, () =>\n Tigris.setBucketLifecycle(value.bucket, {\n lifecycleRules: structuredClone(value.rules) as Tigris.BucketLifecycleRule[],\n config,\n }),\n );\n }),\n setNotifications: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly enabled: boolean;\n readonly url?: string;\n readonly filter?: string;\n readonly token?: Redacted.Redacted<string>;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n enabled: Schema.Boolean,\n url: Schema.optional(Schema.String),\n filter: Schema.optional(Schema.String),\n token: Schema.optional(Schema.Redacted(Schema.NonEmptyString)),\n }),\n input,\n \"setNotifications\",\n \"tigris\",\n true,\n );\n const url = value.url ? URL.parse(value.url) : undefined;\n if (\n value.enabled &&\n (!url || url.protocol !== \"https:\" || url.username || url.password || !value.token)\n )\n return yield* storageError(\n \"setNotifications\",\n \"tigris\",\n { _tag: \"InvalidInput\", field: \"authenticated-https-webhook\" },\n \"not-started\",\n );\n const config = yield* native;\n return yield* call(\"setNotifications\", true, () =>\n Tigris.setBucketNotifications(value.bucket, {\n override: true,\n notificationConfig: {\n enabled: value.enabled,\n ...(value.url ? { url: value.url } : {}),\n ...(value.filter ? { filter: value.filter } : {}),\n ...(value.token ? { auth: { token: Redacted.value(value.token) } } : {}),\n },\n config,\n }),\n );\n }),\n});\n"],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { decodeRequest } from "../../internal/request-validation.js";
3
+ import { request } from "../s3/transport.js";
4
+ import { extendRequest } from "../s3/request-extension.js";
5
+ import { Effect, Schema } from "effect";
6
+ import { CreateBucketCommand, DeleteBucketCommand, ListBucketsCommand } from "@aws-sdk/client-s3";
7
+
8
+ // src/providers/tigris/snapshots.ts
9
+ const Bucket = Schema.String.check(Schema.isPattern(/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/u));
10
+ const createBucket = Effect.fnUntraced(function* (storage, input) {
11
+ const value = yield* decodeRequest(Schema.Struct({
12
+ bucket: Bucket,
13
+ sourceBucket: Schema.optional(Bucket),
14
+ snapshot: Schema.optional(Schema.NonEmptyString)
15
+ }), input, "createBucket", "tigris", true);
16
+ const command = new CreateBucketCommand({ Bucket: value.bucket });
17
+ extendRequest(command, { headers: {
18
+ "X-Amz-Acl": "private",
19
+ "X-Amz-Acl-Public-List-Objects-Enabled": "false",
20
+ ...value.sourceBucket ? { "X-Tigris-Fork-Source-Bucket": value.sourceBucket } : {},
21
+ ...value.snapshot ? { "X-Tigris-Fork-Source-Bucket-Snapshot": value.snapshot } : {}
22
+ } });
23
+ yield* request(storage, "createBucket", true, (signal) => storage.client.send(command, { abortSignal: signal }));
24
+ return {
25
+ _tag: "Accepted",
26
+ bucket: value.bucket
27
+ };
28
+ });
29
+ const snapshots = (storage) => ({
30
+ create: Effect.fnUntraced(function* (input) {
31
+ const value = yield* decodeRequest(Schema.Struct({
32
+ bucket: Bucket,
33
+ name: Schema.optional(Schema.String.check(Schema.isPattern(/^[A-Za-z0-9._-]{1,128}$/u)))
34
+ }), input, "createSnapshot", "tigris", true);
35
+ let version;
36
+ const command = new CreateBucketCommand({ Bucket: value.bucket });
37
+ extendRequest(command, {
38
+ headers: { "X-Tigris-Snapshot": value.name ? `true; name=${value.name}` : "true" },
39
+ observeHeaders: (headers) => {
40
+ version = headers["x-tigris-snapshot-version"];
41
+ }
42
+ });
43
+ yield* request(storage, "createSnapshot", true, (signal) => storage.client.send(command, { abortSignal: signal }));
44
+ if (!version) return yield* storageError("createSnapshot", "tigris", {
45
+ _tag: "ProviderFailure",
46
+ code: "MissingSnapshotReceipt"
47
+ }, "unknown");
48
+ return { snapshotVersion: version };
49
+ }),
50
+ listPage: Effect.fnUntraced(function* (input) {
51
+ const value = yield* decodeRequest(Schema.Struct({
52
+ bucket: Bucket,
53
+ cursor: Schema.optional(Schema.NonEmptyString),
54
+ limit: Schema.optional(Schema.Int.check(Schema.isBetween({
55
+ minimum: 1,
56
+ maximum: 1e3
57
+ })))
58
+ }), input, "listSnapshots", "tigris");
59
+ const command = new ListBucketsCommand({
60
+ ContinuationToken: value.cursor,
61
+ MaxBuckets: value.limit
62
+ });
63
+ extendRequest(command, { headers: { "X-Tigris-Snapshot": value.bucket } });
64
+ const response = yield* request(storage, "listSnapshots", false, (signal) => storage.client.send(command, { abortSignal: signal }));
65
+ return {
66
+ snapshots: (response.Buckets ?? []).map((snapshot) => ({
67
+ version: snapshot.Name?.split(";")[0],
68
+ name: snapshot.Name?.split("; name=")[1],
69
+ createdAt: snapshot.CreationDate
70
+ })),
71
+ cursor: response.ContinuationToken
72
+ };
73
+ }),
74
+ delete: Effect.fnUntraced(function* (input) {
75
+ const value = yield* decodeRequest(Schema.Struct({
76
+ bucket: Bucket,
77
+ version: Schema.NonEmptyString,
78
+ intent: Schema.Literal("delete-snapshot")
79
+ }), input, "deleteSnapshot", "tigris", true);
80
+ const command = new DeleteBucketCommand({ Bucket: value.bucket });
81
+ extendRequest(command, { headers: { "X-Tigris-Snapshot-Version": value.version } });
82
+ yield* request(storage, "deleteSnapshot", true, (signal) => storage.client.send(command, { abortSignal: signal }));
83
+ })
84
+ });
85
+
86
+ export { Bucket, createBucket, snapshots };
87
+ //# sourceMappingURL=snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.js","names":[],"sources":["../../../src/providers/tigris/snapshots.ts"],"sourcesContent":["import { Effect, Schema } from \"effect\";\n\nimport { CreateBucketCommand, DeleteBucketCommand, ListBucketsCommand } from \"@aws-sdk/client-s3\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport type { S3StorageService } from \"../s3/index.js\";\nimport { extendRequest } from \"../s3/request-extension.js\";\nimport { request } from \"../s3/transport.js\";\n\nexport const Bucket = Schema.String.check(Schema.isPattern(/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/u));\nexport const createBucket = Effect.fnUntraced(function* (\n storage: S3StorageService,\n input: { readonly bucket: string; readonly sourceBucket?: string; readonly snapshot?: string },\n) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n sourceBucket: Schema.optional(Bucket),\n snapshot: Schema.optional(Schema.NonEmptyString),\n }),\n input,\n \"createBucket\",\n \"tigris\",\n true,\n );\n const command = new CreateBucketCommand({ Bucket: value.bucket });\n extendRequest(command, {\n headers: {\n \"X-Amz-Acl\": \"private\",\n \"X-Amz-Acl-Public-List-Objects-Enabled\": \"false\",\n ...(value.sourceBucket ? { \"X-Tigris-Fork-Source-Bucket\": value.sourceBucket } : {}),\n ...(value.snapshot ? { \"X-Tigris-Fork-Source-Bucket-Snapshot\": value.snapshot } : {}),\n },\n });\n yield* request(storage, \"createBucket\", true, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n return { _tag: \"Accepted\" as const, bucket: value.bucket };\n});\nexport const snapshots = (storage: S3StorageService) => ({\n create: Effect.fnUntraced(function* (input: { readonly bucket: string; readonly name?: string }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n name: Schema.optional(Schema.String.check(Schema.isPattern(/^[A-Za-z0-9._-]{1,128}$/u))),\n }),\n input,\n \"createSnapshot\",\n \"tigris\",\n true,\n );\n let version: string | undefined;\n const command = new CreateBucketCommand({ Bucket: value.bucket });\n extendRequest(command, {\n headers: { \"X-Tigris-Snapshot\": value.name ? `true; name=${value.name}` : \"true\" },\n observeHeaders: (headers) => {\n version = headers[\"x-tigris-snapshot-version\"];\n },\n });\n yield* request(storage, \"createSnapshot\", true, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n if (!version)\n return yield* storageError(\n \"createSnapshot\",\n \"tigris\",\n { _tag: \"ProviderFailure\", code: \"MissingSnapshotReceipt\" },\n \"unknown\",\n );\n return { snapshotVersion: version };\n }),\n listPage: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly cursor?: string;\n readonly limit?: number;\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n cursor: Schema.optional(Schema.NonEmptyString),\n limit: Schema.optional(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n }),\n input,\n \"listSnapshots\",\n \"tigris\",\n );\n const command = new ListBucketsCommand({\n ContinuationToken: value.cursor,\n MaxBuckets: value.limit,\n });\n extendRequest(command, { headers: { \"X-Tigris-Snapshot\": value.bucket } });\n const response = yield* request(storage, \"listSnapshots\", false, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n return {\n snapshots: (response.Buckets ?? []).map((snapshot) => ({\n version: snapshot.Name?.split(\";\")[0],\n name: snapshot.Name?.split(\"; name=\")[1],\n createdAt: snapshot.CreationDate,\n })),\n cursor: response.ContinuationToken,\n };\n }),\n delete: Effect.fnUntraced(function* (input: {\n readonly bucket: string;\n readonly version: string;\n readonly intent: \"delete-snapshot\";\n }) {\n const value = yield* decodeRequest(\n Schema.Struct({\n bucket: Bucket,\n version: Schema.NonEmptyString,\n intent: Schema.Literal(\"delete-snapshot\"),\n }),\n input,\n \"deleteSnapshot\",\n \"tigris\",\n true,\n );\n const command = new DeleteBucketCommand({ Bucket: value.bucket });\n extendRequest(command, { headers: { \"X-Tigris-Snapshot-Version\": value.version } });\n yield* request(storage, \"deleteSnapshot\", true, (signal) =>\n storage.client.send(command, { abortSignal: signal }),\n );\n }),\n});\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { providerError } from "../../internal/node/provider-errors.js";
3
+ import { Effect } from "effect";
4
+
5
+ // src/providers/tigris/transport.ts
6
+ const call = (operation, mutation, run) => Effect.tryPromise({
7
+ try: run,
8
+ catch: (error) => providerError("tigris", operation, mutation, error)
9
+ }).pipe(Effect.flatMap((result) => result.error ? Effect.fail(providerError("tigris", operation, mutation, result.error)) : Effect.succeed(result.data)), Effect.timeoutOrElse({
10
+ duration: "30 seconds",
11
+ orElse: () => Effect.fail(storageError(operation, "tigris", {
12
+ _tag: "TransportFailure",
13
+ code: "DeadlineExceeded"
14
+ }, mutation ? "unknown" : "not-applicable"))
15
+ }));
16
+
17
+ export { call };
18
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","names":[],"sources":["../../../src/providers/tigris/transport.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { providerError } from \"../../internal/node/provider-errors.js\";\nexport const call = <A>(\n operation: string,\n mutation: boolean,\n run: () => Promise<{ data: A; error?: never } | { error: Error; data?: never }>,\n) =>\n Effect.tryPromise({\n try: run,\n catch: (error) => providerError(\"tigris\", operation, mutation, error),\n }).pipe(\n Effect.flatMap((result) =>\n result.error\n ? Effect.fail(providerError(\"tigris\", operation, mutation, result.error))\n : Effect.succeed(result.data),\n ),\n Effect.timeoutOrElse({\n duration: \"30 seconds\",\n orElse: () =>\n Effect.fail(\n storageError(\n operation,\n \"tigris\",\n { _tag: \"TransportFailure\", code: \"DeadlineExceeded\" },\n mutation ? \"unknown\" : \"not-applicable\",\n ),\n ),\n }),\n );\n"],"mappings":";;;;;AAIA,MAAa,QACX,WACA,UACA,QAEA,OAAO,WAAW;CAChB,KAAK;CACL,QAAQ,UAAU,cAAc,UAAU,WAAW,UAAU,KAAK;AACtE,CAAC,CAAC,CAAC,KACD,OAAO,SAAS,WACd,OAAO,QACH,OAAO,KAAK,cAAc,UAAU,WAAW,UAAU,OAAO,KAAK,CAAC,IACtE,OAAO,QAAQ,OAAO,IAAI,CAChC,GACA,OAAO,cAAc;CACnB,UAAU;CACV,cACE,OAAO,KACL,aACE,WACA,UACA;EAAE,MAAM;EAAoB,MAAM;CAAmB,GACrD,WAAW,YAAY,gBACzB,CACF;AACJ,CAAC,CACH"}
@@ -0,0 +1,16 @@
1
+ import { StorageError } from "../../core/errors.js";
2
+ import { Effect, Redacted } from "effect";
3
+ type Secret = Redacted.Redacted<string> | Effect.Effect<Redacted.Redacted<string>, StorageError>;
4
+ export interface VercelConfig {
5
+ readonly storeId: string;
6
+ readonly access: "public" | "private";
7
+ readonly credential: {
8
+ readonly mode: "token" | "oidc";
9
+ readonly token: Secret;
10
+ };
11
+ readonly maxObjectBytes?: number;
12
+ readonly maxUnknownLengthBytes?: number;
13
+ readonly requestTimeoutMillis?: number;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { storageError } from "../../core/errors.js";
2
+ import { Effect, Redacted, Schema } from "effect";
3
+
4
+ // src/providers/vercel/config.ts
5
+ const Positive = Schema.Int.check(Schema.isGreaterThan(0));
6
+ const Config$1 = Schema.Struct({
7
+ storeId: Schema.String.check(Schema.isPattern(/^(?:store_)?[A-Za-z0-9]+$/u)),
8
+ access: Schema.Literals(["public", "private"]),
9
+ credential: Schema.Struct({
10
+ mode: Schema.Literals(["token", "oidc"]),
11
+ token: Schema.declare((value) => Redacted.isRedacted(value) || Effect.isEffect(value))
12
+ }),
13
+ maxObjectBytes: Schema.optional(Positive),
14
+ maxUnknownLengthBytes: Schema.optional(Positive),
15
+ requestTimeoutMillis: Schema.optional(Positive)
16
+ });
17
+ const resolveConfig = Effect.fnUntraced(function* (input) {
18
+ yield* Schema.decodeUnknownEffect(Config$1, { onExcessProperty: "error" })(input).pipe(Effect.mapError(() => storageError("make", "vercel", {
19
+ _tag: "InvalidConfiguration",
20
+ field: "config"
21
+ })));
22
+ yield* retryPolicy();
23
+ const override = process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;
24
+ const endpoint = override ? URL.parse(override) : void 0;
25
+ if (override && (!endpoint || !["https:", "http:"].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.search || endpoint.hash || endpoint.pathname !== "/")) return yield* storageError("make", "vercel", {
26
+ _tag: "InvalidConfiguration",
27
+ field: "VERCEL_BLOB_API_URL"
28
+ });
29
+ return {
30
+ ...input,
31
+ apiOrigin: endpoint?.origin,
32
+ storeId: input.storeId.replace(/^store_/u, ""),
33
+ maxObjectBytes: input.maxObjectBytes ?? 1024 ** 3,
34
+ maxUnknownLengthBytes: input.maxUnknownLengthBytes ?? 8 * 1024 ** 2,
35
+ requestTimeoutMillis: input.requestTimeoutMillis ?? 3e4
36
+ };
37
+ });
38
+ /** The pinned SDK reads this switch per request; never change global application policy here. */
39
+ const retryPolicy = () => Effect.suspend(() => {
40
+ const version = process.env.VERCEL_BLOB_API_VERSION_OVERRIDE ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_VERSION_OVERRIDE;
41
+ return process.env.VERCEL_BLOB_RETRIES === "0" && (version === void 0 || version === "13") ? Effect.void : Effect.fail(storageError("sdk.policy", "vercel", {
42
+ _tag: "InvalidConfiguration",
43
+ field: "sdk-retries-or-api-version"
44
+ }, "not-started"));
45
+ });
46
+
47
+ export { resolveConfig, retryPolicy };
48
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","names":["Config"],"sources":["../../../src/providers/vercel/config.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { StorageError } from \"../../core/errors.js\";\n\ntype Secret = Redacted.Redacted<string> | Effect.Effect<Redacted.Redacted<string>, StorageError>;\nexport interface VercelConfig {\n readonly storeId: string;\n readonly access: \"public\" | \"private\";\n readonly credential: { readonly mode: \"token\" | \"oidc\"; readonly token: Secret };\n readonly maxObjectBytes?: number;\n readonly maxUnknownLengthBytes?: number;\n readonly requestTimeoutMillis?: number;\n}\nconst Positive = Schema.Int.check(Schema.isGreaterThan(0));\nconst Config = Schema.Struct({\n storeId: Schema.String.check(Schema.isPattern(/^(?:store_)?[A-Za-z0-9]+$/u)),\n access: Schema.Literals([\"public\", \"private\"]),\n credential: Schema.Struct({\n mode: Schema.Literals([\"token\", \"oidc\"]),\n token: Schema.declare<Secret>(\n (value): value is Secret => Redacted.isRedacted(value) || Effect.isEffect(value),\n ),\n }),\n maxObjectBytes: Schema.optional(Positive),\n maxUnknownLengthBytes: Schema.optional(Positive),\n requestTimeoutMillis: Schema.optional(Positive),\n});\nexport const resolveConfig = Effect.fnUntraced(function* (input: VercelConfig) {\n yield* Schema.decodeUnknownEffect(Config, { onExcessProperty: \"error\" })(input).pipe(\n Effect.mapError(() =>\n storageError(\"make\", \"vercel\", { _tag: \"InvalidConfiguration\", field: \"config\" }),\n ),\n );\n yield* retryPolicy();\n const override = process.env.VERCEL_BLOB_API_URL ?? process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;\n const endpoint = override ? URL.parse(override) : undefined;\n if (\n override &&\n (!endpoint ||\n ![\"https:\", \"http:\"].includes(endpoint.protocol) ||\n endpoint.username ||\n endpoint.password ||\n endpoint.search ||\n endpoint.hash ||\n endpoint.pathname !== \"/\")\n )\n return yield* storageError(\"make\", \"vercel\", {\n _tag: \"InvalidConfiguration\",\n field: \"VERCEL_BLOB_API_URL\",\n });\n return {\n ...input,\n apiOrigin: endpoint?.origin,\n storeId: input.storeId.replace(/^store_/u, \"\"),\n maxObjectBytes: input.maxObjectBytes ?? 1024 ** 3,\n maxUnknownLengthBytes: input.maxUnknownLengthBytes ?? 8 * 1024 ** 2,\n requestTimeoutMillis: input.requestTimeoutMillis ?? 30000,\n };\n});\nexport type VercelConnection = {\n readonly config: Effect.Success<ReturnType<typeof resolveConfig>>;\n};\n/** The pinned SDK reads this switch per request; never change global application policy here. */\nexport const retryPolicy = () =>\n Effect.suspend(() => {\n const version =\n process.env.VERCEL_BLOB_API_VERSION_OVERRIDE ??\n process.env.NEXT_PUBLIC_VERCEL_BLOB_API_VERSION_OVERRIDE;\n return process.env.VERCEL_BLOB_RETRIES === \"0\" && (version === undefined || version === \"13\")\n ? Effect.void\n : Effect.fail(\n storageError(\n \"sdk.policy\",\n \"vercel\",\n { _tag: \"InvalidConfiguration\", field: \"sdk-retries-or-api-version\" },\n \"not-started\",\n ),\n );\n });\n"],"mappings":";;;;AAcA,MAAM,WAAW,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;AACzD,MAAMA,WAAS,OAAO,OAAO;CAC3B,SAAS,OAAO,OAAO,MAAM,OAAO,UAAU,4BAA4B,CAAC;CAC3E,QAAQ,OAAO,SAAS,CAAC,UAAU,SAAS,CAAC;CAC7C,YAAY,OAAO,OAAO;EACxB,MAAM,OAAO,SAAS,CAAC,SAAS,MAAM,CAAC;EACvC,OAAO,OAAO,SACX,UAA2B,SAAS,WAAW,KAAK,KAAK,OAAO,SAAS,KAAK,CACjF;CACF,CAAC;CACD,gBAAgB,OAAO,SAAS,QAAQ;CACxC,uBAAuB,OAAO,SAAS,QAAQ;CAC/C,sBAAsB,OAAO,SAAS,QAAQ;AAChD,CAAC;AACD,MAAa,gBAAgB,OAAO,WAAW,WAAW,OAAqB;CAC7E,OAAO,OAAO,oBAAoBA,UAAQ,EAAE,kBAAkB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAC9E,OAAO,eACL,aAAa,QAAQ,UAAU;EAAE,MAAM;EAAwB,OAAO;CAAS,CAAC,CAClF,CACF;CACA,OAAO,YAAY;CACnB,MAAM,WAAW,QAAQ,IAAI,uBAAuB,QAAQ,IAAI;CAChE,MAAM,WAAW,WAAW,IAAI,MAAM,QAAQ,IAAI;CAClD,IACE,aACC,CAAC,YACA,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,SAAS,SAAS,QAAQ,KAC/C,SAAS,YACT,SAAS,YACT,SAAS,UACT,SAAS,QACT,SAAS,aAAa,MAExB,OAAO,OAAO,aAAa,QAAQ,UAAU;EAC3C,MAAM;EACN,OAAO;CACT,CAAC;CACH,OAAO;EACL,GAAG;EACH,WAAW,UAAU;EACrB,SAAS,MAAM,QAAQ,QAAQ,YAAY,EAAE;EAC7C,gBAAgB,MAAM,kBAAkB,QAAQ;EAChD,uBAAuB,MAAM,yBAAyB,IAAI,QAAQ;EAClE,sBAAsB,MAAM,wBAAwB;CACtD;AACF,CAAC;;AAKD,MAAa,oBACX,OAAO,cAAc;CACnB,MAAM,UACJ,QAAQ,IAAI,oCACZ,QAAQ,IAAI;CACd,OAAO,QAAQ,IAAI,wBAAwB,QAAQ,YAAY,UAAa,YAAY,QACpF,OAAO,OACP,OAAO,KACL,aACE,cACA,UACA;EAAE,MAAM;EAAwB,OAAO;CAA6B,GACpE,aACF,CACF;AACN,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { ObjectKey, ObjectMetadata } from "../../core/object.js";
2
+ import { storageError } from "../../core/errors.js";
3
+ import { DateTime, Effect, Option, Schema } from "effect";
4
+ import * as Blob from "@vercel/blob";
5
+
6
+ // src/providers/vercel/mapping.ts
7
+ const validateKey = Effect.fnUntraced(function* (key, operation) {
8
+ yield* Schema.decodeUnknownEffect(ObjectKey)(key).pipe(Effect.mapError(() => storageError(operation, "vercel", {
9
+ _tag: "InvalidInput",
10
+ field: "key"
11
+ }, "not-started")));
12
+ if (key.startsWith("/") || /^https?:/iu.test(key) || key.split("/").some((part) => !part || part === "." || part === "..") || new TextEncoder().encode(key).length > 950) return yield* storageError(operation, "vercel", {
13
+ _tag: "InvalidInput",
14
+ field: "key"
15
+ }, "not-started");
16
+ return key;
17
+ });
18
+ const writeOptions = Effect.fnUntraced(function* (headers, operation) {
19
+ if (Object.keys(headers.customMetadata ?? {}).filter((key) => key !== "effect-storage-operation").length || headers.contentDisposition || headers.contentLanguage || headers.contentEncoding || headers.cacheControl) return yield* storageError(operation, "vercel", {
20
+ _tag: "Unsupported",
21
+ capability: "object-headers"
22
+ }, "not-started");
23
+ return {
24
+ ...headers.contentType ? { contentType: headers.contentType } : {},
25
+ addRandomSuffix: false
26
+ };
27
+ });
28
+ const Observation = Schema.Struct({
29
+ pathname: Schema.String,
30
+ etag: Schema.optional(Schema.String),
31
+ size: Schema.optional(Schema.NullOr(Schema.Natural)),
32
+ contentType: Schema.optional(Schema.NullOr(Schema.String)),
33
+ contentDisposition: Schema.optional(Schema.String),
34
+ cacheControl: Schema.optional(Schema.String)
35
+ });
36
+ const metadata = Effect.fnUntraced(function* (connection, value, operation, key, mutation = false) {
37
+ const observed = yield* Schema.decodeUnknownEffect(Observation)(value).pipe(Effect.mapError(() => storageError(operation, "vercel", { _tag: "ProviderFailure" }, mutation ? "unknown" : "not-applicable")));
38
+ if (key !== void 0 && observed.pathname !== key) return yield* storageError(operation, "vercel", { _tag: "IntegrityMismatch" }, mutation ? "unknown" : "not-applicable");
39
+ const uploadedAt = value !== null && typeof value === "object" ? Reflect.get(value, "uploadedAt") : void 0;
40
+ const modified = uploadedAt instanceof Date ? Option.getOrUndefined(DateTime.make(uploadedAt)) : void 0;
41
+ return yield* Schema.decodeUnknownEffect(Schema.toType(ObjectMetadata))({
42
+ ref: {
43
+ storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,
44
+ key: observed.pathname
45
+ },
46
+ ...observed.size !== void 0 && observed.size !== null ? { size: observed.size } : {},
47
+ ...observed.etag ? { etag: observed.etag } : {},
48
+ ...observed.contentType ? { contentType: observed.contentType } : {},
49
+ ...observed.contentDisposition ? { contentDisposition: observed.contentDisposition } : {},
50
+ ...observed.cacheControl ? { cacheControl: observed.cacheControl } : {},
51
+ ...modified ? { lastModified: modified } : {}
52
+ }).pipe(Effect.mapError(() => storageError(operation, "vercel", { _tag: "ProviderFailure" }, mutation ? "unknown" : "not-applicable")));
53
+ });
54
+ function providerError(operation, mutation, error) {
55
+ const overwriteRejected = mutation && error instanceof Blob.BlobError && error.message.startsWith("Vercel Blob: This blob already exists,");
56
+ const readStatus = error instanceof Blob.BlobError ? /^Vercel Blob: Failed to fetch blob: (\d{3}) /u.exec(error.message)?.[1] : void 0;
57
+ const reason = readStatus === "401" || readStatus === "403" ? { _tag: "AccessDenied" } : readStatus === "412" || overwriteRejected ? { _tag: "PreconditionFailed" } : readStatus === "416" ? { _tag: "RangeNotSatisfiable" } : error instanceof Blob.BlobStoreNotFoundError ? {
58
+ _tag: "InvalidConfiguration",
59
+ field: "store"
60
+ } : error instanceof Blob.BlobNotFoundError ? { _tag: "NotFound" } : error instanceof Blob.BlobAccessError || error instanceof Blob.BlobStoreSuspendedError ? { _tag: "AccessDenied" } : error instanceof Blob.BlobClientTokenExpiredError ? { _tag: "Expired" } : error instanceof Blob.BlobPreconditionFailedError ? { _tag: "PreconditionFailed" } : error instanceof Blob.BlobServiceRateLimited ? {
61
+ _tag: "Throttled",
62
+ retryAfterMillis: Math.max(0, error.retryAfter * 1e3)
63
+ } : error instanceof Blob.BlobContentTypeNotAllowedError || error instanceof Blob.BlobPathnameMismatchError || error instanceof Blob.BlobFileTooLargeError ? {
64
+ _tag: "InvalidInput",
65
+ field: "upload"
66
+ } : { _tag: "TransportFailure" };
67
+ const rejected = [
68
+ "NotFound",
69
+ "AccessDenied",
70
+ "Expired",
71
+ "PreconditionFailed",
72
+ "InvalidInput",
73
+ "Throttled"
74
+ ].includes(reason._tag);
75
+ return storageError(operation, "vercel", reason, mutation ? rejected ? "rejected" : "unknown" : "not-applicable");
76
+ }
77
+
78
+ export { metadata, providerError, validateKey, writeOptions };
79
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","names":[],"sources":["../../../src/providers/vercel/mapping.ts"],"sourcesContent":["import { DateTime, Effect, Option, Schema } from \"effect\";\n\nimport * as Blob from \"@vercel/blob\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport type { ObjectHeaders } from \"../../core/object.js\";\nimport { ObjectKey, ObjectMetadata } from \"../../core/object.js\";\nimport type { VercelConnection } from \"./config.js\";\n\nexport const validateKey = Effect.fnUntraced(function* (key: string, operation: string) {\n yield* Schema.decodeUnknownEffect(ObjectKey)(key).pipe(\n Effect.mapError(() =>\n storageError(operation, \"vercel\", { _tag: \"InvalidInput\", field: \"key\" }, \"not-started\"),\n ),\n );\n if (\n key.startsWith(\"/\") ||\n /^https?:/iu.test(key) ||\n key.split(\"/\").some((part) => !part || part === \".\" || part === \"..\") ||\n new TextEncoder().encode(key).length > 950\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"InvalidInput\", field: \"key\" },\n \"not-started\",\n );\n return key;\n});\nexport const writeOptions = Effect.fnUntraced(function* (\n headers: ObjectHeaders,\n operation: string,\n) {\n const metadata = Object.keys(headers.customMetadata ?? {}).filter(\n (key) => key !== \"effect-storage-operation\",\n );\n if (\n metadata.length ||\n headers.contentDisposition ||\n headers.contentLanguage ||\n headers.contentEncoding ||\n headers.cacheControl\n )\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"Unsupported\", capability: \"object-headers\" },\n \"not-started\",\n );\n return {\n ...(headers.contentType ? { contentType: headers.contentType } : {}),\n addRandomSuffix: false,\n };\n});\nconst Observation = Schema.Struct({\n pathname: Schema.String,\n etag: Schema.optional(Schema.String),\n size: Schema.optional(Schema.NullOr(Schema.Natural)),\n contentType: Schema.optional(Schema.NullOr(Schema.String)),\n contentDisposition: Schema.optional(Schema.String),\n cacheControl: Schema.optional(Schema.String),\n});\nexport const metadata = Effect.fnUntraced(function* (\n connection: VercelConnection,\n value: unknown,\n operation: string,\n key?: string,\n mutation = false,\n) {\n const observed = yield* Schema.decodeUnknownEffect(Observation)(value).pipe(\n Effect.mapError(() =>\n storageError(\n operation,\n \"vercel\",\n { _tag: \"ProviderFailure\" },\n mutation ? \"unknown\" : \"not-applicable\",\n ),\n ),\n );\n if (key !== undefined && observed.pathname !== key)\n return yield* storageError(\n operation,\n \"vercel\",\n { _tag: \"IntegrityMismatch\" },\n mutation ? \"unknown\" : \"not-applicable\",\n );\n const uploadedAt =\n value !== null && typeof value === \"object\" ? Reflect.get(value, \"uploadedAt\") : undefined;\n const modified =\n uploadedAt instanceof Date ? Option.getOrUndefined(DateTime.make(uploadedAt)) : undefined;\n return yield* Schema.decodeUnknownEffect(Schema.toType(ObjectMetadata))({\n ref: {\n storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,\n key: observed.pathname,\n },\n ...(observed.size !== undefined && observed.size !== null ? { size: observed.size } : {}),\n ...(observed.etag ? { etag: observed.etag } : {}),\n ...(observed.contentType ? { contentType: observed.contentType } : {}),\n ...(observed.contentDisposition ? { contentDisposition: observed.contentDisposition } : {}),\n ...(observed.cacheControl ? { cacheControl: observed.cacheControl } : {}),\n ...(modified ? { lastModified: modified } : {}),\n }).pipe(\n Effect.mapError(() =>\n storageError(\n operation,\n \"vercel\",\n { _tag: \"ProviderFailure\" },\n mutation ? \"unknown\" : \"not-applicable\",\n ),\n ),\n );\n});\nexport function providerError(operation: string, mutation: boolean, error: unknown) {\n // The SDK exposes create-only collisions as generic bad_request errors, without a typed code.\n const overwriteRejected =\n mutation &&\n error instanceof Blob.BlobError &&\n error.message.startsWith(\"Vercel Blob: This blob already exists,\");\n const readStatus =\n error instanceof Blob.BlobError\n ? /^Vercel Blob: Failed to fetch blob: (\\d{3}) /u.exec(error.message)?.[1]\n : undefined;\n const reason =\n readStatus === \"401\" || readStatus === \"403\"\n ? { _tag: \"AccessDenied\" as const }\n : readStatus === \"412\" || overwriteRejected\n ? { _tag: \"PreconditionFailed\" as const }\n : readStatus === \"416\"\n ? { _tag: \"RangeNotSatisfiable\" as const }\n : error instanceof Blob.BlobStoreNotFoundError\n ? { _tag: \"InvalidConfiguration\" as const, field: \"store\" }\n : error instanceof Blob.BlobNotFoundError\n ? { _tag: \"NotFound\" as const }\n : error instanceof Blob.BlobAccessError ||\n error instanceof Blob.BlobStoreSuspendedError\n ? { _tag: \"AccessDenied\" as const }\n : error instanceof Blob.BlobClientTokenExpiredError\n ? { _tag: \"Expired\" as const }\n : error instanceof Blob.BlobPreconditionFailedError\n ? { _tag: \"PreconditionFailed\" as const }\n : error instanceof Blob.BlobServiceRateLimited\n ? {\n _tag: \"Throttled\" as const,\n retryAfterMillis: Math.max(0, error.retryAfter * 1000),\n }\n : error instanceof Blob.BlobContentTypeNotAllowedError ||\n error instanceof Blob.BlobPathnameMismatchError ||\n error instanceof Blob.BlobFileTooLargeError\n ? { _tag: \"InvalidInput\" as const, field: \"upload\" }\n : { _tag: \"TransportFailure\" as const };\n const rejected = [\n \"NotFound\",\n \"AccessDenied\",\n \"Expired\",\n \"PreconditionFailed\",\n \"InvalidInput\",\n \"Throttled\",\n ].includes(reason._tag);\n return storageError(\n operation,\n \"vercel\",\n reason,\n mutation ? (rejected ? \"rejected\" : \"unknown\") : \"not-applicable\",\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { ObjectRef } from "../../core/object.js";
2
+ import { storageError } from "../../core/errors.js";
3
+ import { webUploadBody } from "../../internal/web-upload-body.js";
4
+ import { metadata, validateKey, writeOptions } from "./mapping.js";
5
+ import { call } from "./transport.js";
6
+ import { Effect, Redacted, Schema } from "effect";
7
+ import * as Blob from "@vercel/blob";
8
+
9
+ // src/providers/vercel/multipart.ts
10
+ const Handle = Schema.Struct({
11
+ key: Schema.String,
12
+ uploadId: Schema.String
13
+ });
14
+ function multipart(connection) {
15
+ const decode = Effect.fnUntraced(function* (upload) {
16
+ yield* Schema.decodeUnknownEffect(Schema.Struct({
17
+ ref: ObjectRef,
18
+ uploadId: Schema.Redacted(Schema.String)
19
+ }))(upload).pipe(Effect.mapError(() => storageError("multipart", "vercel", { _tag: "InvalidSession" })));
20
+ if (upload.ref.storeId !== `vercel:${connection.config.access}:${connection.config.storeId}` || upload.ref.version) return yield* storageError("multipart", "vercel", { _tag: "InvalidSession" });
21
+ yield* validateKey(upload.ref.key, "multipart");
22
+ return yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Handle))(Redacted.value(upload.uploadId)).pipe(Effect.mapError(() => storageError("multipart", "vercel", { _tag: "InvalidSession" })));
23
+ });
24
+ return {
25
+ limits: {
26
+ minimumPartBytes: 5 * 1024 ** 2,
27
+ maximumPartBytes: 256 * 1024 ** 2,
28
+ maximumParts: 1e4,
29
+ completeConditions: []
30
+ },
31
+ initiate: Effect.fnUntraced(function* (input) {
32
+ yield* validateKey(input.key, "initiate");
33
+ const headers = yield* writeOptions(input.headers ?? {}, "initiate");
34
+ const result = yield* call(connection, "initiate", true, (options) => Blob.createMultipartUpload(input.key, {
35
+ ...options,
36
+ ...headers,
37
+ access: connection.config.access,
38
+ allowOverwrite: true
39
+ }));
40
+ yield* Schema.decodeUnknownEffect(Handle)(result).pipe(Effect.mapError(() => storageError("initiate", "vercel", { _tag: "ProviderFailure" }, "unknown")));
41
+ return {
42
+ ref: {
43
+ storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,
44
+ key: input.key
45
+ },
46
+ uploadId: Redacted.make(JSON.stringify(result))
47
+ };
48
+ }),
49
+ uploadPart: Effect.fnUntraced(function* (input) {
50
+ const handle = yield* decode(input.upload);
51
+ if (!Number.isSafeInteger(input.partNumber) || input.partNumber < 1 || input.partNumber > 1e4) return yield* storageError("part", "vercel", {
52
+ _tag: "InvalidInput",
53
+ field: "partNumber"
54
+ }, "not-started");
55
+ return yield* webUploadBody("vercel", {
56
+ body: input.body,
57
+ ...input.contentLength !== void 0 ? { contentLength: input.contentLength } : {},
58
+ maxBytes: 256 * 1024 ** 2
59
+ }, connection.config.maxUnknownLengthBytes, (body, length) => call(connection, "part", true, (options) => Blob.uploadPart(input.upload.ref.key, body instanceof Uint8Array ? new ReadableStream({ start(controller) {
60
+ controller.enqueue(body);
61
+ controller.close();
62
+ } }) : body, {
63
+ ...options,
64
+ ...handle,
65
+ access: connection.config.access,
66
+ partNumber: input.partNumber
67
+ })).pipe(Effect.map((part) => ({
68
+ ...part,
69
+ size: length
70
+ }))));
71
+ }),
72
+ complete: Effect.fnUntraced(function* (input) {
73
+ if (input.condition) return yield* storageError("complete", "vercel", {
74
+ _tag: "Unsupported",
75
+ capability: "conditional-multipart-completion"
76
+ }, "not-started");
77
+ const handle = yield* decode(input.upload);
78
+ yield* Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({
79
+ partNumber: Schema.Int.check(Schema.isBetween({
80
+ minimum: 1,
81
+ maximum: 1e4
82
+ })),
83
+ etag: Schema.NonEmptyString,
84
+ size: Schema.optional(Schema.Natural)
85
+ })).check(Schema.isMaxLength(1e4)))(input.parts).pipe(Effect.mapError(() => storageError("complete", "vercel", {
86
+ _tag: "InvalidInput",
87
+ field: "parts"
88
+ }, "not-started")));
89
+ if (input.parts.length === 0 || input.parts.some((part, index) => part.partNumber !== index + 1)) return yield* storageError("complete", "vercel", {
90
+ _tag: "InvalidInput",
91
+ field: "parts"
92
+ }, "not-started");
93
+ return yield* call(connection, "complete", true, (options) => Blob.completeMultipartUpload(input.upload.ref.key, [...input.parts], {
94
+ ...options,
95
+ ...handle,
96
+ access: connection.config.access,
97
+ addRandomSuffix: false,
98
+ allowOverwrite: true
99
+ })).pipe(Effect.flatMap((result) => metadata(connection, result, "complete", input.upload.ref.key, true)));
100
+ }),
101
+ listParts: () => Effect.fail(storageError("listParts", "vercel", {
102
+ _tag: "Unsupported",
103
+ capability: "multipart-inventory"
104
+ })),
105
+ abort: () => Effect.fail(storageError("abort", "vercel", {
106
+ _tag: "Unsupported",
107
+ capability: "remote-multipart-abort"
108
+ }))
109
+ };
110
+ }
111
+
112
+ export { multipart };
113
+ //# sourceMappingURL=multipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart.js","names":[],"sources":["../../../src/providers/vercel/multipart.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport * as Blob from \"@vercel/blob\";\n\nimport type { MultipartHandle, MultipartUploads } from \"../../core/contracts/multipart.js\";\nimport { storageError } from \"../../core/errors.js\";\nimport { ObjectRef } from \"../../core/object.js\";\nimport { webUploadBody } from \"../../internal/web-upload-body.js\";\nimport type { VercelConnection } from \"./config.js\";\nimport { metadata, validateKey, writeOptions } from \"./mapping.js\";\nimport { call } from \"./transport.js\";\n\nconst Handle = Schema.Struct({ key: Schema.String, uploadId: Schema.String });\nexport function multipart(connection: VercelConnection): MultipartUploads {\n const decode = Effect.fnUntraced(function* (upload: MultipartHandle) {\n yield* Schema.decodeUnknownEffect(\n Schema.Struct({ ref: ObjectRef, uploadId: Schema.Redacted(Schema.String) }),\n )(upload).pipe(\n Effect.mapError(() => storageError(\"multipart\", \"vercel\", { _tag: \"InvalidSession\" })),\n );\n if (\n upload.ref.storeId !== `vercel:${connection.config.access}:${connection.config.storeId}` ||\n upload.ref.version\n )\n return yield* storageError(\"multipart\", \"vercel\", { _tag: \"InvalidSession\" });\n yield* validateKey(upload.ref.key, \"multipart\");\n return yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Handle))(\n Redacted.value(upload.uploadId),\n ).pipe(Effect.mapError(() => storageError(\"multipart\", \"vercel\", { _tag: \"InvalidSession\" })));\n });\n return {\n limits: {\n minimumPartBytes: 5 * 1024 ** 2,\n maximumPartBytes: 256 * 1024 ** 2,\n maximumParts: 10000,\n completeConditions: [],\n },\n initiate: Effect.fnUntraced(function* (input) {\n yield* validateKey(input.key, \"initiate\");\n const headers = yield* writeOptions(input.headers ?? {}, \"initiate\");\n const result = yield* call(connection, \"initiate\", true, (options) =>\n Blob.createMultipartUpload(input.key, {\n ...options,\n ...headers,\n access: connection.config.access,\n allowOverwrite: true,\n }),\n );\n yield* Schema.decodeUnknownEffect(Handle)(result).pipe(\n Effect.mapError(() =>\n storageError(\"initiate\", \"vercel\", { _tag: \"ProviderFailure\" }, \"unknown\"),\n ),\n );\n return {\n ref: {\n storeId: `vercel:${connection.config.access}:${connection.config.storeId}`,\n key: input.key,\n },\n uploadId: Redacted.make(JSON.stringify(result)),\n };\n }),\n uploadPart: Effect.fnUntraced(function* (input) {\n const handle = yield* decode(input.upload);\n if (\n !Number.isSafeInteger(input.partNumber) ||\n input.partNumber < 1 ||\n input.partNumber > 10000\n )\n return yield* storageError(\n \"part\",\n \"vercel\",\n { _tag: \"InvalidInput\", field: \"partNumber\" },\n \"not-started\",\n );\n return yield* webUploadBody(\n \"vercel\",\n {\n body: input.body,\n ...(input.contentLength !== undefined ? { contentLength: input.contentLength } : {}),\n maxBytes: 256 * 1024 ** 2,\n },\n connection.config.maxUnknownLengthBytes,\n (body, length) =>\n call(connection, \"part\", true, (options) =>\n Blob.uploadPart(\n input.upload.ref.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 ...handle,\n access: connection.config.access,\n partNumber: input.partNumber,\n },\n ),\n ).pipe(Effect.map((part) => ({ ...part, size: length }))),\n );\n }),\n complete: Effect.fnUntraced(function* (input) {\n if (input.condition)\n return yield* storageError(\n \"complete\",\n \"vercel\",\n { _tag: \"Unsupported\", capability: \"conditional-multipart-completion\" },\n \"not-started\",\n );\n const handle = yield* decode(input.upload);\n yield* Schema.decodeUnknownEffect(\n Schema.Array(\n Schema.Struct({\n partNumber: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 10000 })),\n etag: Schema.NonEmptyString,\n size: Schema.optional(Schema.Natural),\n }),\n ).check(Schema.isMaxLength(10000)),\n )(input.parts).pipe(\n Effect.mapError(() =>\n storageError(\n \"complete\",\n \"vercel\",\n { _tag: \"InvalidInput\", field: \"parts\" },\n \"not-started\",\n ),\n ),\n );\n if (\n input.parts.length === 0 ||\n input.parts.some((part, index) => part.partNumber !== index + 1)\n )\n return yield* storageError(\n \"complete\",\n \"vercel\",\n { _tag: \"InvalidInput\", field: \"parts\" },\n \"not-started\",\n );\n return yield* call(connection, \"complete\", true, (options) =>\n Blob.completeMultipartUpload(input.upload.ref.key, [...input.parts], {\n ...options,\n ...handle,\n access: connection.config.access,\n addRandomSuffix: false,\n allowOverwrite: true,\n }),\n ).pipe(\n Effect.flatMap((result) =>\n metadata(connection, result, \"complete\", input.upload.ref.key, true),\n ),\n );\n }),\n listParts: () =>\n Effect.fail(\n storageError(\"listParts\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"multipart-inventory\",\n }),\n ),\n abort: () =>\n Effect.fail(\n storageError(\"abort\", \"vercel\", {\n _tag: \"Unsupported\",\n capability: \"remote-multipart-abort\",\n }),\n ),\n };\n}\n"],"mappings":"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"}