@visulima/storage 1.0.0-alpha.9 → 1.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 (424) hide show
  1. package/CHANGELOG.md +555 -0
  2. package/LICENSE.md +237 -568
  3. package/README.md +82 -466
  4. package/dist/adapter/nuxt/module.d.ts +41 -34
  5. package/dist/adapter/nuxt/module.js +1 -93
  6. package/dist/adapter/nuxt/package.json +0 -6
  7. package/dist/ai/ai-sdk/index.d.ts +113 -0
  8. package/dist/ai/ai-sdk/index.js +1 -0
  9. package/dist/ai/claude/index.d.ts +177 -0
  10. package/dist/ai/claude/index.js +1 -0
  11. package/dist/ai/openai/index.d.ts +205 -0
  12. package/dist/ai/openai/index.js +1 -0
  13. package/dist/ai/tanstack/index.d.ts +115 -0
  14. package/dist/ai/tanstack/index.js +1 -0
  15. package/dist/handler/http/fetch/index.d.ts +303 -4
  16. package/dist/handler/http/fetch/index.js +1 -4
  17. package/dist/handler/http/hono/index.d.ts +73 -64
  18. package/dist/handler/http/hono/index.js +1 -65
  19. package/dist/handler/http/nextjs/index.d.ts +66 -58
  20. package/dist/handler/http/nextjs/index.js +1 -37
  21. package/dist/handler/http/node/index.d.ts +368 -4
  22. package/dist/handler/http/node/index.js +1 -8
  23. package/dist/handler/http/solid-start/index.d.ts +66 -57
  24. package/dist/handler/http/solid-start/index.js +1 -44
  25. package/dist/index.d.ts +106 -17
  26. package/dist/index.js +1 -13
  27. package/dist/openapi/index.d.ts +24 -5
  28. package/dist/openapi/index.js +1 -5
  29. package/dist/packem_shared/AbstractBaseStorage-Ba7cLu-t.js +1 -0
  30. package/dist/packem_shared/AwsLightFile-CpZrubaV.js +1 -0
  31. package/dist/packem_shared/AwsLightMetaStorage-DPqJ9LTr.js +1 -0
  32. package/dist/packem_shared/AwsLightStorage-DTBVxHXO.js +1 -0
  33. package/dist/packem_shared/AzureFile-DFSaVe25.js +1 -0
  34. package/dist/packem_shared/AzureSMetaStorage-ByzM6Aix.js +1 -0
  35. package/dist/packem_shared/AzureStorage-BFsD4qbF.js +1 -0
  36. package/dist/packem_shared/BaseTransformer-Buw5lX_3.js +1 -0
  37. package/dist/packem_shared/BoxFile-CseIoPW1.js +1 -0
  38. package/dist/packem_shared/BoxMetaStorage-DFwhEI9C.js +1 -0
  39. package/dist/packem_shared/BoxStorage-B_t-OVzf.js +1 -0
  40. package/dist/packem_shared/BunS3File-BcYmsz1n.js +1 -0
  41. package/dist/packem_shared/BunS3MetaStorage-DFwhEI9C.js +1 -0
  42. package/dist/packem_shared/BunS3Storage-CB_pZWlV.js +1 -0
  43. package/dist/packem_shared/BunnyFile-BgEOlcYI.js +1 -0
  44. package/dist/packem_shared/BunnyMetaStorage-DFwhEI9C.js +1 -0
  45. package/dist/packem_shared/BunnyStorage-CILSK4_Z.js +1 -0
  46. package/dist/packem_shared/CloudinaryFile-Bo5B-vM1.js +1 -0
  47. package/dist/packem_shared/CloudinaryMetaStorage-D_vNzewL.js +1 -0
  48. package/dist/packem_shared/CloudinaryStorage-DiCbdAi_.js +1 -0
  49. package/dist/packem_shared/DiskStorage-Kp5t3vnF.js +1 -0
  50. package/dist/packem_shared/DiskStorageWithChecksum-Bh6w-Iu8.js +1 -0
  51. package/dist/packem_shared/DropboxFile-BFb7eOzy.js +1 -0
  52. package/dist/packem_shared/DropboxMetaStorage-DFwhEI9C.js +1 -0
  53. package/dist/packem_shared/DropboxStorage-H8bd8hEz.js +1 -0
  54. package/dist/packem_shared/ERRORS-BIBxE2oR.js +1 -0
  55. package/dist/packem_shared/File-W8aOo15X.js +1 -0
  56. package/dist/packem_shared/Files-BA3mpDwz.js +1 -0
  57. package/dist/packem_shared/FirebaseFile-BLaBxa2A.js +1 -0
  58. package/dist/packem_shared/FirebaseMetaStorage-D_vNzewL.js +1 -0
  59. package/dist/packem_shared/FirebaseStorage-Dgk4XyMr.js +2 -0
  60. package/dist/packem_shared/FtpFile-ClWDYnt2.js +1 -0
  61. package/dist/packem_shared/FtpMetaStorage-DFwhEI9C.js +1 -0
  62. package/dist/packem_shared/FtpStorage-g_DjiR-C.js +1 -0
  63. package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
  64. package/dist/packem_shared/GCSFile-Cero7qZN.js +1 -0
  65. package/dist/packem_shared/GCSMetaStorage-3fLTlRd4.js +1 -0
  66. package/dist/packem_shared/GCStorage-DUfwVFd3.js +1 -0
  67. package/dist/packem_shared/GoogleDriveFile-DHpLhzg9.js +1 -0
  68. package/dist/packem_shared/GoogleDriveMetaStorage-DqkgoE46.js +1 -0
  69. package/dist/packem_shared/GoogleDriveStorage-D0-5egHE.js +1 -0
  70. package/dist/packem_shared/LocalMetaStorage-Bp5mVc76.js +1 -0
  71. package/dist/packem_shared/MediaTransformer-D2kUsklW.js +1 -0
  72. package/dist/packem_shared/MemoryMetaStorage-Ksgh9pe7.js +1 -0
  73. package/dist/packem_shared/MemoryStorage-DzSTdlAq.js +1 -0
  74. package/dist/packem_shared/MetaStorage-DPEUyWgN.js +1 -0
  75. package/dist/packem_shared/Metadata-B7CcBueg.js +1 -0
  76. package/dist/packem_shared/Multipart-Btj2mo9r.js +1 -0
  77. package/dist/packem_shared/Multipart-C4GpuHMU.js +1 -0
  78. package/dist/packem_shared/NetlifyBlobFile-DoFhkzaH.js +1 -0
  79. package/dist/packem_shared/NetlifyBlobMetaStorage-D_vNzewL.js +1 -0
  80. package/dist/packem_shared/NetlifyBlobStorage-DZdCmOVW.js +1 -0
  81. package/dist/packem_shared/NoOpMetrics-BLo6u4NY.js +1 -0
  82. package/dist/packem_shared/OneDriveFile-CNNJYI43.js +1 -0
  83. package/dist/packem_shared/OneDriveMetaStorage-DqkgoE46.js +1 -0
  84. package/dist/packem_shared/OneDriveStorage-CvJetV7_.js +1 -0
  85. package/dist/packem_shared/OpenTelemetryMetrics-DJDQsNKp.js +1 -0
  86. package/dist/packem_shared/PocketBaseFile-DpJpxl3e.js +1 -0
  87. package/dist/packem_shared/PocketBaseMetaStorage-CpvDRnSu.js +1 -0
  88. package/dist/packem_shared/PocketBaseStorage-BPil-koe.js +1 -0
  89. package/dist/packem_shared/Rest-BehVaxbl.js +1 -0
  90. package/dist/packem_shared/Rest-ymPCZkKR.js +1 -0
  91. package/dist/packem_shared/S3File-CpZrubaV.js +1 -0
  92. package/dist/packem_shared/S3MetaStorage-CMonflzp.js +1 -0
  93. package/dist/packem_shared/S3Storage-wslqssvr.js +1 -0
  94. package/dist/packem_shared/SftpFile-ClWDYnt2.js +1 -0
  95. package/dist/packem_shared/SftpMetaStorage-DFwhEI9C.js +1 -0
  96. package/dist/packem_shared/SftpStorage-BVbMtS2b.js +1 -0
  97. package/dist/packem_shared/SharePointFile-Blz9FS4h.js +1 -0
  98. package/dist/packem_shared/SharePointMetaStorage-DFwhEI9C.js +1 -0
  99. package/dist/packem_shared/SharePointStorage-DWjvR5oZ.js +1 -0
  100. package/dist/packem_shared/SupabaseFile-Bo5B-vM1.js +1 -0
  101. package/dist/packem_shared/SupabaseMetaStorage-DqkgoE46.js +1 -0
  102. package/dist/packem_shared/SupabaseStorage-BiKmYKb6.js +1 -0
  103. package/dist/packem_shared/TUS_RESUMABLE-CyTSRvPU.js +1 -0
  104. package/dist/packem_shared/Tus-BgbON_wQ.js +1 -0
  105. package/dist/packem_shared/Tus-v6jzkaIO.js +1 -0
  106. package/dist/packem_shared/UploadControl-DZJhI9Wh.js +1 -0
  107. package/dist/packem_shared/UploadThingFile-BTFMpcIA.js +1 -0
  108. package/dist/packem_shared/UploadThingMetaStorage-D_vNzewL.js +1 -0
  109. package/dist/packem_shared/UploadThingStorage-jrEnANC5.js +1 -0
  110. package/dist/packem_shared/ValidationError-3B06DFyE.js +1 -0
  111. package/dist/packem_shared/VercelBlobFile-CVQwKlZk.js +1 -0
  112. package/dist/packem_shared/VercelBlobMetaStorage-DFwhEI9C.js +1 -0
  113. package/dist/packem_shared/VercelBlobStorage-Y-cDgH30.js +1 -0
  114. package/dist/packem_shared/_commonjsHelpers-CWAkuNXM.js +1 -0
  115. package/dist/packem_shared/agentsCopyFile-Dl5iffdH.js +1 -0
  116. package/dist/packem_shared/akamai-DthkaFul.js +1 -0
  117. package/dist/packem_shared/alibaba-BEi25O1g.js +1 -0
  118. package/dist/packem_shared/approval-fVHwBp7u.js +1 -0
  119. package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
  120. package/dist/packem_shared/aws-light-meta-storage-DGrn72VJ.js +4 -0
  121. package/dist/packem_shared/azure-meta-storage-ClbEsfI4.js +1 -0
  122. package/dist/packem_shared/backblaze-m1N5NZ9q.js +1 -0
  123. package/dist/packem_shared/base-handler-core-EeV8gZck.js +1 -0
  124. package/dist/packem_shared/base-handler-fetch-CHzsgb7C.js +1 -0
  125. package/dist/packem_shared/base-handler-node-BjpW8pGi.js +1 -0
  126. package/dist/packem_shared/cache-Cw3QjoVN.js +1 -0
  127. package/dist/packem_shared/claudeCopyFile-BX9O4ORk.js +1 -0
  128. package/dist/packem_shared/cloudflare-CdUTErlo.js +1 -0
  129. package/dist/packem_shared/copyFile-49FtxXcm.js +1 -0
  130. package/dist/packem_shared/copyFile-BUPezT_c.js +1 -0
  131. package/dist/packem_shared/createResponsesFileTools-6Tvt2PNr.js +1 -0
  132. package/dist/packem_shared/createRetryWrapper-CxgiV_hH.js +1 -0
  133. package/dist/packem_shared/detect-file-type-BA7UBLKA.js +1 -0
  134. package/dist/packem_shared/digitalOcean-B2uB6pgz.js +1 -0
  135. package/dist/packem_shared/disk-storage-DIn-VnCh.js +1 -0
  136. package/dist/packem_shared/disk-storage-with-checksum.d-B-VGEsfl.d.ts +156 -0
  137. package/dist/packem_shared/executors-BDzMjc4y.js +1 -0
  138. package/dist/packem_shared/executors.d-BZP2rWo3.d.ts +69 -0
  139. package/dist/packem_shared/exoscale-BDa1Gjth.js +1 -0
  140. package/dist/packem_shared/filebase-CsFYJIwB.js +1 -0
  141. package/dist/packem_shared/files.d-CH0iLBNC.d.ts +655 -0
  142. package/dist/packem_shared/gcs-meta-storage-Dy37wCjI.js +1 -0
  143. package/dist/packem_shared/get-file-status-y3wTtDQs.js +1 -0
  144. package/dist/packem_shared/getFormatFromContentType-DCTTPQHm.js +1 -0
  145. package/dist/packem_shared/has-content-50BsqrWw.js +1 -0
  146. package/dist/packem_shared/headers-BAiAKekR.js +26 -0
  147. package/dist/packem_shared/hetzner-BGGFiRGD.js +1 -0
  148. package/dist/packem_shared/ibmCos-j-3TfJ5p.js +1 -0
  149. package/dist/packem_shared/idriveE2-C6pQ5pQ0.js +1 -0
  150. package/dist/packem_shared/index-nZWCQrSe.js +5 -0
  151. package/dist/packem_shared/internal-D_cZIFwI.js +1 -0
  152. package/dist/packem_shared/is-expired-CBEk6XBi.js +1 -0
  153. package/dist/packem_shared/local-meta-storage-C2T92TYb.js +11 -0
  154. package/dist/packem_shared/local-meta-storage.d-D9PBfkn6.d.ts +21 -0
  155. package/dist/packem_shared/media-transformer.d-Quf4ai47.d.ts +331 -0
  156. package/dist/packem_shared/memory-storage.d-4EU1cMt1.d.ts +101 -0
  157. package/dist/packem_shared/minio-NKquuBfS.js +1 -0
  158. package/dist/packem_shared/multipart-base-BOzY19lb.js +1 -0
  159. package/dist/packem_shared/oauth-refresh-EdGzlcOZ.js +1 -0
  160. package/dist/packem_shared/oracleCloud-DslqNpn6.js +1 -0
  161. package/dist/packem_shared/ovhCloud-CMHE6uLV.js +1 -0
  162. package/dist/packem_shared/part-match-D-9dGX42.js +1 -0
  163. package/dist/packem_shared/path-0oTTdkvl-BVg7lYf5.js +1 -0
  164. package/dist/packem_shared/posix-dirname-CfpH5wZi.js +1 -0
  165. package/dist/packem_shared/response-builder-CbSA8qPa.js +1 -0
  166. package/dist/packem_shared/rest-base-CynUg0mH.js +1 -0
  167. package/dist/packem_shared/restOpenApiSpec-Csv513qf.js +1 -0
  168. package/dist/packem_shared/s3-base-storage-DXZYN24h.js +1 -0
  169. package/dist/packem_shared/s3-base-storage.d-BQgP5B-t.d.ts +287 -0
  170. package/dist/packem_shared/scaleway-U1In3v70.js +1 -0
  171. package/dist/packem_shared/sharedErrorSchemaObject-YN65aAKj.js +1 -0
  172. package/dist/packem_shared/storage-Cyy73Y6r.js +1 -0
  173. package/dist/packem_shared/storage.d-CEM1upWM.d.ts +1176 -0
  174. package/dist/packem_shared/storj-Cb59q9kF.js +1 -0
  175. package/dist/packem_shared/sync-DhR3536K.js +1 -0
  176. package/dist/packem_shared/tencent-Q1y2GENc.js +1 -0
  177. package/dist/packem_shared/tigris-BELKoyyp.js +1 -0
  178. package/dist/packem_shared/transformOpenApiSpec-CIEAgpBD.js +1 -0
  179. package/dist/packem_shared/tus-base.d-DLzKE54M.d.ts +106 -0
  180. package/dist/packem_shared/tusOpenApiSpec-D96B03t5.js +1 -0
  181. package/dist/packem_shared/types.d-Bon9GVVe.d.ts +104 -0
  182. package/dist/packem_shared/types.d-CggTCgXr.d.ts +49 -0
  183. package/dist/packem_shared/types.d-CrUWY4On.d.ts +720 -0
  184. package/dist/packem_shared/update-size-DuNuLyxj.js +1 -0
  185. package/dist/packem_shared/vultr-B491cQ4e.js +1 -0
  186. package/dist/packem_shared/waitForStorage-ByQmG4xF.js +1 -0
  187. package/dist/packem_shared/wasabi-DFrwIoab.js +1 -0
  188. package/dist/packem_shared/xhrOpenApiSpec-DQR4h6M8.js +1 -0
  189. package/dist/packem_shared/yandex-CwzHuEKP.js +1 -0
  190. package/dist/storage/aws/clients/index.d.ts +612 -6
  191. package/dist/storage/aws/clients/index.js +1 -6
  192. package/dist/storage/aws/index.d.ts +332 -4
  193. package/dist/storage/aws/index.js +1 -3
  194. package/dist/storage/aws-light/index.d.ts +259 -4
  195. package/dist/storage/aws-light/index.js +1 -3
  196. package/dist/storage/azure/index.d.ts +236 -4
  197. package/dist/storage/azure/index.js +1 -3
  198. package/dist/storage/box/index.d.ts +189 -0
  199. package/dist/storage/box/index.js +1 -0
  200. package/dist/storage/bun-s3/index.d.ts +200 -0
  201. package/dist/storage/bun-s3/index.js +1 -0
  202. package/dist/storage/bunny/index.d.ts +119 -0
  203. package/dist/storage/bunny/index.js +1 -0
  204. package/dist/storage/cloudinary/index.d.ts +121 -0
  205. package/dist/storage/cloudinary/index.js +1 -0
  206. package/dist/storage/dropbox/index.d.ts +132 -0
  207. package/dist/storage/dropbox/index.js +1 -0
  208. package/dist/storage/firebase/index.d.ts +192 -0
  209. package/dist/storage/firebase/index.js +1 -0
  210. package/dist/storage/ftp/index.d.ts +91 -0
  211. package/dist/storage/ftp/index.js +1 -0
  212. package/dist/storage/gcs/index.d.ts +195 -5
  213. package/dist/storage/gcs/index.js +1 -4
  214. package/dist/storage/google-drive/index.d.ts +148 -0
  215. package/dist/storage/google-drive/index.js +1 -0
  216. package/dist/storage/local/index.d.ts +7 -4
  217. package/dist/storage/local/index.js +1 -3
  218. package/dist/storage/memory/index.d.ts +6 -0
  219. package/dist/storage/memory/index.js +1 -0
  220. package/dist/storage/netlify-blob/index.d.ts +147 -4
  221. package/dist/storage/netlify-blob/index.js +1 -3
  222. package/dist/storage/onedrive/index.d.ts +103 -0
  223. package/dist/storage/onedrive/index.js +1 -0
  224. package/dist/storage/pocketbase/index.d.ts +172 -0
  225. package/dist/storage/pocketbase/index.js +1 -0
  226. package/dist/storage/sftp/index.d.ts +92 -0
  227. package/dist/storage/sftp/index.js +1 -0
  228. package/dist/storage/sharepoint/index.d.ts +180 -0
  229. package/dist/storage/sharepoint/index.js +1 -0
  230. package/dist/storage/supabase/index.d.ts +115 -0
  231. package/dist/storage/supabase/index.js +1 -0
  232. package/dist/storage/uploadthing/index.d.ts +95 -0
  233. package/dist/storage/uploadthing/index.js +1 -0
  234. package/dist/storage/vercel-blob/index.d.ts +189 -4
  235. package/dist/storage/vercel-blob/index.js +1 -3
  236. package/dist/transformer/audio-transformer.d.ts +127 -125
  237. package/dist/transformer/audio-transformer.js +1 -278
  238. package/dist/transformer/image-transformer.d.ts +573 -568
  239. package/dist/transformer/image-transformer.js +1 -1100
  240. package/dist/transformer/index.d.ts +62 -5
  241. package/dist/transformer/index.js +1 -4
  242. package/dist/transformer/video-transformer.d.ts +144 -142
  243. package/dist/transformer/video-transformer.js +1 -310
  244. package/package.json +202 -51
  245. package/dist/handler/base/base-handler-core.d.ts +0 -91
  246. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  247. package/dist/handler/base/base-handler-node.d.ts +0 -137
  248. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  249. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  250. package/dist/handler/multipart/multipart.d.ts +0 -49
  251. package/dist/handler/rest/rest-base.d.ts +0 -106
  252. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  253. package/dist/handler/rest/rest.d.ts +0 -93
  254. package/dist/handler/tus/tus-base.d.ts +0 -152
  255. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  256. package/dist/handler/tus/tus.d.ts +0 -78
  257. package/dist/handler/types.d.ts +0 -53
  258. package/dist/handler/utils/request-parser.d.ts +0 -72
  259. package/dist/handler/utils/response-builder.d.ts +0 -83
  260. package/dist/handler/utils/storage-utils.d.ts +0 -10
  261. package/dist/handler/utils/stream-utils.d.ts +0 -29
  262. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  263. package/dist/metrics/index.d.ts +0 -2
  264. package/dist/metrics/no-op-metrics.d.ts +0 -15
  265. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  266. package/dist/openapi/rest.d.ts +0 -7
  267. package/dist/openapi/shared.d.ts +0 -13
  268. package/dist/openapi/transform.d.ts +0 -3
  269. package/dist/openapi/tus.d.ts +0 -7
  270. package/dist/openapi/xhr.d.ts +0 -7
  271. package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
  272. package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
  273. package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
  274. package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
  275. package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
  276. package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
  277. package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
  278. package/dist/packem_shared/DiskStorage-Ck5yGQsq.js +0 -12
  279. package/dist/packem_shared/DiskStorageWithChecksum-BRl-V5x2.js +0 -238
  280. package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
  281. package/dist/packem_shared/File-Bb3P23dr.js +0 -69
  282. package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
  283. package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
  284. package/dist/packem_shared/GCSMetaStorage-CHZKMe7N.js +0 -7
  285. package/dist/packem_shared/GCStorage-C-gAuP0j.js +0 -406
  286. package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
  287. package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
  288. package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
  289. package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
  290. package/dist/packem_shared/Multipart-CRV21AUU.js +0 -128
  291. package/dist/packem_shared/Multipart-D2ryPMjD.js +0 -163
  292. package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
  293. package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
  294. package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
  295. package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
  296. package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
  297. package/dist/packem_shared/Rest-DcxBMBjU.js +0 -228
  298. package/dist/packem_shared/Rest-DjwU3puo.js +0 -267
  299. package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
  300. package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
  301. package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
  302. package/dist/packem_shared/TUS_RESUMABLE-Dtfsffnj.js +0 -434
  303. package/dist/packem_shared/Tus-DFVlZHaX.js +0 -200
  304. package/dist/packem_shared/Tus-DaN0FmOy.js +0 -195
  305. package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
  306. package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
  307. package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
  308. package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
  309. package/dist/packem_shared/_commonjsHelpers-BqLXS_qQ.js +0 -5
  310. package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
  311. package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
  312. package/dist/packem_shared/base-handler-core-BoAqTyz7.js +0 -303
  313. package/dist/packem_shared/base-handler-fetch-D4u2xits.js +0 -291
  314. package/dist/packem_shared/base-handler-node-DGzcHHAy.js +0 -730
  315. package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
  316. package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
  317. package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
  318. package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
  319. package/dist/packem_shared/disk-storage-CD47QI30.js +0 -810
  320. package/dist/packem_shared/gcs-meta-storage-CJ8Uts_d.js +0 -158
  321. package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
  322. package/dist/packem_shared/headers-YLRp1dLo.js +0 -1318
  323. package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
  324. package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
  325. package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
  326. package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
  327. package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
  328. package/dist/packem_shared/multipart-base-C994naBi.js +0 -102
  329. package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
  330. package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
  331. package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
  332. package/dist/packem_shared/rest-base-D9URIFkc.js +0 -457
  333. package/dist/packem_shared/restOpenApiSpec-D1JC_Jto.js +0 -800
  334. package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
  335. package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
  336. package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
  337. package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
  338. package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
  339. package/dist/packem_shared/tusOpenApiSpec-mBZkl7he.js +0 -740
  340. package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
  341. package/dist/packem_shared/validator-BeX_lJet.js +0 -78
  342. package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
  343. package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
  344. package/dist/packem_shared/xhrOpenApiSpec-B1V5Dxrj.js +0 -264
  345. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  346. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  347. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  348. package/dist/storage/aws/clients/minio.d.ts +0 -13
  349. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  350. package/dist/storage/aws/clients/types.d.ts +0 -95
  351. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  352. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  353. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  354. package/dist/storage/aws/s3-file.d.ts +0 -10
  355. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  356. package/dist/storage/aws/s3-storage.d.ts +0 -70
  357. package/dist/storage/aws/types.d.ts +0 -119
  358. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  359. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  360. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  361. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
  362. package/dist/storage/aws-light/types.d.ts +0 -37
  363. package/dist/storage/azure/azure-file.d.ts +0 -6
  364. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  365. package/dist/storage/azure/azure-storage.d.ts +0 -69
  366. package/dist/storage/azure/types.d.ts +0 -62
  367. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  368. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  369. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  370. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  371. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  372. package/dist/storage/gcs/types.d.ts +0 -55
  373. package/dist/storage/gcs/utils.d.ts +0 -7
  374. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  375. package/dist/storage/local/disk-storage.d.ts +0 -135
  376. package/dist/storage/local/local-meta-storage.d.ts +0 -32
  377. package/dist/storage/meta-storage.d.ts +0 -30
  378. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  379. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
  380. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  381. package/dist/storage/netlify-blob/types.d.ts +0 -30
  382. package/dist/storage/storage.d.ts +0 -353
  383. package/dist/storage/types.d.ts +0 -221
  384. package/dist/storage/utils/file/file.d.ts +0 -25
  385. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  386. package/dist/storage/utils/file/has-content.d.ts +0 -9
  387. package/dist/storage/utils/file/index.d.ts +0 -10
  388. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  389. package/dist/storage/utils/file/metadata.d.ts +0 -18
  390. package/dist/storage/utils/file/part-match.d.ts +0 -11
  391. package/dist/storage/utils/file/types.d.ts +0 -37
  392. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  393. package/dist/storage/utils/file/update-size.d.ts +0 -10
  394. package/dist/storage/vercel-blob/types.d.ts +0 -32
  395. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  396. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
  397. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  398. package/dist/transformer/base-transformer.d.ts +0 -63
  399. package/dist/transformer/media-transformer.d.ts +0 -332
  400. package/dist/transformer/types.d.ts +0 -652
  401. package/dist/transformer/utils.d.ts +0 -33
  402. package/dist/transformer/validation-error.d.ts +0 -23
  403. package/dist/utils/cache.d.ts +0 -32
  404. package/dist/utils/chunked-upload.d.ts +0 -65
  405. package/dist/utils/detect-file-type.d.ts +0 -28
  406. package/dist/utils/errors.d.ts +0 -74
  407. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  408. package/dist/utils/headers.d.ts +0 -111
  409. package/dist/utils/http.d.ts +0 -92
  410. package/dist/utils/locker.d.ts +0 -26
  411. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  412. package/dist/utils/pipes/stream-length.d.ts +0 -22
  413. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  414. package/dist/utils/primitives/is-record.d.ts +0 -2
  415. package/dist/utils/primitives/map-values.d.ts +0 -9
  416. package/dist/utils/primitives/pick.d.ts +0 -2
  417. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  418. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  419. package/dist/utils/range-checksum.d.ts +0 -33
  420. package/dist/utils/range-hasher.d.ts +0 -46
  421. package/dist/utils/retry.d.ts +0 -64
  422. package/dist/utils/types.d.ts +0 -108
  423. package/dist/utils/validation-error.d.ts +0 -22
  424. package/dist/utils/validator.d.ts +0 -36
