@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,299 @@
1
+ import { ObjectHeaders } from "../../core/object.js";
2
+ import { storageError } from "../../core/errors.js";
3
+ import { decodeRequest } from "../../internal/request-validation.js";
4
+ import { ListRequest, PutRequest, WriteCondition } from "../../core/requests.js";
5
+ import { authority, encryptionHeaders } from "./config.js";
6
+ import { S3Key, validateHeaders } from "./validation.js";
7
+ import { checksums, condition, headers, metadata, validateRef } from "./object-mapping.js";
8
+ import { enforceProfile } from "./profile.js";
9
+ import { request } from "./transport.js";
10
+ import { ChecksumOptions, CompletePart, PartNumber, Upload, nativeLimits } from "./native-models.js";
11
+ import { decodeCursor, encodeCursor } from "../../internal/listing-cursor.js";
12
+ import { uploadBody } from "./upload-body.js";
13
+ import { Effect, Redacted, Schema } from "effect";
14
+ import { AbortMultipartUploadCommand, CompleteMultipartUploadCommand, CreateMultipartUploadCommand, ListMultipartUploadsCommand, ListPartsCommand, UploadPartCommand } from "@aws-sdk/client-s3";
15
+
16
+ // src/providers/s3/multipart.ts
17
+ const Initiate = Schema.Struct({
18
+ key: S3Key,
19
+ headers: Schema.optional(ObjectHeaders),
20
+ checksum: Schema.optional(ChecksumOptions)
21
+ });
22
+ const Part = Schema.Struct({
23
+ upload: Upload,
24
+ partNumber: PartNumber,
25
+ body: Schema.Unknown,
26
+ contentLength: PutRequest.fields.contentLength,
27
+ checksum: Schema.optional(ChecksumOptions)
28
+ });
29
+ const Complete = Schema.Struct({
30
+ upload: Upload,
31
+ parts: Schema.Array(CompletePart).check(Schema.isMinLength(1), Schema.isMaxLength(nativeLimits.maximumParts)),
32
+ condition: Schema.optional(WriteCondition),
33
+ checksum: Schema.optional(ChecksumOptions)
34
+ });
35
+ const PartsPage = Schema.Struct({
36
+ upload: Upload,
37
+ cursor: Schema.optional(Schema.NonEmptyString)
38
+ });
39
+ const validateUpload = Effect.fnUntraced(function* (connection, upload, operation) {
40
+ yield* validateRef(upload.ref, connection.config, operation);
41
+ if (upload.ref.version) return yield* storageError(operation, "s3", {
42
+ _tag: "InvalidInput",
43
+ field: "upload.ref.version"
44
+ }, "not-started");
45
+ });
46
+ function partChecksums(part) {
47
+ const fields = {};
48
+ for (const checksum of part.checksums ?? []) {
49
+ const names = {
50
+ crc32: "ChecksumCRC32",
51
+ crc32c: "ChecksumCRC32C",
52
+ crc64nvme: "ChecksumCRC64NVME",
53
+ sha1: "ChecksumSHA1",
54
+ sha256: "ChecksumSHA256",
55
+ sha512: "ChecksumSHA512",
56
+ md5: "ChecksumMD5",
57
+ xxhash64: "ChecksumXXHASH64",
58
+ xxhash3: "ChecksumXXHASH3",
59
+ xxhash128: "ChecksumXXHASH128"
60
+ };
61
+ const name = Object.hasOwn(names, checksum.algorithm) ? names[checksum.algorithm] : void 0;
62
+ if (!name || checksum.encoding !== "base64") return Effect.fail(storageError("complete", "s3", {
63
+ _tag: "Unsupported",
64
+ capability: "part-checksum-encoding-or-algorithm"
65
+ }, "not-started"));
66
+ fields[name] = checksum.value;
67
+ }
68
+ return Effect.succeed(Object.assign(fields, {
69
+ PartNumber: part.partNumber,
70
+ ETag: part.etag
71
+ }));
72
+ }
73
+ function multipart(connection) {
74
+ const { client, config } = connection;
75
+ const limits = connection.profile ? {
76
+ ...connection.profile.limits,
77
+ completeConditions: connection.profile.completeConditions
78
+ } : nativeLimits;
79
+ return {
80
+ limits,
81
+ initiate: Effect.fnUntraced(function* (input) {
82
+ const value = yield* decodeRequest(Initiate, input, "initiate", "s3", true);
83
+ yield* enforceProfile(connection, "initiate", value);
84
+ if (value.headers) yield* validateHeaders(value.headers, "initiate");
85
+ if (connection.multipartChecksums === false && value.checksum) return yield* storageError("initiate", "s3", {
86
+ _tag: "Unsupported",
87
+ capability: "multipart-checksums"
88
+ }, "not-started");
89
+ const checksumAlgorithm = connection.multipartChecksums === false ? void 0 : value.checksum?.ChecksumAlgorithm ?? "CRC32";
90
+ const checksumType = connection.multipartChecksums === false ? void 0 : value.checksum?.ChecksumType ?? (checksumAlgorithm === "CRC64NVME" ? "FULL_OBJECT" : "COMPOSITE");
91
+ const output = yield* request(connection, "initiate", true, (signal) => client.send(new CreateMultipartUploadCommand({
92
+ ...authority(config),
93
+ ...encryptionHeaders(config.encryption),
94
+ ...headers(value.headers ?? {}),
95
+ ...value.checksum,
96
+ ChecksumAlgorithm: checksumAlgorithm,
97
+ ChecksumType: checksumType,
98
+ Key: value.key
99
+ }), { abortSignal: signal }));
100
+ if (!output.UploadId) return yield* storageError("initiate", "s3", {
101
+ _tag: "ProviderFailure",
102
+ code: "MissingUploadId"
103
+ }, "unknown");
104
+ return {
105
+ ref: {
106
+ storeId: config.storeId,
107
+ key: value.key
108
+ },
109
+ uploadId: Redacted.make(output.UploadId),
110
+ checksumAlgorithm: connection.multipartChecksums === false ? void 0 : output.ChecksumAlgorithm ?? checksumAlgorithm,
111
+ checksumType: connection.multipartChecksums === false ? void 0 : output.ChecksumType ?? checksumType
112
+ };
113
+ }),
114
+ uploadPart: Effect.fnUntraced(function* (input) {
115
+ const value = yield* decodeRequest(Part, input, "uploadPart", "s3", true);
116
+ yield* enforceProfile(connection, "uploadPart", value);
117
+ yield* validateUpload(connection, value.upload, "uploadPart");
118
+ if (value.checksum?.ChecksumType || value.upload.checksumAlgorithm && value.checksum?.ChecksumAlgorithm && value.upload.checksumAlgorithm !== value.checksum.ChecksumAlgorithm) return yield* storageError("uploadPart", "s3", {
119
+ _tag: "InvalidInput",
120
+ field: "checksum"
121
+ }, "not-started");
122
+ const output = yield* uploadBody(connection, {
123
+ body: input.body,
124
+ contentLength: value.contentLength,
125
+ maxBytes: limits.maximumPartBytes
126
+ }, "uploadPart", (body, length) => request(connection, "uploadPart", true, (signal) => client.send(new UploadPartCommand({
127
+ ...authority(config),
128
+ ...encryptionHeaders(config.encryption),
129
+ ChecksumAlgorithm: value.upload.checksumAlgorithm,
130
+ ...value.checksum,
131
+ Key: value.upload.ref.key,
132
+ UploadId: Redacted.value(value.upload.uploadId),
133
+ PartNumber: value.partNumber,
134
+ Body: body,
135
+ ContentLength: length
136
+ }), { abortSignal: signal })).pipe(Effect.map((result) => ({
137
+ result,
138
+ length
139
+ }))));
140
+ if (!output.result.ETag) return yield* storageError("uploadPart", "s3", {
141
+ _tag: "ProviderFailure",
142
+ code: "MissingPartETag"
143
+ }, "unknown");
144
+ return {
145
+ partNumber: value.partNumber,
146
+ etag: output.result.ETag,
147
+ size: output.length,
148
+ checksums: connection.multipartChecksums === false ? void 0 : checksums(output.result)
149
+ };
150
+ }),
151
+ listParts: Effect.fnUntraced(function* (input) {
152
+ const value = yield* decodeRequest(PartsPage, input, "listParts", "s3");
153
+ yield* validateUpload(connection, value.upload, "listParts");
154
+ const query = JSON.stringify([
155
+ "parts",
156
+ ...connection.profile ? [connection.profile.configuration] : [],
157
+ value.upload.ref.key,
158
+ Redacted.value(value.upload.uploadId)
159
+ ]);
160
+ const marker = yield* decodeCursor("s3", value.cursor, config.storeId, query, "listParts");
161
+ const output = yield* request(connection, "listParts", false, (signal) => client.send(new ListPartsCommand({
162
+ ...authority(config),
163
+ ...encryptionHeaders(config.encryption),
164
+ Key: value.upload.ref.key,
165
+ UploadId: Redacted.value(value.upload.uploadId),
166
+ PartNumberMarker: marker,
167
+ MaxParts: nativeLimits.maximumPageSize
168
+ }), { abortSignal: signal }));
169
+ const parts = [];
170
+ for (const part of output.Parts ?? []) {
171
+ if (!part.ETag || part.PartNumber === void 0) return yield* storageError("listParts", "s3", {
172
+ _tag: "ProviderFailure",
173
+ code: "InvalidPartInventory"
174
+ });
175
+ parts.push({
176
+ partNumber: part.PartNumber,
177
+ etag: part.ETag,
178
+ size: part.Size,
179
+ checksums: connection.multipartChecksums === false ? void 0 : checksums(part)
180
+ });
181
+ }
182
+ if (output.IsTruncated && !output.NextPartNumberMarker) return yield* storageError("listParts", "s3", {
183
+ _tag: "ProviderFailure",
184
+ code: "MissingContinuation"
185
+ });
186
+ return {
187
+ parts,
188
+ checksumAlgorithm: connection.multipartChecksums === false ? void 0 : output.ChecksumAlgorithm,
189
+ checksumType: connection.multipartChecksums === false ? void 0 : output.ChecksumType,
190
+ ...output.IsTruncated && output.NextPartNumberMarker ? { cursor: encodeCursor(config.storeId, query, output.NextPartNumberMarker) } : {}
191
+ };
192
+ }),
193
+ complete: Effect.fnUntraced(function* (input) {
194
+ const value = yield* decodeRequest(Complete, input, "complete", "s3", true);
195
+ yield* enforceProfile(connection, "complete", value);
196
+ yield* validateUpload(connection, value.upload, "complete");
197
+ if (value.checksum?.ChecksumAlgorithm || value.upload.checksumType && value.checksum?.ChecksumType && value.upload.checksumType !== value.checksum.ChecksumType) return yield* storageError("complete", "s3", {
198
+ _tag: "InvalidInput",
199
+ field: "checksum"
200
+ }, "not-started");
201
+ const parts = value.parts.toSorted((a, b) => a.partNumber - b.partNumber);
202
+ if (new Set(parts.map((part) => part.partNumber)).size !== parts.length) return yield* storageError("complete", "s3", {
203
+ _tag: "InvalidInput",
204
+ field: "duplicate-part"
205
+ }, "not-started");
206
+ if (parts.slice(0, -1).some((part) => part.size !== void 0 && part.size < limits.minimumPartBytes)) return yield* storageError("complete", "s3", {
207
+ _tag: "InvalidInput",
208
+ field: "part.size"
209
+ }, "not-started");
210
+ const nativeParts = yield* Effect.forEach(parts, partChecksums);
211
+ const output = yield* request(connection, "complete", true, (signal) => client.send(new CompleteMultipartUploadCommand({
212
+ ...authority(config),
213
+ ...encryptionHeaders(config.encryption),
214
+ ...condition(value.condition),
215
+ ChecksumType: value.upload.checksumType,
216
+ ...value.checksum,
217
+ Key: value.upload.ref.key,
218
+ UploadId: Redacted.value(value.upload.uploadId),
219
+ MultipartUpload: { Parts: nativeParts }
220
+ }), { abortSignal: signal }));
221
+ if (!output.ETag) return yield* storageError("complete", "s3", {
222
+ _tag: "ProviderFailure",
223
+ code: "MissingCompleteReceipt"
224
+ }, "unknown");
225
+ return metadata(connection, value.upload.ref.key, output);
226
+ }),
227
+ abort: Effect.fnUntraced(function* (input) {
228
+ const value = yield* decodeRequest(Upload, input, "abort", "s3", true);
229
+ yield* validateUpload(connection, value, "abort");
230
+ yield* request(connection, "abort", true, (signal) => client.send(new AbortMultipartUploadCommand({
231
+ ...authority(config),
232
+ Key: value.ref.key,
233
+ UploadId: Redacted.value(value.uploadId)
234
+ }), { abortSignal: signal }));
235
+ }),
236
+ listUploads: Effect.fnUntraced(function* (input) {
237
+ const value = yield* decodeRequest(ListRequest, input, "listUploads", "s3");
238
+ if (value.delimiter) return yield* storageError("listUploads", "s3", {
239
+ _tag: "Unsupported",
240
+ capability: "upload-common-prefixes"
241
+ });
242
+ if ((value.limit ?? 1e3) > nativeLimits.maximumPageSize) return yield* storageError("listUploads", "s3", {
243
+ _tag: "InvalidInput",
244
+ field: "limit"
245
+ });
246
+ const query = JSON.stringify([
247
+ "uploads",
248
+ ...connection.profile ? [connection.profile.configuration] : [],
249
+ value.prefix ?? "",
250
+ value.limit ?? 1e3
251
+ ]);
252
+ const token = yield* decodeCursor("s3", value.cursor, config.storeId, query, "listUploads");
253
+ const marker = token === void 0 ? void 0 : yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Struct({
254
+ key: Schema.String,
255
+ upload: Schema.String
256
+ })))(token).pipe(Effect.mapError(() => storageError("listUploads", "s3", {
257
+ _tag: "InvalidInput",
258
+ field: "cursor"
259
+ })));
260
+ const output = yield* request(connection, "listUploads", false, (signal) => client.send(new ListMultipartUploadsCommand({
261
+ ...authority(config),
262
+ Prefix: value.prefix,
263
+ MaxUploads: value.limit ?? 1e3,
264
+ KeyMarker: marker?.key,
265
+ UploadIdMarker: marker?.upload
266
+ }), { abortSignal: signal }));
267
+ const uploads = [];
268
+ for (const upload of output.Uploads ?? []) {
269
+ if (!upload.Key || !upload.UploadId) return yield* storageError("listUploads", "s3", {
270
+ _tag: "ProviderFailure",
271
+ code: "InvalidUploadInventory"
272
+ });
273
+ uploads.push({
274
+ ref: {
275
+ storeId: config.storeId,
276
+ key: upload.Key
277
+ },
278
+ uploadId: Redacted.make(upload.UploadId),
279
+ checksumAlgorithm: connection.multipartChecksums === false ? void 0 : upload.ChecksumAlgorithm,
280
+ checksumType: connection.multipartChecksums === false ? void 0 : upload.ChecksumType
281
+ });
282
+ }
283
+ if (output.IsTruncated && (!output.NextKeyMarker || !output.NextUploadIdMarker)) return yield* storageError("listUploads", "s3", {
284
+ _tag: "ProviderFailure",
285
+ code: "MissingContinuation"
286
+ });
287
+ return {
288
+ uploads,
289
+ ...output.IsTruncated ? { cursor: encodeCursor(config.storeId, query, JSON.stringify({
290
+ key: output.NextKeyMarker,
291
+ upload: output.NextUploadIdMarker
292
+ })) } : {}
293
+ };
294
+ })
295
+ };
296
+ }
297
+
298
+ export { multipart };
299
+ //# sourceMappingURL=multipart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart.js","names":[],"sources":["../../../src/providers/s3/multipart.ts"],"sourcesContent":["import { Effect, Redacted, Schema } from \"effect\";\n\nimport {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CreateMultipartUploadCommand,\n ListMultipartUploadsCommand,\n ListPartsCommand,\n UploadPartCommand,\n} from \"@aws-sdk/client-s3\";\n\nimport type {\n MultipartHandle,\n MultipartUploads,\n UploadedPart,\n} from \"../../core/contracts/multipart.js\";\nimport type { StorageError } from \"../../core/errors.js\";\nimport { storageError } from \"../../core/errors.js\";\nimport { ObjectHeaders } from \"../../core/object.js\";\nimport type { UploadBody } from \"../../core/requests.js\";\nimport { ListRequest, PutRequest, WriteCondition } from \"../../core/requests.js\";\nimport { decodeCursor, encodeCursor } from \"../../internal/listing-cursor.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport { authority, encryptionHeaders } from \"./config.js\";\nimport type { S3Connection } from \"./config.js\";\nimport {\n ChecksumOptions,\n CompletePart,\n PartNumber,\n Upload,\n nativeLimits,\n} from \"./native-models.js\";\nimport { checksums, condition, headers, metadata, validateRef } from \"./object-mapping.js\";\nimport { enforceProfile } from \"./profile.js\";\nimport { request } from \"./transport.js\";\nimport { uploadBody } from \"./upload-body.js\";\nimport { S3Key, validateHeaders } from \"./validation.js\";\n\nexport type S3MultipartHandle = typeof Upload.Type;\nexport type S3ChecksumOptions = typeof ChecksumOptions.Type;\n\nexport interface S3MultipartUploads extends Omit<\n MultipartUploads,\n \"initiate\" | \"uploadPart\" | \"complete\"\n> {\n readonly initiate: (input: {\n readonly key: string;\n readonly headers?: ObjectHeaders;\n readonly checksum?: S3ChecksumOptions;\n }) => Effect.Effect<S3MultipartHandle, StorageError>;\n readonly uploadPart: <E = never, R = never>(input: {\n readonly upload: MultipartHandle;\n readonly partNumber: number;\n readonly contentLength?: number;\n readonly body: UploadBody<E, R>;\n readonly checksum?: S3ChecksumOptions;\n }) => Effect.Effect<UploadedPart, StorageError | E, R>;\n readonly complete: (\n input: Parameters<MultipartUploads[\"complete\"]>[0] & { readonly checksum?: S3ChecksumOptions },\n ) => ReturnType<MultipartUploads[\"complete\"]>;\n readonly listUploads: (\n input: ListRequest,\n ) => Effect.Effect<\n { readonly uploads: ReadonlyArray<S3MultipartHandle>; readonly cursor?: string },\n StorageError\n >;\n readonly listParts: (input: {\n readonly upload: MultipartHandle;\n readonly cursor?: string;\n }) => Effect.Effect<\n {\n readonly parts: ReadonlyArray<UploadedPart>;\n readonly cursor?: string;\n readonly checksumAlgorithm?: S3ChecksumOptions[\"ChecksumAlgorithm\"];\n readonly checksumType?: S3ChecksumOptions[\"ChecksumType\"];\n },\n StorageError\n >;\n}\n\nconst Initiate = Schema.Struct({\n key: S3Key,\n headers: Schema.optional(ObjectHeaders),\n checksum: Schema.optional(ChecksumOptions),\n});\nconst Part = Schema.Struct({\n upload: Upload,\n partNumber: PartNumber,\n body: Schema.Unknown,\n contentLength: PutRequest.fields.contentLength,\n checksum: Schema.optional(ChecksumOptions),\n});\nconst Complete = Schema.Struct({\n upload: Upload,\n parts: Schema.Array(CompletePart).check(\n Schema.isMinLength(1),\n Schema.isMaxLength(nativeLimits.maximumParts),\n ),\n condition: Schema.optional(WriteCondition),\n checksum: Schema.optional(ChecksumOptions),\n});\nconst PartsPage = Schema.Struct({ upload: Upload, cursor: Schema.optional(Schema.NonEmptyString) });\n\nconst validateUpload = Effect.fnUntraced(function* (\n connection: S3Connection,\n upload: MultipartHandle,\n operation: string,\n) {\n yield* validateRef(upload.ref, connection.config, operation);\n if (upload.ref.version)\n return yield* storageError(\n operation,\n \"s3\",\n { _tag: \"InvalidInput\", field: \"upload.ref.version\" },\n \"not-started\",\n );\n});\n\nfunction partChecksums(part: UploadedPart) {\n const fields: Record<string, string> = {};\n for (const checksum of part.checksums ?? []) {\n const names: Readonly<Record<string, string>> = {\n crc32: \"ChecksumCRC32\",\n crc32c: \"ChecksumCRC32C\",\n crc64nvme: \"ChecksumCRC64NVME\",\n sha1: \"ChecksumSHA1\",\n sha256: \"ChecksumSHA256\",\n sha512: \"ChecksumSHA512\",\n md5: \"ChecksumMD5\",\n xxhash64: \"ChecksumXXHASH64\",\n xxhash3: \"ChecksumXXHASH3\",\n xxhash128: \"ChecksumXXHASH128\",\n };\n const name = Object.hasOwn(names, checksum.algorithm) ? names[checksum.algorithm] : undefined;\n if (!name || checksum.encoding !== \"base64\")\n return Effect.fail(\n storageError(\n \"complete\",\n \"s3\",\n { _tag: \"Unsupported\", capability: \"part-checksum-encoding-or-algorithm\" },\n \"not-started\",\n ),\n );\n fields[name] = checksum.value;\n }\n return Effect.succeed(Object.assign(fields, { PartNumber: part.partNumber, ETag: part.etag }));\n}\n\nexport function multipart(connection: S3Connection): S3MultipartUploads {\n const { client, config } = connection;\n const limits = connection.profile\n ? { ...connection.profile.limits, completeConditions: connection.profile.completeConditions }\n : nativeLimits;\n return {\n limits,\n initiate: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(Initiate, input, \"initiate\", \"s3\", true);\n yield* enforceProfile(connection, \"initiate\", value);\n if (value.headers) yield* validateHeaders(value.headers, \"initiate\");\n if (connection.multipartChecksums === false && value.checksum)\n return yield* storageError(\n \"initiate\",\n \"s3\",\n { _tag: \"Unsupported\", capability: \"multipart-checksums\" },\n \"not-started\",\n );\n const checksumAlgorithm =\n connection.multipartChecksums === false\n ? undefined\n : (value.checksum?.ChecksumAlgorithm ?? \"CRC32\");\n const checksumType =\n connection.multipartChecksums === false\n ? undefined\n : (value.checksum?.ChecksumType ??\n (checksumAlgorithm === \"CRC64NVME\" ? \"FULL_OBJECT\" : \"COMPOSITE\"));\n const output = yield* request(connection, \"initiate\", true, (signal) =>\n client.send(\n new CreateMultipartUploadCommand({\n ...authority(config),\n ...encryptionHeaders(config.encryption),\n ...headers(value.headers ?? {}),\n ...value.checksum,\n ChecksumAlgorithm: checksumAlgorithm,\n ChecksumType: checksumType,\n Key: value.key,\n }),\n { abortSignal: signal },\n ),\n );\n if (!output.UploadId)\n return yield* storageError(\n \"initiate\",\n \"s3\",\n { _tag: \"ProviderFailure\", code: \"MissingUploadId\" },\n \"unknown\",\n );\n return {\n ref: { storeId: config.storeId, key: value.key },\n uploadId: Redacted.make(output.UploadId),\n // Some compatible services return checksum defaults even when none were requested.\n // Keep opaque receipts usable without opting into an unqualified checksum protocol.\n checksumAlgorithm:\n connection.multipartChecksums === false\n ? undefined\n : (output.ChecksumAlgorithm ?? checksumAlgorithm),\n checksumType:\n connection.multipartChecksums === false\n ? undefined\n : (output.ChecksumType ?? checksumType),\n };\n }),\n uploadPart: Effect.fnUntraced(function* <E = never, R = never>(input: {\n readonly upload: MultipartHandle;\n readonly partNumber: number;\n readonly body: UploadBody<E, R>;\n readonly contentLength?: number;\n readonly checksum?: S3ChecksumOptions;\n }) {\n const value = yield* decodeRequest(Part, input, \"uploadPart\", \"s3\", true);\n yield* enforceProfile(connection, \"uploadPart\", value);\n yield* validateUpload(connection, value.upload, \"uploadPart\");\n if (\n value.checksum?.ChecksumType ||\n (value.upload.checksumAlgorithm &&\n value.checksum?.ChecksumAlgorithm &&\n value.upload.checksumAlgorithm !== value.checksum.ChecksumAlgorithm)\n )\n return yield* storageError(\n \"uploadPart\",\n \"s3\",\n { _tag: \"InvalidInput\", field: \"checksum\" },\n \"not-started\",\n );\n const output = yield* uploadBody(\n connection,\n {\n body: input.body,\n contentLength: value.contentLength,\n maxBytes: limits.maximumPartBytes,\n },\n \"uploadPart\",\n (body, length) =>\n request(connection, \"uploadPart\", true, (signal) =>\n client.send(\n new UploadPartCommand({\n ...authority(config),\n ...encryptionHeaders(config.encryption),\n ChecksumAlgorithm: value.upload.checksumAlgorithm,\n ...value.checksum,\n Key: value.upload.ref.key,\n UploadId: Redacted.value(value.upload.uploadId),\n PartNumber: value.partNumber,\n Body: body,\n ContentLength: length,\n }),\n { abortSignal: signal },\n ),\n ).pipe(Effect.map((result) => ({ result, length }))),\n );\n if (!output.result.ETag)\n return yield* storageError(\n \"uploadPart\",\n \"s3\",\n { _tag: \"ProviderFailure\", code: \"MissingPartETag\" },\n \"unknown\",\n );\n return {\n partNumber: value.partNumber,\n etag: output.result.ETag,\n size: output.length,\n checksums: connection.multipartChecksums === false ? undefined : checksums(output.result),\n };\n }),\n listParts: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(PartsPage, input, \"listParts\", \"s3\");\n yield* validateUpload(connection, value.upload, \"listParts\");\n const query = JSON.stringify([\n \"parts\",\n ...(connection.profile ? [connection.profile.configuration] : []),\n value.upload.ref.key,\n Redacted.value(value.upload.uploadId),\n ]);\n const marker = yield* decodeCursor(\"s3\", value.cursor, config.storeId, query, \"listParts\");\n const output = yield* request(connection, \"listParts\", false, (signal) =>\n client.send(\n new ListPartsCommand({\n ...authority(config),\n ...encryptionHeaders(config.encryption),\n Key: value.upload.ref.key,\n UploadId: Redacted.value(value.upload.uploadId),\n PartNumberMarker: marker,\n MaxParts: nativeLimits.maximumPageSize,\n }),\n { abortSignal: signal },\n ),\n );\n const parts: UploadedPart[] = [];\n for (const part of output.Parts ?? []) {\n if (!part.ETag || part.PartNumber === undefined)\n return yield* storageError(\"listParts\", \"s3\", {\n _tag: \"ProviderFailure\",\n code: \"InvalidPartInventory\",\n });\n parts.push({\n partNumber: part.PartNumber,\n etag: part.ETag,\n size: part.Size,\n checksums: connection.multipartChecksums === false ? undefined : checksums(part),\n });\n }\n if (output.IsTruncated && !output.NextPartNumberMarker)\n return yield* storageError(\"listParts\", \"s3\", {\n _tag: \"ProviderFailure\",\n code: \"MissingContinuation\",\n });\n return {\n parts,\n checksumAlgorithm:\n connection.multipartChecksums === false ? undefined : output.ChecksumAlgorithm,\n checksumType: connection.multipartChecksums === false ? undefined : output.ChecksumType,\n ...(output.IsTruncated && output.NextPartNumberMarker\n ? { cursor: encodeCursor(config.storeId, query, output.NextPartNumberMarker) }\n : {}),\n };\n }),\n complete: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(Complete, input, \"complete\", \"s3\", true);\n yield* enforceProfile(connection, \"complete\", value);\n yield* validateUpload(connection, value.upload, \"complete\");\n if (\n value.checksum?.ChecksumAlgorithm ||\n (value.upload.checksumType &&\n value.checksum?.ChecksumType &&\n value.upload.checksumType !== value.checksum.ChecksumType)\n )\n return yield* storageError(\n \"complete\",\n \"s3\",\n { _tag: \"InvalidInput\", field: \"checksum\" },\n \"not-started\",\n );\n const parts = value.parts.toSorted((a, b) => a.partNumber - b.partNumber);\n if (new Set(parts.map((part) => part.partNumber)).size !== parts.length)\n return yield* storageError(\n \"complete\",\n \"s3\",\n { _tag: \"InvalidInput\", field: \"duplicate-part\" },\n \"not-started\",\n );\n if (\n parts\n .slice(0, -1)\n .some((part) => part.size !== undefined && part.size < limits.minimumPartBytes)\n )\n return yield* storageError(\n \"complete\",\n \"s3\",\n { _tag: \"InvalidInput\", field: \"part.size\" },\n \"not-started\",\n );\n const nativeParts = yield* Effect.forEach(parts, partChecksums);\n const output = yield* request(connection, \"complete\", true, (signal) =>\n client.send(\n new CompleteMultipartUploadCommand({\n ...authority(config),\n ...encryptionHeaders(config.encryption),\n ...condition(value.condition),\n ChecksumType: value.upload.checksumType,\n ...value.checksum,\n Key: value.upload.ref.key,\n UploadId: Redacted.value(value.upload.uploadId),\n MultipartUpload: { Parts: nativeParts },\n }),\n { abortSignal: signal },\n ),\n );\n if (!output.ETag)\n return yield* storageError(\n \"complete\",\n \"s3\",\n { _tag: \"ProviderFailure\", code: \"MissingCompleteReceipt\" },\n \"unknown\",\n );\n return metadata(connection, value.upload.ref.key, output);\n }),\n abort: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(Upload, input, \"abort\", \"s3\", true);\n yield* validateUpload(connection, value, \"abort\");\n yield* request(connection, \"abort\", true, (signal) =>\n client.send(\n new AbortMultipartUploadCommand({\n ...authority(config),\n Key: value.ref.key,\n UploadId: Redacted.value(value.uploadId),\n }),\n { abortSignal: signal },\n ),\n );\n }),\n listUploads: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(ListRequest, input, \"listUploads\", \"s3\");\n if (value.delimiter)\n return yield* storageError(\"listUploads\", \"s3\", {\n _tag: \"Unsupported\",\n capability: \"upload-common-prefixes\",\n });\n if ((value.limit ?? 1000) > nativeLimits.maximumPageSize)\n return yield* storageError(\"listUploads\", \"s3\", { _tag: \"InvalidInput\", field: \"limit\" });\n const query = JSON.stringify([\n \"uploads\",\n ...(connection.profile ? [connection.profile.configuration] : []),\n value.prefix ?? \"\",\n value.limit ?? 1000,\n ]);\n const token = yield* decodeCursor(\"s3\", value.cursor, config.storeId, query, \"listUploads\");\n const marker =\n token === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(\n Schema.fromJsonString(Schema.Struct({ key: Schema.String, upload: Schema.String })),\n )(token).pipe(\n Effect.mapError(() =>\n storageError(\"listUploads\", \"s3\", { _tag: \"InvalidInput\", field: \"cursor\" }),\n ),\n );\n const output = yield* request(connection, \"listUploads\", false, (signal) =>\n client.send(\n new ListMultipartUploadsCommand({\n ...authority(config),\n Prefix: value.prefix,\n MaxUploads: value.limit ?? 1000,\n KeyMarker: marker?.key,\n UploadIdMarker: marker?.upload,\n }),\n { abortSignal: signal },\n ),\n );\n const uploads: S3MultipartHandle[] = [];\n for (const upload of output.Uploads ?? []) {\n if (!upload.Key || !upload.UploadId)\n return yield* storageError(\"listUploads\", \"s3\", {\n _tag: \"ProviderFailure\",\n code: \"InvalidUploadInventory\",\n });\n uploads.push({\n ref: { storeId: config.storeId, key: upload.Key },\n uploadId: Redacted.make(upload.UploadId),\n checksumAlgorithm:\n connection.multipartChecksums === false ? undefined : upload.ChecksumAlgorithm,\n checksumType: connection.multipartChecksums === false ? undefined : upload.ChecksumType,\n });\n }\n if (output.IsTruncated && (!output.NextKeyMarker || !output.NextUploadIdMarker))\n return yield* storageError(\"listUploads\", \"s3\", {\n _tag: \"ProviderFailure\",\n code: \"MissingContinuation\",\n });\n return {\n uploads,\n ...(output.IsTruncated\n ? {\n cursor: encodeCursor(\n config.storeId,\n query,\n JSON.stringify({ key: output.NextKeyMarker, upload: output.NextUploadIdMarker }),\n ),\n }\n : {}),\n };\n }),\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { Schema } from "effect";
2
+ export declare const ChecksumOptions: Schema.Struct<{
3
+ readonly ChecksumAlgorithm: Schema.optional<Schema.Literals<readonly ["CRC32", "CRC32C", "CRC64NVME", "SHA1", "SHA256", "SHA512", "MD5", "XXHASH64", "XXHASH3", "XXHASH128"]>>;
4
+ readonly ChecksumCRC32: Schema.optional<Schema.String>;
5
+ readonly ChecksumCRC32C: Schema.optional<Schema.String>;
6
+ readonly ChecksumCRC64NVME: Schema.optional<Schema.String>;
7
+ readonly ChecksumSHA1: Schema.optional<Schema.String>;
8
+ readonly ChecksumSHA256: Schema.optional<Schema.String>;
9
+ readonly ChecksumSHA512: Schema.optional<Schema.String>;
10
+ readonly ChecksumMD5: Schema.optional<Schema.String>;
11
+ readonly ChecksumXXHASH64: Schema.optional<Schema.String>;
12
+ readonly ChecksumXXHASH3: Schema.optional<Schema.String>;
13
+ readonly ChecksumXXHASH128: Schema.optional<Schema.String>;
14
+ readonly ChecksumType: Schema.optional<Schema.Literals<readonly ["FULL_OBJECT", "COMPOSITE"]>>;
15
+ }>;
16
+ export declare const Upload: Schema.Struct<{
17
+ readonly ref: Schema.Struct<{
18
+ readonly storeId: Schema.NonEmptyString;
19
+ readonly key: Schema.NonEmptyString;
20
+ readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
21
+ readonly id: Schema.NonEmptyString;
22
+ }>, Schema.TaggedStruct<"GcsGeneration", {
23
+ readonly id: Schema.NonEmptyString;
24
+ readonly metageneration: Schema.optional<Schema.NonEmptyString>;
25
+ }>, Schema.TaggedStruct<"AzureVersion", {
26
+ readonly id: Schema.NonEmptyString;
27
+ }>, Schema.TaggedStruct<"AzureSnapshot", {
28
+ readonly id: Schema.NonEmptyString;
29
+ }>, Schema.TaggedStruct<"OpaqueVersion", {
30
+ readonly provider: Schema.NonEmptyString;
31
+ readonly id: Schema.NonEmptyString;
32
+ }>]>>;
33
+ }>;
34
+ readonly uploadId: Schema.Redacted<Schema.NonEmptyString>;
35
+ readonly checksumAlgorithm: Schema.optional<Schema.Literals<readonly ["CRC32", "CRC32C", "CRC64NVME", "SHA1", "SHA256", "SHA512", "MD5", "XXHASH64", "XXHASH3", "XXHASH128"]>>;
36
+ readonly checksumType: Schema.optional<Schema.Literals<readonly ["FULL_OBJECT", "COMPOSITE"]>>;
37
+ }>;
38
+ export declare const CopyRequest: Schema.Struct<{
39
+ readonly source: Schema.Struct<{
40
+ readonly storeId: Schema.NonEmptyString;
41
+ readonly key: Schema.NonEmptyString;
42
+ readonly version: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"S3Version", {
43
+ readonly id: Schema.NonEmptyString;
44
+ }>, Schema.TaggedStruct<"GcsGeneration", {
45
+ readonly id: Schema.NonEmptyString;
46
+ readonly metageneration: Schema.optional<Schema.NonEmptyString>;
47
+ }>, Schema.TaggedStruct<"AzureVersion", {
48
+ readonly id: Schema.NonEmptyString;
49
+ }>, Schema.TaggedStruct<"AzureSnapshot", {
50
+ readonly id: Schema.NonEmptyString;
51
+ }>, Schema.TaggedStruct<"OpaqueVersion", {
52
+ readonly provider: Schema.NonEmptyString;
53
+ readonly id: Schema.NonEmptyString;
54
+ }>]>>;
55
+ }>;
56
+ readonly destinationKey: Schema.NonEmptyString;
57
+ readonly condition: Schema.optional<Schema.Union<readonly [Schema.TaggedStruct<"CreateOnly", {}>, Schema.TaggedStruct<"IfMatch", {
58
+ readonly etag: Schema.String;
59
+ }>]>>;
60
+ readonly sourceIfMatch: Schema.optional<Schema.String>;
61
+ readonly headers: Schema.optional<Schema.Struct<{
62
+ readonly contentType: Schema.optional<Schema.String>;
63
+ readonly contentEncoding: Schema.optional<Schema.String>;
64
+ readonly contentLanguage: Schema.optional<Schema.String>;
65
+ readonly contentDisposition: Schema.optional<Schema.String>;
66
+ readonly cacheControl: Schema.optional<Schema.String>;
67
+ readonly customMetadata: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
68
+ }>>;
69
+ readonly metadataDirective: Schema.optional<Schema.Literals<readonly ["COPY", "REPLACE"]>>;
70
+ readonly taggingDirective: Schema.optional<Schema.Literals<readonly ["COPY", "REPLACE"]>>;
71
+ readonly tagging: Schema.optional<Schema.String>;
72
+ }>;
73
+ export type S3CopyRequest = typeof CopyRequest.Type;
74
+ export declare const nativeLimits: Readonly<{
75
+ minimumPartBytes: number;
76
+ maximumPartBytes: number;
77
+ maximumParts: 10000;
78
+ maximumSinglePutBytes: number;
79
+ maximumSingleCopyBytes: number;
80
+ maximumPageSize: 1000;
81
+ }>;
82
+ //# sourceMappingURL=native-models.d.ts.map
@@ -0,0 +1,91 @@
1
+ import { ObjectHeaders, ObjectRef, ObjectSize, ObjectValidator } from "../../core/object.js";
2
+ import { WriteCondition } from "../../core/requests.js";
3
+ import { S3Key } from "./validation.js";
4
+ import { Schema, Struct } from "effect";
5
+
6
+ // src/providers/s3/native-models.ts
7
+ const ChecksumOptions = Schema.Struct({
8
+ ChecksumAlgorithm: Schema.optional(Schema.Literals([
9
+ "CRC32",
10
+ "CRC32C",
11
+ "CRC64NVME",
12
+ "SHA1",
13
+ "SHA256",
14
+ "SHA512",
15
+ "MD5",
16
+ "XXHASH64",
17
+ "XXHASH3",
18
+ "XXHASH128"
19
+ ])),
20
+ ChecksumCRC32: Schema.optional(ObjectValidator),
21
+ ChecksumCRC32C: Schema.optional(ObjectValidator),
22
+ ChecksumCRC64NVME: Schema.optional(ObjectValidator),
23
+ ChecksumSHA1: Schema.optional(ObjectValidator),
24
+ ChecksumSHA256: Schema.optional(ObjectValidator),
25
+ ChecksumSHA512: Schema.optional(ObjectValidator),
26
+ ChecksumMD5: Schema.optional(ObjectValidator),
27
+ ChecksumXXHASH64: Schema.optional(ObjectValidator),
28
+ ChecksumXXHASH3: Schema.optional(ObjectValidator),
29
+ ChecksumXXHASH128: Schema.optional(ObjectValidator),
30
+ ChecksumType: Schema.optional(Schema.Literals(["FULL_OBJECT", "COMPOSITE"]))
31
+ });
32
+ const PutOptions = Schema.Struct({
33
+ ...Struct.omit(ChecksumOptions.fields, ["ChecksumType"]),
34
+ StorageClass: Schema.optional(Schema.Literals([
35
+ "STANDARD",
36
+ "REDUCED_REDUNDANCY",
37
+ "STANDARD_IA",
38
+ "ONEZONE_IA",
39
+ "INTELLIGENT_TIERING",
40
+ "GLACIER",
41
+ "DEEP_ARCHIVE",
42
+ "GLACIER_IR",
43
+ "EXPRESS_ONEZONE",
44
+ "OUTPOSTS",
45
+ "SNOW"
46
+ ])),
47
+ Tagging: Schema.optional(ObjectValidator)
48
+ });
49
+ const Upload = Schema.Struct({
50
+ ref: ObjectRef,
51
+ uploadId: Schema.Redacted(Schema.NonEmptyString),
52
+ checksumAlgorithm: ChecksumOptions.fields.ChecksumAlgorithm,
53
+ checksumType: ChecksumOptions.fields.ChecksumType
54
+ });
55
+ const PartNumber = Schema.Int.check(Schema.isBetween({
56
+ minimum: 1,
57
+ maximum: 1e4
58
+ }));
59
+ const CompletePart = Schema.Struct({
60
+ partNumber: PartNumber,
61
+ etag: ObjectValidator,
62
+ size: Schema.optional(ObjectSize),
63
+ checksums: Schema.optional(Schema.Array(Schema.Struct({
64
+ algorithm: Schema.String,
65
+ encoding: Schema.Literals(["hex", "base64"]),
66
+ scope: Schema.Literals(["full-object", "composite"]),
67
+ value: Schema.String,
68
+ partCount: Schema.optional(Schema.Natural)
69
+ })))
70
+ });
71
+ const CopyRequest = Schema.Struct({
72
+ source: ObjectRef,
73
+ destinationKey: S3Key,
74
+ condition: Schema.optional(WriteCondition),
75
+ sourceIfMatch: Schema.optional(ObjectValidator),
76
+ headers: Schema.optional(ObjectHeaders),
77
+ metadataDirective: Schema.optional(Schema.Literals(["COPY", "REPLACE"])),
78
+ taggingDirective: Schema.optional(Schema.Literals(["COPY", "REPLACE"])),
79
+ tagging: Schema.optional(ObjectValidator)
80
+ });
81
+ const nativeLimits = Object.freeze({
82
+ minimumPartBytes: 5242880,
83
+ maximumPartBytes: 5368709120,
84
+ maximumParts: 1e4,
85
+ maximumSinglePutBytes: 5368709120,
86
+ maximumSingleCopyBytes: 5368709120,
87
+ maximumPageSize: 1e3
88
+ });
89
+
90
+ export { ChecksumOptions, CompletePart, CopyRequest, PartNumber, PutOptions, Upload, nativeLimits };
91
+ //# sourceMappingURL=native-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-models.js","names":[],"sources":["../../../src/providers/s3/native-models.ts"],"sourcesContent":["import { Schema, Struct } from \"effect\";\n\nimport { ObjectHeaders, ObjectRef, ObjectSize, ObjectValidator } from \"../../core/object.js\";\nimport { WriteCondition } from \"../../core/requests.js\";\nimport { S3Key } from \"./validation.js\";\n\nexport const ChecksumOptions = Schema.Struct({\n ChecksumAlgorithm: Schema.optional(\n Schema.Literals([\n \"CRC32\",\n \"CRC32C\",\n \"CRC64NVME\",\n \"SHA1\",\n \"SHA256\",\n \"SHA512\",\n \"MD5\",\n \"XXHASH64\",\n \"XXHASH3\",\n \"XXHASH128\",\n ]),\n ),\n ChecksumCRC32: Schema.optional(ObjectValidator),\n ChecksumCRC32C: Schema.optional(ObjectValidator),\n ChecksumCRC64NVME: Schema.optional(ObjectValidator),\n ChecksumSHA1: Schema.optional(ObjectValidator),\n ChecksumSHA256: Schema.optional(ObjectValidator),\n ChecksumSHA512: Schema.optional(ObjectValidator),\n ChecksumMD5: Schema.optional(ObjectValidator),\n ChecksumXXHASH64: Schema.optional(ObjectValidator),\n ChecksumXXHASH3: Schema.optional(ObjectValidator),\n ChecksumXXHASH128: Schema.optional(ObjectValidator),\n ChecksumType: Schema.optional(Schema.Literals([\"FULL_OBJECT\", \"COMPOSITE\"])),\n});\n\nexport const PutOptions = Schema.Struct({\n ...Struct.omit(ChecksumOptions.fields, [\"ChecksumType\"]),\n StorageClass: Schema.optional(\n Schema.Literals([\n \"STANDARD\",\n \"REDUCED_REDUNDANCY\",\n \"STANDARD_IA\",\n \"ONEZONE_IA\",\n \"INTELLIGENT_TIERING\",\n \"GLACIER\",\n \"DEEP_ARCHIVE\",\n \"GLACIER_IR\",\n \"EXPRESS_ONEZONE\",\n \"OUTPOSTS\",\n \"SNOW\",\n ]),\n ),\n Tagging: Schema.optional(ObjectValidator),\n});\n\nexport const Upload = Schema.Struct({\n ref: ObjectRef,\n uploadId: Schema.Redacted(Schema.NonEmptyString),\n checksumAlgorithm: ChecksumOptions.fields.ChecksumAlgorithm,\n checksumType: ChecksumOptions.fields.ChecksumType,\n});\n\nexport const PartNumber = Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 10000 }));\nexport const CompletePart = Schema.Struct({\n partNumber: PartNumber,\n etag: ObjectValidator,\n size: Schema.optional(ObjectSize),\n checksums: Schema.optional(\n Schema.Array(\n Schema.Struct({\n algorithm: Schema.String,\n encoding: Schema.Literals([\"hex\", \"base64\"]),\n scope: Schema.Literals([\"full-object\", \"composite\"]),\n value: Schema.String,\n partCount: Schema.optional(Schema.Natural),\n }),\n ),\n ),\n});\n\nexport const CopyRequest = Schema.Struct({\n source: ObjectRef,\n destinationKey: S3Key,\n condition: Schema.optional(WriteCondition),\n sourceIfMatch: Schema.optional(ObjectValidator),\n headers: Schema.optional(ObjectHeaders),\n metadataDirective: Schema.optional(Schema.Literals([\"COPY\", \"REPLACE\"])),\n taggingDirective: Schema.optional(Schema.Literals([\"COPY\", \"REPLACE\"])),\n tagging: Schema.optional(ObjectValidator),\n});\nexport type S3CopyRequest = typeof CopyRequest.Type;\n\nexport const nativeLimits = Object.freeze({\n minimumPartBytes: 5 * 1024 * 1024,\n maximumPartBytes: 5 * 1024 * 1024 * 1024,\n maximumParts: 10000,\n maximumSinglePutBytes: 5 * 1024 * 1024 * 1024,\n maximumSingleCopyBytes: 5 * 1024 * 1024 * 1024,\n maximumPageSize: 1000,\n});\n"],"mappings":";;;;;;AAMA,MAAa,kBAAkB,OAAO,OAAO;CAC3C,mBAAmB,OAAO,SACxB,OAAO,SAAS;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CACH;CACA,eAAe,OAAO,SAAS,eAAe;CAC9C,gBAAgB,OAAO,SAAS,eAAe;CAC/C,mBAAmB,OAAO,SAAS,eAAe;CAClD,cAAc,OAAO,SAAS,eAAe;CAC7C,gBAAgB,OAAO,SAAS,eAAe;CAC/C,gBAAgB,OAAO,SAAS,eAAe;CAC/C,aAAa,OAAO,SAAS,eAAe;CAC5C,kBAAkB,OAAO,SAAS,eAAe;CACjD,iBAAiB,OAAO,SAAS,eAAe;CAChD,mBAAmB,OAAO,SAAS,eAAe;CAClD,cAAc,OAAO,SAAS,OAAO,SAAS,CAAC,eAAe,WAAW,CAAC,CAAC;AAC7E,CAAC;AAED,MAAa,aAAa,OAAO,OAAO;CACtC,GAAG,OAAO,KAAK,gBAAgB,QAAQ,CAAC,cAAc,CAAC;CACvD,cAAc,OAAO,SACnB,OAAO,SAAS;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CACH;CACA,SAAS,OAAO,SAAS,eAAe;AAC1C,CAAC;AAED,MAAa,SAAS,OAAO,OAAO;CAClC,KAAK;CACL,UAAU,OAAO,SAAS,OAAO,cAAc;CAC/C,mBAAmB,gBAAgB,OAAO;CAC1C,cAAc,gBAAgB,OAAO;AACvC,CAAC;AAED,MAAa,aAAa,OAAO,IAAI,MAAM,OAAO,UAAU;CAAE,SAAS;CAAG,SAAS;AAAM,CAAC,CAAC;AAC3F,MAAa,eAAe,OAAO,OAAO;CACxC,YAAY;CACZ,MAAM;CACN,MAAM,OAAO,SAAS,UAAU;CAChC,WAAW,OAAO,SAChB,OAAO,MACL,OAAO,OAAO;EACZ,WAAW,OAAO;EAClB,UAAU,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;EAC3C,OAAO,OAAO,SAAS,CAAC,eAAe,WAAW,CAAC;EACnD,OAAO,OAAO;EACd,WAAW,OAAO,SAAS,OAAO,OAAO;CAC3C,CAAC,CACH,CACF;AACF,CAAC;AAED,MAAa,cAAc,OAAO,OAAO;CACvC,QAAQ;CACR,gBAAgB;CAChB,WAAW,OAAO,SAAS,cAAc;CACzC,eAAe,OAAO,SAAS,eAAe;CAC9C,SAAS,OAAO,SAAS,aAAa;CACtC,mBAAmB,OAAO,SAAS,OAAO,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC;CACvE,kBAAkB,OAAO,SAAS,OAAO,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC;CACtE,SAAS,OAAO,SAAS,eAAe;AAC1C,CAAC;AAGD,MAAa,eAAe,OAAO,OAAO;CACxC,kBAAkB;CAClB,kBAAkB;CAClB,cAAc;CACd,uBAAuB;CACvB,wBAAwB;CACxB,iBAAiB;AACnB,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { ObjectRef } from "../../core/object.js";
2
+ import { storageError } from "../../core/errors.js";
3
+ import { decodeRequest } from "../../internal/request-validation.js";
4
+ import { S3Key } from "./validation.js";
5
+ import { DateTime, Effect, Schema } from "effect";
6
+
7
+ // src/providers/s3/object-mapping.ts
8
+ const checksumFields = {
9
+ ChecksumCRC32: "crc32",
10
+ ChecksumCRC32C: "crc32c",
11
+ ChecksumCRC64NVME: "crc64nvme",
12
+ ChecksumSHA1: "sha1",
13
+ ChecksumSHA256: "sha256",
14
+ ChecksumSHA512: "sha512",
15
+ ChecksumMD5: "md5",
16
+ ChecksumXXHASH64: "xxhash64",
17
+ ChecksumXXHASH3: "xxhash3",
18
+ ChecksumXXHASH128: "xxhash128"
19
+ };
20
+ function checksums(output) {
21
+ const found = [];
22
+ for (const [field, algorithm] of Object.entries(checksumFields)) {
23
+ const value = Reflect.get(output, field);
24
+ if (typeof value === "string") {
25
+ const suffix = /-(\d+)$/u.exec(value)?.[1];
26
+ const count = suffix === void 0 ? void 0 : Number(suffix);
27
+ found.push({
28
+ algorithm,
29
+ value,
30
+ encoding: "base64",
31
+ scope: output.ChecksumType === "COMPOSITE" || suffix !== void 0 ? "composite" : "full-object",
32
+ ...count !== void 0 && Number.isSafeInteger(count) && count > 0 ? { partCount: count } : {}
33
+ });
34
+ }
35
+ }
36
+ return found.length ? found : void 0;
37
+ }
38
+ function metadata(connection, key, output) {
39
+ const versioned = connection.profile?.capabilities.versionedReads !== "none";
40
+ return {
41
+ ref: {
42
+ storeId: connection.config.storeId,
43
+ key,
44
+ ...!versioned || output.VersionId === void 0 ? {} : { version: {
45
+ _tag: "S3Version",
46
+ id: output.VersionId
47
+ } }
48
+ },
49
+ size: output.ContentLength,
50
+ etag: output.ETag,
51
+ lastModified: output.LastModified === void 0 ? void 0 : DateTime.makeUnsafe(output.LastModified),
52
+ contentType: output.ContentType,
53
+ contentEncoding: output.ContentEncoding,
54
+ contentLanguage: output.ContentLanguage,
55
+ contentDisposition: output.ContentDisposition,
56
+ cacheControl: output.CacheControl,
57
+ customMetadata: output.Metadata,
58
+ storageClass: output.StorageClass,
59
+ checksums: checksums(output)
60
+ };
61
+ }
62
+ function headers(input) {
63
+ return {
64
+ ContentType: input.contentType,
65
+ ContentEncoding: input.contentEncoding,
66
+ ContentLanguage: input.contentLanguage,
67
+ ContentDisposition: input.contentDisposition,
68
+ CacheControl: input.cacheControl,
69
+ Metadata: input.customMetadata ? { ...input.customMetadata } : void 0
70
+ };
71
+ }
72
+ function condition(input) {
73
+ return input?._tag === "CreateOnly" ? { IfNoneMatch: "*" } : { IfMatch: input?.etag };
74
+ }
75
+ function target(input) {
76
+ return "ref" in input ? {
77
+ Key: input.ref.key,
78
+ VersionId: input.ref.version?.id
79
+ } : { Key: input.key };
80
+ }
81
+ const mutationOperations = /* @__PURE__ */ new Set([
82
+ "put",
83
+ "delete",
84
+ "deleteObjects",
85
+ "copy",
86
+ "copyPart",
87
+ "initiate",
88
+ "uploadPart",
89
+ "complete",
90
+ "abort"
91
+ ]);
92
+ const validateRef = (ref, config, operation) => decodeRequest(Schema.Struct({
93
+ ...ObjectRef.fields,
94
+ key: S3Key
95
+ }), ref, operation, "s3", mutationOperations.has(operation)).pipe(Effect.flatMap((input) => {
96
+ const error = refError(input, config, operation);
97
+ return error ? Effect.fail(error) : Effect.succeed(input);
98
+ }));
99
+ function refError(ref, config, operation) {
100
+ return ref.storeId !== config.storeId ? storageError(operation, "s3", {
101
+ _tag: "InvalidInput",
102
+ field: "ref.storeId"
103
+ }, mutationOperations.has(operation) ? "not-started" : "not-applicable") : ref.version && ref.version._tag !== "S3Version" ? storageError(operation, "s3", {
104
+ _tag: "Unsupported",
105
+ capability: "native-version-kind"
106
+ }, mutationOperations.has(operation) ? "not-started" : "not-applicable") : void 0;
107
+ }
108
+ function encodeCopySource(bucket, ref) {
109
+ const path = `${encodeURIComponent(bucket)}/${ref.key.split("/").map(encodeURIComponent).join("/")}`;
110
+ return ref.version ? `${path}?versionId=${encodeURIComponent(ref.version.id)}` : path;
111
+ }
112
+
113
+ export { checksums, condition, encodeCopySource, headers, metadata, refError, target, validateRef };
114
+ //# sourceMappingURL=object-mapping.js.map