@visulima/storage 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (307) hide show
  1. package/CHANGELOG.md +263 -0
  2. package/LICENSE.md +1256 -512
  3. package/README.md +4 -4
  4. package/dist/adapter/nuxt/module.d.ts +41 -34
  5. package/dist/adapter/nuxt/module.js +1 -93
  6. package/dist/handler/http/fetch/index.d.ts +297 -4
  7. package/dist/handler/http/fetch/index.js +1 -4
  8. package/dist/handler/http/hono/index.d.ts +1474 -58
  9. package/dist/handler/http/hono/index.js +1 -65
  10. package/dist/handler/http/nextjs/index.d.ts +66 -58
  11. package/dist/handler/http/nextjs/index.js +1 -37
  12. package/dist/handler/http/node/index.d.ts +361 -4
  13. package/dist/handler/http/node/index.js +1 -4
  14. package/dist/handler/http/solid-start/index.d.ts +66 -57
  15. package/dist/handler/http/solid-start/index.js +1 -44
  16. package/dist/index.d.ts +376 -17
  17. package/dist/index.js +1 -13
  18. package/dist/openapi/index.d.ts +24 -5
  19. package/dist/openapi/index.js +1 -5
  20. package/dist/packem_shared/AwsLightFile-BTLiRxXj.js +1 -0
  21. package/dist/packem_shared/AwsLightMetaStorage-DHz1nf_H.js +1 -0
  22. package/dist/packem_shared/AwsLightStorage-CA9cdfJ6.js +1 -0
  23. package/dist/packem_shared/AzureFile-BKHru1zB.js +1 -0
  24. package/dist/packem_shared/AzureSMetaStorage-BqA4jUDJ.js +1 -0
  25. package/dist/packem_shared/AzureStorage-BKUjCymW.js +1 -0
  26. package/dist/packem_shared/BaseTransformer-D68eLyz1.js +1 -0
  27. package/dist/packem_shared/DiskStorage-DNjpDMX9.js +1 -0
  28. package/dist/packem_shared/DiskStorageWithChecksum-Bb6JX_tC.js +1 -0
  29. package/dist/packem_shared/ERRORS-B9jkvKwx.js +1 -0
  30. package/dist/packem_shared/File-alcSNpLq.js +1 -0
  31. package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
  32. package/dist/packem_shared/GCSFile-CHjX_fJk.js +1 -0
  33. package/dist/packem_shared/GCSMetaStorage-BRDiGnC1.js +1 -0
  34. package/dist/packem_shared/GCStorage-BPkZ9tex.js +1 -0
  35. package/dist/packem_shared/LocalMetaStorage-BWuFvWn4.js +1 -0
  36. package/dist/packem_shared/MediaTransformer-2C8MJeAg.js +1 -0
  37. package/dist/packem_shared/MetaStorage-Y4m1dWgd.js +1 -0
  38. package/dist/packem_shared/Metadata-B6Ir0KO7.js +1 -0
  39. package/dist/packem_shared/Multipart-Bd9YFFn0.js +1 -0
  40. package/dist/packem_shared/Multipart-D5bcEvga.js +1 -0
  41. package/dist/packem_shared/NetlifyBlobFile-CpzkMKng.js +1 -0
  42. package/dist/packem_shared/NetlifyBlobMetaStorage-dD0oBLom.js +1 -0
  43. package/dist/packem_shared/NetlifyBlobStorage-ByTwCN-h.js +1 -0
  44. package/dist/packem_shared/NoOpMetrics-Dky06sf1.js +1 -0
  45. package/dist/packem_shared/OpenTelemetryMetrics-9uxQMSlg.js +1 -0
  46. package/dist/packem_shared/Rest-CYEBbtCD.js +1 -0
  47. package/dist/packem_shared/Rest-DoonVU7B.js +1 -0
  48. package/dist/packem_shared/S3Client.d-CZ62Jztg.d.ts +20357 -0
  49. package/dist/packem_shared/S3File-Du6wP0Sz.js +1 -0
  50. package/dist/packem_shared/S3MetaStorage-vcriiosn.js +1 -0
  51. package/dist/packem_shared/S3Storage-Fx6-OSc-.js +1 -0
  52. package/dist/packem_shared/TUS_RESUMABLE-B7KtPVeC.js +1 -0
  53. package/dist/packem_shared/Tus-Bd_2Ki2G.js +1 -0
  54. package/dist/packem_shared/Tus-CUBCkuPE.js +1 -0
  55. package/dist/packem_shared/ValidationError-D8KKJiKA.js +1 -0
  56. package/dist/packem_shared/VercelBlobFile-CL9MjKcY.js +1 -0
  57. package/dist/packem_shared/VercelBlobMetaStorage-BsOTx-Su.js +1 -0
  58. package/dist/packem_shared/VercelBlobStorage-kNkk5Cn4.js +1 -0
  59. package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +1 -0
  60. package/dist/packem_shared/aws-light-meta-storage-TPyQwLvk.js +4 -0
  61. package/dist/packem_shared/backblaze-DEflv87m.js +1 -0
  62. package/dist/packem_shared/base-handler-core-DaggCVsq.js +1 -0
  63. package/dist/packem_shared/base-handler-fetch-DnarP64X.js +1 -0
  64. package/dist/packem_shared/base-handler-node-BTes6sql.js +1 -0
  65. package/dist/packem_shared/cache-qV_5Umeq.js +1 -0
  66. package/dist/packem_shared/cloudflare-DLAeQvgD.js +1 -0
  67. package/dist/packem_shared/defaultCloudStorageFileNameValidation-yiM9GxHr.js +1 -0
  68. package/dist/packem_shared/digitalOcean-nhZUds87.js +1 -0
  69. package/dist/packem_shared/disk-storage-BvdK4bqF.js +5 -0
  70. package/dist/packem_shared/disk-storage-with-checksum.d-CaMptIUg.d.ts +148 -0
  71. package/dist/packem_shared/gcs-meta-storage-DZMf4IHn.js +1 -0
  72. package/dist/packem_shared/has-content-Bx2p8Okx.js +1 -0
  73. package/dist/packem_shared/headers-DC2MEOrK.js +27 -0
  74. package/dist/packem_shared/is-expired-1JuZjDtb.js +1 -0
  75. package/dist/packem_shared/isRetryableError-DQNSZiBc.js +1 -0
  76. package/dist/packem_shared/isValidMediaType-B-2UKjZx.js +1 -0
  77. package/dist/packem_shared/local-meta-storage-Bkwqi_gi.js +1 -0
  78. package/dist/packem_shared/local-meta-storage.d-CGSVabni.d.ts +20 -0
  79. package/dist/packem_shared/media-transformer.d-CLxm_69K.d.ts +331 -0
  80. package/dist/packem_shared/minio-BWwgGXeE.js +1 -0
  81. package/dist/packem_shared/multipart-base-C6OjBwMS.js +1 -0
  82. package/dist/packem_shared/part-match-DqD5U7An.js +1 -0
  83. package/dist/packem_shared/path-D7rMc9nq-B718mbm6.js +1 -0
  84. package/dist/packem_shared/response-builder-Wdo_fvcF.js +1 -0
  85. package/dist/packem_shared/rest-base-B2Dv7esY.js +1 -0
  86. package/dist/packem_shared/restOpenApiSpec-PaIVbESh.js +1 -0
  87. package/dist/packem_shared/s3-base-storage-xHZNtsGe.js +1 -0
  88. package/dist/packem_shared/s3-base-storage.d-BkRmde_Q.d.ts +251 -0
  89. package/dist/packem_shared/sharedGet-Ce7WGAsc.js +1 -0
  90. package/dist/packem_shared/storage-m_Cxgiih.js +1 -0
  91. package/dist/packem_shared/storage.d-Cxs42eEK.d.ts +939 -0
  92. package/dist/packem_shared/tigris-DZoyrMNd.js +1 -0
  93. package/dist/packem_shared/transformOpenApiSpec-C0vEbDTO.js +1 -0
  94. package/dist/packem_shared/tus-base.d-dim7udrK.d.ts +99 -0
  95. package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
  96. package/dist/packem_shared/types.d-76N78ehR.d.ts +708 -0
  97. package/dist/packem_shared/types.d-LqXtPPaF.d.ts +49 -0
  98. package/dist/packem_shared/update-size-DANV7aa2.js +1 -0
  99. package/dist/packem_shared/validator-DK41xp8N.js +1 -0
  100. package/dist/packem_shared/waitForStorage-ChSBLhLc.js +1 -0
  101. package/dist/packem_shared/wasabi-Dmce4x9s.js +1 -0
  102. package/dist/packem_shared/xhrOpenApiSpec-nyoboz83.js +1 -0
  103. package/dist/storage/aws/clients/index.d.ts +166 -6
  104. package/dist/storage/aws/clients/index.js +1 -6
  105. package/dist/storage/aws/index.d.ts +320 -4
  106. package/dist/storage/aws/index.js +1 -3
  107. package/dist/storage/aws-light/index.d.ts +252 -4
  108. package/dist/storage/aws-light/index.js +1 -3
  109. package/dist/storage/azure/index.d.ts +10422 -4
  110. package/dist/storage/azure/index.js +1 -3
  111. package/dist/storage/gcs/index.d.ts +4107 -5
  112. package/dist/storage/gcs/index.js +1 -4
  113. package/dist/storage/local/index.d.ts +7 -4
  114. package/dist/storage/local/index.js +1 -3
  115. package/dist/storage/netlify-blob/index.d.ts +142 -4
  116. package/dist/storage/netlify-blob/index.js +1 -3
  117. package/dist/storage/vercel-blob/index.d.ts +129 -4
  118. package/dist/storage/vercel-blob/index.js +1 -3
  119. package/dist/transformer/audio-transformer.d.ts +127 -125
  120. package/dist/transformer/audio-transformer.js +1 -278
  121. package/dist/transformer/image-transformer.d.ts +569 -568
  122. package/dist/transformer/image-transformer.js +1 -1100
  123. package/dist/transformer/index.d.ts +62 -5
  124. package/dist/transformer/index.js +1 -4
  125. package/dist/transformer/video-transformer.d.ts +144 -142
  126. package/dist/transformer/video-transformer.js +1 -310
  127. package/package.json +45 -45
  128. package/dist/handler/base/base-handler-core.d.ts +0 -91
  129. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  130. package/dist/handler/base/base-handler-node.d.ts +0 -137
  131. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  132. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  133. package/dist/handler/multipart/multipart.d.ts +0 -49
  134. package/dist/handler/rest/rest-base.d.ts +0 -106
  135. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  136. package/dist/handler/rest/rest.d.ts +0 -93
  137. package/dist/handler/tus/tus-base.d.ts +0 -152
  138. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  139. package/dist/handler/tus/tus.d.ts +0 -78
  140. package/dist/handler/types.d.ts +0 -53
  141. package/dist/handler/utils/request-parser.d.ts +0 -72
  142. package/dist/handler/utils/response-builder.d.ts +0 -83
  143. package/dist/handler/utils/storage-utils.d.ts +0 -10
  144. package/dist/handler/utils/stream-utils.d.ts +0 -29
  145. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  146. package/dist/metrics/index.d.ts +0 -2
  147. package/dist/metrics/no-op-metrics.d.ts +0 -15
  148. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  149. package/dist/openapi/rest.d.ts +0 -7
  150. package/dist/openapi/shared.d.ts +0 -13
  151. package/dist/openapi/transform.d.ts +0 -3
  152. package/dist/openapi/tus.d.ts +0 -7
  153. package/dist/openapi/xhr.d.ts +0 -7
  154. package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
  155. package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
  156. package/dist/packem_shared/AwsLightStorage-Cwkkc-z3.js +0 -133
  157. package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
  158. package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
  159. package/dist/packem_shared/AzureStorage-9MoV2W8q.js +0 -357
  160. package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
  161. package/dist/packem_shared/DiskStorage-CJtTzMQ3.js +0 -12
  162. package/dist/packem_shared/DiskStorageWithChecksum-BgrG8pvC.js +0 -238
  163. package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
  164. package/dist/packem_shared/File-Bb3P23dr.js +0 -69
  165. package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
  166. package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
  167. package/dist/packem_shared/GCSMetaStorage-sYiSjLUx.js +0 -7
  168. package/dist/packem_shared/GCStorage-DPl1_DAm.js +0 -406
  169. package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
  170. package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
  171. package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
  172. package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
  173. package/dist/packem_shared/Multipart-CNFK_Okz.js +0 -163
  174. package/dist/packem_shared/Multipart-CtUL7BQw.js +0 -128
  175. package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
  176. package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
  177. package/dist/packem_shared/NetlifyBlobStorage-C6AX-X0P.js +0 -376
  178. package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
  179. package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
  180. package/dist/packem_shared/Rest-CAOAEkOj.js +0 -267
  181. package/dist/packem_shared/Rest-DNuLwBrK.js +0 -228
  182. package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
  183. package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
  184. package/dist/packem_shared/S3Storage-CgheE2yH.js +0 -316
  185. package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +0 -434
  186. package/dist/packem_shared/Tus-B8PmlMgR.js +0 -200
  187. package/dist/packem_shared/Tus-C4F1aYOl.js +0 -195
  188. package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
  189. package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
  190. package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
  191. package/dist/packem_shared/VercelBlobStorage-BbuEYhOz.js +0 -261
  192. package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
  193. package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
  194. package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
  195. package/dist/packem_shared/base-handler-core-BKuf4YLT.js +0 -303
  196. package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +0 -291
  197. package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +0 -730
  198. package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
  199. package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
  200. package/dist/packem_shared/defaultCloudStorageFileNameValidation-oVDgf-Sw.js +0 -11
  201. package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
  202. package/dist/packem_shared/disk-storage-DkDoHnKB.js +0 -810
  203. package/dist/packem_shared/gcs-meta-storage-etw4wuh5.js +0 -158
  204. package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
  205. package/dist/packem_shared/headers-DoS5nwM-.js +0 -3220
  206. package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
  207. package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
  208. package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
  209. package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
  210. package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
  211. package/dist/packem_shared/multipart-base-B3i67SSX.js +0 -102
  212. package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
  213. package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
  214. package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
  215. package/dist/packem_shared/rest-base-GRCcnan7.js +0 -457
  216. package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +0 -800
  217. package/dist/packem_shared/s3-base-storage-xw6NJFX7.js +0 -510
  218. package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
  219. package/dist/packem_shared/storage-BwdYUHs3.js +0 -864
  220. package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
  221. package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
  222. package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +0 -740
  223. package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
  224. package/dist/packem_shared/validator-BeX_lJet.js +0 -78
  225. package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
  226. package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
  227. package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +0 -264
  228. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  229. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  230. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  231. package/dist/storage/aws/clients/minio.d.ts +0 -13
  232. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  233. package/dist/storage/aws/clients/types.d.ts +0 -95
  234. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  235. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  236. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  237. package/dist/storage/aws/s3-file.d.ts +0 -10
  238. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  239. package/dist/storage/aws/s3-storage.d.ts +0 -70
  240. package/dist/storage/aws/types.d.ts +0 -119
  241. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  242. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  243. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  244. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
  245. package/dist/storage/aws-light/types.d.ts +0 -37
  246. package/dist/storage/azure/azure-file.d.ts +0 -6
  247. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  248. package/dist/storage/azure/azure-storage.d.ts +0 -69
  249. package/dist/storage/azure/types.d.ts +0 -62
  250. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  251. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  252. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  253. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  254. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  255. package/dist/storage/gcs/types.d.ts +0 -55
  256. package/dist/storage/gcs/utils.d.ts +0 -7
  257. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  258. package/dist/storage/local/disk-storage.d.ts +0 -135
  259. package/dist/storage/local/local-meta-storage.d.ts +0 -32
  260. package/dist/storage/meta-storage.d.ts +0 -30
  261. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  262. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
  263. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  264. package/dist/storage/netlify-blob/types.d.ts +0 -30
  265. package/dist/storage/storage.d.ts +0 -353
  266. package/dist/storage/types.d.ts +0 -221
  267. package/dist/storage/utils/file/file.d.ts +0 -25
  268. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  269. package/dist/storage/utils/file/has-content.d.ts +0 -9
  270. package/dist/storage/utils/file/index.d.ts +0 -10
  271. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  272. package/dist/storage/utils/file/metadata.d.ts +0 -18
  273. package/dist/storage/utils/file/part-match.d.ts +0 -11
  274. package/dist/storage/utils/file/types.d.ts +0 -37
  275. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  276. package/dist/storage/utils/file/update-size.d.ts +0 -10
  277. package/dist/storage/vercel-blob/types.d.ts +0 -32
  278. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  279. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
  280. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  281. package/dist/transformer/base-transformer.d.ts +0 -63
  282. package/dist/transformer/media-transformer.d.ts +0 -332
  283. package/dist/transformer/types.d.ts +0 -652
  284. package/dist/transformer/utils.d.ts +0 -33
  285. package/dist/transformer/validation-error.d.ts +0 -23
  286. package/dist/utils/cache.d.ts +0 -32
  287. package/dist/utils/chunked-upload.d.ts +0 -65
  288. package/dist/utils/detect-file-type.d.ts +0 -28
  289. package/dist/utils/errors.d.ts +0 -74
  290. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  291. package/dist/utils/headers.d.ts +0 -111
  292. package/dist/utils/http.d.ts +0 -92
  293. package/dist/utils/locker.d.ts +0 -26
  294. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  295. package/dist/utils/pipes/stream-length.d.ts +0 -22
  296. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  297. package/dist/utils/primitives/is-record.d.ts +0 -2
  298. package/dist/utils/primitives/map-values.d.ts +0 -9
  299. package/dist/utils/primitives/pick.d.ts +0 -2
  300. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  301. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  302. package/dist/utils/range-checksum.d.ts +0 -33
  303. package/dist/utils/range-hasher.d.ts +0 -46
  304. package/dist/utils/retry.d.ts +0 -64
  305. package/dist/utils/types.d.ts +0 -108
  306. package/dist/utils/validation-error.d.ts +0 -22
  307. package/dist/utils/validator.d.ts +0 -36
