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

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 +252 -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-1UQIN9IN.js +1 -0
  34. package/dist/packem_shared/GCStorage-PJRb2WWC.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-hEoe2ugb.d.ts +148 -0
  71. package/dist/packem_shared/gcs-meta-storage-DXqBZ3Xm.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-Dop9RP9k.d.ts +20 -0
  79. package/dist/packem_shared/media-transformer.d-LGdEjx6A.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-CczjSe98.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-BOMUJD96.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-C20dSee8.d.ts +99 -0
  95. package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
  96. package/dist/packem_shared/types.d-B4hqF6yH.d.ts +708 -0
  97. package/dist/packem_shared/types.d-CNvyxOka.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 +60 -60
  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,446 +0,0 @@
1
- import MetaStorage from './MetaStorage-pECeFOad.js';
2
- import { parseMetadata, stringifyMetadata } from './Metadata-DRLXeJ0F.js';
3
- import { Readable } from 'node:stream';
4
- import { AwsClient } from 'aws4fetch';
5
- import { i as isExpired } from './is-expired-CTThU1q5.js';
6
-
7
- const parseXml = (text) => {
8
- const result = {};
9
- const cleanText = text.replaceAll(/<\?xml[^>]*\?>/g, "").replaceAll(/xmlns[^=]*="[^"]*"/g, "");
10
- const tagRegex = /<([^>]+)>([^<]*)<\/\1>/g;
11
- const matches = [...cleanText.matchAll(tagRegex)];
12
- for (const match of matches) {
13
- const [, tagName, content] = match;
14
- if (tagName && content && content.trim()) {
15
- if (result[tagName]) {
16
- if (!Array.isArray(result[tagName])) {
17
- result[tagName] = [result[tagName]];
18
- }
19
- result[tagName].push(content.trim());
20
- } else {
21
- result[tagName] = content.trim();
22
- }
23
- }
24
- }
25
- const nestedRegex = /<([^>]+)>([\s\S]*?)<\/\1>/g;
26
- let nestedMatch;
27
- while ((nestedMatch = nestedRegex.exec(cleanText)) !== null) {
28
- const [, tagName, innerContent] = nestedMatch;
29
- if (tagName && innerContent && innerContent.includes("<")) {
30
- const nested = parseXml(innerContent);
31
- if (Object.keys(nested).length > 0) {
32
- result[tagName] = nested;
33
- }
34
- }
35
- }
36
- return result;
37
- };
38
- class AwsLightApiAdapter {
39
- aws;
40
- bucket;
41
- endpoint;
42
- constructor(config) {
43
- this.bucket = config.bucket;
44
- this.endpoint = config.endpoint || `https://${config.bucket}.s3.${config.region}.amazonaws.com`;
45
- this.aws = new AwsClient({
46
- accessKeyId: config.accessKeyId,
47
- region: config.region,
48
- secretAccessKey: config.secretAccessKey,
49
- service: config.service || "s3",
50
- sessionToken: config.sessionToken
51
- });
52
- }
53
- async createMultipartUpload(params) {
54
- const queryParams = { uploads: "" };
55
- const headers = {};
56
- if (params.ContentType) {
57
- headers["Content-Type"] = params.ContentType;
58
- }
59
- if (params.ACL) {
60
- headers["x-amz-acl"] = params.ACL;
61
- }
62
- if (params.Metadata) {
63
- for (const [key, value] of Object.entries(params.Metadata)) {
64
- headers[`x-amz-meta-${key}`] = value;
65
- }
66
- }
67
- const url = this.buildUrl(params.Key, queryParams);
68
- const response = await this.aws.fetch(url, {
69
- headers,
70
- method: "POST"
71
- });
72
- const xmlText = await response.text();
73
- if (!response.ok) {
74
- throw new Error(`Failed to create multipart upload: ${response.status} ${xmlText}`);
75
- }
76
- const xml = parseXml(xmlText);
77
- const uploadId = xml.UploadId || xml.InitiateMultipartUploadResult?.UploadId;
78
- if (!uploadId) {
79
- const error = new Error("Failed to parse UploadId from response");
80
- error.retryable = false;
81
- throw error;
82
- }
83
- return { UploadId: uploadId };
84
- }
85
- async uploadPart(params) {
86
- const queryParams = {
87
- partNumber: String(params.PartNumber),
88
- uploadId: params.UploadId
89
- };
90
- const headers = {};
91
- if (params.ContentLength) {
92
- headers["Content-Length"] = String(params.ContentLength);
93
- }
94
- if (params.ContentMD5) {
95
- headers["Content-MD5"] = params.ContentMD5;
96
- }
97
- const body = params.Body instanceof Readable ? Readable.toWeb(params.Body) : params.Body;
98
- const url = this.buildUrl(params.Key, queryParams);
99
- const response = await this.aws.fetch(url, {
100
- body,
101
- headers,
102
- method: "PUT"
103
- });
104
- if (!response.ok) {
105
- const text = await response.text();
106
- throw new Error(`Failed to upload part: ${response.status} ${text}`);
107
- }
108
- const etag = response.headers.get("ETag");
109
- if (!etag) {
110
- throw new Error("Failed to get ETag from response");
111
- }
112
- return { ETag: etag.replaceAll(/(^"|"$)/g, "") };
113
- }
114
- async completeMultipartUpload(params) {
115
- const queryParams = { uploadId: params.UploadId };
116
- const partsXml = params.Parts.map(({ ETag, PartNumber }) => `<Part><PartNumber>${PartNumber}</PartNumber><ETag>"${ETag}"</ETag></Part>`).join("");
117
- const xmlBody = `<?xml version="1.0" encoding="UTF-8"?>
118
- <CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
119
- ${partsXml}
120
- </CompleteMultipartUpload>`;
121
- const url = this.buildUrl(params.Key, queryParams);
122
- const response = await this.aws.fetch(url, {
123
- body: xmlBody,
124
- headers: {
125
- "Content-Type": "application/xml"
126
- },
127
- method: "POST"
128
- });
129
- const xmlText = await response.text();
130
- if (!response.ok) {
131
- throw new Error(`Failed to complete multipart upload: ${response.status} ${xmlText}`);
132
- }
133
- const xml = parseXml(xmlText);
134
- const result = xml.CompleteMultipartUploadResult || xml;
135
- const location = result.Location || `${this.endpoint}/${params.Key}`;
136
- const etag = result.ETag;
137
- return {
138
- ETag: etag?.replaceAll(/(^"|"$)/g, ""),
139
- Location: location
140
- };
141
- }
142
- async abortMultipartUpload(params) {
143
- const queryParams = { uploadId: params.UploadId };
144
- const url = this.buildUrl(params.Key, queryParams);
145
- const response = await this.aws.fetch(url, {
146
- method: "DELETE"
147
- });
148
- if (!response.ok) {
149
- const text = await response.text();
150
- throw new Error(`Failed to abort multipart upload: ${response.status} ${text}`);
151
- }
152
- }
153
- async listParts(params) {
154
- const queryParams = { uploadId: params.UploadId };
155
- const url = this.buildUrl(params.Key, queryParams);
156
- const response = await this.aws.fetch(url, {
157
- method: "GET"
158
- });
159
- const xmlText = await response.text();
160
- if (!response.ok) {
161
- throw new Error(`Failed to list parts: ${response.status} ${xmlText}`);
162
- }
163
- const xml = parseXml(xmlText);
164
- const listPartsResult = xml.ListPartsResult || xml;
165
- let parts = [];
166
- if (listPartsResult.Part) {
167
- parts = Array.isArray(listPartsResult.Part) ? listPartsResult.Part : [listPartsResult.Part];
168
- }
169
- return {
170
- Parts: parts.map((part) => {
171
- return {
172
- ETag: part.ETag?.replaceAll(/(^"|"$)/g, ""),
173
- PartNumber: Number(part.PartNumber) || 0,
174
- Size: part.Size ? Number(part.Size) : void 0
175
- };
176
- })
177
- };
178
- }
179
- async getObject(params) {
180
- const url = this.buildUrl(params.Key);
181
- const response = await this.aws.fetch(url, {
182
- method: "GET"
183
- });
184
- if (!response.ok) {
185
- const text = await response.text();
186
- throw new Error(`Failed to get object: ${response.status} ${text}`);
187
- }
188
- const contentLength = response.headers.get("Content-Length");
189
- const contentType = response.headers.get("Content-Type");
190
- const etag = response.headers.get("ETag");
191
- const expires = response.headers.get("Expires");
192
- const lastModified = response.headers.get("Last-Modified");
193
- const metadata = {};
194
- for (const [key, value] of response.headers.entries()) {
195
- if (key.toLowerCase().startsWith("x-amz-meta-")) {
196
- const metaKey = key.toLowerCase().replace("x-amz-meta-", "");
197
- metadata[metaKey] = value;
198
- }
199
- }
200
- const { body } = response;
201
- return {
202
- Body: body ? this.streamToReadable(body) : void 0,
203
- ContentLength: contentLength ? Number(contentLength) : void 0,
204
- ContentType: contentType || void 0,
205
- ETag: etag?.replaceAll(/(^"|"$)/g, "") || void 0,
206
- Expires: expires ? new Date(expires) : void 0,
207
- LastModified: lastModified ? new Date(lastModified) : void 0,
208
- Metadata: Object.keys(metadata).length > 0 ? metadata : void 0
209
- };
210
- }
211
- async headObject(params) {
212
- const url = this.buildUrl(params.Key);
213
- const response = await this.aws.fetch(url, {
214
- method: "HEAD"
215
- });
216
- if (!response.ok) {
217
- const text = await response.text();
218
- throw new Error(`Failed to head object: ${response.status} ${text}`);
219
- }
220
- const contentLength = response.headers.get("Content-Length");
221
- const contentType = response.headers.get("Content-Type");
222
- const etag = response.headers.get("ETag");
223
- const expires = response.headers.get("Expires");
224
- const lastModified = response.headers.get("Last-Modified");
225
- const metadata = {};
226
- for (const [key, value] of response.headers.entries()) {
227
- if (key.toLowerCase().startsWith("x-amz-meta-")) {
228
- const metaKey = key.toLowerCase().replace("x-amz-meta-", "");
229
- metadata[metaKey] = value;
230
- }
231
- }
232
- return {
233
- ContentLength: contentLength ? Number(contentLength) : void 0,
234
- ContentType: contentType || void 0,
235
- ETag: etag?.replaceAll(/(^"|"$)/g, "") || void 0,
236
- Expires: expires ? new Date(expires) : void 0,
237
- LastModified: lastModified ? new Date(lastModified) : void 0,
238
- Metadata: Object.keys(metadata).length > 0 ? metadata : void 0
239
- };
240
- }
241
- async deleteObject(params) {
242
- const url = this.buildUrl(params.Key);
243
- const response = await this.aws.fetch(url, {
244
- method: "DELETE"
245
- });
246
- if (!response.ok) {
247
- const text = await response.text();
248
- throw new Error(`Failed to delete object: ${response.status} ${text}`);
249
- }
250
- }
251
- async copyObject(params) {
252
- const headers = {
253
- "x-amz-copy-source": params.CopySource
254
- };
255
- if (params.StorageClass) {
256
- headers["x-amz-storage-class"] = params.StorageClass;
257
- }
258
- let url = this.buildUrl(params.Key);
259
- if (params.Bucket !== this.bucket) {
260
- url = url.replace(this.bucket, params.Bucket);
261
- }
262
- const response = await this.aws.fetch(url, {
263
- headers,
264
- method: "PUT"
265
- });
266
- if (!response.ok) {
267
- const text = await response.text();
268
- throw new Error(`Failed to copy object: ${response.status} ${text}`);
269
- }
270
- }
271
- async listObjectsV2(params) {
272
- const queryParams = {
273
- "list-type": "2"
274
- };
275
- if (params.MaxKeys) {
276
- queryParams["max-keys"] = String(params.MaxKeys);
277
- }
278
- if (params.ContinuationToken) {
279
- queryParams["continuation-token"] = params.ContinuationToken;
280
- }
281
- const url = this.buildUrl("", queryParams);
282
- const response = await this.aws.fetch(url, {
283
- method: "GET"
284
- });
285
- const xmlText = await response.text();
286
- if (!response.ok) {
287
- throw new Error(`Failed to list objects: ${response.status} ${xmlText}`);
288
- }
289
- const xml = parseXml(xmlText);
290
- const listResult = xml.ListBucketResult || xml;
291
- const contents = listResult.Contents || (Array.isArray(listResult.Contents) ? listResult.Contents : []);
292
- return {
293
- Contents: Array.isArray(contents) ? contents.map((item) => {
294
- return {
295
- Key: item.Key,
296
- LastModified: item.LastModified ? new Date(String(item.LastModified)) : void 0
297
- };
298
- }) : [],
299
- IsTruncated: listResult.IsTruncated === "true" || listResult.IsTruncated === true,
300
- NextContinuationToken: listResult.NextContinuationToken
301
- };
302
- }
303
- async getPresignedUrl(params) {
304
- const queryParams = {
305
- partNumber: String(params.PartNumber),
306
- uploadId: params.UploadId,
307
- "X-Amz-Expires": String(params.expiresIn)
308
- };
309
- const url = this.buildUrl(params.Key, queryParams);
310
- return url;
311
- }
312
- async putObject(params) {
313
- const url = this.buildUrl(params.Key);
314
- const headers = {};
315
- if (params.ContentType) {
316
- headers["Content-Type"] = params.ContentType;
317
- }
318
- if (params.ContentLength !== void 0) {
319
- headers["Content-Length"] = String(params.ContentLength);
320
- }
321
- if (params.Metadata) {
322
- for (const [key, value] of Object.entries(params.Metadata)) {
323
- headers[`x-amz-meta-${key}`] = value;
324
- }
325
- }
326
- let body;
327
- if (params.Body === void 0) {
328
- body = void 0;
329
- } else if (params.Body instanceof Uint8Array) {
330
- body = new Uint8Array(params.Body);
331
- } else if (params.Body instanceof ReadableStream) {
332
- body = params.Body;
333
- } else {
334
- body = void 0;
335
- }
336
- const response = await this.aws.fetch(url, {
337
- body,
338
- headers,
339
- method: "PUT"
340
- });
341
- if (!response.ok) {
342
- const text = await response.text();
343
- throw new Error(`Failed to put object: ${response.status} ${text}`);
344
- }
345
- }
346
- async checkBucketAccess(_params) {
347
- const url = this.buildUrl("");
348
- const response = await this.aws.fetch(url, {
349
- method: "HEAD"
350
- });
351
- if (!response.ok && response.status !== 404) {
352
- const text = await response.text();
353
- throw new Error(`Failed to access bucket: ${response.status} ${text}`);
354
- }
355
- }
356
- /**
357
- * Builds S3 API URL.
358
- */
359
- buildUrl(key, queryParams) {
360
- const url = new URL(key, this.endpoint);
361
- if (queryParams) {
362
- for (const [parameterKey, value] of Object.entries(queryParams)) {
363
- url.searchParams.set(parameterKey, value);
364
- }
365
- }
366
- return url.toString();
367
- }
368
- /**
369
- * Converts ReadableStream to Readable for Node.js compatibility.
370
- */
371
- // eslint-disable-next-line class-methods-use-this
372
- streamToReadable(stream) {
373
- return Readable.fromWeb(stream);
374
- }
375
- }
376
-
377
- class AwsLightMetaStorage extends MetaStorage {
378
- constructor(config) {
379
- super(config);
380
- this.config = config;
381
- const bucket = config.bucket || process.env.S3_BUCKET || process.env.AWS_S3_BUCKET;
382
- if (!bucket) {
383
- throw new Error("S3 bucket is not defined");
384
- }
385
- this.bucket = bucket;
386
- this.adapter = new AwsLightApiAdapter({
387
- accessKeyId: config.accessKeyId,
388
- bucket,
389
- endpoint: config.endpoint,
390
- region: config.region,
391
- secretAccessKey: config.secretAccessKey,
392
- service: config.service,
393
- sessionToken: config.sessionToken
394
- });
395
- this.adapter.checkBucketAccess({ Bucket: bucket }).catch((error) => {
396
- throw error;
397
- });
398
- }
399
- adapter;
400
- bucket;
401
- async get(id) {
402
- const Key = this.getMetaName(id);
403
- const { Expires, Metadata } = await this.adapter.headObject({
404
- Bucket: this.bucket,
405
- Key
406
- });
407
- if (Expires && isExpired({ expiredAt: Expires })) {
408
- await this.delete(Key);
409
- throw new Error(`Metafile ${id} not found`);
410
- }
411
- if (Metadata?.metadata !== void 0) {
412
- const file = JSON.parse(decodeURIComponent(Metadata.metadata));
413
- if (file.metadata && typeof file.metadata === "string") {
414
- file.metadata = parseMetadata(file.metadata);
415
- }
416
- return file;
417
- }
418
- throw new Error(`Metafile ${id} not found`);
419
- }
420
- async touch(id, file) {
421
- return this.save(id, file);
422
- }
423
- async delete(id) {
424
- await this.adapter.deleteObject({
425
- Bucket: this.bucket,
426
- Key: this.getMetaName(id)
427
- });
428
- }
429
- async save(id, file) {
430
- const transformedMetadata = { ...file };
431
- if (transformedMetadata.metadata) {
432
- transformedMetadata.metadata = stringifyMetadata(file.metadata);
433
- }
434
- const metadata = encodeURIComponent(JSON.stringify(transformedMetadata));
435
- await this.adapter.putObject({
436
- Bucket: this.bucket,
437
- ContentLength: 0,
438
- ContentType: "application/json",
439
- Key: this.getMetaName(id),
440
- Metadata: { metadata }
441
- });
442
- return file;
443
- }
444
- }
445
-
446
- export { AwsLightMetaStorage as A, AwsLightApiAdapter as a };
@@ -1,20 +0,0 @@
1
- const backblaze = (parameters) => {
2
- const { applicationKey, applicationKeyId, region } = parameters ?? {
3
- applicationKey: process.env.AWS_SECRET_ACCESS_KEY || process.env.B2_APP_KEY || process.env.BACKBLAZE_APP_KEY,
4
- applicationKeyId: process.env.AWS_ACCESS_KEY_ID || process.env.B2_APP_KEY_ID || process.env.BACKBLAZE_APP_KEY_ID,
5
- region: process.env.AWS_REGION || process.env.B2_REGION || process.env.BACKBLAZE_REGION
6
- };
7
- if (!region || !applicationKeyId || !applicationKey) {
8
- throw new Error("Missing required parameters for Backblaze B2 client.");
9
- }
10
- return {
11
- credentials: {
12
- accessKeyId: applicationKeyId,
13
- secretAccessKey: applicationKey
14
- },
15
- endpoint: `https://s3.${region}.backblazeb2.com`,
16
- region
17
- };
18
- };
19
-
20
- export { backblaze, backblaze as default };