@@ -1,510 +0,0 @@
1
- import { Readable } from 'node:stream';
2
- import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
3
- import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
4
- import { p as parseDuration, B as BaseStorage, b as parseBytes, t as toMilliseconds } from './storage-C6NSXb8h.js';
5
- import { createRetryWrapper } from './isRetryableError-Dycp7127.js';
6
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
7
- import { u as updateSize } from './update-size-CCGm6i1J.js';
8
- import { h as hasContent } from './has-content-CY66ehMK.js';
9
- import { i as isExpired } from './is-expired-CTThU1q5.js';
10
-
11
- const mapValues = (object, function_) => {
12
- const result = {};
13
- Object.keys(object).forEach((key) => {
14
- result[key] = function_(object[key]);
15
- });
16
- return result;
17
- };
18
-
19
- const toSeconds = (value) => {
20
- if (value === Number(value)) {
21
- return value;
22
- }
23
- return (parseDuration(value) ?? 0) / 1e3;
24
- };
25
-
26
- const MIN_PART_SIZE = 5 * 1024 * 1024;
27
- const PART_SIZE = 16 * 1024 * 1024;
28
- class S3BaseStorage extends BaseStorage {
29
- checksumTypes = ["md5", "crc32", "crc32c", "sha1", "sha256"];
30
- bucket;
31
- meta;
32
- /**
33
- * S3 multipart upload does not allow more than 10000 parts.
34
- */
35
- MAX_PARTS = 1e4;
36
- partSize;
37
- retry;
38
- constructor(config) {
39
- super(config);
40
- this.bucket = config.bucket;
41
- this.partSize = typeof config.partSize === "string" ? parseBytes(config.partSize) : config.partSize || PART_SIZE;
42
- if (this.partSize < MIN_PART_SIZE) {
43
- throw new Error("Minimum allowed partSize value is 5MB");
44
- }
45
- const retryConfig = {
46
- backoffMultiplier: 2,
47
- initialDelay: 1e3,
48
- maxDelay: 3e4,
49
- maxRetries: 3,
50
- retryableStatusCodes: [408, 429, 500, 502, 503, 504],
51
- shouldRetry: (error) => {
52
- const errorWithMetadata = error;
53
- if (errorWithMetadata.statusCode && [408, 429, 500, 502, 503, 504].includes(errorWithMetadata.statusCode)) {
54
- return true;
55
- }
56
- return errorWithMetadata.retryable ?? false;
57
- },
58
- ...config.retryConfig
59
- };
60
- this.retry = createRetryWrapper(retryConfig);
61
- const { metaStorage, metaStorageConfig } = config;
62
- if (metaStorage) {
63
- this.meta = metaStorage;
64
- } else {
65
- const metaConfig = { ...config, ...metaStorageConfig, logger: this.logger };
66
- const localMeta = "directory" in metaConfig;
67
- if (localMeta) {
68
- this.logger?.debug("Using local meta storage");
69
- this.meta = new LocalMetaStorage(metaConfig);
70
- } else {
71
- this.meta = new LocalMetaStorage(metaConfig);
72
- }
73
- }
74
- this.isReady = false;
75
- this.accessCheck().then(() => {
76
- this.isReady = true;
77
- return void 0;
78
- }).catch((error) => {
79
- this.logger?.error("Storage access check failed: %O", error);
80
- });
81
- }
82
- /**
83
- * Creates a new S3 multipart upload.
84
- */
85
- async create(config) {
86
- return this.instrumentOperation("create", async () => {
87
- const processedConfig = { ...config };
88
- if (config.ttl) {
89
- const ttlMs = typeof config.ttl === "string" ? toMilliseconds(config.ttl) : config.ttl;
90
- if (ttlMs !== void 0) {
91
- processedConfig.expiredAt = Date.now() + ttlMs;
92
- }
93
- }
94
- const file = new (this.getFileClass())(processedConfig);
95
- file.name = this.namingFunction(file);
96
- await this.validate(file);
97
- try {
98
- const existing = await this.getMeta(file.id);
99
- if (existing.bytesWritten >= 0) {
100
- return existing;
101
- }
102
- } catch {
103
- }
104
- const s3Api = this.getS3Api();
105
- let result;
106
- try {
107
- result = await this.retry(
108
- () => s3Api.createMultipartUpload({
109
- ACL: this.getAcl(),
110
- Bucket: this.bucket,
111
- ContentType: file.contentType,
112
- Key: file.name,
113
- Metadata: mapValues({ originalName: file.originalName, ...file.metadata }, (value) => encodeURI(String(value)))
114
- })
115
- );
116
- } catch {
117
- return throwErrorCode(ERRORS.FILE_ERROR, "s3 create upload error");
118
- }
119
- const { UploadId } = result || {};
120
- if (!UploadId) {
121
- return throwErrorCode(ERRORS.FILE_ERROR, "s3 create upload error");
122
- }
123
- file.UploadId = UploadId;
124
- file.bytesWritten = 0;
125
- if (this.config.clientDirectUpload) {
126
- file.partSize ??= this.partSize;
127
- }
128
- await this.saveMeta(file);
129
- file.status = "created";
130
- await this.onCreate(file);
131
- if (this.config.clientDirectUpload) {
132
- return this.buildPresigned(file);
133
- }
134
- return file;
135
- });
136
- }
137
- /**
138
- * Writes data to an S3 multipart upload.
139
- */
140
- async write(part) {
141
- return this.instrumentOperation("write", async () => {
142
- let file;
143
- if ("contentType" in part && "metadata" in part && !("body" in part) && !("start" in part)) {
144
- file = part;
145
- } else {
146
- file = await this.getMeta(part.id);
147
- await this.checkIfExpired(file);
148
- }
149
- if (file.status === "completed") {
150
- return file;
151
- }
152
- if (typeof part.size === "number" && part.size > 0) {
153
- updateSize(file, part.size);
154
- }
155
- if (!partMatch(part, file)) {
156
- return throwErrorCode(ERRORS.FILE_CONFLICT);
157
- }
158
- if (this.config.clientDirectUpload) {
159
- return this.buildPresigned(file);
160
- }
161
- file.Parts ??= await this.getParts(file);
162
- file.bytesWritten = file.Parts.map((item) => item.Size || 0).reduce((p, c) => p + c, 0);
163
- await this.lock(part.id);
164
- try {
165
- if (hasContent(part)) {
166
- if (this.isUnsupportedChecksum(part.checksumAlgorithm)) {
167
- return throwErrorCode(ERRORS.UNSUPPORTED_CHECKSUM_ALGORITHM);
168
- }
169
- if (file.Parts.length === 0 && (!file.contentType || file.contentType === "application/octet-stream")) {
170
- try {
171
- const readable = part.body instanceof Readable ? part.body : Readable.fromWeb(part.body);
172
- const { fileType, stream: detectedStream } = await detectFileTypeFromStream(readable);
173
- if (fileType?.mime) {
174
- file.contentType = fileType.mime;
175
- }
176
- part.body = detectedStream;
177
- } catch {
178
- }
179
- }
180
- if (file.Parts.length > this.MAX_PARTS) {
181
- throw new Error(`Exceeded ${this.MAX_PARTS} as part of the upload to ${this.bucket}.`);
182
- }
183
- const partNumber = file.Parts.length + 1;
184
- const s3Api = this.getS3Api();
185
- const uploadId = file.UploadId;
186
- if (!uploadId) {
187
- throw new Error("UploadId is required");
188
- }
189
- const { ETag } = await this.retry(
190
- () => s3Api.uploadPart({
191
- Body: part.body,
192
- Bucket: this.bucket,
193
- ContentLength: part.contentLength || 0,
194
- Key: file.name,
195
- PartNumber: partNumber,
196
- UploadId: uploadId,
197
- ...part.checksumAlgorithm === "md5" ? { ContentMD5: part.checksum } : {}
198
- })
199
- );
200
- const uploadPart = { ETag, PartNumber: partNumber, Size: part.contentLength };
201
- file.Parts = [...file.Parts, uploadPart];
202
- file.bytesWritten += part.contentLength || 0;
203
- }
204
- this.cache.set(file.id, file);
205
- file.status = getFileStatus(file);
206
- if (file.status === "completed") {
207
- const [completed] = await this.internalOnComplete(file);
208
- delete file.Parts;
209
- file.uri = completed.Location;
210
- file.ETag = completed.ETag;
211
- }
212
- } finally {
213
- await this.unlock(part.id);
214
- }
215
- return file;
216
- });
217
- }
218
- /**
219
- * Deletes an upload and its metadata.
220
- */
221
- async delete({ id }) {
222
- return this.instrumentOperation("delete", async () => {
223
- const file = await this.getMeta(id);
224
- file.status = "deleted";
225
- await Promise.all([this.deleteMeta(file.id), this.retry(() => this.abortMultipartUpload(file))]);
226
- const deletedFile = { ...file };
227
- await this.onDelete(deletedFile);
228
- return deletedFile;
229
- });
230
- }
231
- /**
232
- * Copies an upload file to a new location.
233
- */
234
- async copy(name, destination, options) {
235
- return this.instrumentOperation("copy", async () => {
236
- const sourceFile = await this.getMeta(name);
237
- const CopySource = `${this.bucket}/${name}`;
238
- let Bucket = this.bucket;
239
- let Key = destination;
240
- if (destination.startsWith("/")) {
241
- const [, bucketName, ...pathSegments] = destination.split("/");
242
- Bucket = bucketName || this.bucket;
243
- Key = pathSegments.join("/");
244
- }
245
- const s3Api = this.getS3Api();
246
- await this.retry(
247
- () => s3Api.copyObject({
248
- Bucket,
249
- CopySource,
250
- Key,
251
- ...options?.storageClass && { StorageClass: options.storageClass }
252
- })
253
- );
254
- return { ...sourceFile, id: Key, name: Key };
255
- });
256
- }
257
- /**
258
- * Moves an upload file to a new location.
259
- */
260
- async move(name, destination) {
261
- return this.instrumentOperation("move", async () => {
262
- await this.copy(name, destination);
263
- const s3Api = this.getS3Api();
264
- await this.retry(() => s3Api.deleteObject({ Bucket: this.bucket, Key: name }));
265
- return await this.getMeta(destination);
266
- });
267
- }
268
- /**
269
- * Lists files in the bucket.
270
- */
271
- async list(limit = 1e3) {
272
- return this.instrumentOperation(
273
- "list",
274
- // eslint-disable-next-line sonarjs/cognitive-complexity
275
- async () => {
276
- const s3Api = this.getS3Api();
277
- let parameters = {
278
- Bucket: this.bucket,
279
- MaxKeys: limit
280
- };
281
- const items = [];
282
- let truncated = true;
283
- while (truncated) {
284
- try {
285
- const response = await this.retry(() => s3Api.listObjectsV2(parameters));
286
- for (const { Key, LastModified } of response?.Contents || []) {
287
- if (Key !== void 0) {
288
- const { Expires } = await this.retry(() => s3Api.headObject({ Bucket: this.bucket, Key }));
289
- if (Expires && isExpired({ expiredAt: Expires })) {
290
- await this.delete({ id: Key });
291
- } else {
292
- items.push({
293
- id: Key,
294
- ...LastModified && { createdAt: LastModified }
295
- });
296
- }
297
- }
298
- }
299
- truncated = response.IsTruncated || false;
300
- if (truncated && response.NextContinuationToken) {
301
- parameters = { ...parameters, ContinuationToken: response.NextContinuationToken };
302
- }
303
- } catch (error) {
304
- const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
305
- await this.onError(httpError);
306
- throw error;
307
- }
308
- }
309
- return items;
310
- },
311
- { limit }
312
- );
313
- }
314
- /**
315
- * Checks if a file exists by verifying both metadata and the actual S3 object.
316
- * Returns true only if both the metadata and the S3 object exist.
317
- * @param query File query containing the file ID to check.
318
- * @returns Promise resolving to true if both metadata and S3 object exist, false otherwise.
319
- */
320
- async exists({ id }) {
321
- return this.instrumentOperation("exists", async () => {
322
- try {
323
- await this.getMeta(id);
324
- const s3Api = this.getS3Api();
325
- await this.retry(
326
- () => s3Api.headObject({
327
- Bucket: this.bucket,
328
- Key: id
329
- })
330
- );
331
- return true;
332
- } catch (error) {
333
- const errorWithMetadata = error;
334
- if (errorWithMetadata.$metadata?.httpStatusCode === 404) {
335
- return false;
336
- }
337
- return false;
338
- }
339
- });
340
- }
341
- /**
342
- * Gets an uploaded file by ID.
343
- */
344
- async get({ id }) {
345
- return this.instrumentOperation("get", async () => {
346
- const s3Api = this.getS3Api();
347
- const { Body, ContentLength, ContentType, ETag, Expires, LastModified, Metadata } = await this.retry(
348
- () => s3Api.getObject({
349
- Bucket: this.bucket,
350
- Key: id
351
- })
352
- );
353
- await this.checkIfExpired({ expiredAt: Expires });
354
- const chunks = [];
355
- if (Body) {
356
- if (Body instanceof Readable) {
357
- for await (const chunk of Body) {
358
- chunks.push(chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk));
359
- }
360
- } else {
361
- const reader = Body.getReader();
362
- while (true) {
363
- const { done, value } = await reader.read();
364
- if (done) {
365
- break;
366
- }
367
- chunks.push(value);
368
- }
369
- }
370
- }
371
- const { originalName, ...meta } = Metadata || {};
372
- return {
373
- content: Buffer.concat(chunks),
374
- contentType: ContentType,
375
- ETag,
376
- expiredAt: Expires,
377
- id,
378
- metadata: meta,
379
- modifiedAt: LastModified,
380
- name: id,
381
- originalName: originalName || id,
382
- size: Number(ContentLength)
383
- };
384
- });
385
- }
386
- /**
387
- * Builds presigned URLs for client uploads.
388
- */
389
- async buildPresigned(file) {
390
- const fileWithParts = file;
391
- if (!fileWithParts.Parts?.length) {
392
- fileWithParts.Parts = await this.getParts(file);
393
- }
394
- fileWithParts.bytesWritten = fileWithParts.Parts.map((item) => item.Size || 0).reduce((p, c) => p + c, 0);
395
- file.status = getFileStatus(fileWithParts);
396
- if (!fileWithParts.partsUrls?.length) {
397
- fileWithParts.partsUrls = await this.getPartsPresignedUrls(file);
398
- }
399
- if (file.status === "completed") {
400
- const [completed] = await this.internalOnComplete(file);
401
- delete fileWithParts.Parts;
402
- fileWithParts.uri = completed.Location;
403
- return file;
404
- }
405
- return file;
406
- }
407
- /**
408
- * Gets presigned URLs for all parts.
409
- */
410
- async getPartsPresignedUrls(file) {
411
- file.partSize ??= this.partSize;
412
- const uploadId = file.UploadId;
413
- if (!uploadId) {
414
- throw new Error("UploadId is required for getting presigned URLs");
415
- }
416
- const partsNumber = Math.trunc(file.size / this.partSize) + 1;
417
- const promises = [];
418
- const expiresIn = Math.trunc(toSeconds(this.config.expiration?.maxAge || "6hrs"));
419
- const s3Api = this.getS3Api();
420
- for (let index = 0; index < partsNumber; index++) {
421
- promises.push(
422
- s3Api.getPresignedUrl({
423
- Bucket: this.bucket,
424
- expiresIn,
425
- Key: file.name,
426
- PartNumber: index + 1,
427
- UploadId: uploadId
428
- })
429
- );
430
- }
431
- return Promise.all(promises);
432
- }
433
- /**
434
- * Gets parts for a multipart upload.
435
- */
436
- async getParts(file) {
437
- const s3Api = this.getS3Api();
438
- const uploadId = file.UploadId;
439
- if (!uploadId) {
440
- throw new Error("UploadId is required");
441
- }
442
- const { Parts = [] } = await this.retry(
443
- () => s3Api.listParts({
444
- Bucket: this.bucket,
445
- Key: file.name,
446
- UploadId: uploadId
447
- })
448
- );
449
- return Parts;
450
- }
451
- /**
452
- * Completes a multipart upload.
453
- */
454
- completeMultipartUpload(file) {
455
- const s3Api = this.getS3Api();
456
- const uploadId = file.UploadId;
457
- if (!uploadId) {
458
- throw new Error("UploadId is required");
459
- }
460
- const parts = file.Parts?.map(({ ETag, PartNumber }) => {
461
- if (!ETag || !PartNumber) {
462
- throw new Error("ETag and PartNumber are required");
463
- }
464
- return { ETag, PartNumber };
465
- }) || [];
466
- return this.retry(
467
- () => s3Api.completeMultipartUpload({
468
- Bucket: this.bucket,
469
- Key: file.name,
470
- Parts: parts,
471
- UploadId: uploadId
472
- })
473
- );
474
- }
475
- /**
476
- * Aborts a multipart upload.
477
- */
478
- async abortMultipartUpload(file) {
479
- if (file.status === "completed") {
480
- return;
481
- }
482
- try {
483
- const s3Api = this.getS3Api();
484
- const uploadId = file.UploadId;
485
- if (!uploadId) {
486
- return;
487
- }
488
- await this.retry(
489
- () => s3Api.abortMultipartUpload({
490
- Bucket: this.bucket,
491
- Key: file.name,
492
- UploadId: uploadId
493
- })
494
- );
495
- } catch (error) {
496
- this.logger?.error("abortMultipartUploadError: ", error);
497
- const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
498
- await this.onError(httpError);
499
- }
500
- }
501
- /**
502
- * Internal onComplete handler.
503
- */
504
- internalOnComplete = async (file) => {
505
- const [completed] = await Promise.all([this.completeMultipartUpload(file), this.deleteMeta(file.id)]);
506
- return [completed, file];
507
- };
508
- }
509
-
510
- export { S3BaseStorage as S };