@@ -1,316 +0,0 @@
1
- import { Readable } from 'node:stream';
2
- import { CreateMultipartUploadCommand, UploadPartCommand, CompleteMultipartUploadCommand, AbortMultipartUploadCommand, ListPartsCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand, CopyObjectCommand, ListObjectsV2Command, waitUntilBucketExists, S3Client } from '@aws-sdk/client-s3';
3
- import { fromIni } from '@aws-sdk/credential-providers';
4
- import { S as S3BaseStorage } from './s3-base-storage-xw6NJFX7.js';
5
- import { ReadableStream } from 'node:stream/web';
6
- import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
7
- import S3File from './S3File-DZiyk9Qt.js';
8
- import S3MetaStorage from './S3MetaStorage-Dz9aDabA.js';
9
-
10
- class S3ClientAdapter {
11
- constructor(client, _bucket) {
12
- this.client = client;
13
- }
14
- async createMultipartUpload(params) {
15
- const command = new CreateMultipartUploadCommand({
16
- ACL: params.ACL,
17
- Bucket: params.Bucket,
18
- ContentType: params.ContentType,
19
- Key: params.Key,
20
- Metadata: params.Metadata
21
- });
22
- const response = await this.client.send(command);
23
- if (!response.UploadId) {
24
- throw new Error("Failed to create multipart upload");
25
- }
26
- return { UploadId: response.UploadId };
27
- }
28
- async uploadPart(params) {
29
- const body = params.Body instanceof ReadableStream ? Readable.fromWeb(params.Body) : params.Body;
30
- const command = new UploadPartCommand({
31
- Body: body,
32
- Bucket: params.Bucket,
33
- ContentLength: params.ContentLength,
34
- ContentMD5: params.ContentMD5,
35
- Key: params.Key,
36
- PartNumber: params.PartNumber,
37
- UploadId: params.UploadId
38
- });
39
- const response = await this.client.send(command);
40
- if (!response.ETag) {
41
- throw new Error("Failed to upload part");
42
- }
43
- return { ETag: response.ETag };
44
- }
45
- async completeMultipartUpload(params) {
46
- const command = new CompleteMultipartUploadCommand({
47
- Bucket: params.Bucket,
48
- Key: params.Key,
49
- MultipartUpload: {
50
- Parts: params.Parts.map(({ ETag, PartNumber }) => {
51
- return { ETag, PartNumber };
52
- })
53
- },
54
- UploadId: params.UploadId
55
- });
56
- const response = await this.client.send(command);
57
- if (!response.Location) {
58
- throw new Error("Failed to complete multipart upload");
59
- }
60
- return {
61
- ETag: response.ETag,
62
- Location: response.Location
63
- };
64
- }
65
- async abortMultipartUpload(params) {
66
- const command = new AbortMultipartUploadCommand({
67
- Bucket: params.Bucket,
68
- Key: params.Key,
69
- UploadId: params.UploadId
70
- });
71
- await this.client.send(command);
72
- }
73
- async listParts(params) {
74
- const command = new ListPartsCommand({
75
- Bucket: params.Bucket,
76
- Key: params.Key,
77
- UploadId: params.UploadId
78
- });
79
- const response = await this.client.send(command);
80
- const parts = [];
81
- if (response.Parts) {
82
- for (const part of response.Parts) {
83
- if (part.ETag && part.PartNumber) {
84
- parts.push({
85
- ETag: part.ETag,
86
- PartNumber: part.PartNumber,
87
- Size: part.Size
88
- });
89
- }
90
- }
91
- }
92
- return { Parts: parts.length > 0 ? parts : void 0 };
93
- }
94
- async getObject(params) {
95
- const command = new GetObjectCommand({
96
- Bucket: params.Bucket,
97
- Key: params.Key
98
- });
99
- const response = await this.client.send(command);
100
- let body;
101
- if (response.Body) {
102
- const sdkStream = response.Body;
103
- if (sdkStream instanceof Readable) {
104
- body = sdkStream;
105
- } else if (typeof sdkStream === "object" && "transform" in sdkStream && sdkStream instanceof ReadableStream) {
106
- body = sdkStream;
107
- } else {
108
- body = Readable.from(sdkStream);
109
- }
110
- }
111
- return {
112
- Body: body,
113
- ContentLength: response.ContentLength,
114
- ContentType: response.ContentType,
115
- ETag: response.ETag,
116
- Expires: response.Expires,
117
- LastModified: response.LastModified,
118
- Metadata: response.Metadata
119
- };
120
- }
121
- async headObject(params) {
122
- const command = new HeadObjectCommand({
123
- Bucket: params.Bucket,
124
- Key: params.Key
125
- });
126
- const response = await this.client.send(command);
127
- return {
128
- ContentLength: response.ContentLength,
129
- ContentType: response.ContentType,
130
- ETag: response.ETag,
131
- Expires: response.Expires,
132
- LastModified: response.LastModified
133
- };
134
- }
135
- async deleteObject(params) {
136
- const command = new DeleteObjectCommand({
137
- Bucket: params.Bucket,
138
- Key: params.Key
139
- });
140
- await this.client.send(command);
141
- }
142
- async copyObject(params) {
143
- const commandInput = {
144
- Bucket: params.Bucket,
145
- CopySource: params.CopySource,
146
- Key: params.Key
147
- };
148
- if (params.StorageClass) {
149
- commandInput.StorageClass = params.StorageClass;
150
- }
151
- const command = new CopyObjectCommand(commandInput);
152
- await this.client.send(command);
153
- }
154
- async listObjectsV2(params) {
155
- const command = new ListObjectsV2Command({
156
- Bucket: params.Bucket,
157
- ContinuationToken: params.ContinuationToken,
158
- MaxKeys: params.MaxKeys
159
- });
160
- const response = await this.client.send(command);
161
- return {
162
- Contents: response.Contents?.map((item) => {
163
- return {
164
- Key: item.Key,
165
- LastModified: item.LastModified
166
- };
167
- }),
168
- IsTruncated: response.IsTruncated,
169
- NextContinuationToken: response.NextContinuationToken
170
- };
171
- }
172
- async getPresignedUrl(params) {
173
- const command = new UploadPartCommand({
174
- Bucket: params.Bucket,
175
- Key: params.Key,
176
- PartNumber: params.PartNumber,
177
- UploadId: params.UploadId
178
- });
179
- return getSignedUrl(this.client, command, { expiresIn: params.expiresIn });
180
- }
181
- async checkBucketAccess(params) {
182
- await waitUntilBucketExists({ client: this.client, maxWaitTime: 30 }, { Bucket: params.Bucket });
183
- }
184
- }
185
-
186
- class S3Storage extends S3BaseStorage {
187
- static name = "s3";
188
- s3Api;
189
- constructor(config) {
190
- const { bucket = process.env.S3_BUCKET, region = process.env.S3_REGION } = config;
191
- if (!bucket) {
192
- throw new Error("S3 bucket is not defined");
193
- }
194
- if (!region) {
195
- throw new Error("S3 region is not defined");
196
- }
197
- config.region = region;
198
- const keyFile = config.keyFile || process.env.S3_KEYFILE;
199
- if (keyFile) {
200
- config.credentials = fromIni({ configFilepath: keyFile });
201
- }
202
- const client = new S3Client(config);
203
- super({
204
- bucket,
205
- clientDirectUpload: config.clientDirectUpload,
206
- expiration: config.expiration?.maxAge ? { maxAge: String(config.expiration.maxAge) } : void 0,
207
- filename: config.filename,
208
- logger: config.logger,
209
- metaStorage: config.metaStorage,
210
- metaStorageConfig: config.metaStorageConfig ? { ...config.metaStorageConfig, ...config } : { ...config },
211
- partSize: config.partSize,
212
- retryConfig: {
213
- ...config.retryConfig,
214
- shouldRetry: (error) => {
215
- const errorWithMetadata = error;
216
- if (errorWithMetadata.$metadata) {
217
- const statusCode = errorWithMetadata.$metadata.httpStatusCode;
218
- if (statusCode && [408, 429, 500, 502, 503, 504].includes(statusCode)) {
219
- return true;
220
- }
221
- if (errorWithMetadata.$fault === "server") {
222
- return true;
223
- }
224
- }
225
- return errorWithMetadata.retryable ?? false;
226
- }
227
- }
228
- });
229
- this.s3Api = new S3ClientAdapter(client, bucket);
230
- const { metaStorage, metaStorageConfig } = config;
231
- if (!metaStorage) {
232
- const metaConfig = { ...config, ...metaStorageConfig, logger: this.logger };
233
- const localMeta = "directory" in metaConfig;
234
- if (!localMeta) {
235
- this.meta = new S3MetaStorage(metaConfig);
236
- }
237
- }
238
- if (this.config.clientDirectUpload) {
239
- this.onCreate = async () => {
240
- };
241
- }
242
- }
243
- /**
244
- * Normalizes AWS S3 errors with S3-specific context.
245
- */
246
- normalizeError(error) {
247
- if (error.$metadata) {
248
- return {
249
- code: error.Code || error.name,
250
- message: error.message,
251
- name: error.name,
252
- statusCode: error.$metadata.httpStatusCode || 500
253
- };
254
- }
255
- return super.normalizeError(error);
256
- }
257
- async update({ id }, metadata) {
258
- if (this.config.clientDirectUpload) {
259
- const file = await this.getMeta(id);
260
- return this.buildPresigned({ ...file, ...metadata });
261
- }
262
- return super.update({ id }, metadata);
263
- }
264
- async getStream({ id }) {
265
- return this.instrumentOperation("getStream", async () => {
266
- const s3Api = this.getS3Api();
267
- const { Body, ContentLength, ContentType, ETag, Expires, LastModified } = await this.retry(
268
- () => s3Api.getObject({
269
- Bucket: this.bucket,
270
- Key: id
271
- })
272
- );
273
- await this.checkIfExpired({ expiredAt: Expires });
274
- const stream = Body;
275
- const readableStream = new Readable({
276
- read() {
277
- stream.on("data", (chunk) => {
278
- this.push(chunk);
279
- });
280
- stream.on("end", () => {
281
- this.push(null);
282
- });
283
- stream.on("error", (error) => {
284
- this.destroy(error);
285
- });
286
- }
287
- });
288
- return {
289
- headers: {
290
- "Content-Length": ContentLength?.toString() ?? "0",
291
- "Content-Type": ContentType,
292
- ...ETag && { ETag },
293
- ...Expires && { "X-Upload-Expires": Expires.toString() },
294
- ...LastModified && { "Last-Modified": LastModified.toString() }
295
- },
296
- size: Number(ContentLength),
297
- stream: readableStream
298
- };
299
- });
300
- }
301
- getS3Api() {
302
- return this.s3Api;
303
- }
304
- // eslint-disable-next-line class-methods-use-this
305
- getFileClass() {
306
- return S3File;
307
- }
308
- getAcl() {
309
- return this.config.acl;
310
- }
311
- async accessCheck(_maxWaitTime = 30) {
312
- await this.s3Api.checkBucketAccess({ Bucket: this.bucket });
313
- }
314
- }
315
-
316
- export { S3Storage as default };