@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,303 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { format } from 'node:url';
3
- import mime from 'mime';
4
- import { ErrorMap } from './ERRORS-D0apMqnc.js';
5
- import { H as HeaderUtilities } from './headers-DoS5nwM-.js';
6
- import { Readable } from 'node:stream';
7
- import 'type-is';
8
-
9
- const getLastOne = (value) => value.at(-1);
10
-
11
- const extractForwarded = (request) => {
12
- let proto = "";
13
- let host = "";
14
- const header = getHeader(request, "forwarded");
15
- if (header) {
16
- const kvPairs = header.split(";");
17
- kvPairs.forEach((kv) => {
18
- const [token, value] = kv.split("=");
19
- if (token === "proto") {
20
- proto = value;
21
- }
22
- if (token === "host") {
23
- host = value;
24
- }
25
- });
26
- }
27
- return { host, proto };
28
- };
29
- const readBody = (request, encoding = "utf8", limit) => new Promise((resolve, reject) => {
30
- let body = "";
31
- request.setEncoding(encoding);
32
- request.on("data", (chunk) => {
33
- if (body.length + chunk.length > limit) {
34
- return reject(new Error("Request body length limit exceeded"));
35
- }
36
- body += chunk;
37
- });
38
- request.once("end", () => resolve(body));
39
- });
40
- const getHeader = (request, name, all = false) => {
41
- const raw = request.headers?.[name.toLowerCase()];
42
- if (!raw || raw.length === 0) {
43
- return "";
44
- }
45
- if (all) {
46
- return raw.toString().trim();
47
- }
48
- const array = Array.isArray(raw) ? raw : raw.split(",");
49
- return getLastOne(array).trim();
50
- };
51
- const appendHeader = (response, name, value) => {
52
- const s = [response.getHeader(name), value].flat().filter(Boolean).toString();
53
- response.setHeader(name, s);
54
- };
55
- const setHeaders = (response, headers = {}) => {
56
- const keys = Object.keys(headers);
57
- if (keys.length > 0) {
58
- appendHeader(response, "Access-Control-Expose-Headers", keys);
59
- }
60
- keys.forEach((key) => {
61
- if (["link", "location"].includes(key.toLowerCase())) {
62
- response.setHeader(key, encodeURI(headers[key].toString()));
63
- } else {
64
- response.setHeader(key, headers[key]);
65
- }
66
- });
67
- };
68
- const extractHost = (request) => getHeader(request, "host") || getHeader(request, "x-forwarded-host");
69
- const extractProto = (request) => getHeader(request, "x-forwarded-proto").toLowerCase();
70
- const getBaseUrl = (request) => {
71
- let { host, proto } = extractForwarded(request);
72
- host ||= extractHost(request);
73
- proto ||= extractProto(request);
74
- if (!host) {
75
- return "";
76
- }
77
- return proto ? `${proto}://${host}` : `//${host}`;
78
- };
79
- const getRealPath = (request) => {
80
- let realPath = (request.originalUrl || request.url || "").split("?")[0];
81
- if (!realPath) {
82
- throw new TypeError("Invalid request URL");
83
- }
84
- if (!realPath.startsWith("/")) {
85
- realPath = `/${realPath}`;
86
- }
87
- if (realPath.startsWith("http")) {
88
- const url = new URL(realPath);
89
- realPath = url.pathname;
90
- }
91
- return realPath;
92
- };
93
- const uuidRegex = /(?:[\dA-Z]+-){2}[\dA-Z]+/i;
94
- const getIdFromRequest = (request) => {
95
- const realPath = getRealPath(request);
96
- const segments = realPath.split("/").filter(Boolean);
97
- if (segments.length === 0) {
98
- throw new Error("Invalid request URL");
99
- }
100
- for (let index = segments.length - 1; index >= 0; index -= 1) {
101
- const segment = segments[index];
102
- if (!segment) {
103
- continue;
104
- }
105
- const cleanSegment = segment.replace(/\.[^/.]+$/, "");
106
- const commonPathNames2 = ["files", "metadata", "upload", "download", "http-rest", "http-rest-chunked"];
107
- if (commonPathNames2.includes(cleanSegment.toLowerCase())) {
108
- continue;
109
- }
110
- if (uuidRegex.test(cleanSegment)) {
111
- return cleanSegment;
112
- }
113
- }
114
- const lastSegment = segments[segments.length - 1];
115
- if (!lastSegment) {
116
- throw new Error("Invalid request URL");
117
- }
118
- const cleanLastSegment = lastSegment.replace(/\.[^/.]+$/, "");
119
- const commonPathNames = ["files", "metadata", "upload", "download", "http-rest", "http-rest-chunked"];
120
- if (commonPathNames.includes(cleanLastSegment.toLowerCase())) {
121
- throw new Error("Invalid request URL");
122
- }
123
- if (cleanLastSegment.length < 8) {
124
- throw new Error("Invalid request URL");
125
- }
126
- if (segments.length > 1) {
127
- return cleanLastSegment;
128
- }
129
- throw new Error("Invalid request URL");
130
- };
131
- const getRequestStream = (request) => {
132
- if ("body" in request && request.body && typeof request.body.getReader === "function") {
133
- return Readable.fromWeb(request.body);
134
- }
135
- if ("body" in request && request.body && request.body instanceof Uint8Array) {
136
- return Readable.from(Buffer.from(request.body));
137
- }
138
- if (request instanceof Readable) {
139
- return request;
140
- }
141
- return Readable.from(new Uint8Array(0));
142
- };
143
-
144
- const pick = (object, whitelist) => {
145
- const result = {};
146
- whitelist.forEach((key) => {
147
- result[key] = object[key];
148
- });
149
- return result;
150
- };
151
-
152
- class BaseHandlerCore extends EventEmitter {
153
- /**
154
- * Response body type for the handler.
155
- */
156
- responseType = "json";
157
- /**
158
- * Storage instance for file operations.
159
- */
160
- storage;
161
- /**
162
- * Optional media transformer for image/video processing.
163
- */
164
- mediaTransformer;
165
- /**
166
- * Whether to disable termination for finished uploads.
167
- */
168
- disableTerminationForFinishedUploads;
169
- /**
170
- * Logger instance for debugging and error reporting.
171
- */
172
- logger;
173
- /**
174
- * Gets the logger instance.
175
- * @returns Logger instance or undefined.
176
- */
177
- get loggerInstance() {
178
- return this.logger;
179
- }
180
- /**
181
- * Internal error responses configuration.
182
- */
183
- internalErrorResponses = {};
184
- /**
185
- * Gets the error responses configuration.
186
- * @returns Error responses configuration.
187
- */
188
- get errorResponses() {
189
- return this.internalErrorResponses;
190
- }
191
- constructor({ disableTerminationForFinishedUploads, mediaTransformer, storage }) {
192
- super();
193
- this.storage = storage;
194
- this.mediaTransformer = mediaTransformer;
195
- this.disableTerminationForFinishedUploads = disableTerminationForFinishedUploads;
196
- this.logger = this.storage?.logger;
197
- this.assembleErrors();
198
- }
199
- /**
200
- * Sets custom error responses.
201
- * @param value Partial error responses to override defaults.
202
- */
203
- set errorResponses(value) {
204
- this.assembleErrors(value);
205
- }
206
- /**
207
- * Assemble error responses by merging defaults with custom overrides.
208
- * @param customErrors Custom error responses to override defaults
209
- */
210
- assembleErrors = (customErrors = {}) => {
211
- this.internalErrorResponses = {
212
- ...ErrorMap,
213
- ...this.internalErrorResponses,
214
- ...this.storage.errorResponses,
215
- ...customErrors
216
- };
217
- };
218
- /**
219
- * Parses HTTP Range header and returns start/end byte positions for partial content requests.
220
- * @param rangeHeader HTTP Range header value (e.g., "bytes=0-1023").
221
- * @param fileSize Total size of the file in bytes.
222
- * @returns Object with start and end positions, or undefined if range is invalid.
223
- */
224
- // eslint-disable-next-line class-methods-use-this
225
- parseRangeHeader(rangeHeader, fileSize) {
226
- if (!rangeHeader || !rangeHeader.startsWith("bytes=")) {
227
- return void 0;
228
- }
229
- const ranges = rangeHeader.slice(6).split(",");
230
- if (ranges.length !== 1) {
231
- return void 0;
232
- }
233
- const range = ranges[0]?.trim();
234
- if (!range) {
235
- return void 0;
236
- }
237
- const parts = range.split("-");
238
- if (parts.length !== 2) {
239
- return void 0;
240
- }
241
- const [startString, endString] = parts;
242
- let start;
243
- let end;
244
- if (startString && endString) {
245
- start = Number.parseInt(startString, 10);
246
- end = Number.parseInt(endString, 10);
247
- } else if (startString && !endString) {
248
- start = Number.parseInt(startString, 10);
249
- end = fileSize - 1;
250
- } else if (!startString && endString) {
251
- const suffixLength = Number.parseInt(endString, 10);
252
- start = Math.max(0, fileSize - suffixLength);
253
- end = fileSize - 1;
254
- } else {
255
- return void 0;
256
- }
257
- if (Number.isNaN(start) || Number.isNaN(end) || start >= fileSize || end >= fileSize || start > end) {
258
- return void 0;
259
- }
260
- return { end, start };
261
- }
262
- /**
263
- * Build file URL from request and file data.
264
- * Platform-agnostic version that accepts URL string.
265
- * @param requestUrl Request URL string
266
- * @param file File object containing ID and content type
267
- * @returns Constructed file URL with extension based on content type
268
- */
269
- buildFileUrlFromString(requestUrl, file) {
270
- const url = new URL(requestUrl, "http://localhost");
271
- const { pathname } = url;
272
- const query = Object.fromEntries(url.searchParams.entries());
273
- const relative = format({ pathname: `${pathname}/${file.id}`, query });
274
- const baseUrl = this.storage.config.useRelativeLocation ? "" : getBaseUrl({ });
275
- return `${baseUrl}${relative}.${mime.getExtension(file.contentType)}`;
276
- }
277
- /**
278
- * Negotiates content type based on Accept header and supported formats.
279
- * Platform-agnostic version that accepts header string.
280
- * @param acceptHeader Accept header value
281
- * @param supportedTypes Array of supported MIME types to match against
282
- * @returns Best matching content type or undefined if no match found
283
- */
284
- // eslint-disable-next-line class-methods-use-this
285
- negotiateContentTypeFromHeader(acceptHeader, supportedTypes) {
286
- if (!acceptHeader) {
287
- return void 0;
288
- }
289
- return HeaderUtilities.getPreferredMediaType(acceptHeader, supportedTypes);
290
- }
291
- /**
292
- * Check for undefined ID or path errors and throw appropriate HTTP errors.
293
- * @param error The error to check
294
- */
295
- // eslint-disable-next-line class-methods-use-this
296
- checkForUndefinedIdOrPath(error) {
297
- if (error instanceof Error && ["Id is undefined", "Invalid request URL", "Path is undefined"].includes(error.message)) {
298
- throw error;
299
- }
300
- }
301
- }
302
-
303
- export { BaseHandlerCore as B, getHeader as a, getRequestStream as b, getBaseUrl as c, getRealPath as d, getIdFromRequest as g, pick as p, readBody as r, setHeaders as s, uuidRegex as u };
@@ -1,291 +0,0 @@
1
- import { H as HeaderUtilities, h as httpErrorsExports } from './headers-DoS5nwM-.js';
2
- import { ERRORS, isUploadError } from './ERRORS-D0apMqnc.js';
3
- import { B as BaseHandlerCore, p as pick } from './base-handler-core-BKuf4YLT.js';
4
- import { i as isValidationError } from './validator-BeX_lJet.js';
5
- import { waitForStorage } from './waitForStorage-Cscw85sx.js';
6
-
7
- class BaseHandlerFetch extends BaseHandlerCore {
8
- /**
9
- * Limiting enabled HTTP method handler.
10
- */
11
- static methods = ["delete", "get", "head", "options", "patch", "post", "put"];
12
- /**
13
- * Map of registered HTTP method handlers.
14
- */
15
- registeredHandlers = /* @__PURE__ */ new Map();
16
- constructor(options) {
17
- super(options);
18
- this.compose();
19
- }
20
- /**
21
- * Gets the registered handlers map.
22
- * @returns Map of registered handlers.
23
- */
24
- get handlers() {
25
- return this.registeredHandlers;
26
- }
27
- /**
28
- * Handles Web API Fetch requests (for Hono, Cloudflare Workers, etc.).
29
- * @param request Web API Request object.
30
- * @returns Promise resolving to Web API Response.
31
- */
32
- async fetch(request) {
33
- this.logger?.debug("[fetch request]: %s %s", request.method, request.url);
34
- const handler = this.registeredHandlers.get(request.method || "GET");
35
- if (!handler) {
36
- return this.createErrorResponse({ UploadErrorCode: ERRORS.METHOD_NOT_ALLOWED });
37
- }
38
- try {
39
- await waitForStorage(this.storage);
40
- } catch {
41
- return this.createErrorResponse({ UploadErrorCode: ERRORS.STORAGE_ERROR });
42
- }
43
- try {
44
- const file = await handler.call(this, request);
45
- return this.handleFetchResponse(request, file);
46
- } catch (error) {
47
- const errorObject = error instanceof Error ? error : new Error(String(error));
48
- const uError = pick(errorObject, ["name", ...Object.getOwnPropertyNames(errorObject)]);
49
- const errorEvent = {
50
- ...uError,
51
- request: {
52
- headers: Object.fromEntries(request.headers.entries()),
53
- method: request.method,
54
- url: request.url
55
- }
56
- };
57
- if (this.listenerCount("error") > 0) {
58
- this.emit("error", errorEvent);
59
- }
60
- this.logger?.error("[fetch error]: %O", errorEvent);
61
- return this.createErrorResponse(errorObject);
62
- }
63
- }
64
- /**
65
- * Handle the response from handlers for fetch requests and convert to Web API Response.
66
- * @param request Web API Request object
67
- * @param file Response file or list from handler
68
- * @returns Promise resolving to Web API Response object
69
- */
70
- async handleFetchResponse(request, file) {
71
- if (request.method === "HEAD" || request.method === "OPTIONS") {
72
- const { headers: headers2, statusCode: statusCode2 } = file;
73
- return new Response(void 0, {
74
- headers: this.convertHeaders({
75
- ...headers2,
76
- "Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control"
77
- }),
78
- status: statusCode2
79
- });
80
- }
81
- if (request.method === "GET") {
82
- const { headers: headers2, statusCode: statusCode2 } = file;
83
- let body = "";
84
- if (file.content !== void 0) {
85
- body = new Uint8Array(file.content);
86
- } else if (typeof file === "object" && "data" in file) {
87
- body = JSON.stringify(file.data);
88
- }
89
- return new Response(body, {
90
- headers: this.convertHeaders({
91
- ...headers2,
92
- "Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control"
93
- }),
94
- status: statusCode2
95
- });
96
- }
97
- const { headers, statusCode, ...basicFile } = file;
98
- if (basicFile.status !== void 0 && this.listenerCount(basicFile.status) > 0) {
99
- this.emit(basicFile.status, {
100
- ...basicFile,
101
- request: {
102
- headers: Object.fromEntries(request.headers.entries()),
103
- method: request.method,
104
- url: request.url
105
- }
106
- });
107
- }
108
- if (basicFile.status === "completed") {
109
- const responseFile = file;
110
- if (responseFile.headers === void 0) {
111
- responseFile.headers = {};
112
- }
113
- if (responseFile.statusCode === void 0) {
114
- responseFile.statusCode = 200;
115
- }
116
- try {
117
- await this.storage.onComplete(basicFile, responseFile);
118
- } catch (error) {
119
- this.logger?.error("[onComplete error]: %O", error);
120
- throw error;
121
- }
122
- const { headers: responseFileHeaders2, statusCode: responseFileStatusCode, ...fileData } = responseFile;
123
- const { content, stream, ...cleanFileData } = fileData;
124
- return this.createResponse({
125
- body: cleanFileData,
126
- headers: responseFileHeaders2 || headers,
127
- statusCode: responseFileStatusCode || statusCode || 200
128
- });
129
- }
130
- const allHeaders = {
131
- ...headers,
132
- ...file.headers
133
- };
134
- const convertedHeaders = this.convertHeaders({
135
- ...allHeaders,
136
- "Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control",
137
- ...basicFile.hash === void 0 ? {} : { [`X-Range-${basicFile.hash?.algorithm.toUpperCase()}`]: basicFile.hash?.value }
138
- });
139
- const responseFileHeaders = file.headers || {};
140
- if (responseFileHeaders.Location && !convertedHeaders.location && !convertedHeaders.Location) {
141
- convertedHeaders.location = String(responseFileHeaders.Location);
142
- } else if (responseFileHeaders.location && !convertedHeaders.location && !convertedHeaders.Location) {
143
- convertedHeaders.location = String(responseFileHeaders.location);
144
- } else if (headers.Location && !convertedHeaders.location && !convertedHeaders.Location) {
145
- convertedHeaders.location = String(headers.Location);
146
- } else if (headers.location && !convertedHeaders.location && !convertedHeaders.Location) {
147
- convertedHeaders.location = String(headers.location);
148
- }
149
- let responseBody;
150
- if (statusCode >= 200 && statusCode < 300) {
151
- responseBody = Object.keys(basicFile).length > 0 ? { ...basicFile } : {};
152
- if ("content" in responseBody) {
153
- delete responseBody.content;
154
- }
155
- if ("stream" in responseBody) {
156
- delete responseBody.stream;
157
- }
158
- if (Object.keys(responseBody).length === 0) {
159
- responseBody = {};
160
- }
161
- }
162
- return this.createResponse({
163
- body: responseBody,
164
- headers: convertedHeaders,
165
- statusCode: statusCode || 200
166
- });
167
- }
168
- /**
169
- * Convert headers to Web API Headers format by flattening arrays and converting to strings.
170
- * @param headers Headers object with potentially array values
171
- * @returns Headers object with all values as strings
172
- */
173
- // eslint-disable-next-line class-methods-use-this
174
- convertHeaders(headers) {
175
- const result = {};
176
- for (const [key, value] of Object.entries(headers)) {
177
- result[key] = Array.isArray(value) ? value.join(", ") : String(value);
178
- }
179
- return result;
180
- }
181
- /**
182
- * Create Web API Response from UploadResponse object.
183
- * @param uploadResponse Upload response containing body, headers, and status code
184
- * @returns Web API Response object
185
- */
186
- createResponse(uploadResponse) {
187
- const { body, headers = {}, statusCode } = uploadResponse;
188
- let responseBody;
189
- if (statusCode === 204) {
190
- responseBody = null;
191
- } else if (typeof body === "string") {
192
- responseBody = body;
193
- } else if (body instanceof Buffer) {
194
- responseBody = new Uint8Array(body);
195
- } else if (body && typeof body === "object") {
196
- responseBody = JSON.stringify(body);
197
- if (!headers["Content-Type"]) {
198
- headers["Content-Type"] = HeaderUtilities.createContentType({
199
- charset: "utf8",
200
- mediaType: "application/json"
201
- });
202
- }
203
- } else if (body === void 0 && statusCode !== void 0 && statusCode >= 200 && statusCode < 300) {
204
- responseBody = "{}";
205
- if (!headers["Content-Type"]) {
206
- headers["Content-Type"] = HeaderUtilities.createContentType({
207
- charset: "utf8",
208
- mediaType: "application/json"
209
- });
210
- }
211
- }
212
- return new Response(responseBody, {
213
- headers: this.convertHeaders(headers),
214
- status: statusCode
215
- });
216
- }
217
- /**
218
- * Create error Response from Error object with appropriate status code and message.
219
- * @param error Error object to convert to HTTP error response
220
- * @returns Web API Response object with error details
221
- */
222
- async createErrorResponse(error) {
223
- let httpError;
224
- if (isUploadError(error)) {
225
- httpError = this.internalErrorResponses[error.UploadErrorCode];
226
- } else if (!isValidationError(error) && !httpErrorsExports.isHttpError(error)) {
227
- httpError = this.storage.normalizeError(error);
228
- } else {
229
- httpError = {
230
- ...error,
231
- code: error.code || error.name,
232
- headers: error.headers || {},
233
- message: error.message,
234
- name: error.name,
235
- statusCode: error.statusCode || 500
236
- };
237
- }
238
- await this.storage.onError(httpError);
239
- let errorResponse;
240
- if (httpError.body) {
241
- if (typeof httpError.body === "object" && httpError.body !== null) {
242
- errorResponse = { body: httpError.body, headers: httpError.headers, statusCode: httpError.statusCode };
243
- } else {
244
- errorResponse = {
245
- body: {
246
- error: {
247
- code: httpError.code || httpError.name || "Error",
248
- message: httpError.body || httpError.message || "Unknown error",
249
- name: httpError.name || "Error"
250
- }
251
- },
252
- headers: httpError.headers,
253
- statusCode: httpError.statusCode || 500
254
- };
255
- }
256
- } else {
257
- errorResponse = {
258
- body: {
259
- error: {
260
- code: httpError.code || httpError.name || "Error",
261
- message: httpError.message || "Unknown error",
262
- name: httpError.name || "Error"
263
- }
264
- },
265
- headers: httpError.headers,
266
- statusCode: httpError.statusCode || 500
267
- };
268
- }
269
- return this.createResponse(errorResponse);
270
- }
271
- /**
272
- * Build file URL from request and file data.
273
- * @param request Web API Request object
274
- * @param file File object containing ID and content type
275
- * @returns Constructed file URL with extension based on content type
276
- */
277
- buildFileUrl(request, file) {
278
- return this.buildFileUrlFromString(request.url, file);
279
- }
280
- /**
281
- * Negotiates content type based on Accept header and supported formats.
282
- * @param request Web API Request object containing Accept header.
283
- * @param supportedTypes Array of supported MIME types to match against.
284
- * @returns Best matching content type or undefined if no match found.
285
- */
286
- negotiateContentType(request, supportedTypes) {
287
- return super.negotiateContentTypeFromHeader(request.headers.get("accept") || void 0, supportedTypes);
288
- }
289
- }
290
-
291
- export { BaseHandlerFetch as B };