@visulima/storage 1.0.0-alpha.3 → 1.0.0-alpha.30

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 (417) hide show
  1. package/CHANGELOG.md +361 -0
  2. package/LICENSE.md +213 -573
  3. package/README.md +83 -470
  4. package/dist/adapter/nuxt/module.d.ts +41 -34
  5. package/dist/adapter/nuxt/module.js +1 -93
  6. package/dist/adapter/nuxt/node_modules/.bin/nuxi +22 -0
  7. package/dist/adapter/nuxt/node_modules/.bin/nuxt +22 -0
  8. package/dist/adapter/nuxt/package.json +0 -6
  9. package/dist/ai/ai-sdk/index.d.ts +113 -0
  10. package/dist/ai/ai-sdk/index.js +1 -0
  11. package/dist/ai/claude/index.d.ts +177 -0
  12. package/dist/ai/claude/index.js +1 -0
  13. package/dist/ai/openai/index.d.ts +205 -0
  14. package/dist/ai/openai/index.js +1 -0
  15. package/dist/ai/tanstack/index.d.ts +115 -0
  16. package/dist/ai/tanstack/index.js +1 -0
  17. package/dist/handler/http/fetch/index.d.ts +303 -4
  18. package/dist/handler/http/fetch/index.js +1 -4
  19. package/dist/handler/http/hono/index.d.ts +73 -64
  20. package/dist/handler/http/hono/index.js +1 -65
  21. package/dist/handler/http/nextjs/index.d.ts +66 -58
  22. package/dist/handler/http/nextjs/index.js +1 -37
  23. package/dist/handler/http/node/index.d.ts +361 -4
  24. package/dist/handler/http/node/index.js +1 -4
  25. package/dist/handler/http/solid-start/index.d.ts +66 -57
  26. package/dist/handler/http/solid-start/index.js +1 -44
  27. package/dist/index.d.ts +58 -17
  28. package/dist/index.js +1 -13
  29. package/dist/openapi/index.d.ts +24 -5
  30. package/dist/openapi/index.js +1 -5
  31. package/dist/packem_shared/AwsLightFile-BSqjc_rD.js +1 -0
  32. package/dist/packem_shared/AwsLightMetaStorage-B-iQbToR.js +1 -0
  33. package/dist/packem_shared/AwsLightStorage-w21RxjUm.js +1 -0
  34. package/dist/packem_shared/AzureFile-Dgj2Tef4.js +1 -0
  35. package/dist/packem_shared/AzureSMetaStorage-CR-lfQNQ.js +1 -0
  36. package/dist/packem_shared/AzureStorage-2kl7JDXs.js +1 -0
  37. package/dist/packem_shared/BaseTransformer-Fpcuz4kj.js +1 -0
  38. package/dist/packem_shared/BoxFile-Be0S4N1L.js +1 -0
  39. package/dist/packem_shared/BoxMetaStorage-DLdXbZaV.js +1 -0
  40. package/dist/packem_shared/BoxStorage-BUeEJoGL.js +1 -0
  41. package/dist/packem_shared/BunS3File-D-SRiyrm.js +1 -0
  42. package/dist/packem_shared/BunS3MetaStorage-Bv_CTTMz.js +1 -0
  43. package/dist/packem_shared/BunS3Storage-WM3rF6Fw.js +1 -0
  44. package/dist/packem_shared/BunnyFile-Dotl-lO9.js +1 -0
  45. package/dist/packem_shared/BunnyMetaStorage-DNMTSeoN.js +1 -0
  46. package/dist/packem_shared/BunnyStorage-D3s2fRB3.js +1 -0
  47. package/dist/packem_shared/CloudinaryFile-B5-m33eS.js +1 -0
  48. package/dist/packem_shared/CloudinaryMetaStorage-DEBk5eQy.js +1 -0
  49. package/dist/packem_shared/CloudinaryStorage-BBE2-aVz.js +1 -0
  50. package/dist/packem_shared/DiskStorage-DL0GiG6k.js +1 -0
  51. package/dist/packem_shared/DiskStorageWithChecksum-BvUTn7O-.js +1 -0
  52. package/dist/packem_shared/DropboxFile-BGVG2kXM.js +1 -0
  53. package/dist/packem_shared/DropboxMetaStorage-C6vj1QDA.js +1 -0
  54. package/dist/packem_shared/DropboxStorage-BL3OIdE_.js +1 -0
  55. package/dist/packem_shared/ERRORS-CyOuSMLY.js +1 -0
  56. package/dist/packem_shared/File-BhfUgJjs.js +1 -0
  57. package/dist/packem_shared/Files-CJh9_N-9.js +1 -0
  58. package/dist/packem_shared/FirebaseFile-JEu3plMP.js +1 -0
  59. package/dist/packem_shared/FirebaseMetaStorage-CzyOim-J.js +1 -0
  60. package/dist/packem_shared/FirebaseStorage-lXMXy3Pm.js +2 -0
  61. package/dist/packem_shared/FtpFile-B8jaICTB.js +1 -0
  62. package/dist/packem_shared/FtpMetaStorage-1Njy0DpU.js +1 -0
  63. package/dist/packem_shared/FtpStorage-Dw94efNW.js +1 -0
  64. package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
  65. package/dist/packem_shared/GCSFile-CDQ6IWAz.js +1 -0
  66. package/dist/packem_shared/GCSMetaStorage-udgXA5ia.js +1 -0
  67. package/dist/packem_shared/GCStorage-ChY6uJuO.js +1 -0
  68. package/dist/packem_shared/GoogleDriveFile-D0aGfGbL.js +1 -0
  69. package/dist/packem_shared/GoogleDriveMetaStorage-WGuUZPyx.js +1 -0
  70. package/dist/packem_shared/GoogleDriveStorage-C0NhBBWH.js +1 -0
  71. package/dist/packem_shared/LocalMetaStorage-QMKL7McF.js +1 -0
  72. package/dist/packem_shared/MediaTransformer-D-1c9Q_k.js +1 -0
  73. package/dist/packem_shared/MetaStorage-Y4m1dWgd.js +1 -0
  74. package/dist/packem_shared/Metadata-B6Ir0KO7.js +1 -0
  75. package/dist/packem_shared/Multipart-CIFfQksD.js +1 -0
  76. package/dist/packem_shared/Multipart-D9WIud9R.js +1 -0
  77. package/dist/packem_shared/NetlifyBlobFile-PMZLJ8AC.js +1 -0
  78. package/dist/packem_shared/NetlifyBlobMetaStorage-ClIFdTkT.js +1 -0
  79. package/dist/packem_shared/NetlifyBlobStorage-CO89TGvF.js +1 -0
  80. package/dist/packem_shared/NoOpMetrics-Dky06sf1.js +1 -0
  81. package/dist/packem_shared/OneDriveFile-XbVVKIJh.js +1 -0
  82. package/dist/packem_shared/OneDriveMetaStorage-DS4f83X2.js +1 -0
  83. package/dist/packem_shared/OneDriveStorage-jAN46vRm.js +1 -0
  84. package/dist/packem_shared/OpenTelemetryMetrics-9uxQMSlg.js +1 -0
  85. package/dist/packem_shared/PocketBaseFile-CkAiSBb0.js +1 -0
  86. package/dist/packem_shared/PocketBaseMetaStorage-B6utPncj.js +1 -0
  87. package/dist/packem_shared/PocketBaseStorage-DpOjOKAt.js +1 -0
  88. package/dist/packem_shared/Rest-BuD3ySAg.js +1 -0
  89. package/dist/packem_shared/Rest-URrQ5FYM.js +1 -0
  90. package/dist/packem_shared/S3File-BfmCOET4.js +1 -0
  91. package/dist/packem_shared/S3MetaStorage-vcriiosn.js +1 -0
  92. package/dist/packem_shared/S3Storage-n1ohEZj4.js +1 -0
  93. package/dist/packem_shared/SftpFile-CQCxZNVq.js +1 -0
  94. package/dist/packem_shared/SftpMetaStorage-DYqXwCdM.js +1 -0
  95. package/dist/packem_shared/SftpStorage-Ban-WN8v.js +1 -0
  96. package/dist/packem_shared/SharePointFile-BA6X9Sxr.js +1 -0
  97. package/dist/packem_shared/SharePointMetaStorage-DVM5-X6g.js +1 -0
  98. package/dist/packem_shared/SharePointStorage-BY90zh1c.js +1 -0
  99. package/dist/packem_shared/SupabaseFile-DZ1iv9gM.js +1 -0
  100. package/dist/packem_shared/SupabaseMetaStorage-ivXoYVUu.js +1 -0
  101. package/dist/packem_shared/SupabaseStorage-pNbHAE1Y.js +1 -0
  102. package/dist/packem_shared/TUS_RESUMABLE-B7KtPVeC.js +1 -0
  103. package/dist/packem_shared/Tus-Fp_hx5ug.js +1 -0
  104. package/dist/packem_shared/Tus-TNG9HAY8.js +1 -0
  105. package/dist/packem_shared/UploadThingFile-BpG9mE8K.js +1 -0
  106. package/dist/packem_shared/UploadThingMetaStorage-BvKNzgm7.js +1 -0
  107. package/dist/packem_shared/UploadThingStorage-BcmIE2dI.js +1 -0
  108. package/dist/packem_shared/ValidationError-D8KKJiKA.js +1 -0
  109. package/dist/packem_shared/VercelBlobFile-Cni_1qwD.js +1 -0
  110. package/dist/packem_shared/VercelBlobMetaStorage-CwaqWucZ.js +1 -0
  111. package/dist/packem_shared/VercelBlobStorage-s260zfFo.js +1 -0
  112. package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +1 -0
  113. package/dist/packem_shared/agentsListFiles-R-CnGKc4.js +1 -0
  114. package/dist/packem_shared/akamai-BYS9pP8S.js +1 -0
  115. package/dist/packem_shared/alibaba-BJQ6ijoK.js +1 -0
  116. package/dist/packem_shared/approval-BBeX3o4E.js +1 -0
  117. package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
  118. package/dist/packem_shared/aws-light-meta-storage-CstQBYXG.js +4 -0
  119. package/dist/packem_shared/azure-meta-storage-C4SrMtT2.js +1 -0
  120. package/dist/packem_shared/backblaze-CvdtCvJL.js +1 -0
  121. package/dist/packem_shared/base-handler-core-BYDQditz.js +1 -0
  122. package/dist/packem_shared/base-handler-fetch-DWzsPkmV.js +1 -0
  123. package/dist/packem_shared/base-handler-node-Dety2rQB.js +1 -0
  124. package/dist/packem_shared/cache-qV_5Umeq.js +1 -0
  125. package/dist/packem_shared/claudeListFiles-DAezbKEi.js +1 -0
  126. package/dist/packem_shared/cloudflare-Bm_Pg6yx.js +1 -0
  127. package/dist/packem_shared/createResponsesFileTools-BCep-qdO.js +1 -0
  128. package/dist/packem_shared/defaultCloudStorageFileNameValidation-shIZX_7L.js +1 -0
  129. package/dist/packem_shared/detect-file-type-5JhzC9RU.js +1 -0
  130. package/dist/packem_shared/digitalOcean-Lj1NfDzc.js +1 -0
  131. package/dist/packem_shared/disk-storage-CKAJvhcj.js +1 -0
  132. package/dist/packem_shared/disk-storage-with-checksum.d-mHcg2uLw.d.ts +150 -0
  133. package/dist/packem_shared/executors-DG6hGtvm.js +1 -0
  134. package/dist/packem_shared/executors.d-X4hz3zfu.d.ts +65 -0
  135. package/dist/packem_shared/exoscale-O0HzxoDz.js +1 -0
  136. package/dist/packem_shared/filebase-D-urO4Ob.js +1 -0
  137. package/dist/packem_shared/gcs-meta-storage-mZiqlX-9.js +1 -0
  138. package/dist/packem_shared/has-content-Bx2p8Okx.js +1 -0
  139. package/dist/packem_shared/headers-DC2MEOrK.js +27 -0
  140. package/dist/packem_shared/hetzner-DDxE7Gy7.js +1 -0
  141. package/dist/packem_shared/ibmCos-Rx_yku4H.js +1 -0
  142. package/dist/packem_shared/idriveE2-BFhw0Vwy.js +1 -0
  143. package/dist/packem_shared/index-B4ETk0Lu.js +5 -0
  144. package/dist/packem_shared/index.d-C4Fivh4I.d.ts +94 -0
  145. package/dist/packem_shared/is-expired-1JuZjDtb.js +1 -0
  146. package/dist/packem_shared/isRetryableError-BhizNeAz.js +1 -0
  147. package/dist/packem_shared/isValidMediaType-B-2UKjZx.js +1 -0
  148. package/dist/packem_shared/listFiles-B6VF05d-.js +1 -0
  149. package/dist/packem_shared/listFiles-BtP6VnUp.js +1 -0
  150. package/dist/packem_shared/local-meta-storage-Bi0mK6gD.js +1 -0
  151. package/dist/packem_shared/local-meta-storage.d-B11vHYNm.d.ts +21 -0
  152. package/dist/packem_shared/media-transformer.d-C3QvECD7.d.ts +331 -0
  153. package/dist/packem_shared/minio-T_Z3iEy7.js +1 -0
  154. package/dist/packem_shared/multipart-base-BxckfvQf.js +1 -0
  155. package/dist/packem_shared/oauth-refresh-Dg2ybc6_.js +1 -0
  156. package/dist/packem_shared/oracleCloud-D5T9s4JV.js +1 -0
  157. package/dist/packem_shared/ovhCloud-DCwef2fe.js +1 -0
  158. package/dist/packem_shared/part-match-B5fLLmFw.js +1 -0
  159. package/dist/packem_shared/path-D7rMc9nq-B718mbm6.js +1 -0
  160. package/dist/packem_shared/posix-dirname-CiHXPPnw.js +1 -0
  161. package/dist/packem_shared/response-builder-Wdo_fvcF.js +1 -0
  162. package/dist/packem_shared/rest-base-DI7xFXr5.js +1 -0
  163. package/dist/packem_shared/restOpenApiSpec-PaIVbESh.js +1 -0
  164. package/dist/packem_shared/s3-base-storage-Dbexfg7p.js +1 -0
  165. package/dist/packem_shared/s3-base-storage.d-V3N2nKCt.d.ts +260 -0
  166. package/dist/packem_shared/scaleway-ygRXOss9.js +1 -0
  167. package/dist/packem_shared/sharedGet-Ce7WGAsc.js +1 -0
  168. package/dist/packem_shared/storage-Dh0tJh7j.js +1 -0
  169. package/dist/packem_shared/storage.d-RteRC-cG.d.ts +1106 -0
  170. package/dist/packem_shared/storj-CVA9mM-7.js +1 -0
  171. package/dist/packem_shared/tencent-CAcAGaIW.js +1 -0
  172. package/dist/packem_shared/tigris-wmhjfsH2.js +1 -0
  173. package/dist/packem_shared/transformOpenApiSpec-C0vEbDTO.js +1 -0
  174. package/dist/packem_shared/tus-base.d-CygntIPM.d.ts +99 -0
  175. package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
  176. package/dist/packem_shared/types.d-ChNXbbHG.d.ts +104 -0
  177. package/dist/packem_shared/types.d-DxonY4XS.d.ts +720 -0
  178. package/dist/packem_shared/types.d-cI_cMxcZ.d.ts +49 -0
  179. package/dist/packem_shared/update-size-DANV7aa2.js +1 -0
  180. package/dist/packem_shared/vultr-lK9L-sFk.js +1 -0
  181. package/dist/packem_shared/waitForStorage-ChSBLhLc.js +1 -0
  182. package/dist/packem_shared/wasabi-JQzxdrFy.js +1 -0
  183. package/dist/packem_shared/xhrOpenApiSpec-nyoboz83.js +1 -0
  184. package/dist/packem_shared/yandex-ZwvE77v4.js +1 -0
  185. package/dist/storage/aws/clients/index.d.ts +612 -6
  186. package/dist/storage/aws/clients/index.js +1 -6
  187. package/dist/storage/aws/index.d.ts +321 -4
  188. package/dist/storage/aws/index.js +1 -3
  189. package/dist/storage/aws-light/index.d.ts +254 -4
  190. package/dist/storage/aws-light/index.js +1 -3
  191. package/dist/storage/azure/index.d.ts +217 -4
  192. package/dist/storage/azure/index.js +1 -3
  193. package/dist/storage/box/index.d.ts +189 -0
  194. package/dist/storage/box/index.js +1 -0
  195. package/dist/storage/bun-s3/index.d.ts +200 -0
  196. package/dist/storage/bun-s3/index.js +1 -0
  197. package/dist/storage/bunny/index.d.ts +119 -0
  198. package/dist/storage/bunny/index.js +1 -0
  199. package/dist/storage/cloudinary/index.d.ts +121 -0
  200. package/dist/storage/cloudinary/index.js +1 -0
  201. package/dist/storage/dropbox/index.d.ts +132 -0
  202. package/dist/storage/dropbox/index.js +1 -0
  203. package/dist/storage/firebase/index.d.ts +192 -0
  204. package/dist/storage/firebase/index.js +1 -0
  205. package/dist/storage/ftp/index.d.ts +85 -0
  206. package/dist/storage/ftp/index.js +1 -0
  207. package/dist/storage/gcs/index.d.ts +181 -5
  208. package/dist/storage/gcs/index.js +1 -4
  209. package/dist/storage/google-drive/index.d.ts +148 -0
  210. package/dist/storage/google-drive/index.js +1 -0
  211. package/dist/storage/local/index.d.ts +7 -4
  212. package/dist/storage/local/index.js +1 -3
  213. package/dist/storage/netlify-blob/index.d.ts +147 -4
  214. package/dist/storage/netlify-blob/index.js +1 -3
  215. package/dist/storage/onedrive/index.d.ts +103 -0
  216. package/dist/storage/onedrive/index.js +1 -0
  217. package/dist/storage/pocketbase/index.d.ts +172 -0
  218. package/dist/storage/pocketbase/index.js +1 -0
  219. package/dist/storage/sftp/index.d.ts +86 -0
  220. package/dist/storage/sftp/index.js +1 -0
  221. package/dist/storage/sharepoint/index.d.ts +180 -0
  222. package/dist/storage/sharepoint/index.js +1 -0
  223. package/dist/storage/supabase/index.d.ts +115 -0
  224. package/dist/storage/supabase/index.js +1 -0
  225. package/dist/storage/uploadthing/index.d.ts +95 -0
  226. package/dist/storage/uploadthing/index.js +1 -0
  227. package/dist/storage/vercel-blob/index.d.ts +189 -4
  228. package/dist/storage/vercel-blob/index.js +1 -3
  229. package/dist/transformer/audio-transformer.d.ts +127 -125
  230. package/dist/transformer/audio-transformer.js +1 -278
  231. package/dist/transformer/image-transformer.d.ts +573 -568
  232. package/dist/transformer/image-transformer.js +1 -1100
  233. package/dist/transformer/index.d.ts +62 -5
  234. package/dist/transformer/index.js +1 -4
  235. package/dist/transformer/video-transformer.d.ts +144 -142
  236. package/dist/transformer/video-transformer.js +1 -310
  237. package/package.json +195 -47
  238. package/dist/handler/base/base-handler-core.d.ts +0 -91
  239. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  240. package/dist/handler/base/base-handler-node.d.ts +0 -137
  241. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  242. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  243. package/dist/handler/multipart/multipart.d.ts +0 -49
  244. package/dist/handler/rest/rest-base.d.ts +0 -106
  245. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  246. package/dist/handler/rest/rest.d.ts +0 -93
  247. package/dist/handler/tus/tus-base.d.ts +0 -152
  248. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  249. package/dist/handler/tus/tus.d.ts +0 -78
  250. package/dist/handler/types.d.ts +0 -53
  251. package/dist/handler/utils/request-parser.d.ts +0 -72
  252. package/dist/handler/utils/response-builder.d.ts +0 -83
  253. package/dist/handler/utils/storage-utils.d.ts +0 -10
  254. package/dist/handler/utils/stream-utils.d.ts +0 -29
  255. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  256. package/dist/metrics/index.d.ts +0 -2
  257. package/dist/metrics/no-op-metrics.d.ts +0 -15
  258. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  259. package/dist/openapi/rest.d.ts +0 -7
  260. package/dist/openapi/shared.d.ts +0 -13
  261. package/dist/openapi/transform.d.ts +0 -3
  262. package/dist/openapi/tus.d.ts +0 -7
  263. package/dist/openapi/xhr.d.ts +0 -7
  264. package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
  265. package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
  266. package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
  267. package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
  268. package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
  269. package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
  270. package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
  271. package/dist/packem_shared/DiskStorage-BlltBst6.js +0 -12
  272. package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +0 -238
  273. package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
  274. package/dist/packem_shared/File-Bb3P23dr.js +0 -69
  275. package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
  276. package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
  277. package/dist/packem_shared/GCSMetaStorage-BMFEdzJ7.js +0 -7
  278. package/dist/packem_shared/GCStorage-DnhiwaS9.js +0 -406
  279. package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
  280. package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
  281. package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
  282. package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
  283. package/dist/packem_shared/Multipart-CNFK_Okz.js +0 -163
  284. package/dist/packem_shared/Multipart-CtUL7BQw.js +0 -128
  285. package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
  286. package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
  287. package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
  288. package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
  289. package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
  290. package/dist/packem_shared/Rest-CAOAEkOj.js +0 -267
  291. package/dist/packem_shared/Rest-DNuLwBrK.js +0 -228
  292. package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
  293. package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
  294. package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
  295. package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +0 -434
  296. package/dist/packem_shared/Tus-B8PmlMgR.js +0 -200
  297. package/dist/packem_shared/Tus-C4F1aYOl.js +0 -195
  298. package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
  299. package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
  300. package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
  301. package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
  302. package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
  303. package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
  304. package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
  305. package/dist/packem_shared/base-handler-core-BKuf4YLT.js +0 -303
  306. package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +0 -291
  307. package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +0 -730
  308. package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
  309. package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
  310. package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
  311. package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
  312. package/dist/packem_shared/disk-storage-Bh2wy3YW.js +0 -810
  313. package/dist/packem_shared/gcs-meta-storage-0tgMNnPO.js +0 -158
  314. package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
  315. package/dist/packem_shared/headers-DoS5nwM-.js +0 -3220
  316. package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
  317. package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
  318. package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
  319. package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
  320. package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
  321. package/dist/packem_shared/multipart-base-B3i67SSX.js +0 -102
  322. package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
  323. package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
  324. package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
  325. package/dist/packem_shared/rest-base-GRCcnan7.js +0 -457
  326. package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +0 -800
  327. package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
  328. package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
  329. package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
  330. package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
  331. package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
  332. package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +0 -740
  333. package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
  334. package/dist/packem_shared/validator-BeX_lJet.js +0 -78
  335. package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
  336. package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
  337. package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +0 -264
  338. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  339. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  340. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  341. package/dist/storage/aws/clients/minio.d.ts +0 -13
  342. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  343. package/dist/storage/aws/clients/types.d.ts +0 -95
  344. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  345. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  346. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  347. package/dist/storage/aws/s3-file.d.ts +0 -10
  348. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  349. package/dist/storage/aws/s3-storage.d.ts +0 -70
  350. package/dist/storage/aws/types.d.ts +0 -119
  351. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  352. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  353. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  354. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
  355. package/dist/storage/aws-light/types.d.ts +0 -37
  356. package/dist/storage/azure/azure-file.d.ts +0 -6
  357. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  358. package/dist/storage/azure/azure-storage.d.ts +0 -69
  359. package/dist/storage/azure/types.d.ts +0 -62
  360. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  361. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  362. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  363. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  364. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  365. package/dist/storage/gcs/types.d.ts +0 -55
  366. package/dist/storage/gcs/utils.d.ts +0 -7
  367. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  368. package/dist/storage/local/disk-storage.d.ts +0 -135
  369. package/dist/storage/local/local-meta-storage.d.ts +0 -32
  370. package/dist/storage/meta-storage.d.ts +0 -30
  371. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  372. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
  373. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  374. package/dist/storage/netlify-blob/types.d.ts +0 -30
  375. package/dist/storage/storage.d.ts +0 -353
  376. package/dist/storage/types.d.ts +0 -221
  377. package/dist/storage/utils/file/file.d.ts +0 -25
  378. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  379. package/dist/storage/utils/file/has-content.d.ts +0 -9
  380. package/dist/storage/utils/file/index.d.ts +0 -10
  381. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  382. package/dist/storage/utils/file/metadata.d.ts +0 -18
  383. package/dist/storage/utils/file/part-match.d.ts +0 -11
  384. package/dist/storage/utils/file/types.d.ts +0 -37
  385. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  386. package/dist/storage/utils/file/update-size.d.ts +0 -10
  387. package/dist/storage/vercel-blob/types.d.ts +0 -32
  388. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  389. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
  390. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  391. package/dist/transformer/base-transformer.d.ts +0 -63
  392. package/dist/transformer/media-transformer.d.ts +0 -332
  393. package/dist/transformer/types.d.ts +0 -652
  394. package/dist/transformer/utils.d.ts +0 -33
  395. package/dist/transformer/validation-error.d.ts +0 -23
  396. package/dist/utils/cache.d.ts +0 -32
  397. package/dist/utils/chunked-upload.d.ts +0 -65
  398. package/dist/utils/detect-file-type.d.ts +0 -28
  399. package/dist/utils/errors.d.ts +0 -74
  400. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  401. package/dist/utils/headers.d.ts +0 -111
  402. package/dist/utils/http.d.ts +0 -92
  403. package/dist/utils/locker.d.ts +0 -26
  404. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  405. package/dist/utils/pipes/stream-length.d.ts +0 -22
  406. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  407. package/dist/utils/primitives/is-record.d.ts +0 -2
  408. package/dist/utils/primitives/map-values.d.ts +0 -9
  409. package/dist/utils/primitives/pick.d.ts +0 -2
  410. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  411. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  412. package/dist/utils/range-checksum.d.ts +0 -33
  413. package/dist/utils/range-hasher.d.ts +0 -46
  414. package/dist/utils/retry.d.ts +0 -64
  415. package/dist/utils/types.d.ts +0 -108
  416. package/dist/utils/validation-error.d.ts +0 -22
  417. package/dist/utils/validator.d.ts +0 -36
@@ -1,5 +1,24 @@
1
- export { default as restOpenApiSpec } from "./rest.d.ts";
2
- export { sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedFileMetaSchemaObject, sharedGet, sharedGetList } from "./shared.d.ts";
3
- export { default as transformOpenApiSpec } from "./transform.d.ts";
4
- export { default as tusOpenApiSpec } from "./tus.d.ts";
5
- export { default as xhrOpenApiSpec } from "./xhr.d.ts";
1
+ import { OpenAPIV3 } from 'openapi-types';
2
+ declare const swaggerSpec$3: (origin: string, path: string, options: {
3
+ supportedTransformerFormat?: string[];
4
+ tags?: string[] | undefined;
5
+ transformer?: boolean | "audio" | "video" | "image";
6
+ }) => Partial<OpenAPIV3.Document>;
7
+ type TransformType = boolean | "audio" | "video" | "image";
8
+ declare const sharedGet: (operationId: string, tags: string[] | undefined, transform?: TransformType, transformerFormat?: string[]) => OpenAPIV3.OperationObject;
9
+ declare const sharedErrorSchemaObject: Record<string, OpenAPIV3.NonArraySchemaObject>;
10
+ declare const sharedFileMetaSchemaObject: Record<string, OpenAPIV3.NonArraySchemaObject>;
11
+ declare const sharedFileMetaExampleObject: Record<string, OpenAPIV3.ExampleObject>;
12
+ declare const sharedGetList: (operationId: string, tags: string[] | undefined) => OpenAPIV3.OperationObject;
13
+ declare const swaggerSpec$2: (path?: string, tags?: string[] | undefined) => Partial<OpenAPIV3.Document>;
14
+ declare const swaggerSpec$1: (path: string, options: {
15
+ supportedTransformerFormat?: string[];
16
+ tags?: string[] | undefined;
17
+ transformer?: boolean | "audio" | "video" | "image";
18
+ }) => Partial<OpenAPIV3.Document>;
19
+ declare const swaggerSpec: (origin: string, path: string, options: {
20
+ supportedTransformerFormat?: string[];
21
+ tags?: string[] | undefined;
22
+ transformer?: boolean | "audio" | "video" | "image";
23
+ }) => Partial<OpenAPIV3.Document>;
24
+ export { swaggerSpec$3 as restOpenApiSpec, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedFileMetaSchemaObject, sharedGet, sharedGetList, swaggerSpec$2 as transformOpenApiSpec, swaggerSpec$1 as tusOpenApiSpec, swaggerSpec as xhrOpenApiSpec };
@@ -1,5 +1 @@
1
- export { default as restOpenApiSpec } from '../packem_shared/restOpenApiSpec-CwcHHY2C.js';
2
- export { sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedFileMetaSchemaObject, sharedGet, sharedGetList } from '../packem_shared/sharedGet-Cpo7QUyu.js';
3
- export { default as transformOpenApiSpec } from '../packem_shared/transformOpenApiSpec-DWM5WtnN.js';
4
- export { default as tusOpenApiSpec } from '../packem_shared/tusOpenApiSpec-6ohiToBy.js';
5
- export { default as xhrOpenApiSpec } from '../packem_shared/xhrOpenApiSpec-DS17brnx.js';
1
+ import{default as t}from"../packem_shared/restOpenApiSpec-PaIVbESh.js";import{sharedErrorSchemaObject as p,sharedFileMetaExampleObject as s,sharedFileMetaSchemaObject as o,sharedGet as f,sharedGetList as c}from"../packem_shared/sharedGet-Ce7WGAsc.js";import{default as m}from"../packem_shared/transformOpenApiSpec-C0vEbDTO.js";import{default as i}from"../packem_shared/tusOpenApiSpec-DF0-hlWV.js";import{default as x}from"../packem_shared/xhrOpenApiSpec-nyoboz83.js";export{t as restOpenApiSpec,p as sharedErrorSchemaObject,s as sharedFileMetaExampleObject,o as sharedFileMetaSchemaObject,f as sharedGet,c as sharedGetList,m as transformOpenApiSpec,i as tusOpenApiSpec,x as xhrOpenApiSpec};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var e=(t,a)=>r(t,"name",{value:a,configurable:!0});import s from"./File-BhfUgJjs.js";var i=Object.defineProperty,l=e((t,a)=>i(t,"name",{value:a,configurable:!0}),"t");class d extends s{static{e(this,"a")}static{l(this,"AwsLightFile")}Parts;UploadId;uri;partsUrls;partSize}export{d as default};
@@ -0,0 +1 @@
1
+ import"./MetaStorage-Y4m1dWgd.js";import"./Metadata-B6Ir0KO7.js";import{l as i}from"./aws-light-meta-storage-CstQBYXG.js";import"./is-expired-1JuZjDtb.js";export{i as default};
@@ -0,0 +1 @@
1
+ var h=Object.defineProperty;var p=(o,e)=>h(o,"name",{value:e,configurable:!0});import{Readable as m}from"node:stream";import{S as f}from"./s3-base-storage-Dbexfg7p.js";import{C as S,l as y}from"./aws-light-meta-storage-CstQBYXG.js";import C from"./AwsLightFile-BSqjc_rD.js";var w=Object.defineProperty,A=p((o,e)=>w(o,"name",{value:e,configurable:!0}),"u");class v extends f{static name="aws-light";s3Api;constructor(e){const{bucket:t=process.env.S3_BUCKET||process.env.AWS_S3_BUCKET,region:r}=e;if(!t)throw new Error("S3 bucket is not defined");if(!r)throw new Error("S3 region is not defined");if(!e.accessKeyId)throw new Error("accessKeyId is required");if(!e.secretAccessKey)throw new Error("secretAccessKey is required");super({bucket:t,clientDirectUpload:e.clientDirectUpload,expiration:e.expiration?.maxAge?{maxAge:String(e.expiration.maxAge)}:void 0,filename:e.filename,logger:e.logger,metaStorage:e.metaStorage,metaStorageConfig:e.metaStorageConfig?{...e.metaStorageConfig,...e}:{...e},partSize:e.partSize,retryConfig:{...e.retryConfig,shouldRetry:A(a=>{const s=a;return s.statusCode&&[408,429,500,502,503,504].includes(s.statusCode)?!0:s.retryable??!1},"shouldRetry")}}),this.s3Api=new S({accessKeyId:e.accessKeyId,bucket:t,endpoint:e.endpoint,region:r,secretAccessKey:e.secretAccessKey,service:e.service,sessionToken:e.sessionToken});const{metaStorage:i,metaStorageConfig:c}=e;if(!i){const a={...e,...c,logger:this.logger};this.meta=new y(a)}}normalizeError(e){const t=e;return t.statusCode||t.code?{code:t.code||t.name,message:t.message,name:t.name,statusCode:t.statusCode||500}:super.normalizeError(e)}async update({id:e},t){if(this.config.clientDirectUpload){const r=await this.getMeta(e);return this.buildPresigned({...r,...t})}return super.update({id:e},t)}async getStream({id:e},t){return this.instrumentOperation("getStream",async()=>{const r=this.getS3Api(),{Body:i,ContentLength:c,ContentType:a,ETag:s,Expires:d,LastModified:u}=await this.runOperation(t,n=>r.getObject({Bucket:this.bucket,Key:e},{signal:n}));await this.checkIfExpired({expiredAt:d});const g=i instanceof ReadableStream?m.fromWeb(i):i,l=new m({read(){g.on("data",n=>{this.push(n)}),g.on("end",()=>{this.push(null)}),g.on("error",n=>{this.destroy(n)})}});return{headers:{"Content-Length":c?.toString()??"0","Content-Type":a,...s&&{ETag:s},...d&&{"X-Upload-Expires":d.toString()},...u&&{"Last-Modified":u.toString()}},size:Number(c),stream:l}})}get raw(){return this.s3Api.aws}getS3Api(){return this.s3Api}getFileClass(){return C}getAcl(){}async accessCheck(e=30){await this.s3Api.checkBucketAccess({Bucket:this.bucket})}}export{v as default};
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var t=(e,r)=>a(e,"name",{value:r,configurable:!0});import i from"./File-BhfUgJjs.js";var s=Object.defineProperty,u=t((e,r)=>s(e,"name",{value:r,configurable:!0}),"i");class c extends i{static{t(this,"s")}static{u(this,"AzureFile")}requestId;uri}export{c as default};
@@ -0,0 +1 @@
1
+ import"./ERRORS-CyOuSMLY.js";import"./MetaStorage-Y4m1dWgd.js";import"./Metadata-B6Ir0KO7.js";import{b as i}from"./azure-meta-storage-C4SrMtT2.js";export{i as default};
@@ -0,0 +1 @@
1
+ var f=Object.defineProperty;var y=(d,t)=>f(d,"name",{value:t,configurable:!0});import{L as b}from"./path-D7rMc9nq-B718mbm6.js";import{d as C}from"./detect-file-type-5JhzC9RU.js";import{throwErrorCode as c,ERRORS as u}from"./ERRORS-CyOuSMLY.js";import{B as w,t as O}from"./storage-Dh0tJh7j.js";import{v as T}from"./local-meta-storage-Bi0mK6gD.js";import{c as k,b as E,a as p,d as m}from"./azure-meta-storage-C4SrMtT2.js";import S from"./AzureFile-Dgj2Tef4.js";import{r as F,o as N}from"./part-match-B5fLLmFw.js";import{o as v}from"./has-content-Bx2p8Okx.js";var B=Object.defineProperty,R=y((d,t)=>B(d,"name",{value:t,configurable:!0}),"f");class q extends w{static name="azure";checksumTypes=["md5"];get raw(){return this.client}meta;client;containerClient;root;resolvedRetryConfig;signer;sasToken;anonymous;constructor(t){if(super(t),!t.containerName)throw new Error("Missing required parameter: Azure container name.");const{anonymous:r,client:e,sasToken:n,signer:s}=k(t);this.client=e,this.signer=s,this.sasToken=n,this.anonymous=r,this.containerClient=this.client.getContainerClient(t.containerName),this.root=t.root?b(t.root).replace(/^\//,""):"";const o={backoffMultiplier:2,initialDelay:1e3,maxDelay:3e4,maxRetries:3,retryableStatusCodes:[408,429,500,502,503,504],shouldRetry:R(a=>{const i=a;if(i.statusCode&&[408,429,500,502,503,504].includes(i.statusCode))return!0;if(a instanceof Error){const l=i.code;if(l==="ECONNRESET"||l==="ETIMEDOUT"||l==="ENOTFOUND"||l==="ECONNREFUSED")return!0}return!1},"shouldRetry"),...t.retryConfig};if(this.resolvedRetryConfig=o,t.metaStorage)this.meta=t.metaStorage;else{let a={...t,...t.metaStorageConfig,logger:this.logger};if("directory"in a)this.logger?.debug("Using local meta storage"),this.meta=new T(a);else{const i=t.metaStorageConfig;i&&["accountKey","accountName","connectionString","credential","endpoint","sasToken"].some(l=>l in i)||(a={...a,client:this.client}),this.meta=new E(a)}}this.isReady=!1,this.accessCheck().then(()=>{this.isReady=!0}).catch(a=>{this.logger?.error("Storage access check failed: %O",a)})}getRetryConfig(){return this.resolvedRetryConfig}async create(t,r){return this.instrumentOperation("create",async()=>{const e={...t};if(t.ttl){const i=typeof t.ttl=="string"?O(t.ttl):t.ttl;i!==void 0&&(e.expiredAt=Date.now()+i)}const n=new S(e);n.name=this.namingFunction(n),await this.validate(n);try{const i=await this.getMeta(n.id);if(i.bytesWritten>=0)return i}catch{}const s=this.containerClient.getBlockBlobClient(this.getFullPath(n.name)),o={};for(const[i,l]of Object.entries(n.metadata||{}))o[i]=JSON.stringify(l);const a=await this.runOperation(r,i=>s.uploadData(Buffer.from(""),{abortSignal:i,blobHTTPHeaders:{blobContentType:n.contentType},metadata:{name:n.name,originalName:n.originalName,...o}}));return a.requestId===void 0?c(u.FILE_ERROR,"azure create upload error"):(n.requestId=a.requestId,n.uri=a._response.headers.get("location"),n.bytesWritten=0,await this.saveMeta(n),n.status="created",await this.onCreate(n),n)})}async delete({id:t},r){return this.instrumentOperation("delete",async()=>{const e=await this.getMeta(t);e.status="deleted",await this.runOperation(r,s=>this.containerClient.getBlockBlobClient(this.getFullPath(e.name)).deleteIfExists({abortSignal:s})),await this.deleteMeta(e.id);const n={...e};return await this.onDelete(n),n})}async move(t,r,e){return this.instrumentOperation("move",async()=>{const n=await this.copy(t,r,e),s=this.getFullPath(t);return await this.runOperation(e,o=>this.containerClient.getBlockBlobClient(s).deleteIfExists({abortSignal:o})),n})}async write(t,r){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(!F(t,e))return c(u.FILE_CONFLICT);const n=await this.lock(t.id);try{if(v(t)){if((e.bytesWritten===0||Number.isNaN(e.bytesWritten))&&(!e.contentType||e.contentType==="application/octet-stream"))try{const{fileType:i,stream:l}=await C(t.body);i?.mime&&(e.contentType=i.mime),t.body=l}catch{}const s=this.containerClient.getBlockBlobClient(this.getFullPath(e.name)),o=new AbortController;t.body.on("error",()=>{o.abort()});const a=await this.runOperation(r,i=>{const l=i?AbortSignal.any([o.signal,i]):o.signal;return s.uploadStream(t.body,void 0,void 0,{abortSignal:l,blobHTTPHeaders:{blobContentType:e.contentType??"application/octet-stream"},metadata:e.metadata})},{replayable:!1});if(a.requestId===void 0)return c(u.FILE_ERROR,"azure write upload error");e.requestId=a.requestId,e.bytesWritten+=t.contentLength||0,e.status=N(e),e.status==="completed"&&(e.uri=a._response.headers.get("location"),await this.deleteMeta(e.id))}}finally{await this.unlock(t.id,n)}return e})}async get({id:t},r){return this.instrumentOperation("get",async()=>{const e=this.containerClient.getBlockBlobClient(this.getFullPath(t));if(!await this.runOperation(r,h=>e.exists({abortSignal:h})))try{return await this.getMeta(t),c(u.GONE)}catch{return c(u.FILE_NOT_FOUND)}const n=await this.runOperation(r,h=>e.getProperties({abortSignal:h})),{contentLength:s,contentType:o,etag:a,expiresOn:i,lastModified:l,metadata:g}=n;return{content:await this.runOperation(r,h=>e.downloadToBuffer(0,void 0,{abortSignal:h})),contentType:o,ETag:a,expiredAt:i,id:t,metadata:g||{},modifiedAt:l,name:g?.name||t,originalName:g?.originalName||"",size:s}})}async exists({id:t},r){return this.instrumentOperation("exists",async()=>{try{await this.getMeta(t);const e=this.containerClient.getBlockBlobClient(this.getFullPath(t));return await this.runOperation(r,n=>e.exists({abortSignal:n}))}catch{return!1}})}async copy(t,r,e){return this.instrumentOperation("copy",async()=>{const n=this.containerClient.getBlockBlobClient(this.getFullPath(t));if(!await this.runOperation(e,i=>n.exists({abortSignal:i})))try{return await this.getMeta(t),c(u.GONE)}catch{return c(u.FILE_NOT_FOUND)}const s=this.containerClient.getBlockBlobClient(this.getFullPath(r));let o=n.url;this.signer?.kind==="userDelegation"?o=await p(this.containerClient.getBlobClient(this.getFullPath(t)),this.signer,{expiresIn:300,permissions:"r"}):this.sasToken&&(o=m(n.url,this.sasToken));const a=await this.runOperation(e,i=>s.beginCopyFromURL(o,{abortSignal:i}));return await this.runOperation(e,()=>a.pollUntilDone()),{...await this.getMeta(t),id:r,name:r}})}async list(t=1e3,r){return this.instrumentOperation("list",async()=>{const e=[];let n=!0,s;for(;n&&e.length<t;)try{const o=Math.min(t-e.length,1e3),a=(await this.runOperation(r,i=>this.containerClient.listBlobsFlat({abortSignal:i,includeMetadata:!0,prefix:this.root}).byPage({continuationToken:s,maxPageSize:o}).next())).value;if(a!==void 0&&"segment"in a){for(const i of a.segment.blobItems)if(!i.deleted&&(e.push({createdAt:i.properties.createdOn,id:i.name,modifiedAt:i.properties.lastModified}),e.length>=t))break}n=a?.continuationToken!==void 0,n&&(s=a.continuationToken)}catch(o){const a=this.normalizeError(o instanceof Error?o:new Error(String(o)));throw await this.onError(a),o}return e},{limit:t})}async getReadUrl(t,r){const e=this.containerClient.getBlobClient(this.getFullPath(t));return this.signer?p(e,this.signer,{expiresIn:r?.expiresIn??3600,permissions:"r",...r?.responseContentDisposition&&{contentDisposition:r.responseContentDisposition},...r?.responseContentType&&{contentType:r.responseContentType}}):this.sasToken?m(e.url,this.sasToken):this.anonymous?e.url:c(u.METHOD_NOT_ALLOWED,"azure: cannot produce a read URL without a shared key, Microsoft Entra credential, or SAS token. Construct the adapter with accountKey + accountName, a connectionString containing an account key, a credential + accountName, or a sasToken.")}async getUploadUrl(t,r){const e=this.containerClient.getBlobClient(this.getFullPath(t));return this.signer?p(e,this.signer,{expiresIn:r?.expiresIn??3600,permissions:"cw"}):this.sasToken?m(e.url,this.sasToken):c(u.METHOD_NOT_ALLOWED,"azure: cannot produce an upload URL without a shared key, Microsoft Entra credential, or SAS token. Anonymous (public-container) access is read-only.")}getFullPath(t){return this.assetFolder!==void 0?`${this.assetFolder}/${t}`:t}async accessCheck(){await this.runOperation(void 0,t=>this.containerClient.getProperties({abortSignal:t}))}}export{q as default};
@@ -0,0 +1 @@
1
+ var n=Object.defineProperty;var s=(a,t)=>n(a,"name",{value:t,configurable:!0});import{Readable as c}from"node:stream";import i from"mime";import{N as h}from"./cache-qV_5Umeq.js";var f=Object.defineProperty,l=s((a,t)=>f(a,"name",{value:t,configurable:!0}),"n");class y{static{s(this,"l")}constructor(t,r,e){this.storage=t,this.config=r,this.logger=e,this.cache=r.cache??new h}storage;static{l(this,"BaseTransformer")}config;logger;cache;async transformStream(t,r){const e=await this.transform(t,r);if(e&&"buffer"in e){const{buffer:o}=e;return{headers:{"Content-Length":o.length.toString(),"Content-Type":this.getContentTypeFromResult(e)},size:o.length,stream:c.from(o)}}throw new Error("Streaming transformation not supported for this transformer")}clearCache(t){if(!t){this.cache?.clear?.();return}if(!this.cache)return;if(typeof this.cache.keys!="function"){this.logger?.warn?.("clearCache(fileId) cannot scope its invalidation because the cache does not implement keys(); falling back to full clear()"),this.cache.clear?.();return}const r=`${t}:`;for(const e of this.cache.keys())typeof e=="string"&&(e===t||e.startsWith(r))&&this.cache.delete(e)}getCacheStats(){return{maxSize:-1,size:this.cache?.size??0}}getContentTypeFromResult(t){if(t?.format){const r=i.getType(t.format);if(r)return r}return"application/octet-stream"}}export{y as default};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var a=(e,r)=>t(e,"name",{value:r,configurable:!0});import l from"./File-BhfUgJjs.js";var i=Object.defineProperty,o=a((e,r)=>i(e,"name",{value:r,configurable:!0}),"l");class c extends l{static{a(this,"p")}static{o(this,"BoxFile")}boxFileId;eTag;publicUrl}export{c as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(t,e)=>r(t,"name",{value:e,configurable:!0});import{v as o}from"./local-meta-storage-Bi0mK6gD.js";var s=Object.defineProperty,c=a((t,e)=>s(t,"name",{value:e,configurable:!0}),"e");class l extends o{static{a(this,"l")}static{c(this,"BoxMetaStorage")}constructor(e){super(e)}}export{l as default};
@@ -0,0 +1 @@
1
+ var x=Object.defineProperty;var C=(a,e)=>x(a,"name",{value:e,configurable:!0});import{Readable as b}from"node:stream";import{BoxDeveloperTokenAuth as F,BoxClient as p,OAuthConfig as T,BoxOAuth as S,CcgConfig as U,BoxCcgAuth as L,BoxJwtAuth as R,JwtConfig as v}from"box-typescript-sdk-gen";import{throwErrorCode as B,ERRORS as k}from"./ERRORS-CyOuSMLY.js";import{B as A}from"./storage-Dh0tJh7j.js";import w from"./BoxFile-Be0S4N1L.js";import D from"./BoxMetaStorage-DLdXbZaV.js";import{o as E,r as H}from"./part-match-B5fLLmFw.js";import{u as _}from"./update-size-DANV7aa2.js";import{o as N}from"./has-content-Bx2p8Okx.js";var M=Object.defineProperty,c=C((a,e)=>M(a,"name",{value:e,configurable:!0}),"u");const j="0",$=50*1024*1024,m={ensureReady:c(()=>Promise.resolve(),"ensureReady")},z=c(a=>{let e=0,i=a.length;for(;e<i&&a[e]==="/";)e+=1;for(;i>e&&a[i-1]==="/";)i-=1;return e===0&&i===a.length?a:a.slice(e,i)},"trimSlashes"),y=c(a=>{const e=z(a);if(!e)throw new Error("Box: key must not be empty");const i=e.split("/").filter(r=>r.length>0),t=i.pop()??"";if(!t)throw new Error(`Box: key "${a}" has no file name segment`);return{leaf:t,parents:i}},"splitKey"),P=c(async a=>{const e=[];for await(const i of a)e.push(Buffer.from(i));return Buffer.concat(e)},"collectStream"),I=c(a=>b.from(a),"bufferToReadable"),J=c(a=>"configJsonString"in a?v.fromConfigJsonString(a.configJsonString):v.fromConfigFile(a.configFilePath),"buildJwtConfig"),K=c(a=>[a.developerToken,a.oauth,a.ccg,a.jwt].filter(e=>e!==void 0).length,"countAuthMethods"),q=c(a=>{if(a.client)return{authHandle:m,client:a.client};if(K(a)>1)throw new Error("Box storage: pass exactly one of `developerToken`, `oauth`, `ccg`, or `jwt`.");if(a.developerToken!==void 0){const i=new F({token:a.developerToken});return{authHandle:m,client:new p({auth:i})}}if(a.oauth){const{clientId:i,clientSecret:t,refreshToken:r}=a.oauth,s=new T({clientId:i,clientSecret:t}),n=new S({config:s});let l;const o=c(async()=>{await n.tokenStorage.store({accessToken:"",refreshToken:r})},"seed");return{authHandle:{ensureReady:c(()=>(l||(l=o()),l),"ensureReady")},client:new p({auth:n})}}if(a.ccg){const{clientId:i,clientSecret:t,enterpriseId:r,userId:s}=a.ccg;if(!r&&!s)throw new Error("Box storage: `ccg` auth requires either `enterpriseId` or `userId`.");const n=new U({clientId:i,clientSecret:t,...r!==void 0&&{enterpriseId:r},...s!==void 0&&{userId:s}}),l=new L({config:n});return{authHandle:m,client:new p({auth:l})}}if(a.jwt){const i=J(a.jwt),t=new R({config:i});return{authHandle:m,client:new p({auth:t})}}const e=process.env.BOX_DEVELOPER_TOKEN;if(e){const i=new F({token:e});return{authHandle:m,client:new p({auth:i})}}throw new Error("Box storage: missing auth. Pass `client`, `developerToken`, `oauth`, `ccg`, or `jwt`. Env fallback: BOX_DEVELOPER_TOKEN.")},"resolveAuth"),W=c(a=>{if(a&&typeof a=="object"){const e=a,i=e.responseInfo?.code??e.responseInfo?.body?.code;return e.responseInfo?.statusCode===404||i==="not_found"||i==="file_not_found"||i==="folder_not_found"||i==="trashed"}return!1},"isNotFoundError"),O=c(a=>{if(a&&typeof a=="object"){const e=a,i=e.responseInfo?.code??e.responseInfo?.body?.code;return e.responseInfo?.statusCode===409||i==="item_name_in_use"||i==="conflict"}return!1},"isConflictError");class ae extends A{static name="box";checksumTypes=[];meta;authHandle;client;fileIdCache;folderIdCache;publicByDefault;rootFolderId;constructor(e){super(e),this.rootFolderId=e.rootFolderId??j,this.publicByDefault=e.publicByDefault??!1;const i=q(e);this.client=i.client,this.authHandle=i.authHandle,this.folderIdCache=new Map,this.fileIdCache=new Map,this.meta=e.metaStorage??new D(e.metaStorageConfig),this.isReady=!0}get raw(){return this.client}async create(e,i){return this.instrumentOperation("create",async()=>{const t=new w(e);t.name=this.namingFunction(t),await this.validate(t);try{const r=await this.getMeta(t.id);if(r.bytesWritten>=0)return r}catch{}return t.bytesWritten=0,t.status=E(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(e,i){return this.instrumentOperation("write",async()=>{let t;if("contentType"in e&&"metadata"in e&&!("body"in e)&&!("start"in e)?t=e:(t=await this.getMeta(e.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(e.size!==void 0&&_(t,e.size),!H(e,t))throw new Error("File part does not match");const r=await this.lock(e.id);try{if(N(e)){if(this.isUnsupportedChecksum(e.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");await this.authHandle.ensureReady();const s=await P(e.body),n=t.name||t.id,{leaf:l,parents:o}=y(n),d=await this.resolveFolderId(o,{create:!0},i),f=await this.resolveExistingFileForUpload(n,d,l,i),h=await this.performUpload(f,d,l,s,i);h.id&&(this.fileIdCache.set(n,h.id),this.publicByDefault&&await this.ensureSharedLink(h.id,i)),t.bytesWritten=s.length,t.size=s.length,t.boxFileId=h.id,t.eTag=h.etag??void 0,t.ETag=h.etag??void 0}return t.status=E(t),t.status==="completed"&&await this.internalOnComplete(t),await this.saveMeta(t),t}finally{await this.unlock(e.id,r)}})}async delete({id:e},i){return this.instrumentOperation("delete",async()=>{let t;try{t=await this.getMeta(e)}catch{}const r=t?.name??e;await this.authHandle.ensureReady();try{const s=t?.boxFileId??await this.resolveFileId(r,i);await this.runOperation(i,()=>this.client.files.deleteFileById(s)),this.fileIdCache.delete(r)}catch(s){if(!W(s))throw s}return t?(t.status="deleted",await this.deleteMeta(t.id),await this.onDelete(t),t):Object.assign(new w({contentType:"application/octet-stream",metadata:{},originalName:e}),{id:e,name:e,status:"deleted"})})}async get({id:e},i){return this.instrumentOperation("get",async()=>{let t,r=e;try{t=await this.checkIfExpired(await this.getMeta(e)),r=t.name??e}catch{}await this.authHandle.ensureReady();const s=t?.boxFileId??await this.resolveFileId(r,i),n=await this.runOperation(i,()=>this.client.files.getFileById(s)),l=await this.runOperation(i,()=>this.client.downloads.getDownloadFileUrl(s)),o=await this.runOperation(i,()=>fetch(l));if(!o.ok)throw new Error(`Box: download fetch failed (${o.status})`);const d=await this.runOperation(i,()=>o.arrayBuffer()),f=Buffer.from(d);return{content:f,contentType:t?.contentType??"application/octet-stream",ETag:t?.ETag??n.etag??void 0,expiredAt:t?.expiredAt,id:e,metadata:t?.metadata??{},modifiedAt:t?.modifiedAt??n.modifiedAt??n.contentModifiedAt??void 0,name:t?.name??n.name??r,originalName:t?.originalName??n.name??r,size:t?.size??n.size??f.length}})}async copy(e,i,t){return this.instrumentOperation("copy",async()=>{await this.authHandle.ensureReady();const r=await this.resolveFileId(e,t),{leaf:s,parents:n}=y(i),l=await this.resolveFolderId(n,{create:!0},t),o=await this.runOperation(t,()=>this.client.files.copyFile(r,{name:s,parent:{id:l}}));o.id&&this.fileIdCache.set(i,o.id);const d=new w({contentType:"application/octet-stream",metadata:{},originalName:i});return d.id=i,d.name=i,d.boxFileId=o.id,d.eTag=o.etag??void 0,d.ETag=o.etag??void 0,d})}async move(e,i,t){return this.instrumentOperation("move",async()=>{await this.authHandle.ensureReady();const r=await this.resolveFileId(e,t),{leaf:s,parents:n}=y(i),l=await this.resolveFolderId(n,{create:!0},t),o=await this.runOperation(t,()=>this.client.files.updateFileById(r,{requestBody:{name:s,parent:{id:l}}}));this.fileIdCache.delete(e),o.id&&this.fileIdCache.set(i,o.id);const d=new w({contentType:"application/octet-stream",metadata:{},originalName:i});d.id=i,d.name=i,d.boxFileId=o.id,d.eTag=o.etag??void 0,d.ETag=o.etag??void 0;try{await this.deleteMeta(e)}catch{}return d})}async list(e=1e3,i){return this.instrumentOperation("list",async()=>{await this.authHandle.ensureReady();const t=[];let r=0;const s=Math.min(e,1e3);for(;t.length<e;){const n=(await this.runOperation(i,()=>this.client.folders.getFolderItems(this.rootFolderId,{queryParams:{fields:["id","name","size","modified_at","etag","type"],limit:s,offset:r}}))).entries??[];for(const l of n){const o=l;if(o.type!=="file"||!o.id||!o.name)continue;this.fileIdCache.set(o.name,o.id);const d=new w({contentType:"application/octet-stream",metadata:{},originalName:o.name});if(d.id=o.name,d.name=o.name,d.boxFileId=o.id,d.eTag=o.etag??void 0,d.ETag=o.etag??void 0,d.size=o.size??0,d.modifiedAt=o.modifiedAt??o.contentModifiedAt??void 0,t.push(d),t.length>=e)break}if(n.length<s)break;r+=n.length}return t},{limit:e})}async getReadUrl(e,i){if(i?.responseContentDisposition||i?.responseContentType)return B(k.METHOD_NOT_ALLOWED,"Box: `responseContentDisposition` / `responseContentType` are not supported — Box download URLs and shared-link URLs have no overrides.");await this.authHandle.ensureReady();const t=await this.resolveFileId(e);return this.publicByDefault?this.ensureSharedLink(t):this.client.downloads.getDownloadFileUrl(t)}async getUploadUrl(e,i){return B(k.METHOD_NOT_ALLOWED,"Box: `getUploadUrl` is not supported. Box uploads require a multipart POST with an `attributes` JSON part and a file bytes part; this doesn't fit the PUT-style upload-url contract. Use `write()` server-side, or the Box UI Elements / Box Content Uploader for browser flows.")}async findChildByName(e,i,t){let r=0;const s=1e3;for(;;){const n=(await this.runOperation(t,()=>this.client.folders.getFolderItems(e,{queryParams:{fields:["id","name","type"],limit:s,offset:r}}))).entries??[];for(const l of n){const o=l;if(o.name===i&&o.id&&o.type)return{id:o.id,type:o.type}}if(n.length<s)return;r+=n.length}}folderCacheKey(e){return e.join("/")}async resolveFolderId(e,i,t){if(e.length===0)return this.rootFolderId;const r=this.folderCacheKey(e),s=this.folderIdCache.get(r);if(s)return s;let n=this.rootFolderId;const l=[];for(const o of e){l.push(o);const d=this.folderCacheKey(l),f=this.folderIdCache.get(d);if(f){n=f;continue}const h=await this.findChildByName(n,o,t);if(h&&h.type==="folder"){n=h.id,this.folderIdCache.set(d,n);continue}if(h&&h.type!=="folder")throw new Error(`Box: path segment "${o}" exists but is not a folder`);if(!i.create)throw new Error(`Box: folder "${l.join("/")}" not found`);try{const u=await this.runOperation(t,()=>this.client.folders.createFolder({name:o,parent:{id:n}}));if(!u.id)throw new Error(`Box: createFolder did not return an id for "${o}"`);n=u.id,this.folderIdCache.set(d,n)}catch(u){if(O(u)){const g=await this.findChildByName(n,o,t);if(g&&g.type==="folder"){n=g.id,this.folderIdCache.set(d,n);continue}}throw u}}return this.folderIdCache.set(r,n),n}async resolveFileId(e,i){const t=this.fileIdCache.get(e);if(t)return t;const{leaf:r,parents:s}=y(e),n=await this.resolveFolderId(s,{create:!1},i),l=await this.findChildByName(n,r,i);if(!l||l.type!=="file")throw new Error(`Box: file "${e}" not found`);return this.fileIdCache.set(e,l.id),l.id}async resolveExistingFileForUpload(e,i,t,r){const s=this.fileIdCache.get(e);if(s)return s;const n=await this.findChildByName(i,t,r);if(n){if(n.type==="file")return this.fileIdCache.set(e,n.id),n.id;throw new Error(`Box: "${e}" already exists as a non-file (${n.type})`)}}async performUpload(e,i,t,r,s){if(r.byteLength>$)return await this.runOperation(s,()=>this.client.chunkedUploads.uploadBigFile(I(r),t,r.byteLength,i));if(e){const l=((await this.runOperation(s,()=>this.client.uploads.uploadFileVersion(e,{attributes:{name:t},file:I(r)}))).entries??[])[0];if(!l)throw new Error("Box: uploadFileVersion returned no file");return l}const n=((await this.runOperation(s,()=>this.client.uploads.uploadFile({attributes:{name:t,parent:{id:i}},file:I(r)}))).entries??[])[0];if(!n)throw new Error("Box: uploadFile returned no file");return n}async ensureSharedLink(e,i){try{const t=(await this.runOperation(i,()=>this.client.sharedLinksFiles.addShareLinkToFile(e,{sharedLink:{access:"open"}},{fields:"shared_link"}))).sharedLink;return(t?.downloadUrl??t?.url)||this.fetchSharedLinkUrl(e,i)}catch(t){if(O(t))return this.fetchSharedLinkUrl(e,i);throw t}}async fetchSharedLinkUrl(e,i){const t=(await this.runOperation(i,()=>this.client.sharedLinksFiles.getSharedLinkForFile(e,{fields:"shared_link"}))).sharedLink,r=t?.downloadUrl??t?.url;if(!r)throw new Error("Box: file has no shared link. Call write() with publicByDefault: true, or addShareLinkToFile via storage.raw.");return r}internalOnComplete=c(e=>this.deleteMeta(e.id),"internalOnComplete")}export{ae as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var t=(e,a)=>r(e,"name",{value:a,configurable:!0});import n from"./File-BhfUgJjs.js";var u=Object.defineProperty,i=t((e,a)=>u(e,"name",{value:a,configurable:!0}),"i");class l extends n{static{t(this,"u")}static{i(this,"BunS3File")}bunS3ETag;bunS3Key}export{l as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(t,e)=>r(t,"name",{value:e,configurable:!0});import{v as s}from"./local-meta-storage-Bi0mK6gD.js";var o=Object.defineProperty,u=a((t,e)=>o(t,"name",{value:e,configurable:!0}),"e");class i extends s{static{a(this,"l")}static{u(this,"BunS3MetaStorage")}constructor(e){super(e)}}export{i as default};
@@ -0,0 +1 @@
1
+ var T=Object.defineProperty;var g=(r,e)=>T(r,"name",{value:e,configurable:!0});import{Readable as b}from"node:stream";import{wrapStorageError as h}from"./ERRORS-CyOuSMLY.js";import{B as E}from"./storage-Dh0tJh7j.js";import l from"./BunS3File-D-SRiyrm.js";import O from"./BunS3MetaStorage-Bv_CTTMz.js";import{o as f,r as I}from"./part-match-B5fLLmFw.js";import{u as v}from"./update-size-DANV7aa2.js";import{o as C}from"./has-content-Bx2p8Okx.js";var k=Object.defineProperty,p=g((r,e)=>k(r,"name",{value:e,configurable:!0}),"c");const c=p(r=>r.replace(/^\/+/u,""),"toKey"),z=p(async r=>{const e=[];for await(const i of r)e.push(Buffer.from(i));return Buffer.concat(e)},"collectStream"),B=p(r=>{const e=r?.code;return typeof e=="string"&&/nosuchkey|notfound/iu.test(e)},"isNotFoundError"),u=p((r,e)=>{const i=r?.code,t=typeof i=="string"?i:"";return/nosuchkey|notfound/iu.test(t)?h(r,{adapter:"Bun S3",operation:e,status:404}):/accessdenied|forbidden|ERR_S3_INVALID_SIGNATURE|ERR_S3_MISSING_CREDENTIALS/iu.test(t)?h(r,{adapter:"Bun S3",operation:e,status:403}):h(r,{adapter:"Bun S3",operation:e})},"wrapBunS3Error"),M=p(r=>{if(r.client)return r.client;const e=globalThis.Bun;if(!e?.S3Client)throw new Error("BunS3Storage requires the Bun runtime (Bun.S3Client). Run this under Bun, or pass a pre-built `client` instance. For Node/edge runtimes use the `aws` or `aws-light` provider instead.");return new e.S3Client({accessKeyId:r.accessKeyId,acl:r.acl,bucket:r.bucket,endpoint:r.endpoint,region:r.region,secretAccessKey:r.secretAccessKey,sessionToken:r.sessionToken,virtualHostedStyle:r.virtualHostedStyle})},"resolveClient");class L extends E{static name="bun-s3";meta;client;constructor(e){super(e),this.client=M(e),this.meta=e.metaStorage??new O(e.metaStorageConfig),this.isReady=!0}get raw(){return this.client}async create(e,i){return this.instrumentOperation("create",async()=>{const t=new l(e);t.name=this.namingFunction(t),t.bunS3Key=c(t.name),await this.validate(t);try{const n=await this.getMeta(t.id);if(n.bytesWritten>=0)return n}catch{}return t.bytesWritten=0,t.status=f(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(e,i){return this.instrumentOperation("write",async()=>{let t;if("contentType"in e&&"metadata"in e&&!("body"in e)&&!("start"in e)?t=e:(t=await this.getMeta(e.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(e.size!==void 0&&v(t,e.size),!I(e,t))throw new Error("File part does not match");const n=await this.lock(e.id);try{if(C(e)){if(this.isUnsupportedChecksum(e.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const s=await z(e.body),a=c(t.name||t.id);try{await this.runOperation(i,()=>this.client.write(a,s,{type:t.contentType}))}catch(o){throw u(o,"upload")}t.bytesWritten=s.length,t.size=s.length,t.bunS3Key=a}return t.status=f(t),t.status==="completed"&&await this.internalOnComplete(t),await this.saveMeta(t),t}finally{await this.unlock(e.id,n)}})}async delete({id:e},i){return this.instrumentOperation("delete",async()=>{let t;try{t=await this.getMeta(e)}catch{}const n=t?.bunS3Key??c(t?.name??e);try{await this.runOperation(i,()=>this.client.delete(n))}catch(a){if(!B(a))throw u(a,"delete")}if(t)return t.status="deleted",await this.deleteMeta(t.id),await this.onDelete(t),t;const s=new l({contentType:"application/octet-stream",metadata:{},originalName:e});return s.id=e,s.name=e,s.bunS3Key=n,s.status="deleted",s})}async get({id:e},i){return this.instrumentOperation("get",async()=>{let t,n;try{t=await this.checkIfExpired(await this.getMeta(e)),n=t.bunS3Key??c(t.name??e)}catch{n=c(e)}const s=this.client.file(n);let a,o;try{t||(o=await this.runOperation(i,()=>s.stat())),a=Buffer.from(await this.runOperation(i,()=>s.arrayBuffer()))}catch(d){throw u(d,"get")}return{content:a,contentType:t?.contentType??o?.type??"application/octet-stream",ETag:t?.ETag??o?.etag??void 0,expiredAt:t?.expiredAt,id:e,metadata:t?.metadata??{},modifiedAt:t?.modifiedAt??o?.lastModified?.toISOString(),name:t?.name??n,originalName:t?.originalName??n,size:t?.size??o?.size??a.length}})}async getStream({id:e},i){return this.instrumentOperation("getStream",async()=>{let t,n;try{t=await this.checkIfExpired(await this.getMeta(e)),n=t.bunS3Key??c(t.name??e)}catch{n=c(e)}const s=this.client.file(n);let a,o;try{a=await this.runOperation(i,()=>s.stat()),o=s.stream()}catch(S){throw u(S,"getStream")}const d=t?.size??a.size,w=t?.contentType??a.type??"application/octet-stream",m=t?.ETag??a.etag,y=t?.modifiedAt??a.lastModified?.toISOString();return{headers:{"Content-Length":String(d??0),"Content-Type":w,...m&&{ETag:m},...y&&{"Last-Modified":String(y)}},size:typeof d=="number"?d:void 0,stream:b.fromWeb(o)}})}async copy(e,i,t){return this.instrumentOperation("copy",async()=>{const n=await this.get({id:e},t),s=c(i);try{await this.runOperation(t,()=>this.client.write(s,n.content,{type:n.contentType}))}catch(o){throw u(o,"copy")}const a=new l({contentType:n.contentType,metadata:{},originalName:i});return a.id=i,a.name=i,a.bunS3Key=s,a.size=typeof n.size=="string"?Number(n.size):n.size??n.content.length,a.ETag=n.ETag,a.bunS3ETag=n.ETag,a})}async move(e,i,t){return this.instrumentOperation("move",async()=>{const n=await this.copy(e,i,t);return await this.delete({id:e},t),n})}async list(e=1e3,i){return this.instrumentOperation("list",async()=>{let t;try{t=await this.runOperation(i,()=>this.client.list({maxKeys:e}))}catch(n){throw u(n,"list")}return(t.contents??[]).filter(n=>!!n.key).slice(0,e).map(n=>{const s=c(n.key),a=new l({contentType:"application/octet-stream",metadata:{},originalName:s});return a.id=s,a.name=s,a.bunS3Key=s,a.size=n.size,a.ETag=n.eTag??void 0,a.bunS3ETag=n.eTag??void 0,a.modifiedAt=n.lastModified?new Date(n.lastModified).toISOString():void 0,a})},{limit:e})}async getReadUrl(e,i){return this.client.file(c(e)).presign({...i?.responseContentDisposition&&{contentDisposition:i.responseContentDisposition},...i?.expiresIn!==void 0&&{expiresIn:i.expiresIn},method:"GET",...i?.responseContentType&&{type:i.responseContentType}})}async getUploadUrl(e,i){return this.client.presign(c(e),{...i?.expiresIn!==void 0&&{expiresIn:i.expiresIn},method:"PUT",...i?.contentType&&{type:i.contentType}})}internalOnComplete=p(e=>this.deleteMeta(e.id),"internalOnComplete")}export{L as default};
@@ -0,0 +1 @@
1
+ var n=Object.defineProperty;var a=(e,t)=>n(e,"name",{value:t,configurable:!0});import r from"./File-BhfUgJjs.js";var u=Object.defineProperty,s=a((e,t)=>u(e,"name",{value:t,configurable:!0}),"e");class b extends r{static{a(this,"l")}static{s(this,"BunnyFile")}bunnyChecksum;bunnyPath}export{b as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(t,e)=>r(t,"name",{value:e,configurable:!0});import{v as s}from"./local-meta-storage-Bi0mK6gD.js";var o=Object.defineProperty,n=a((t,e)=>o(t,"name",{value:e,configurable:!0}),"e");class i extends s{static{a(this,"l")}static{n(this,"BunnyMetaStorage")}constructor(e){super(e)}}export{i as default};
@@ -0,0 +1 @@
1
+ var N=Object.defineProperty;var f=(n,t)=>N(n,"name",{value:t,configurable:!0});import*as u from"@bunny.net/storage-sdk";import{throwErrorCode as y,ERRORS as g,wrapStorageError as m}from"./ERRORS-CyOuSMLY.js";import{B}from"./storage-Dh0tJh7j.js";import d from"./BunnyFile-Dotl-lO9.js";import b from"./BunnyMetaStorage-DNMTSeoN.js";import{o as E,r as A}from"./part-match-B5fLLmFw.js";import{u as _}from"./update-size-DANV7aa2.js";import{o as R}from"./has-content-Bx2p8Okx.js";var U=Object.defineProperty,c=f((n,t)=>U(n,"name",{value:t,configurable:!0}),"u");const O=new Set(Object.values(u.regions.StorageRegion)),h=c(n=>`/${n.replace(/^\/+/u,"")}`,"toBunnyPath"),w=c(n=>n.replace(/^\/+/u,""),"fromBunnyPath"),C=c((n,t)=>{const r=n.replace(/\/+$/u,""),e=t.replace(/^\/+/u,"");return`${r}/${e}`},"joinPublicUrl"),v=c(async n=>{const t=[];for await(const r of n)t.push(Buffer.from(r));return Buffer.concat(t)},"collectStream"),S=c(n=>new ReadableStream({start(t){t.enqueue(new Uint8Array(n)),t.close()}}),"streamFromBuffer"),z=c(n=>{if(n){if(!O.has(n))throw new Error(`Bunny Storage: unsupported region "${n}". Pass one of ${[...O].join(", ")}.`);return n}},"parseRegion"),P=c(n=>{if(n.client)return n.client;const t=n.zone??process.env.BUNNY_STORAGE_ZONE??process.env.STORAGE_ZONE,r=n.accessKey??process.env.BUNNY_STORAGE_ACCESS_KEY??process.env.BUNNY_ACCESS_KEY??process.env.STORAGE_ACCESS_KEY,e=z(n.region??process.env.BUNNY_STORAGE_REGION??process.env.STORAGE_REGION);if(!t||!r||!e)throw new Error("Bunny Storage: missing credentials. Pass `zone` + `accessKey` + `region`, or set BUNNY_STORAGE_ZONE / BUNNY_STORAGE_ACCESS_KEY / BUNNY_STORAGE_REGION (SDK aliases: STORAGE_ZONE / STORAGE_ACCESS_KEY / STORAGE_REGION).");return u.zone.connect_with_accesskey(e,t,r)},"resolveClient"),k=c(async n=>Buffer.from(await new Response(n).arrayBuffer()),"collectFromWebStream"),p=c((n,t)=>{const r=n?.message,e=typeof r=="string"?r:"";return/^file not found/iu.test(e)?m(n,{adapter:"Bunny Storage",operation:t,status:404}):/^unauthorized access/iu.test(e)?m(n,{adapter:"Bunny Storage",operation:t,status:401}):/^unable to upload file/iu.test(e)?m(n,{adapter:"Bunny Storage",operation:t,status:400}):m(n,{adapter:"Bunny Storage",operation:t})},"wrapBunnyError");class x extends B{static name="bunny";checksumTypes=["SHA256"];meta;client;publicBaseUrl;zoneName;constructor(t){super(t),this.client=P(t),this.zoneName=u.zone.name(this.client),this.publicBaseUrl=t.publicBaseUrl,this.meta=t.metaStorage??new b(t.metaStorageConfig),this.isReady=!0}get raw(){return this.client}get zone(){return this.zoneName}async create(t,r){return this.instrumentOperation("create",async()=>{const e=new d(t);e.name=this.namingFunction(e),e.bunnyPath=h(e.name),await this.validate(e);try{const a=await this.getMeta(e.id);if(a.bytesWritten>=0)return a}catch{}return e.bytesWritten=0,e.status=E(e),await this.saveMeta(e),await this.onCreate(e),e})}async write(t,r){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(t.size!==void 0&&_(e,t.size),!A(t,e))throw new Error("File part does not match");const a=await this.lock(t.id);try{if(R(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const i=await v(t.body),o=h(e.name||e.id);try{await this.runOperation(r,()=>u.file.upload(this.client,o,S(i),{contentType:e.contentType,...t.checksum&&t.checksumAlgorithm==="sha256"&&{sha256Checksum:t.checksum}}))}catch(s){throw p(s,"upload")}e.bytesWritten=i.length,e.size=i.length,e.bunnyPath=o}return e.status=E(e),e.status==="completed"&&await this.internalOnComplete(e),await this.saveMeta(e),e}finally{await this.unlock(t.id,a)}})}async delete({id:t},r){return this.instrumentOperation("delete",async()=>{let e;try{e=await this.getMeta(t)}catch{}const a=e?.bunnyPath??h(e?.name??t);try{await this.runOperation(r,()=>u.file.remove(this.client,a))}catch(o){throw p(o,"delete")}if(e)return e.status="deleted",await this.deleteMeta(e.id),await this.onDelete(e),e;const i=new d({contentType:"application/octet-stream",metadata:{},originalName:t});return i.id=t,i.name=t,i.bunnyPath=a,i.status="deleted",i})}async get({id:t},r){return this.instrumentOperation("get",async()=>{let e,a;try{e=await this.checkIfExpired(await this.getMeta(t)),a=e.bunnyPath??h(e.name??t)}catch{a=h(t)}let i;try{i=await this.runOperation(r,()=>u.file.get(this.client,a))}catch(s){throw p(s,"get")}let o;try{const s=await this.runOperation(r,()=>i.data());o=await k(s.stream)}catch(s){throw p(s,"download")}return{content:o,contentType:e?.contentType??i.contentType??"application/octet-stream",ETag:e?.ETag??i.checksum??void 0,expiredAt:e?.expiredAt,id:t,metadata:e?.metadata??{},modifiedAt:e?.modifiedAt??i.lastChanged?.toISOString(),name:e?.name??w(a),originalName:e?.originalName??w(a),size:e?.size??i.length??o.length}})}async copy(t,r,e){return this.instrumentOperation("copy",async()=>{const a=await this.get({id:t},e),i=h(r),o=a.content,s=typeof a.size=="string"?Number(a.size):a.size??o.length;try{await this.runOperation(e,()=>u.file.upload(this.client,i,S(o),{contentType:a.contentType}))}catch(T){throw p(T,"copy")}const l=new d({contentType:a.contentType,metadata:{},originalName:r});return l.id=r,l.name=r,l.bunnyPath=i,l.size=s,l.ETag=a.ETag,l.bunnyChecksum=a.ETag,l})}async move(t,r,e){return this.instrumentOperation("move",async()=>{const a=await this.copy(t,r,e);return await this.delete({id:t},e),a})}async list(t=1e3,r){return this.instrumentOperation("list",async()=>{let e;try{e=await this.runOperation(r,()=>u.file.list(this.client,"/"))}catch(a){throw p(a,"list")}return e.filter(a=>!a.isDirectory).slice(0,t).map(a=>{const i=a.path.endsWith(a.objectName)||!a.objectName?a.path:`${a.path.replace(/\/+$/u,"")}/${a.objectName}`,o=w(i),s=new d({contentType:a.contentType||"application/octet-stream",metadata:{},originalName:o});return s.id=o,s.name=o,s.bunnyPath=h(o),s.bunnyChecksum=a.checksum??void 0,s.ETag=a.checksum??void 0,s.size=a.length,s.modifiedAt=a.lastChanged?.toISOString(),s})},{limit:t})}async getReadUrl(t,r){return r?.responseContentDisposition?y(g.METHOD_NOT_ALLOWED,"Bunny Storage: `responseContentDisposition` is not supported — no override exists on Bunny Storage / Pull Zone URLs."):this.publicBaseUrl?C(this.publicBaseUrl,t):y(g.METHOD_NOT_ALLOWED,"Bunny Storage: `getReadUrl` requires `publicBaseUrl` (for example a Bunny Pull Zone or custom CDN hostname). The Storage API URL itself requires an AccessKey header and cannot be handed out as a public URL.")}async getUploadUrl(t,r){return y(g.METHOD_NOT_ALLOWED,"Bunny Storage: presigned PUT URLs are not supported — writes go through the Storage API with an AccessKey header. Upload server-side via the SDK or proxy through your application.")}internalOnComplete=c(t=>this.deleteMeta(t.id),"internalOnComplete")}export{x as default};
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var t=(e,r)=>a(e,"name",{value:r,configurable:!0});import l from"./File-BhfUgJjs.js";var i=Object.defineProperty,u=t((e,r)=>i(e,"name",{value:r,configurable:!0}),"l");class p extends l{static{t(this,"p")}static{u(this,"CloudinaryFile")}bucket;path;publicUrl}export{p as default};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var r=(a,e)=>t(a,"name",{value:e,configurable:!0});import{v as o}from"./local-meta-storage-Bi0mK6gD.js";var s=Object.defineProperty,u=r((a,e)=>s(a,"name",{value:e,configurable:!0}),"a");class l extends o{static{r(this,"l")}static{u(this,"CloudinaryMetaStorage")}constructor(e){super(e)}}export{l as default};
@@ -0,0 +1 @@
1
+ var h=Object.defineProperty;var u=(n,e)=>h(n,"name",{value:e,configurable:!0});import{v2 as l}from"cloudinary";import{throwErrorCode as d,ERRORS as m}from"./ERRORS-CyOuSMLY.js";import{B as f}from"./storage-Dh0tJh7j.js";import c from"./CloudinaryFile-B5-m33eS.js";import w from"./CloudinaryMetaStorage-DEBk5eQy.js";import{o as y,r as v}from"./part-match-B5fLLmFw.js";import{u as _}from"./update-size-DANV7aa2.js";import{o as g}from"./has-content-Bx2p8Okx.js";var T=Object.defineProperty,p=u((n,e)=>T(n,"name",{value:e,configurable:!0}),"c");const O=p(async n=>{const e=[];for await(const a of n)e.push(Buffer.from(a));return Buffer.concat(e)},"collectStream"),E=p(n=>{if(!n)return{};const e=n.match(/^cloudinary:\/\/([^:]+):([^@]+)@(.+)$/);return e?{apiKey:e[1],apiSecret:e[2],cloudName:e[3]}:{}},"parseCloudinaryUrl");class R extends f{static name="cloudinary";checksumTypes=[];meta;client;defaultUrlExpiresIn;deliveryType;resourceType;secure;constructor(e){if(super(e),this.resourceType=e.resourceType??"raw",this.deliveryType=e.type??"upload",this.secure=e.secure??!0,this.defaultUrlExpiresIn=e.defaultUrlExpiresIn??3600,e.client)this.client=e.client;else{const a=E(process.env.CLOUDINARY_URL),t=e.cloudName??process.env.CLOUDINARY_CLOUD_NAME??a.cloudName,r=e.apiKey??process.env.CLOUDINARY_API_KEY??a.apiKey,i=e.apiSecret??process.env.CLOUDINARY_API_SECRET??a.apiSecret;if(!t)throw new Error("Cloudinary storage: `cloudName` is required (or set CLOUDINARY_CLOUD_NAME / CLOUDINARY_URL).");l.config({api_key:r,api_secret:i,cloud_name:t,secure:this.secure}),this.client=l}this.meta=e.metaStorage??new w(e.metaStorageConfig),this.isReady=!0}get raw(){return this.client}async create(e,a){return this.instrumentOperation("create",async()=>{const t=new c(e);t.name=this.namingFunction(t),t.path=t.name,await this.validate(t);try{const r=await this.getMeta(t.id);if(r.bytesWritten>=0)return r}catch{}return t.bytesWritten=0,t.status=y(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(e,a){return this.instrumentOperation("write",async()=>{let t;if("contentType"in e&&"metadata"in e&&!("body"in e)&&!("start"in e)?t=e:(t=await this.getMeta(e.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(e.size!==void 0&&_(t,e.size),!v(e,t))throw new Error("File part does not match");const r=await this.lock(e.id);try{if(g(e)){if(this.isUnsupportedChecksum(e.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const i=await O(e.body),s=t.path??t.name,o=await this.runOperation(a,()=>this.uploadBuffer(s,i));t.bytesWritten=i.length,t.size=i.length,t.path=o.public_id??s,t.publicUrl=o.secure_url??o.url,t.ETag=o.version===void 0?void 0:String(o.version)}return t.status=y(t),t.status==="completed"&&await this.internalOnComplete(t),await this.saveMeta(t),t}finally{await this.unlock(e.id,r)}})}async delete({id:e},a){return this.instrumentOperation("delete",async()=>{let t;try{t=await this.getMeta(e)}catch{}const r=t?.path??t?.name??e;return await this.runOperation(a,()=>this.client.uploader.destroy(r,{invalidate:!0,resource_type:this.resourceType,type:this.deliveryType})),t?(t.status="deleted",await this.deleteMeta(t.id),await this.onDelete(t),t):Object.assign(new c({contentType:"application/octet-stream",metadata:{},originalName:e}),{id:e,name:e,path:r,status:"deleted"})})}async exists({id:e},a){return this.instrumentOperation("exists",async()=>{let t=e;try{t=(await this.getMeta(e)).path??e}catch{}try{return await this.runOperation(a,()=>this.client.api.resource(t,{resource_type:this.resourceType,type:this.deliveryType})),!0}catch{return!1}})}async get({id:e},a){return this.instrumentOperation("get",async()=>{let t=e,r;try{r=await this.checkIfExpired(await this.getMeta(e)),t=r.path??r.name??e}catch{}const i=await this.runOperation(a,()=>this.client.api.resource(t,{resource_type:this.resourceType,type:this.deliveryType})),s=await this.runOperation(a,()=>fetch(this.client.url(t,{resource_type:this.resourceType,secure:this.secure,type:this.deliveryType})));if(!s.ok)throw new Error(`Cloudinary: object not found at "${t}"`);const o=Buffer.from(await s.arrayBuffer());return{content:o,contentType:r?.contentType??(i.resource_type&&i.format?`${i.resource_type}/${i.format}`:void 0)??"application/octet-stream",ETag:r?.ETag??(i.version===void 0?void 0:String(i.version)),expiredAt:r?.expiredAt,id:e,metadata:r?.metadata??{},modifiedAt:r?.modifiedAt,name:r?.name??t,originalName:r?.originalName??t,size:r?.size??(typeof i.bytes=="number"?i.bytes:o.length)}})}async copy(e,a,t){return this.instrumentOperation("copy",async()=>{const r=(await this.getMetaSafe(e))?.path??e,i=this.client.url(r,{resource_type:this.resourceType,secure:this.secure,type:this.deliveryType});await this.runOperation(t,()=>this.client.uploader.upload(i,{overwrite:!0,public_id:a,resource_type:this.resourceType,type:this.deliveryType}));const s=new c({contentType:"application/octet-stream",metadata:{},originalName:a});return s.id=a,s.name=a,s.path=a,s})}async move(e,a,t){return this.instrumentOperation("move",async()=>{const r=(await this.getMetaSafe(e))?.path??e;await this.runOperation(t,()=>this.client.uploader.rename(r,a,{resource_type:this.resourceType}));const i=new c({contentType:"application/octet-stream",metadata:{},originalName:a});i.id=a,i.name=a,i.path=a;try{await this.deleteMeta(e)}catch{}return i})}async list(e=1e3,a){return this.instrumentOperation("list",async()=>{const{resources:t}=await this.runOperation(a,()=>this.client.api.resources({max_results:e,resource_type:this.resourceType,type:this.deliveryType}));return(t??[]).map(r=>{const i=new c({contentType:r.resource_type&&r.format?`${r.resource_type}/${r.format}`:"application/octet-stream",metadata:{},originalName:r.public_id});return i.id=r.public_id,i.name=r.public_id,i.path=r.public_id,i.size=typeof r.bytes=="number"?r.bytes:void 0,i.createdAt=r.created_at??void 0,i.ETag=r.version===void 0?void 0:String(r.version),i})},{limit:e})}async getReadUrl(e,a){if(this.deliveryType==="upload")return this.client.url(e,{resource_type:this.resourceType,secure:this.secure,type:this.deliveryType});const t=a?.expiresIn??this.defaultUrlExpiresIn,r=e.lastIndexOf("."),i=r>0?e.slice(r+1):"";try{return this.client.utils.private_download_url(e,i,{expires_at:Math.floor(Date.now()/1e3)+t,resource_type:this.resourceType,type:this.deliveryType})}catch(s){return d(m.METHOD_NOT_ALLOWED,s instanceof Error?s.message:"Cloudinary: private_download_url failed")}}uploadBuffer(e,a){return new Promise((t,r)=>{this.client.uploader.upload_stream({overwrite:!0,public_id:e,resource_type:this.resourceType,type:this.deliveryType},(i,s)=>{if(i||!s){r(i instanceof Error?i:new Error(i?.message??"Cloudinary: upload failed"));return}t(s)}).end(a)})}async getMetaSafe(e){try{return await this.getMeta(e)}catch{return}}internalOnComplete=p(e=>this.deleteMeta(e.id),"internalOnComplete")}export{R as default};
@@ -0,0 +1 @@
1
+ import"node:fs";import"node:fs/promises";import"node:stream";import"./local-meta-storage-Bi0mK6gD.js";import{f as c}from"./disk-storage-CKAJvhcj.js";import"./path-D7rMc9nq-B718mbm6.js";import"./index-B4ETk0Lu.js";import"./detect-file-type-5JhzC9RU.js";import"./ERRORS-CyOuSMLY.js";import"./storage-Dh0tJh7j.js";import"./File-BhfUgJjs.js";import"./part-match-B5fLLmFw.js";import"./update-size-DANV7aa2.js";import"./has-content-Bx2p8Okx.js";export{c as default};
@@ -0,0 +1 @@
1
+ var f=Object.defineProperty;var o=(i,t)=>f(i,"name",{value:t,configurable:!0});import{createReadStream as g,createWriteStream as b}from"node:fs";import{truncate as w}from"node:fs/promises";import{Transform as E,pipeline as F}from"node:stream";import{f as C,y as v,m as W,s as R}from"./disk-storage-CKAJvhcj.js";import{y as S}from"./local-meta-storage-Bi0mK6gD.js";import{d as T}from"./detect-file-type-5JhzC9RU.js";import{throwErrorCode as p,ERRORS as n}from"./ERRORS-CyOuSMLY.js";import{LRUCache as N}from"lru-cache";import{createHash as O}from"node:crypto";import{u as k}from"./update-size-DANV7aa2.js";import{r as P,o as x}from"./part-match-B5fLLmFw.js";import{o as M}from"./has-content-Bx2p8Okx.js";var _=Object.defineProperty,I=o((i,t)=>_(i,"name",{value:t,configurable:!0}),"a");class L extends E{static{o(this,"n")}constructor(t,e){super(),this.path=e,this.hashes=t,this.hash=this.hashes.get(e)||O(this.hashes.algorithm),this.hashCopy=this.hash.copy()}path;static{I(this,"RangeChecksum")}hash;hashCopy;hashes;reset(){this.hashes.set(this.path,this.hashCopy)}digest(t="hex"){return this.hash.copy().digest(t)}_transform(t,e,s){this.push(t),this.hash.update(t),s()}_flush(t){t()}}var z=Object.defineProperty,U=o((i,t)=>z(i,"name",{value:t,configurable:!0}),"h");class A extends N{static{o(this,"p")}constructor(t="sha1",e){super({ttl:1e3,ttlAutopurge:!0,...e}),this.algorithm=t}algorithm;static{U(this,"RangeHasher")}hex(t){return this.get(t)?.copy().digest("hex")||""}base64(t){return this.get(t)?.copy().digest("base64")||""}async init(t,e=0){return this.get(t)?.copy()||this.updateFromFs(t,e)}digester(t){return new L(this,t)}async updateFromFs(t,e=0,s){const r=await this.fromFs(t,e,s);return this.set(t,r),r}fromFs(t,e=0,s){return new Promise((r,a)=>{const h=this.digester(t);s!==void 0&&(h.hash=s),g(t,{start:e}).on("error",a).on("end",()=>{r(h.hash)}).pipe(h).resume()})}}var H=Object.defineProperty,l=o((i,t)=>H(i,"name",{value:t,configurable:!0}),"d");class tt extends C{static{o(this,"O")}static{l(this,"DiskStorageWithChecksum")}hashes;constructor(t){super(t),this.hashes=new A(t?.checksum==="sha1"?"sha1":"md5")}async delete({id:t}){try{const e=await this.getMeta(t),s=this.getFilePath(e.name);this.hashes.delete(s),await S(s),await this.deleteMeta(t);const r={...e,status:"deleted"};return await this.onDelete(r),r}catch(e){this.logger?.error("[error]: Could not delete file: %O",e);const s=this.normalizeError(e instanceof Error?e:new Error(String(e)));await this.onError(s)}return{id:t}}async write(t){let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(t.size!==void 0&&k(e,t.size),!P(t,e))return p(n.FILE_CONFLICT);const s=this.getFilePath(e.name);try{const r=t.start||0;if(await v(s),(e.bytesWritten===0||Number.isNaN(e.bytesWritten))&&(e.bytesWritten=r),await this.hashes.init(s),M(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))return p(n.UNSUPPORTED_CHECKSUM_ALGORITHM);if((t.start===0||t.start===void 0)&&(e.bytesWritten===0||Number.isNaN(e.bytesWritten))&&(!e.contentType||e.contentType==="application/octet-stream"))try{const{fileType:m,stream:c}=await T(t.body);m?.mime&&(e.contentType=m.mime),t.body=c}catch{}const[a,h]=await this.lazyWrite({...t,...e});if(h)return await w(s,e.bytesWritten),p(h);typeof a!="number"&&await this.hashes.updateFromFs(s,e.bytesWritten),e.bytesWritten=a}return e.status=x(e),e.hash={algorithm:this.hashes.algorithm,value:this.hashes.hex(s)},e.status==="completed"&&this.hashes.delete(s),await this.saveMeta(e),e}catch(r){await this.hashes.updateFromFs(s,e.bytesWritten);const a=this.normalizeError(r instanceof Error?r:new Error(String(r)));return await this.onError(a),p(n.FILE_ERROR,(typeof a.message=="string"?a.message:String(r))||String(r))}}lazyWrite(t){return new Promise((e,s)=>{const r=this.getFilePath(t.name),a=b(r,{flags:"r+",start:t.start}),h=new W(t.contentLength||Number(t.size)-t.start),m=R(t.checksum,t.checksumAlgorithm),c=this.hashes.digester(r),y=!t.checksum,d=l(u=>{c.reset(),a.close(),e([Number.NaN,u])},"failWithCode");h.on("error",()=>{d(n.FILE_CONFLICT)}),m.on("error",()=>{d(n.CHECKSUM_MISMATCH)}),t.body.on("aborted",()=>{d(y?void 0:n.REQUEST_ABORTED)}),F(t.body,h,m,c,a,u=>{if(u){c.reset(),s(u);return}e([t.start+a.bytesWritten])})})}}export{tt as default};
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var t=(e,r)=>a(e,"name",{value:r,configurable:!0});import l from"./File-BhfUgJjs.js";var i=Object.defineProperty,o=t((e,r)=>i(e,"name",{value:r,configurable:!0}),"l");class b extends l{static{t(this,"e")}static{o(this,"DropboxFile")}path;publicUrl;rev}export{b as default};
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var t=(r,e)=>a(r,"name",{value:e,configurable:!0});import{v as o}from"./local-meta-storage-Bi0mK6gD.js";var s=Object.defineProperty,c=t((r,e)=>s(r,"name",{value:e,configurable:!0}),"e");class i extends o{static{t(this,"p")}static{c(this,"DropboxMetaStorage")}constructor(e){super(e)}}export{i as default};
@@ -0,0 +1 @@
1
+ var E=Object.defineProperty;var O=(a,e)=>E(a,"name",{value:e,configurable:!0});import{DropboxResponseError as v,DropboxAuth as d,Dropbox as f}from"dropbox";import{throwErrorCode as y,ERRORS as w}from"./ERRORS-CyOuSMLY.js";import{c as D}from"./oauth-refresh-Dg2ybc6_.js";import{B as S}from"./storage-Dh0tJh7j.js";import p from"./DropboxFile-BGVG2kXM.js";import x from"./DropboxMetaStorage-C6vj1QDA.js";import{o as b,r as B}from"./part-match-B5fLLmFw.js";import{u as R}from"./update-size-DANV7aa2.js";import{o as H}from"./has-content-Bx2p8Okx.js";var U=Object.defineProperty,c=O((a,e)=>U(a,"name",{value:e,configurable:!0}),"c");const T=14400,C=150*1024*1024,u=8*1024*1024,g=c((a,e)=>{a.auth.setAccessToken(e)},"setAccessToken"),L=c(a=>a.auth.getAccessToken(),"getAccessToken"),k=c(a=>{let e=0,s=a.length;for(;e<s&&a[e]==="/";)e+=1;for(;s>e&&a[s-1]==="/";)s-=1;return e===0&&s===a.length?a:a.slice(e,s)},"trimSlashes"),F=c(async a=>{const e=[];for await(const s of a)e.push(Buffer.from(s));return Buffer.concat(e)},"collectStream"),A=c(a=>a.includes("?dl=0")?a.replace("?dl=0","?dl=1"):a.includes("?dl=")?a:a+(a.includes("?")?"&dl=1":"?dl=1"),"rewriteSharedLinkForDirectDownload"),P=c((a,e)=>(g(a,e),{ensureAccessToken:c(()=>Promise.resolve(),"ensureAccessToken"),getAccessToken:c(()=>Promise.resolve(e),"getAccessToken")}),"createStaticAccessTokenAuth"),K=c((a,e)=>{const s=c(async()=>{const t=await e();return g(a,t),t},"ensure");return{async ensureAccessToken(){await s()},getAccessToken:s}},"createCallableAccessTokenAuth"),_=c((a,e)=>{const s=D({buildBody:c(()=>new URLSearchParams({client_id:e.appKey,grant_type:"refresh_token",refresh_token:e.refreshToken,...e.appSecret&&{client_secret:e.appSecret}}),"buildBody"),onRefresh:c(t=>{g(a,t)},"onRefresh"),provider:"Dropbox",tokenUrl:"https://api.dropboxapi.com/oauth2/token"});return{async ensureAccessToken(){await s.getAccessToken()},getAccessToken:c(()=>s.getAccessToken(),"getAccessToken")}},"createRefreshTokenAuth"),M=c(a=>{if(a.client){const i=a.client;return{authHandle:{ensureAccessToken:c(()=>Promise.resolve(),"ensureAccessToken"),getAccessToken:c(()=>Promise.resolve(L(i)),"getAccessToken")},client:i}}const e=a.accessToken,s=a.refreshToken!==void 0||a.appKey!==void 0||a.appSecret!==void 0;if(e!==void 0&&s)throw new Error("Dropbox storage: pass exactly one of `accessToken` or `refreshToken` (with `appKey`).");if(e!==void 0){const i=new d({accessToken:typeof e=="string"?e:void 0}),n=new f({auth:i});return{authHandle:typeof e=="function"?K(n,e):P(n,e),client:n}}if(s){if(!a.refreshToken||!a.appKey)throw new Error("Dropbox storage: refresh-token auth requires both `refreshToken` and `appKey`.");const i=new d({}),n=new f({auth:i});return{authHandle:_(n,{appKey:a.appKey,...a.appSecret&&{appSecret:a.appSecret},refreshToken:a.refreshToken}),client:n}}const t=process.env.DROPBOX_ACCESS_TOKEN;if(t){const i=new d({accessToken:t}),n=new f({auth:i});return{authHandle:P(n,t),client:n}}const o=process.env.DROPBOX_REFRESH_TOKEN,r=process.env.DROPBOX_APP_KEY;if(o&&r){const i=process.env.DROPBOX_APP_SECRET,n=new d({}),l=new f({auth:n});return{authHandle:_(l,{appKey:r,...i&&{appSecret:i},refreshToken:o}),client:l}}throw new Error("Dropbox storage: missing auth. Pass `client`, `accessToken`, or `refreshToken` + `appKey`. Env fallbacks: DROPBOX_ACCESS_TOKEN, or DROPBOX_REFRESH_TOKEN + DROPBOX_APP_KEY (+ DROPBOX_APP_SECRET).")},"resolveAuth");class J extends S{static name="dropbox";checksumTypes=[];meta;authHandle;client;defaultUrlExpiresIn;publicByDefault;rootFolderPath;constructor(e){super(e),this.rootFolderPath=k(e.rootFolderPath??""),this.publicByDefault=e.publicByDefault??!1,this.defaultUrlExpiresIn=Math.min(e.defaultUrlExpiresIn??3600,T);const s=M(e);this.client=s.client,this.authHandle=s.authHandle,this.meta=e.metaStorage??new x(e.metaStorageConfig),this.isReady=!0}get raw(){return this.client}async create(e,s){return this.instrumentOperation("create",async()=>{const t=new p(e);t.name=this.namingFunction(t),t.path=this.keyToPath(t.name),await this.validate(t);try{const o=await this.getMeta(t.id);if(o.bytesWritten>=0)return o}catch{}return t.bytesWritten=0,t.status=b(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(e,s){return this.instrumentOperation("write",async()=>{let t;if("contentType"in e&&"metadata"in e&&!("body"in e)&&!("start"in e)?t=e:(t=await this.getMeta(e.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(e.size!==void 0&&R(t,e.size),!B(e,t))throw new Error("File part does not match");const o=await this.lock(e.id);try{if(H(e)){if(this.isUnsupportedChecksum(e.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const r=await F(e.body),i=t.path??this.keyToPath(t.name||t.id);await this.authHandle.ensureAccessToken();const n=r.byteLength<=C?await this.uploadSimple(i,r,s):await this.uploadSession(i,r,s);t.bytesWritten=r.length,t.size=r.length,t.path=n.path_display??i,t.rev=n.rev,t.ETag=n.rev}return t.status=b(t),t.status==="completed"&&await this.internalOnComplete(t),await this.saveMeta(t),t}finally{await this.unlock(e.id,o)}})}async delete({id:e},s){return this.instrumentOperation("delete",async()=>{let t;try{t=await this.getMeta(e)}catch{}const o=t?.path??this.keyToPath(t?.name??e);await this.authHandle.ensureAccessToken();try{await this.runOperation(s,()=>this.client.filesDeleteV2({path:o}))}catch(r){if(!N(r))throw r}return t?(t.status="deleted",await this.deleteMeta(t.id),await this.onDelete(t),t):Object.assign(new p({contentType:"application/octet-stream",metadata:{},originalName:e}),{id:e,name:e,path:o,status:"deleted"})})}async get({id:e},s){return this.instrumentOperation("get",async()=>{let t,o=this.keyToPath(e);try{t=await this.checkIfExpired(await this.getMeta(e)),o=t.path??this.keyToPath(t.name??e)}catch{}await this.authHandle.ensureAccessToken();const r=(await this.runOperation(s,()=>this.client.filesDownload({path:o}))).result;let i;if(r.fileBinary instanceof Uint8Array)i=Buffer.from(r.fileBinary.buffer,r.fileBinary.byteOffset,r.fileBinary.byteLength);else if(r.fileBlob instanceof Blob)i=Buffer.from(await r.fileBlob.arrayBuffer());else throw new TypeError("Dropbox: unexpected download response shape — neither fileBinary nor fileBlob present");return{content:i,contentType:t?.contentType??"application/octet-stream",ETag:t?.ETag??r.rev,expiredAt:t?.expiredAt,id:e,metadata:t?.metadata??{},modifiedAt:t?.modifiedAt??r.server_modified,name:t?.name??r.name,originalName:t?.originalName??r.name,size:t?.size??r.size??i.length}})}async copy(e,s,t){return this.instrumentOperation("copy",async()=>{const o=this.keyToPath(e),r=this.keyToPath(s);await this.authHandle.ensureAccessToken(),await this.runOperation(t,()=>this.client.filesCopyV2({from_path:o,to_path:r}));const i=new p({contentType:"application/octet-stream",metadata:{},originalName:s});return i.id=s,i.name=s,i.path=r,i})}async move(e,s,t){return this.instrumentOperation("move",async()=>{const o=this.keyToPath(e),r=this.keyToPath(s);await this.authHandle.ensureAccessToken(),await this.runOperation(t,()=>this.client.filesMoveV2({from_path:o,to_path:r}));const i=new p({contentType:"application/octet-stream",metadata:{},originalName:s});i.id=s,i.name=s,i.path=r;try{await this.deleteMeta(e)}catch{}return i})}async list(e=1e3,s){return this.instrumentOperation("list",async()=>{await this.authHandle.ensureAccessToken();const t=await this.runOperation(s,()=>this.client.filesListFolder({limit:e,path:this.rootFolderPath?`/${this.rootFolderPath}`:"",recursive:!0})),{result:o}=t,r=[];for(const i of o.entries){if(i[".tag"]!=="file")continue;const n=i,l=n.path_display??n.path_lower??`/${n.name}`,m=this.pathToKey(l);if(!m)continue;const h=new p({contentType:"application/octet-stream",metadata:{},originalName:n.name});h.id=m,h.name=m,h.path=l,h.size=n.size,h.rev=n.rev,h.ETag=n.rev,h.modifiedAt=n.server_modified,r.push(h)}return r},{limit:e})}async getReadUrl(e,s){if(s?.responseContentDisposition)return y(w.METHOD_NOT_ALLOWED,"Dropbox: `responseContentDisposition` is not supported — Dropbox temporary links have no Content-Disposition override.");const t=s?.expiresIn??this.defaultUrlExpiresIn;return t>T?y(w.METHOD_NOT_ALLOWED,`Dropbox: \`expiresIn\` of ${t}s exceeds the ${T}s (4h) maximum. Use \`publicByDefault: true\` for a permanent shared link.`):(await this.authHandle.ensureAccessToken(),this.publicByDefault?await this.createPublicSharedLink(e):(await this.client.filesGetTemporaryLink({path:this.keyToPath(e)})).result.link)}async getUploadUrl(e,s){return y(w.METHOD_NOT_ALLOWED,"Dropbox: presigned upload URLs use POST with a raw body, which doesn't fit the PUT-style upload-url contract. Use `write()` or `storage.raw.filesGetTemporaryUploadLink(...)` directly.")}keyToPath(e){const s=k(e),t=[];return this.rootFolderPath&&t.push(this.rootFolderPath),s&&t.push(s),t.length===0?"":`/${t.join("/")}`}pathToKey(e){const s=k(e);if(!this.rootFolderPath)return s;if(s===this.rootFolderPath)return"";const t=`${this.rootFolderPath}/`;return s.startsWith(t)?s.slice(t.length):s}async uploadSimple(e,s,t){return(await this.runOperation(t,()=>this.client.filesUpload({contents:s,mode:{".tag":"overwrite"},mute:!0,path:e}))).result}async uploadSession(e,s,t){const o=s.byteLength;let r=0;const i=(await this.runOperation(t,()=>this.client.filesUploadSessionStart({close:!1,contents:s.subarray(r,Math.min(r+u,o))}))).result.session_id;for(r=Math.min(r+u,o);o-r>u;){const l=s.subarray(r,r+u);await this.runOperation(t,()=>this.client.filesUploadSessionAppendV2({close:!1,contents:l,cursor:{offset:r,session_id:i}})),r+=u}const n=s.subarray(r,o);return(await this.runOperation(t,()=>this.client.filesUploadSessionFinish({commit:{mode:{".tag":"overwrite"},mute:!0,path:e},contents:n,cursor:{offset:r,session_id:i}}))).result}async createPublicSharedLink(e){try{const s=await this.client.sharingCreateSharedLinkWithSettings({path:this.keyToPath(e),settings:{requested_visibility:{".tag":"public"}}});return A(s.result.url)}catch(s){if(s instanceof v){const t=s.error?.shared_link_already_exists?.metadata?.url;if(typeof t=="string"&&t.length>0)return A(t)}throw s}}internalOnComplete=c(e=>this.deleteMeta(e.id),"internalOnComplete")}const N=c(a=>{if(!(a instanceof v))return!1;if(a.status===404)return!0;const e=[],s=c((t,o)=>{if(o>6||t===null||typeof t!="object")return;const r=t,i=r[".tag"];typeof i=="string"&&e.push(i);for(const n of Object.values(r))n&&typeof n=="object"&&s(n,o+1)},"walk");return s(a.error,0),e.includes("not_found")||e.includes("not_file")||e.includes("not_folder")},"isNotFoundError");export{J as default};
@@ -0,0 +1 @@
1
+ var c=Object.defineProperty;var i=(e,r)=>c(e,"name",{value:r,configurable:!0});var p=Object.defineProperty,a=i((e,r)=>p(e,"name",{value:r,configurable:!0}),"i"),u=(e=>(e.BAD_REQUEST="BadRequest",e.CHECKSUM_MISMATCH="ChecksumMismatch",e.FILE_CONFLICT="FileConflict",e.FILE_ERROR="FileError",e.FILE_LOCKED="FileLocked",e.FILE_NOT_ALLOWED="FileNotAllowed",e.FILE_NOT_FOUND="FileNotFound",e.FORBIDDEN="Forbidden",e.GONE="Gone",e.INVALID_FILE_NAME="InvalidFileName",e.INVALID_FILE_SIZE="InvalidFileSize",e.INVALID_RANGE="InvalidRange",e.INVALID_TYPE="Invalidtype",e.METHOD_NOT_ALLOWED="MethodNotAllowed",e.REQUEST_ABORTED="RequestAborted",e.REQUEST_ENTITY_TOO_LARGE="RequestEntityTooLarge",e.STORAGE_BUSY="StorageBusy",e.STORAGE_ERROR="StorageError",e.TOO_MANY_REQUESTS="TooManyRequests",e.UNKNOWN_ERROR="UnknownError",e.UNPROCESSABLE_ENTITY="UnprocessableEntity",e.UNSUPPORTED_CHECKSUM_ALGORITHM="UnsupportedChecksumAlgorithm",e.UNSUPPORTED_MEDIA_TYPE="UnsupportedMediaType",e))(u||{});const d=(()=>{const e={BadRequest:[400,"Bad request"],ChecksumMismatch:[460,"Checksum mismatch"],FileConflict:[409,"File conflict"],FileError:[500,"Something went wrong writing the file"],FileLocked:[423,"File locked"],FileNotAllowed:[403,"File not allowed"],FileNotFound:[404,"Not found"],Forbidden:[403,"Authenticated user is not allowed access"],Gone:[410,"The file for this url no longer exists"],InvalidFileName:[400,"Invalid file name or it cannot be retrieved"],InvalidFileSize:[400,"File size cannot be retrieved"],InvalidRange:[400,"Invalid or missing content-range header"],Invalidtype:[400,'Invalid or missing "content-type" header'],MethodNotAllowed:[405,"Method not allowed"],RequestAborted:[499,"Request aborted"],RequestEntityTooLarge:[413,"Request entity too large"],StorageBusy:[503,"Storage is busy"],StorageError:[503,"Storage error"],TooManyRequests:[429,"Too many requests"],UnknownError:[500,"Something went wrong"],UnprocessableEntity:[422,"Validation failed"],UnsupportedChecksumAlgorithm:[400,"Unsupported checksum algorithm"],UnsupportedMediaType:[415,"Unsupported media type"]},r={};return Object.keys(e).forEach(t=>{const[o,s]=e[t];r[t]={code:t,message:s,statusCode:o}}),r})();class l extends Error{static{i(this,"UploadError")}static{a(this,"UploadError")}name="UploadError";UploadErrorCode="UnknownError";detail;constructor(r="UnknownError",t,o){super(t||r),this.name="UploadError",this.detail=o,Object.values(u).includes(r)&&(this.UploadErrorCode=r)}}const R=a(e=>!!e.UploadErrorCode,"isUploadError"),g=a(e=>{if(!e||typeof e!="object")return;const r=e;if(typeof r.status=="number")return r.status;if(typeof r.statusCode=="number")return r.statusCode;if(typeof r.code=="number")return r.code;const t=r.response;if(typeof t?.status=="number")return t.status;if(typeof t?.statusCode=="number")return t.statusCode},"extractHttpStatus"),U=a(e=>{if(e===void 0)return"StorageError";switch(e){case 400:return"BadRequest";case 401:case 403:return"Forbidden";case 404:return"FileNotFound";case 405:return"MethodNotAllowed";case 409:return"FileConflict";case 410:return"Gone";case 413:return"RequestEntityTooLarge";case 415:return"UnsupportedMediaType";case 422:return"UnprocessableEntity";case 423:return"FileLocked";case 429:return"TooManyRequests";case 503:return"StorageBusy";default:return e>=500&&e<600?"StorageError":e>=400&&e<500?"BadRequest":"UnknownError"}},"mapStatusToErrorCode"),m=a((e,r,t,o)=>{const s=`${e}: ${r} failed`;return t?`${s} — ${t}`:o!==void 0?`${s} (HTTP ${o})`:s},"composeWrappedMessage"),y=a((e,r)=>{if(R(e))return e;const t=r.status??g(e),o=r.code??U(t),s=e?.message,n=typeof s=="string"&&s.length>0?s:void 0,E=r.message??m(r.adapter,r.operation,n,t);return new l(o,E,e)},"wrapStorageError"),F=a((e,r)=>{const t=e;let o;t&&typeof t=="string"&&t in d&&(o=d[t]);const s=r||(o?.body&&typeof o.body=="object"&&"message"in o.body?o.body.message:void 0)||o?.message||"UnknownError",n=new l(t,s);throw n.UploadErrorCode=t,typeof r=="string"&&(n.detail=r),n},"throwErrorCode");export{u as ERRORS,d as ErrorMap,l as UploadError,g as extractHttpStatus,R as isUploadError,U as mapStatusToErrorCode,F as throwErrorCode,y as wrapStorageError};
@@ -0,0 +1 @@
1
+ var y=Object.defineProperty;var f=(t,i)=>y(t,"name",{value:i,configurable:!0});import d from"@sindresorhus/fnv1a";import{nanoid as g}from"nanoid";var l=Object.defineProperty,r=f((t,i)=>l(t,"name",{value:i,configurable:!0}),"t");const u=r(t=>d(t,{size:64}).toString(16),"hash"),c=r(t=>{if(typeof t.mimeType=="string")return t.mimeType;if(typeof t.type=="string")return t.type;if(typeof t.filetype=="string")return t.filetype},"extractMimeType"),h=r(t=>{if(typeof t.name=="string")return t.name;if(typeof t.title=="string")return t.title;if(typeof t.originalName=="string")return t.originalName;if(typeof t.filename=="string")return t.filename},"extractOriginalName"),z=r(t=>{const{metadata:i,originalName:n,size:s}=t,e=String(i.lastModified??Date.now());return[n,s,e].filter(Boolean).map(String).map(o=>u(o)).join("-")},"generateFileId");class v{static{f(this,"b")}static{r(this,"File")}bytesWritten=Number.NaN;contentType;originalName;id;metadata;name="";size;status;expiredAt;createdAt;modifiedAt;hash;content;ETag;constructor({contentType:i,expiredAt:n,id:s,metadata:e,originalName:o,size:m}){this.metadata=e;let a=s||void 0,p=o||h(e);p||(a??=g(),p=a),a!==void 0&&(this.id=a),this.originalName=p,this.contentType=i||c(e)||"application/octet-stream",this.expiredAt=n,typeof m=="string"||typeof m=="number"?this.size=Number(m):(typeof e.size=="string"||typeof e.size=="number")&&(this.size=Number(e.size)),typeof this.size=="number"&&this.size<=0&&(this.size=void 0),this.id||=z(this)}}export{v as default};
@@ -0,0 +1 @@
1
+ var b=Object.defineProperty;var c=(e,t)=>b(e,"name",{value:t,configurable:!0});import{Readable as n}from"node:stream";import{B as s}from"./storage-Dh0tJh7j.js";var g=Object.defineProperty,o=c((e,t)=>g(e,"name",{value:t,configurable:!0}),"f");const h=o(e=>typeof e=="object"&&e!==null&&typeof e.getReader=="function","isWebReadableStream"),z=o(e=>typeof e=="object"&&e!==null&&typeof e.pipe=="function"&&typeof e.read=="function","isNodeReadable"),w=o(async(e,t)=>{if(typeof e=="string"){const a=Buffer.from(e);return{size:a.byteLength,stream:n.from(a)}}if(Buffer.isBuffer(e))return{size:e.byteLength,stream:n.from(e)};if(e instanceof Uint8Array){const a=Buffer.from(e.buffer,e.byteOffset,e.byteLength);return{size:a.byteLength,stream:n.from(a)}}if(e instanceof ArrayBuffer){const a=Buffer.from(e);return{size:a.byteLength,stream:n.from(a)}}if(ArrayBuffer.isView(e)){const a=e,r=Buffer.from(a.buffer,a.byteOffset,a.byteLength);return{size:r.byteLength,stream:n.from(r)}}if(typeof Blob<"u"&&e instanceof Blob)return{size:e.size,stream:n.fromWeb(e.stream())};if(h(e))return{size:t,stream:n.fromWeb(e)};if(z(e))return{size:t,stream:e};throw new TypeError(`Unsupported body type: ${Object.prototype.toString.call(e)}`)},"normalizeBody"),d=o((e,t)=>({contentType:e.contentType??"application/octet-stream",etag:e.ETag,key:e.name||e.id||t||"",lastModified:e.modifiedAt??e.createdAt,metadata:e.metadata,size:typeof e.size=="number"?e.size:void 0}),"toFileObject");class I{static{c(this,"Files")}static{o(this,"Files")}adapter;constructor(t){this.adapter=t.adapter}get raw(){return this.adapter.raw}async upload(t,a,r={}){s.assertSafeId(t);const{size:i,stream:p}=await w(a,r.size),f=r.size??i,y={...r.metadata??{},name:t,...r.contentType?{type:r.contentType}:{},...f===void 0?{}:{size:f}},m=await this.adapter.create({contentType:r.contentType,id:t,metadata:y,originalName:t,size:f,storageClass:r.storageClass}),u={body:p,contentLength:f,id:m.id,start:0},l=await this.adapter.write(u);return d(l,t)}async download(t){s.assertSafeId(t);const a=await this.adapter.get({id:t});return{body:a.content,contentType:a.contentType??"application/octet-stream",etag:a.ETag,key:t,lastModified:a.modifiedAt,metadata:a.metadata,size:typeof a.size=="number"?a.size:void 0}}async head(t){s.assertSafeId(t);const a=await this.adapter.getMeta(t);return d(a,t)}async exists(t){return s.assertSafeId(t),this.adapter.exists({id:t})}async delete(t){s.assertSafeId(t),await this.adapter.delete({id:t})}async copy(t,a,r){s.assertSafeId(t),s.assertSafeId(a);const i=await this.adapter.copy(t,a,r);return d(i,a)}async list(t={}){const a=(await this.adapter.list(t.limit??1e3)).map(r=>{const i=d(r);return i.key.startsWith("/")&&(i.key=i.key.slice(1)),i});return t.prefix?a.filter(r=>r.key.startsWith(t.prefix)):a}async url(t,a){return s.assertSafeId(t),this.adapter.getReadUrl(t,a)}async signedUploadUrl(t,a){return s.assertSafeId(t),this.adapter.getUploadUrl(t,a)}}export{I as Files,I as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(e,t)=>r(e,"name",{value:t,configurable:!0});import i from"./File-BhfUgJjs.js";var l=Object.defineProperty,s=a((e,t)=>l(e,"name",{value:t,configurable:!0}),"e");class p extends i{static{a(this,"p")}static{s(this,"FirebaseFile")}bucket;path;publicUrl}export{p as default};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var r=(a,e)=>t(a,"name",{value:e,configurable:!0});import{v as s}from"./local-meta-storage-Bi0mK6gD.js";var o=Object.defineProperty,i=r((a,e)=>o(a,"name",{value:e,configurable:!0}),"a");class n extends s{static{r(this,"i")}static{i(this,"FirebaseMetaStorage")}constructor(e){super(e)}}export{n as default};
@@ -0,0 +1,2 @@
1
+ var g=Object.defineProperty;var h=(s,t)=>g(s,"name",{value:t,configurable:!0});import{readFileSync as w}from"node:fs";import{getApps as b,getApp as m,initializeApp as O,cert as k}from"firebase-admin/app";import{getStorage as A}from"firebase-admin/storage";import{throwErrorCode as d,ERRORS as f}from"./ERRORS-CyOuSMLY.js";import{B as T}from"./storage-Dh0tJh7j.js";import o from"./FirebaseFile-JEu3plMP.js";import I from"./FirebaseMetaStorage-CzyOim-J.js";import{o as y,r as v}from"./part-match-B5fLLmFw.js";import{u as S}from"./update-size-DANV7aa2.js";import{o as _}from"./has-content-Bx2p8Okx.js";var N=Object.defineProperty,u=h((s,t)=>N(s,"name",{value:t,configurable:!0}),"l");const U=3600,R=u(async s=>{const t=[];for await(const i of s)t.push(Buffer.from(i));return Buffer.concat(t)},"collectStream"),B=u(s=>typeof s=="object"&&s!==null&&typeof s.file=="function"&&typeof s.getFiles=="function","isBucket");class E extends T{static name="firebase";checksumTypes=[];meta;bucket;bucketName;defaultUrlExpiresIn;publicBaseUrl;constructor(t){if(super(t),this.defaultUrlExpiresIn=t.defaultUrlExpiresIn??U,this.publicBaseUrl=t.publicBaseUrl?.replace(/\/+$/,""),t.app&&B(t.app))this.bucket=t.app,this.bucketName=t.app.name??"";else{const i=t.bucket??process.env.FIREBASE_STORAGE_BUCKET;if(!i)throw new Error("Firebase storage: `bucket` is required (or set FIREBASE_STORAGE_BUCKET).");this.bucketName=i;const e=t.app??E.resolveApp(t,i);this.bucket=A(e).bucket(i)}this.meta=t.metaStorage??new I(t.metaStorageConfig),this.isReady=!0}get raw(){return this.bucket}async create(t,i){return this.instrumentOperation("create",async()=>{const e=new o(t);e.name=this.namingFunction(e),e.bucket=this.bucketName,e.path=e.name,await this.validate(e);try{const a=await this.getMeta(e.id);if(a.bytesWritten>=0)return a}catch{}return e.bytesWritten=0,e.status=y(e),await this.saveMeta(e),await this.onCreate(e),e})}async write(t,i){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(t.size!==void 0&&S(e,t.size),!v(t,e))throw new Error("File part does not match");const a=await this.lock(t.id);try{if(_(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const r=await R(t.body),c=e.path??e.name;await this.runOperation(i,()=>this.bucket.file(c).save(r,{contentType:e.contentType,resumable:!1})),e.bytesWritten=r.length,e.size=r.length,e.path=c}return e.status=y(e),e.status==="completed"&&await this.internalOnComplete(e),await this.saveMeta(e),e}finally{await this.unlock(t.id,a)}})}async delete({id:t},i){return this.instrumentOperation("delete",async()=>{let e;try{e=await this.getMeta(t)}catch{}const a=e?.path??e?.name??t;return await this.runOperation(i,()=>this.bucket.file(a).delete({ignoreNotFound:!0})),e?(e.status="deleted",await this.deleteMeta(e.id),await this.onDelete(e),e):Object.assign(new o({contentType:"application/octet-stream",metadata:{},originalName:t}),{bucket:this.bucketName,id:t,name:t,path:a,status:"deleted"})})}async exists({id:t},i){return this.instrumentOperation("exists",async()=>{let e=t;try{e=(await this.getMeta(t)).path??t}catch{}try{const[a]=await this.runOperation(i,()=>this.bucket.file(e).exists());return a}catch{return!1}})}async get({id:t},i){return this.instrumentOperation("get",async()=>{let e=t,a;try{a=await this.checkIfExpired(await this.getMeta(t)),e=a.path??a.name??t}catch{}const r=this.bucket.file(e),[c]=await this.runOperation(i,()=>r.download());let n={};try{[n]=await this.runOperation(i,()=>r.getMetadata())}catch{}return{content:c,contentType:a?.contentType??n.contentType??"application/octet-stream",ETag:a?.ETag??n.etag,expiredAt:a?.expiredAt,id:t,metadata:a?.metadata??{},modifiedAt:a?.modifiedAt??n.updated,name:a?.name??e,originalName:a?.originalName??e,size:a?.size??(n.size===void 0?c.length:Number(n.size))}})}async copy(t,i,e){return this.instrumentOperation("copy",async()=>{const a=(await this.getMetaSafe(t))?.path??t;await this.runOperation(e,()=>this.bucket.file(a).copy(this.bucket.file(i)));const r=new o({contentType:"application/octet-stream",metadata:{},originalName:i});return r.id=i,r.name=i,r.path=i,r.bucket=this.bucketName,r})}async move(t,i,e){return this.instrumentOperation("move",async()=>{const a=(await this.getMetaSafe(t))?.path??t;await this.runOperation(e,()=>this.bucket.file(a).move(i));const r=new o({contentType:"application/octet-stream",metadata:{},originalName:i});r.id=i,r.name=i,r.path=i,r.bucket=this.bucketName;try{await this.deleteMeta(t)}catch{}return r})}async list(t=1e3,i){return this.instrumentOperation("list",async()=>{const[e]=await this.runOperation(i,()=>this.bucket.getFiles({maxResults:t}));return(e??[]).map(a=>{const r=new o({contentType:"application/octet-stream",metadata:{},originalName:a.name});return r.id=a.name,r.name=a.name,r.path=a.name,r.bucket=this.bucketName,r})},{limit:t})}async getReadUrl(t,i){if(this.publicBaseUrl)return`${this.publicBaseUrl}/${t}`;const e=i?.expiresIn??this.defaultUrlExpiresIn;try{const[a]=await this.bucket.file(t).getSignedUrl({action:"read",expires:Date.now()+e*1e3});return a}catch(a){return d(f.METHOD_NOT_ALLOWED,a instanceof Error?a.message:"Firebase: getSignedUrl failed")}}async getUploadUrl(t,i){const e=i?.expiresIn??this.defaultUrlExpiresIn;try{const[a]=await this.bucket.file(t).getSignedUrl({action:"write",contentType:i?.contentType,expires:Date.now()+e*1e3});return a}catch(a){return d(f.METHOD_NOT_ALLOWED,a instanceof Error?a.message:"Firebase: getSignedUrl failed")}}static resolveApp(t,i){const{appName:e}=t,a=b();if(e?a.find(p=>p.name===e):a[0])return e?m(e):m();const r=t.projectId??process.env.FIREBASE_PROJECT_ID??process.env.GOOGLE_CLOUD_PROJECT??process.env.GCLOUD_PROJECT;let c=t.credentials?.clientEmail??process.env.FIREBASE_CLIENT_EMAIL,n=t.credentials?.privateKey??process.env.FIREBASE_PRIVATE_KEY;const l=t.serviceAccountPath??process.env.GOOGLE_APPLICATION_CREDENTIALS;if((!c||!n)&&l){const p=JSON.parse(w(l,"utf8"));c??=p.client_email,n??=p.private_key}if(!c||!n)throw new Error("Firebase storage: service-account credentials are required. Provide `credentials` ({ clientEmail, privateKey }), `serviceAccountPath`, or set FIREBASE_CLIENT_EMAIL / FIREBASE_PRIVATE_KEY / GOOGLE_APPLICATION_CREDENTIALS.");return O({credential:k({clientEmail:c,privateKey:n.replaceAll(String.raw`\n`,`
2
+ `),projectId:r}),projectId:r,storageBucket:i},e)}async getMetaSafe(t){try{return await this.getMeta(t)}catch{return}}internalOnComplete=u(t=>this.deleteMeta(t.id),"internalOnComplete")}export{E as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(e,t)=>r(e,"name",{value:t,configurable:!0});import i from"./File-BhfUgJjs.js";var l=Object.defineProperty,s=a((e,t)=>l(e,"name",{value:t,configurable:!0}),"e");class c extends i{static{a(this,"r")}static{s(this,"FtpFile")}path}export{c as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(t,e)=>r(t,"name",{value:e,configurable:!0});import{v as s}from"./local-meta-storage-Bi0mK6gD.js";var o=Object.defineProperty,c=a((t,e)=>o(t,"name",{value:e,configurable:!0}),"e");class i extends s{static{a(this,"p")}static{c(this,"FtpMetaStorage")}constructor(e){super(e)}}export{i as default};
@@ -0,0 +1 @@
1
+ var F=Object.defineProperty;var O=(o,a)=>F(o,"name",{value:a,configurable:!0});import{Readable as y,Writable as v}from"node:stream";import{Client as M}from"basic-ftp";import{S as k}from"./index-B4ETk0Lu.js";import{throwErrorCode as u,ERRORS as m}from"./ERRORS-CyOuSMLY.js";import{B as E}from"./storage-Dh0tJh7j.js";import P from"./FtpFile-B8jaICTB.js";import A from"./FtpMetaStorage-1Njy0DpU.js";import{i as f,n as $,o as D}from"./posix-dirname-CiHXPPnw.js";import{o as b,r as R}from"./part-match-B5fLLmFw.js";import{u as L}from"./update-size-DANV7aa2.js";import{o as S}from"./has-content-Bx2p8Okx.js";var x=Object.defineProperty,l=O((o,a)=>x(o,"name",{value:a,configurable:!0}),"u");const d=l(o=>{const a=o?.code;if(a===550||a===450||a===553)return!0;const e=o instanceof Error?o.message:String(o);return/no such file|not exist|cannot find|file unavailable/i.test(e)},"isNotFoundError"),g=l(o=>{if(o instanceof Error&&o.name==="AbortError")return o;const a=new Error(o instanceof Error&&o.message?o.message:"The operation was aborted",{cause:o});return a.name="AbortError",a},"toAbortError"),T=l(async(o,a)=>{const e=[],t=new v({write(n,r,i){e.push(Buffer.from(n)),i()}});return await o.downloadTo(t,a),Buffer.concat(e)},"downloadToBuffer");class G extends E{static name="ftp";checksumTypes=[];meta;connection;rootFolderPath;constructor(a){super(a),this.connection=a.connection,this.rootFolderPath=f(a.rootFolderPath??""),this.meta=a.metaStorage??new A(a.metaStorageConfig),this.isReady=!0}async create(a,e){return this.instrumentOperation("create",async()=>{const t=new P(a);t.name=this.namingFunction(t),t.path=this.keyToPath(t.name),await this.validate(t);try{const n=await this.getMeta(t.id);if(n.status==="completed")return n}catch{}return t.bytesWritten=0,t.status=b(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(a,e){return this.instrumentOperation("write",async()=>{let t;if("contentType"in a&&"metadata"in a&&!("body"in a)&&!("start"in a)?t=a:(t=await this.getMeta(a.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(a.size!==void 0&&L(t,a.size),!R(a,t))return u(m.FILE_CONFLICT);const n=await this.lock(a.id);try{if(S(a)){if(this.isUnsupportedChecksum(a.checksumAlgorithm))return u(m.UNSUPPORTED_CHECKSUM_ALGORITHM);if(a.start>0)return u(m.METHOD_NOT_ALLOWED,"FTP storage does not support chunked or resumable uploads; send the file in a single request.");const r=await $(a.body),i=t.path??this.keyToPath(t.name||t.id);await this.runOperation(e,c=>this.run(c,async s=>{await this.ensureRemoteDirectory(s,i),await s.uploadFrom(y.from(r),i)})),t.bytesWritten=r.length,t.size=r.length,t.path=i,t.ETag=k(r)}return t.status=b(t),await this.saveMeta(t),t}finally{await this.unlock(a.id,n)}})}async get({id:a},e){return this.instrumentOperation("get",async()=>{const t=await this.checkIfExpired(await this.getMeta(a)),n=t.path??this.keyToPath(t.name||a),r=await this.runOperation(e,i=>this.run(i,async c=>{try{return await T(c,n)}catch(s){if(d(s))return u(m.FILE_NOT_FOUND);throw s}}));return{content:r,contentType:t.contentType,ETag:t.ETag??k(r),expiredAt:t.expiredAt,id:a,metadata:t.metadata,modifiedAt:t.modifiedAt,name:t.name,originalName:t.originalName,size:t.size??r.length}})}async delete({id:a},e){return this.instrumentOperation("delete",async()=>{const t=await this.getMeta(a),n=t.path??this.keyToPath(t.name||a);await this.runOperation(e,i=>this.run(i,async c=>{try{await c.remove(n)}catch(s){if(!d(s))throw s}})),await this.deleteMeta(a);const r={...t,status:"deleted"};return await this.onDelete(r),r})}async copy(a,e,t){return this.instrumentOperation("copy",async()=>{const n=await this.getMeta(a),r=n.path??this.keyToPath(n.name||a),i=this.keyToPath(e);await this.runOperation(t,s=>this.run(s,async h=>{const p=await T(h,r);await this.ensureRemoteDirectory(h,i),await h.uploadFrom(y.from(p),i)}));const c={...n,id:e,name:e,path:i};return await this.saveMeta(c),c})}async move(a,e,t){return this.instrumentOperation("move",async()=>{const n=await this.getMeta(a),r=n.path??this.keyToPath(n.name||a),i=this.keyToPath(e);await this.runOperation(t,s=>this.run(s,async h=>{try{await this.ensureRemoteDirectory(h,i),await h.rename(r,i)}catch(p){try{const w=await T(h,r);await this.ensureRemoteDirectory(h,i),await h.uploadFrom(y.from(w),i),await h.remove(r)}catch(w){throw new AggregateError([p,w],`FTP move failed: rename and copy+delete fallback both failed for "${r}" → "${i}"`)}}}));const c={...n,id:e,name:e,path:i};await this.saveMeta(c);try{await this.deleteMeta(a)}catch{}return c})}async list(a=1e3,e){return this.instrumentOperation("list",async()=>{const t=this.keyToPath("");return this.runOperation(e,n=>this.run(n,async r=>{const i=[];return await this.walkList(r,t,i),i}))})}async exists({id:a},e){return this.instrumentOperation("exists",async()=>{let t;try{t=await this.getMeta(a)}catch{return!1}const n=t.path??this.keyToPath(t.name||a);return this.runOperation(e,r=>this.run(r,async i=>{try{return await i.size(n),!0}catch(c){if(d(c))return!1;throw c}}))})}async walkList(a,e,t){let n;try{n=await a.list(e||".")}catch(r){if(d(r))return;throw r}for(const r of n){const i=e?`${e}/${r.name}`:r.name;if(r.isDirectory){await this.walkList(a,i,t);continue}if(!r.isFile)continue;const c=this.pathToKey(i);if(!c)continue;const s=new P({contentType:"application/octet-stream",metadata:{},originalName:r.name});s.id=c,s.name=c,s.path=i,s.size=r.size,r.modifiedAt&&(s.modifiedAt=r.modifiedAt.toISOString()),t.push(s)}}async run(a,e){const t=new M;if(a?.aborted)throw g(a.reason);const n=l(()=>{t.close()},"onAbort");a?.addEventListener("abort",n,{once:!0});try{if(await t.access(this.connection),a?.aborted)throw g(a.reason);return await e(t)}catch(r){throw a?.aborted?g(r):r}finally{a?.removeEventListener("abort",n),t.close()}}async ensureRemoteDirectory(a,e){const t=D(e);t&&(await a.ensureDir(t),await a.cd("/"))}keyToPath(a){const e=f(a);e&&E.assertSafeId(e);const t=[];return this.rootFolderPath&&t.push(this.rootFolderPath),e&&t.push(e),t.length===0?"":`/${t.join("/")}`}pathToKey(a){const e=f(a);if(!this.rootFolderPath)return e;if(e===this.rootFolderPath)return"";const t=`${this.rootFolderPath}/`;return e.startsWith(t)?e.slice(t.length):e}}export{G as default};
@@ -0,0 +1 @@
1
+ const o={authScopes:["https://www.googleapis.com/auth/iam","https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/devstorage.full_control"],storageAPI:"https://storage.googleapis.com/storage/v1/b",uploadAPI:"https://storage.googleapis.com/upload/storage/v1/b"};export{o as default};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var a=(e,r)=>t(e,"name",{value:r,configurable:!0});import i from"./File-BhfUgJjs.js";var l=Object.defineProperty,o=a((e,r)=>l(e,"name",{value:r,configurable:!0}),"l");class u extends i{static{a(this,"p")}static{o(this,"GCSFile")}GCSUploadURI;uri}export{u as default};
@@ -0,0 +1 @@
1
+ import"node:crypto";import"gaxios";import"google-auth-library";import{E as f}from"./gcs-meta-storage-mZiqlX-9.js";import"./MetaStorage-Y4m1dWgd.js";import"./Metadata-B6Ir0KO7.js";import"./GCSConfig-BQ0OpVhe.js";export{f as default};
@@ -0,0 +1 @@
1
+ var y=Object.defineProperty;var h=(l,t)=>y(l,"name",{value:t,configurable:!0});import{randomUUID as w}from"node:crypto";import{request as b}from"gaxios";import{GoogleAuth as C}from"google-auth-library";import{r as R,E,b as U,g as k,d}from"./gcs-meta-storage-mZiqlX-9.js";import{d as $}from"./detect-file-type-5JhzC9RU.js";import{throwErrorCode as I,ERRORS as S}from"./ERRORS-CyOuSMLY.js";import{B as v,t as O}from"./storage-Dh0tJh7j.js";import{v as T}from"./local-meta-storage-Bi0mK6gD.js";import m from"./GCSConfig-BQ0OpVhe.js";import B from"./GCSFile-CDQ6IWAz.js";import{r as A,o as j}from"./part-match-B5fLLmFw.js";import{o as x}from"./has-content-Bx2p8Okx.js";var P=Object.defineProperty,G=h((l,t)=>P(l,"name",{value:t,configurable:!0}),"e");class q extends Error{static{h(this,"o")}constructor(t,a,e){super(t),this.code=a,this.config=e}code;config;static{G(this,"FetchError")}name="FetchError"}var W=Object.defineProperty,g=h((l,t)=>W(l,"name",{value:t,configurable:!0}),"m");const M=g(l=>l>=200&&l<300||l===308||l===499,"validateStatus");class f extends v{static name="gcs";checksumTypes=["md5","crc32c"];get raw(){return this.authClient}meta;bucket;authClient;storageBaseURI;uploadBaseURI;isCustomEndpoint=!1;retryOptions={};useAuthWithCustomEndpoint;userProject;constructor(t){super(t);const a=t.bucket||process.env.GCS_BUCKET;if(!a)throw new Error("GCS bucket is not defined");if(!t.projectId)throw new Error("Sorry, we cannot connect to Cloud Services without a project ID.");this.bucket=a,this.storageBaseURI=`${t.storageAPI||m.storageAPI}/${this.bucket}/o`,this.uploadBaseURI=`${t.uploadAPI||m.uploadAPI}/${this.bucket}/o`,this.isCustomEndpoint=new URL(this.storageBaseURI).hostname!=="storage.googleapis.com";const{retryOptions:e,useAuthWithCustomEndpoint:r,userProject:i}=t;this.userProject=i,this.useAuthWithCustomEndpoint=r||!1,this.retryOptions={...R,...e},t.scopes||=m.authScopes,this.authClient=new C(t);const{bucket:o,metaStorage:c,metaStorageConfig:u,projectId:s}=t;if(c)this.meta=c;else{let n={...t,...u,logger:this.logger};"directory"in n?(this.logger?.debug("Using local meta storage"),this.meta=new T(n)):(o===n.bucket&&s===n.projectId&&(n={...n,authClient:this.authClient}),this.meta=new E(n))}this.isReady=!1,this.accessCheck().then(()=>{this.isReady=!0}).catch(n=>{this.logger?.error("Storage access check failed: %O",n)})}normalizeError(t){if(t.config){const a=+t.code||500;return{code:`GCS${a}`,message:t.message,name:t.name,retryable:a>=499,statusCode:a}}return{code:"GenericUploadError",message:`[${this.constructor.name}] ${t.message}`,name:t.name,statusCode:500}}async create(t,a){return this.instrumentOperation("create",async()=>{const e={...t};if(t.ttl){const s=typeof t.ttl=="string"?O(t.ttl):t.ttl;s!==void 0&&(e.expiredAt=Date.now()+s)}const r=new B(e);r.name=this.namingFunction(r),await this.validate(r);try{const s=await this.getMeta(r.id);return s.bytesWritten=await this.internalWrite(s,a),s}catch{}const i={"Content-Type":"application/json; charset=utf-8","X-Goog-Upload-Command":"start","X-Goog-Upload-Protocol":"resumable","X-Upload-Content-Length":r.size.toString(),"X-Upload-Content-Type":r.contentType},o={body:JSON.stringify({metadata:r.metadata}),headers:i,method:"POST",params:{name:r.name,size:r.size,uploadType:"resumable"},url:this.uploadBaseURI},c=await this.makeRequest(o,a);if(c.status!==200)throw new Error("Expected 200 response from GCS");const u=c.headers.get("X-Goog-Upload-Status")||c.headers.get("x-goog-upload-status");if(u!=="active")throw new Error(`X-Goog-Upload-Status response header expected 'active' got: ${u}`);return r.uri=c.headers.get("location"),this.config.clientDirectUpload?(r.GCSUploadURI=r.uri,this.logger?.debug("send uploadURI to client: %s",r.GCSUploadURI),r.status="created",r):(r.bytesWritten=0,await this.saveMeta(r),r.status="created",await this.onCreate(r),r)})}async write(t,a){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(!A(t,e))return I(S.FILE_CONFLICT);const r=await this.lock(t.id);try{if(x(t)&&(e.bytesWritten===0||Number.isNaN(e.bytesWritten))&&(!e.contentType||e.contentType==="application/octet-stream"))try{const{fileType:i,stream:o}=await $(t.body);i?.mime&&(e.contentType=i.mime),t.body=o}catch{}e.bytesWritten=await this.internalWrite({...e,...t},a),e.status=j(e),e.status==="completed"&&(e.uri=`${this.storageBaseURI}/${e.name}`,await this.internalOnComplete(e))}finally{await this.unlock(t.id,r)}return e})}async delete({id:t},a){return this.instrumentOperation("delete",async()=>{const e=await this.getMeta(t);if(!e.uri)throw new Error(`File ${t} does not have a valid URI`);e.status="deleted",await this.makeRequest({method:"DELETE",url:e.uri,validateStatus:M},a),await this.deleteMeta(e.id);const r={...e};return await this.onDelete(r),r})}async copy(t,a,e){return this.instrumentOperation("copy",async()=>{const r=new URL(`/${this.bucket}/${t}`,"file://"),i=new URL(encodeURI(a),r).pathname,[,o,...c]=i.split("/"),u=c.join("/"),s=`${this.storageBaseURI}/${t}/rewriteTo/b/${o}/o/${u}`;let n={};const p={body:"",headers:{"Content-Type":"application/json"},method:"POST",url:s};do p.body=n.rewriteToken?JSON.stringify({rewriteToken:n.rewriteToken}):"",n=(await this.makeRequest(p,e)).data||{};while(n.rewriteToken);return await this.getMeta(a)})}async move(t,a,e){return this.instrumentOperation("move",async()=>{const r=await this.copy(t,a,e),i=`${this.storageBaseURI}/${t}`;return await this.makeRequest({method:"DELETE",url:i},e),r})}async get({id:t},a){return this.instrumentOperation("get",async()=>{const{data:e}=await this.makeRequest({params:{alt:"json"},url:`${this.storageBaseURI}/${t}`},a);if(await this.checkIfExpired({expiredAt:e.timeDeleted}),!e.uri)throw new Error("File URI not found");const r=(await this.makeRequest({params:{alt:"media"},url:e.uri},a)).data;let i;if(typeof r=="string")i=Buffer.from(r,"utf8");else if(r&&typeof r=="object"&&"data"in r){const o=r.data;i=Buffer.from(o)}else i=Buffer.from(r);return{...e,content:i}})}async exists({id:t},a){return this.instrumentOperation("exists",async()=>{try{return await this.getMeta(t),await this.makeRequest({method:"HEAD",url:`${this.storageBaseURI}/${t}`},a),!0}catch{return!1}})}async list(t=1e3,a){return this.instrumentOperation("list",async()=>{const e=[],r=Math.min(t,1e3);let i=!0,o={params:{maxResults:r},url:this.storageBaseURI};for(;i&&e.length<t;)try{const{data:c}=await this.makeRequest(o,a);for(const{name:u,timeCreated:s,updated:n}of c?.items||[]){if(e.length>=t)break;e.push({createdAt:s,id:u,modifiedAt:n})}i=c?.nextPageToken!==void 0,i&&e.length<t&&(o={...o,params:{...o.params,maxResults:Math.min(r,t-e.length),pageToken:c.nextPageToken}})}catch(c){const u=this.normalizeError(c instanceof Error?c:new Error(String(c)));throw await this.onError(u),c}return e},{limit:t})}async internalWrite(t,a){const{body:e,bytesWritten:r,size:i,uri:o=""}=t,c=U(t),u={method:"PUT"};if(e?.on){const s=new AbortController;e.on("aborted",()=>{s.abort()}),u.body=e,u.signal=s.signal,u.retry=!1}u.headers={Accept:"application/json","Content-Range":c,...i===r?{"X-Goog-Upload-Command":"upload, finalize"}:{}};try{const s=await this.makeRequest({url:o,...u},a);if(s.status===308){const n=s.headers.get("range");return n?k(n):0}if(s.status===200)return this.logger?.debug("uploaded %O",s.data),i;throw new q(String(s.data),`GCS${s.status}`,{uri:o})}catch(s){this.logger?.error(o,s);const n=this.normalizeError(s instanceof Error?s:new Error(String(s)));throw await this.onError(n),s}}internalOnComplete=g(t=>this.deleteMeta(t.id),"internalOnComplete");static buildCallSignal(t,a){const e=[];if(a&&e.push(a),t?.signal&&e.push(t.signal),e.length!==0)return e.length===1?e[0]:AbortSignal.any(e)}async makeRequest(t,a){typeof t.url=="string"&&(t.url=t.url.replaceAll("/:",":"));const e=f.buildCallSignal(a,t.signal);let r=this.retryOptions;if(a?.retries!==void 0){const o=typeof a.retries=="number"?a.retries:a.retries.maxRetries;typeof o=="number"&&(r={...this.retryOptions,retry:o})}const i=typeof a?.timeout=="number"&&a.timeout>0?a.timeout:6e4;return t={...t,headers:{"User-Agent":`${d.name}/${d.version}`,"x-goog-api-client":`gl-node/${process.versions.node} gccl/${d.version} gccl-invocation-id/${w()}`,...t.headers},params:{...this.userProject===void 0?{}:{userProject:this.userProject},...t.params},retry:t.retry===!1?!1:a?.retries!==0,retryConfig:r,timeout:i,...e?{signal:e}:{}},this.isCustomEndpoint&&!this.useAuthWithCustomEndpoint?b(t):this.authClient.request(t)}async accessCheck(){return this.makeRequest({url:this.storageBaseURI.replace("/o","")})}}export{f as default};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var i=(e,r)=>t(e,"name",{value:r,configurable:!0});import a from"./File-BhfUgJjs.js";var l=Object.defineProperty,o=i((e,r)=>l(e,"name",{value:r,configurable:!0}),"e");class d extends a{static{i(this,"t")}static{o(this,"GoogleDriveFile")}driveFileId;mimeType;publicUrl}export{d as default};
@@ -0,0 +1 @@
1
+ var a=Object.defineProperty;var t=(r,e)=>a(r,"name",{value:e,configurable:!0});import{v as o}from"./local-meta-storage-Bi0mK6gD.js";var s=Object.defineProperty,c=t((r,e)=>s(r,"name",{value:e,configurable:!0}),"t");class u extends o{static{t(this,"l")}static{c(this,"GoogleDriveMetaStorage")}constructor(e){super(e)}}export{u as default};
@@ -0,0 +1 @@
1
+ var C=Object.defineProperty;var y=(r,e)=>C(r,"name",{value:e,configurable:!0});import{Readable as k}from"node:stream";import{drive as F}from"@googleapis/drive";import{JWT as T,GoogleAuth as E,OAuth2Client as _}from"google-auth-library";import{throwErrorCode as v,ERRORS as u,wrapStorageError as I}from"./ERRORS-CyOuSMLY.js";import{B as L}from"./storage-Dh0tJh7j.js";import m from"./GoogleDriveFile-D0aGfGbL.js";import G from"./GoogleDriveMetaStorage-WGuUZPyx.js";import{o as O,r as A}from"./part-match-B5fLLmFw.js";import{u as R}from"./update-size-DANV7aa2.js";import{o as P}from"./has-content-Bx2p8Okx.js";var B=Object.defineProperty,c=y((r,e)=>B(r,"name",{value:e,configurable:!0}),"u");const f="https://www.googleapis.com/auth/drive",U=1024,p="fsdkKey",w="fsdkContentType",D="id, name, size, mimeType, md5Checksum, modifiedTime, appProperties",g=c(r=>{const e=r.lastIndexOf("/");return e===-1?r:r.slice(e+1)},"basename"),b=c(r=>r.replaceAll("\\","\\\\").replaceAll("'",String.raw`\'`),"escapeQueryValue");class z{static{y(this,"S")}static{c(this,"LRU")}#t;#e=new Map;constructor(e){this.#t=Math.max(1,e)}delete(e){this.#e.delete(e)}get(e){const i=this.#e.get(e);if(i!==void 0)return this.#e.delete(e),this.#e.set(e,i),i}set(e,i){if(this.#e.has(e)&&this.#e.delete(e),this.#e.set(e,i),this.#e.size>this.#t){const t=this.#e.keys().next().value;t!==void 0&&this.#e.delete(t)}}}const S=c(r=>{const e=r.subject??process.env.GOOGLE_DRIVE_SUBJECT;if(r.credentials)return new T({email:r.credentials.client_email,key:r.credentials.private_key,scopes:[f],...e&&{subject:e}});if(r.keyFilename)return new E({keyFile:r.keyFilename,scopes:[f],...e&&{clientOptions:{subject:e}}});if(r.oauth){const a=new _({clientId:r.oauth.clientId,clientSecret:r.oauth.clientSecret});return a.setCredentials({refresh_token:r.oauth.refreshToken}),a}const i=process.env.GOOGLE_DRIVE_CLIENT_EMAIL,t=process.env.GOOGLE_DRIVE_PRIVATE_KEY;if(i&&t)return new T({email:i,key:t,scopes:[f],...e&&{subject:e}});const o=process.env.GOOGLE_DRIVE_KEY_FILE;if(o)return new E({keyFile:o,scopes:[f],...e&&{clientOptions:{subject:e}}})},"buildAuth"),x=c(async r=>{const e=[];for await(const i of r)e.push(Buffer.from(i));return Buffer.concat(e)},"collectStream"),M=c(r=>{if(r instanceof Uint8Array)return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(Buffer.isBuffer(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);if(ArrayBuffer.isView(r)){const e=r;return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}if(typeof r=="string")return new TextEncoder().encode(r);throw new Error("Google Drive: unexpected response payload shape")},"toUint8");class Z extends L{static name="google-drive";checksumTypes=[];meta;authForTokens;driveClient;fileIdCache;publicByDefault;rootFolderId;sharedDriveParams;constructor(e){if(super(e),e.client)this.driveClient=e.client,this.authForTokens=void 0;else{const t=S(e);if(!t)throw new Error("Google Drive storage: missing auth. Pass `client`, `credentials`, `keyFilename`, or `oauth`. Env fallbacks: GOOGLE_DRIVE_CLIENT_EMAIL + GOOGLE_DRIVE_PRIVATE_KEY, or GOOGLE_DRIVE_KEY_FILE.");this.authForTokens=t,this.driveClient=F({auth:t,version:"v3"})}const i=e.driveId??process.env.GOOGLE_DRIVE_ID;this.rootFolderId=e.rootFolderId??process.env.GOOGLE_DRIVE_ROOT_FOLDER_ID??i??"root",this.publicByDefault=e.publicByDefault??!1,this.fileIdCache=new z(e.fileIdCacheSize??U),this.sharedDriveParams={includeItemsFromAllDrives:!0,supportsAllDrives:!0,...i&&{corpora:"drive",driveId:i}},this.meta=e.metaStorage??new G(e.metaStorageConfig),this.isReady=!0}get raw(){return this.driveClient}async create(e,i){return this.instrumentOperation("create",async()=>{const t=new m(e);t.name=this.namingFunction(t),await this.validate(t);try{const o=await this.getMeta(t.id);if(o.bytesWritten>=0)return o}catch{}return t.bytesWritten=0,t.status=O(t),await this.saveMeta(t),await this.onCreate(t),t})}async write(e,i){return this.instrumentOperation("write",async()=>{let t;if("contentType"in e&&"metadata"in e&&!("body"in e)&&!("start"in e)?t=e:(t=await this.getMeta(e.id),await this.checkIfExpired(t)),t.status==="completed")return t;if(e.size!==void 0&&R(t,e.size),!A(e,t))throw new Error("File part does not match");const o=await this.lock(e.id);try{if(P(e)){if(this.isUnsupportedChecksum(e.checksumAlgorithm))throw new Error("Unsupported checksum algorithm");const a=await x(e.body),n=t.name||t.id,s={[w]:t.contentType,[p]:n},l=await this.runOperation(i,()=>this.driveClient.files.create({...this.sharedDriveParams,fields:"id, size, mimeType, md5Checksum, modifiedTime",media:{body:k.from(a),mimeType:t.contentType},requestBody:{appProperties:s,mimeType:t.contentType,name:g(n),parents:[this.rootFolderId]}})),{data:d}=l,h=d.id??void 0;h&&(this.fileIdCache.set(n,h),this.publicByDefault&&await this.runOperation(i,()=>this.driveClient.permissions.create({...this.sharedDriveParams,fileId:h,requestBody:{role:"reader",type:"anyone"}}))),t.bytesWritten=a.length,t.size=a.length,t.driveFileId=h,t.mimeType=d.mimeType??t.contentType,t.ETag=d.md5Checksum??void 0}return t.status=O(t),t.status==="completed"&&await this.internalOnComplete(t),await this.saveMeta(t),t}finally{await this.unlock(e.id,o)}})}async delete({id:e},i){return this.instrumentOperation("delete",async()=>{let t;const o=e;try{t=await this.getMeta(e)}catch{}try{const a=t?.driveFileId??await this.resolveFileId(o,i);await this.runOperation(i,()=>this.driveClient.files.delete({...this.sharedDriveParams,fileId:a})),this.fileIdCache.delete(o)}catch(a){if(!N(a))throw a;this.fileIdCache.delete(o)}return t?(t.status="deleted",await this.deleteMeta(t.id),await this.onDelete(t),t):Object.assign(new m({contentType:"application/octet-stream",metadata:{},originalName:e}),{id:e,name:e,status:"deleted"})})}async get({id:e},i){return this.instrumentOperation("get",async()=>{let t,o;try{t=await this.checkIfExpired(await this.getMeta(e)),o=t.driveFileId??await this.resolveFileId(t.name??e,i)}catch{o=await this.resolveFileId(e,i)}const[a,n]=await Promise.all([this.runOperation(i,()=>this.driveClient.files.get({...this.sharedDriveParams,fields:D,fileId:o})),this.runOperation(i,()=>this.driveClient.files.get({...this.sharedDriveParams,alt:"media",fileId:o},{responseType:"arraybuffer"}))]),{data:s}=a,l=M(n.data),d=Buffer.from(l.buffer,l.byteOffset,l.byteLength),h=s.appProperties??{};return{content:d,contentType:t?.contentType??h[w]??s.mimeType??"application/octet-stream",ETag:t?.ETag??s.md5Checksum??void 0,expiredAt:t?.expiredAt,id:e,metadata:t?.metadata??{},modifiedAt:t?.modifiedAt??s.modifiedTime??void 0,name:t?.name??s.name??e,originalName:t?.originalName??s.name??e,size:t?.size??Number(s.size??d.length)}})}async copy(e,i,t){return this.instrumentOperation("copy",async()=>{const o=await this.resolveFileId(e,t),a=await this.runOperation(t,()=>this.driveClient.files.copy({...this.sharedDriveParams,fields:"id, size, mimeType, md5Checksum",fileId:o,requestBody:{appProperties:{[p]:i},name:g(i),parents:[this.rootFolderId]}})),n=a.data.id??void 0;n&&this.fileIdCache.set(i,n);const s=new m({contentType:a.data.mimeType??"application/octet-stream",metadata:{},originalName:i});return s.id=i,s.name=i,s.driveFileId=n,s.mimeType=a.data.mimeType??void 0,s.ETag=a.data.md5Checksum??void 0,s.size=Number(a.data.size??0),s})}async move(e,i,t){return this.instrumentOperation("move",async()=>{const o=await this.copy(e,i,t);return await this.delete({id:e},t),o})}async list(e=1e3,i){return this.instrumentOperation("list",async()=>{const t=`'${b(this.rootFolderId)}' in parents and trashed=false`,o=(await this.runOperation(i,()=>this.driveClient.files.list({...this.sharedDriveParams,fields:`nextPageToken, files(${D})`,pageSize:e,q:t}))).data.files??[],a=[];for(const n of o){const s=n.appProperties??{},l=s[p];if(!l)continue;n.id&&this.fileIdCache.set(l,n.id);const d=new m({contentType:s[w]??n.mimeType??"application/octet-stream",metadata:{},originalName:n.name??l});d.id=l,d.name=l,d.driveFileId=n.id??void 0,d.mimeType=n.mimeType??void 0,d.size=Number(n.size??0),d.modifiedAt=n.modifiedTime??void 0,d.ETag=n.md5Checksum??void 0,a.push(d)}return a},{limit:e})}async getReadUrl(e,i){return i?.responseContentDisposition?v(u.METHOD_NOT_ALLOWED,"Google Drive: `responseContentDisposition` is not supported — Drive's webContentLink has no Content-Disposition override."):this.publicByDefault?`https://drive.google.com/uc?export=download&id=${await this.resolveFileId(e)}`:v(u.METHOD_NOT_ALLOWED,"Google Drive: getReadUrl() requires the adapter to be constructed with `publicByDefault: true`. Drive has no signed URL primitive — use get() for private files.")}async getUploadUrl(e,i){if(!this.authForTokens)return v(u.METHOD_NOT_ALLOWED,"Google Drive: getUploadUrl() requires `credentials`, `keyFilename`, or `oauth` — not the pre-built `client` escape hatch.");const t=await this.authForTokens.getAccessToken(),o=typeof t=="string"?t:t?.token;if(!o)throw new Error("Google Drive: failed to mint access token for resumable upload session");const a={Authorization:`Bearer ${o}`,"Content-Type":"application/json; charset=UTF-8"};i?.contentType&&(a["X-Upload-Content-Type"]=i.contentType),i?.contentLength!==void 0&&(a["X-Upload-Content-Length"]=String(i.contentLength));const n={appProperties:{[p]:e},name:g(e),parents:[this.rootFolderId]},s=await fetch("https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&supportsAllDrives=true",{body:JSON.stringify(n),headers:a,method:"POST"});if(!s.ok){const d=await s.text().catch(()=>"");throw I(new Error(`${s.statusText} ${d}`.trim()||s.statusText),{adapter:"Google Drive",operation:"resumable upload session",status:s.status})}const l=s.headers.get("location")??s.headers.get("Location");if(!l)throw I(new Error("response missing Location header"),{adapter:"Google Drive",code:u.STORAGE_ERROR,operation:"resumable upload session"});return l}async resolveFileId(e,i){const t=this.fileIdCache.get(e);if(t)return t;const o=`appProperties has { key='${p}' and value='${b(e)}' } and trashed=false`,a=(await this.runOperation(i,()=>this.driveClient.files.list({...this.sharedDriveParams,fields:"files(id)",pageSize:2,q:o}))).data.files??[];if(a.length===0)throw new Error(`Google Drive: not found: ${e}`);if(a.length>1)throw new Error(`Google Drive: multiple files share virtual key '${e}'. Resolve via storage.raw.`);const n=a[0]?.id;if(!n)throw new Error(`Google Drive: list returned no fileId for ${e}`);return this.fileIdCache.set(e,n),n}internalOnComplete=c(e=>this.deleteMeta(e.id),"internalOnComplete")}const N=c(r=>{if(r===null||typeof r!="object")return!1;const e=r;return typeof e.code=="number"&&e.code===404||typeof e.status=="number"&&e.status===404?!0:typeof e.response?.status=="number"&&e.response.status===404},"isNotFoundError");export{Z as default};
@@ -0,0 +1 @@
1
+ import"node:fs/promises";import"node:os";import{v as f}from"./local-meta-storage-Bi0mK6gD.js";import"./path-D7rMc9nq-B718mbm6.js";import"./ERRORS-CyOuSMLY.js";import"./MetaStorage-Y4m1dWgd.js";import"./Metadata-B6Ir0KO7.js";export{f as default};
@@ -0,0 +1 @@
1
+ var p=Object.defineProperty;var m=(h,e)=>p(h,"name",{value:e,configurable:!0});import{createHash as u}from"node:crypto";import{Readable as g}from"node:stream";import l from"mime";import{N as c}from"./cache-qV_5Umeq.js";import{isKnownContentType as v}from"./isValidMediaType-B-2UKjZx.js";import s from"./ValidationError-D8KKJiKA.js";var b=Object.defineProperty,w=m((h,e)=>b(h,"name",{value:e,configurable:!0}),"h");class S{static{m(this,"b")}constructor(e,t={}){if(this.storage=e,this.logger=t.logger||this.storage.logger,this.config={audioBitrate:128e3,audioCodec:"aac",cache:t.cache??new c,cacheTtl:3600,maxAudioSize:100*1024*1024,maxImageSize:10*1024*1024,maxVideoSize:500*1024*1024,saveTransformedFiles:!1,supportedAudioFormats:[],supportedImageFormats:[],supportedVideoFormats:[],videoBitrate:2e6,videoCodec:"avc",...t},t.ImageTransformer&&((!Array.isArray(this.config.supportedImageFormats)||this.config.supportedImageFormats.length===0)&&(this.config.supportedImageFormats=["jpeg","png","webp","avif","tiff","gif","svg"]),this.imageTransformer=new t.ImageTransformer(this.storage,{cache:this.config.cache,cacheTtl:this.config.cacheTtl,logger:this.logger,maxImageSize:this.config.maxImageSize,supportedFormats:this.config.supportedImageFormats})),t.VideoTransformer&&((!Array.isArray(this.config.supportedVideoFormats)||this.config.supportedVideoFormats.length===0)&&(this.config.supportedVideoFormats=["mp4","webm","mkv","avi","mov","flv","wmv"]),this.videoTransformer=new t.VideoTransformer(this.storage,{cache:this.config.cache,cacheTtl:this.config.cacheTtl,defaultBitrate:this.config.videoBitrate,defaultCodec:this.config.videoCodec,logger:this.logger,maxVideoSize:this.config.maxVideoSize,supportedFormats:this.config.supportedVideoFormats})),t.AudioTransformer&&((!Array.isArray(this.config.supportedAudioFormats)||this.config.supportedAudioFormats.length===0)&&(this.config.supportedAudioFormats=["mp3","wav","ogg","aac","flac","m4a","wma","aiff"]),this.audioTransformer=new t.AudioTransformer(this.storage,{cache:this.config.cache,cacheTtl:this.config.cacheTtl,defaultBitrate:this.config.audioBitrate,defaultCodec:this.config.audioCodec,logger:this.logger,maxAudioSize:this.config.maxAudioSize,supportedFormats:this.config.supportedAudioFormats})),t.AudioTransformer===void 0&&t.ImageTransformer===void 0&&t.VideoTransformer===void 0)throw new Error("MediaTransformer initialization failed: No transformers are configured. At least one transformer (AudioTransformer, ImageTransformer, or VideoTransformer) must be provided in the configuration to enable media processing functionality.")}storage;static{w(this,"MediaTransformer")}imageTransformer;videoTransformer;audioTransformer;config;logger;supportedFormats(){return[...this.config.supportedAudioFormats,...this.config.supportedImageFormats,...this.config.supportedVideoFormats]}async handle(e,t){const a=this.parseQuery(t),r={id:e},o=await this.storage.get(r),n=this.detectMediaType(o.contentType);if(this.validateQueryParameters(a,n),this.config.saveTransformedFiles&&this.hasTransformations(a)){const d=this.generateTransformedFileId(e,a,n);try{const f=await this.storage.get({id:d});return this.logger?.debug?.(`Serving cached transformed file: ${d}`),this.createMediaTransformResult(f,n,o)}catch{this.logger?.debug?.(`Transformed file not found, processing: ${d}`)}}let i;switch(n){case"audio":{if(!this.audioTransformer)throw new Error("Audio transformer not available. Please install audio transformation dependencies or provide an audio transformer instance.");i=await this.handleAudioTransformation(e,a);break}case"image":{if(!this.imageTransformer)throw new Error("Image transformer not available. Please install image transformation dependencies or provide an image transformer instance.");i=await this.handleImageTransformation(e,a);break}case"video":{if(!this.videoTransformer)throw new Error("Video transformer not available. Please install video transformation dependencies or provide a video transformer instance.");i=await this.handleVideoTransformation(e,a);break}default:throw new Error(`Unsupported media type: ${o.contentType}`)}return this.config.saveTransformedFiles&&this.hasTransformations(a)&&await this.saveTransformedFile(i,e,a,n),i}async fetch(e,t){const a=new URLSearchParams(t);return this.handle(e,a)}clearCache(e){this.imageTransformer?.clearCache(e),this.videoTransformer?.clearCache(e),this.audioTransformer?.clearCache(e)}async clearSavedTransformedFiles(){if(this.config.saveTransformedFiles)try{this.logger?.warn?.("clearSavedTransformedFiles requires custom storage implementation to find and delete transformed files")}catch(e){this.logger?.error?.(`Failed to clear saved transformed files: ${e}`)}}async clearSavedTransformedFilesForFile(e){if(this.config.saveTransformedFiles)try{this.logger?.warn?.("clearSavedTransformedFilesForFile requires custom storage implementation")}catch(t){this.logger?.error?.(`Failed to clear saved transformed files for ${e}: ${t}`)}}getCacheStats(){const e={audio:this.audioTransformer?.getCacheStats(),image:this.imageTransformer?.getCacheStats(),video:this.videoTransformer?.getCacheStats()};return e.image===void 0&&delete e.image,e.video===void 0&&delete e.video,e.audio===void 0&&delete e.audio,e}validateQueryParameters(e,t){switch(t){case"audio":{this.validateAudioQueryParameters(e);break}case"image":{this.validateImageQueryParameters(e);break}case"video":{this.validateVideoQueryParameters(e);break}}}validateImageQueryParameters(e){const t=new Set(["alphaQuality","angle","background","bandbool","blur","boolean","brightness","channel","clahe","colourspace","compressionLevel","convolve","cropHeight","cropWidth","delay","dilate","effort","erode","extractChannel","fastShrinkOnLoad","fit","flatten","flip","flop","format","frameRate","gamma","grayscale","greyscale","height","hue","joinChannel","kernel","left","lightness","linear","loop","maxSlope","median","modulate","negate","normalise","normalize","position","quality","recombine","saturation","sharpen","threshold","tint","top","unflatten","width","withoutEnlargement","withoutReduction"]),a=new Set(["bitrate","codec","frameRate","keyFrameInterval","numberOfChannels","sampleRate"]),r=[];for(const i of a)e[i]!==void 0&&r.push(i);if(r.length>0){const i=[...r].toSorted();throw new s(`Invalid query parameters for image transformation: ${i.join(", ")}. Images support: ${[...t].toSorted().join(", ")}. Video/audio parameters (${i.join(", ")}) are not supported for images.`,"INVALID_PARAMS_FOR_IMAGE","image",i,[...t].toSorted())}if(e.fit&&!["contain","cover","fill","inside","outside"].includes(e.fit))throw new s(`Invalid fit value: "${e.fit}". Supported values: "cover", "contain", "fill", "inside", "outside"`,"INVALID_FIT_VALUE","image",["fit"],["cover","contain","fill","inside","outside"]);if(e.format&&!["avif","gif","jpeg","png","tiff","webp"].includes(e.format))throw new s(`Invalid format for image: "${e.format}". Supported formats: jpeg, png, webp, avif, tiff, gif`,"INVALID_FORMAT","image",["format"],["jpeg","png","webp","avif","tiff","gif"]);const o=["left","top","cropWidth","cropHeight"],n=o.filter(i=>e[i]!==void 0);if(n.length>0&&n.length!==o.length)throw new s(`Incomplete crop parameters: ${n.join(", ")}. All crop parameters must be provided: left, top, cropWidth, cropHeight`,"INCOMPLETE_CROP_PARAMS","image",n,o)}validateVideoQueryParameters(e){const t=new Set(["angle","background","bitrate","codec","cropHeight","cropWidth","fit","format","frameRate","height","keyFrameInterval","left","position","quality","top","width","withoutEnlargement","withoutReduction"]),a=new Set(["numberOfChannels","sampleRate"]),r=[];for(const i of a)e[i]!==void 0&&r.push(i);if(r.length>0){const i=[...r].toSorted();throw new s(`Invalid query parameters for video transformation: ${i.join(", ")}. Videos support: ${[...t].toSorted().join(", ")}. Audio-only parameters (${i.join(", ")}) are not supported for videos.`,"INVALID_PARAMS_FOR_VIDEO","video",i,[...t].toSorted())}if(e.fit&&!["contain","cover","fill","inside","outside"].includes(e.fit))throw new s(`Invalid fit value: "${e.fit}". Supported values: "cover", "contain", "fill", "inside", "outside"`,"INVALID_FIT_VALUE","video",["fit"],["cover","contain","fill","inside","outside"]);if(e.codec&&!["av1","avc","hevc","vp8","vp9"].includes(e.codec))throw new s(`Invalid codec for video: "${e.codec}". Supported codecs: avc, hevc, vp8, vp9, av1`,"INVALID_VIDEO_CODEC","video",["codec"],["avc","hevc","vp8","vp9","av1"]);if(e.format&&!["mkv","mp4","ogg","webm"].includes(e.format))throw new s(`Invalid format for video: "${e.format}". Supported formats: mp4, webm, mkv, ogg`,"INVALID_VIDEO_FORMAT","video",["format"],["mp4","webm","mkv","ogg"]);const o=["left","top","cropWidth","cropHeight"],n=o.filter(i=>e[i]!==void 0);if(n.length>0&&n.length!==o.length)throw new s(`Incomplete crop parameters: ${n.join(", ")}. All crop parameters must be provided: left, top, cropWidth, cropHeight`,"INCOMPLETE_CROP_PARAMS","video",n,o);if(e.width!==void 0&&(typeof e.width!="number"||e.width<=0))throw new s(`Invalid width: ${e.width}. Must be a positive number.`,"INVALID_WIDTH","video",["width"],[]);if(e.height!==void 0&&(typeof e.height!="number"||e.height<=0))throw new s(`Invalid height: ${e.height}. Must be a positive number.`,"INVALID_HEIGHT","video",["height"],[]);if(e.bitrate!==void 0&&(typeof e.bitrate!="number"||e.bitrate<=0))throw new s(`Invalid bitrate: ${e.bitrate}. Must be a positive number.`,"INVALID_BITRATE","video",["bitrate"],[]);if(e.frameRate!==void 0&&(typeof e.frameRate!="number"||e.frameRate<=0))throw new s(`Invalid frameRate: ${e.frameRate}. Must be a positive number.`,"INVALID_FRAME_RATE","video",["frameRate"],[]);if(e.keyFrameInterval!==void 0&&(typeof e.keyFrameInterval!="number"||e.keyFrameInterval<=0))throw new s(`Invalid keyFrameInterval: ${e.keyFrameInterval}. Must be a positive number.`,"INVALID_KEY_FRAME_INTERVAL","video",["keyFrameInterval"],[])}generateTransformedFileId(e,t,a){const r=Object.keys(t).filter(i=>t[i]!==void 0).toSorted().map(i=>`${i}:${t[i]}`).join("|"),o=`${e}|${a}|${r}`,n=u("sha256").update(o).digest("hex").slice(0,32);return`${e}_transformed_${n}`}hasTransformations(e){return this.hasImageTransformations(e)||this.hasVideoTransformations(e)||this.hasAudioTransformations(e)}createMediaTransformResult(e,t,a){const r={buffer:e.content,format:this.getFormatFromContentType(e.contentType||""),mediaType:t,originalFile:a,size:e.content.length};switch(t){case"audio":return{...r,bitrate:e.bitrate,duration:e.duration,mediaType:"audio",numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate};case"image":return{...r,height:e.height,mediaType:"image",width:e.width};case"video":return{...r,bitrate:e.bitrate,duration:e.duration,height:e.height,mediaType:"video",width:e.width};default:return r}}getFormatFromContentType(e){return e?l.getExtension(e)||"application/octet-stream":""}async saveTransformedFile(e,t,a,r){try{const o=this.generateTransformedFileId(t,a,r),n={format:e.format,mediaType:r,originalFileId:t,size:e.size,transformation:a,transformedAt:new Date().toISOString()};r==="image"&&e.width&&e.height?(n.width=e.width,n.height=e.height):r==="video"&&e.width&&e.height?(n.width=e.width,n.height=e.height,n.duration=e.duration,n.bitrate=e.bitrate):r==="audio"&&(n.duration=e.duration,n.numberOfChannels=e.numberOfChannels,n.sampleRate=e.sampleRate,n.bitrate=e.bitrate);const i=await this.storage.create({contentType:l.getType(e.format)??void 0,id:o,metadata:n,originalName:`${o}.${e.format}`,size:e.size});await this.storage.write({body:g.from(e.buffer),contentLength:e.size,id:i.id,start:0}),this.logger?.debug?.(`Saved transformed file: ${o}`)}catch(o){this.logger?.error?.(`Failed to save transformed file: ${o}`)}}validateAudioQueryParameters(e){const t=new Set(["bitrate","codec","format","numberOfChannels","quality","sampleRate"]),a=new Set(["angle","background","cropHeight","cropWidth","fit","frameRate","height","keyFrameInterval","left","position","top","width","withoutEnlargement","withoutReduction"]),r=[];for(const o of a)e[o]!==void 0&&r.push(o);if(r.length>0){const o=[...r].toSorted();throw new s(`Invalid query parameters for audio transformation: ${o.join(", ")}. Audio supports: ${[...t].toSorted().join(", ")}. Video-only parameters (${o.join(", ")}) are not supported for audio.`,"INVALID_PARAMS_FOR_AUDIO","audio",o,[...t].toSorted())}if(e.codec&&!["aac","flac","mp3","opus","vorbis"].includes(e.codec))throw new s(`Invalid codec for audio: "${e.codec}". Supported codecs: aac, opus, mp3, vorbis, flac`,"INVALID_AUDIO_CODEC","audio",["codec"],["aac","opus","mp3","vorbis","flac"]);if(e.format&&!["aac","flac","mp3","ogg","wav"].includes(e.format))throw new s(`Invalid format for audio: "${e.format}". Supported formats: mp3, wav, ogg, aac, flac`,"INVALID_AUDIO_FORMAT","audio",["format"],["mp3","wav","ogg","aac","flac"]);if(e.bitrate!==void 0&&(typeof e.bitrate!="number"||e.bitrate<=0))throw new s(`Invalid bitrate: ${e.bitrate}. Must be a positive number.`,"INVALID_BITRATE","audio",["bitrate"],[]);if(e.numberOfChannels!==void 0&&(typeof e.numberOfChannels!="number"||e.numberOfChannels<=0||e.numberOfChannels>8))throw new s(`Invalid numberOfChannels: ${e.numberOfChannels}. Must be a number between 1 and 8.`,"INVALID_CHANNEL_COUNT","audio",["numberOfChannels"],["1","2","3","4","5","6","7","8"]);if(e.sampleRate!==void 0){const o=[8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,192e3];if(typeof e.sampleRate!="number"||!o.includes(e.sampleRate))throw new s(`Invalid sampleRate: ${e.sampleRate}. Supported sample rates: ${o.join(", ")}`,"INVALID_SAMPLE_RATE","audio",["sampleRate"],o.map(String))}}async handleImageTransformation(e,t){const a=[];this.hasImageTransformations(t)&&((t.width||t.height||t.fit)&&a.push({options:{fit:t.fit,height:t.height,position:t.position,width:t.width,withoutEnlargement:t.withoutEnlargement,withoutReduction:t.withoutReduction},type:"resize"}),t.left!==void 0&&t.top!==void 0&&t.cropWidth&&t.cropHeight&&a.push({options:{height:t.cropHeight,left:t.left,top:t.top,width:t.cropWidth},type:"crop"}),t.angle&&a.push({options:{angle:t.angle,background:t.background},type:"rotate"}),t.format?a.push({options:{format:t.format,quality:t.quality},type:"format"}):t.quality&&a.push({options:{quality:t.quality},type:"quality"}));const r=a.length>0?await this.imageTransformer.transform(e,a):await this.imageTransformer.transform(e,[]);return this.convertImageResult(r)}async handleVideoTransformation(e,t){const a=[];this.hasVideoTransformations(t)&&((t.width||t.height||t.fit)&&a.push({options:{fit:t.fit,height:t.height,position:t.position,width:t.width,withoutEnlargement:t.withoutEnlargement,withoutReduction:t.withoutReduction},type:"resize"}),t.left!==void 0&&t.top!==void 0&&t.cropWidth&&t.cropHeight&&a.push({options:{height:Number(t.cropHeight),left:t.left,top:t.top,width:t.cropWidth},type:"crop"}),t.angle&&a.push({options:{angle:t.angle,background:t.background},type:"rotate"}),(t.codec||t.bitrate)&&a.push({options:{bitrate:t.bitrate||t.quality,codec:t.codec,frameRate:t.frameRate,keyFrameInterval:t.keyFrameInterval},type:"codec"}),t.format&&a.push({options:{format:t.format},type:"format"}));const r=a.length>0?await this.videoTransformer.transform(e,a):await this.videoTransformer.transform(e,[]);return this.convertVideoResult(r)}async handleAudioTransformation(e,t){const a=[];this.hasAudioTransformations(t)&&(t.sampleRate&&a.push({options:{sampleRate:t.sampleRate},type:"resample"}),t.numberOfChannels&&a.push({options:{numberOfChannels:t.numberOfChannels},type:"channels"}),(t.codec||t.bitrate)&&a.push({options:{bitrate:t.bitrate||t.quality,codec:t.codec},type:"codec"}),t.format&&a.push({options:{format:t.format},type:"format"}));const r=a.length>0?await this.audioTransformer.transform(e,a):await this.audioTransformer.transform(e,[]);return this.convertAudioResult(r)}parseQuery(e){if(typeof e=="string")return this.parseURLSearchParams(new URLSearchParams(e));if(e instanceof URLSearchParams)return this.parseURLSearchParams(e);const t=e;return e.left&&(t.left=Number.parseInt(e.left,10)),e.top&&(t.top=Number.parseInt(e.top,10)),e.cropWidth&&(t.cropWidth=Number.parseInt(e.cropWidth,10)),e.cropHeight&&(t.cropHeight=Number.parseInt(e.cropHeight,10)),e.angle&&(t.angle=Number.parseInt(e.angle,10)),e.quality&&(t.quality=Number.parseInt(e.quality,10)),e.width&&(t.width=Number.parseInt(e.width,10)),e.height&&(t.height=Number.parseInt(e.height,10)),e.bitrate&&(t.bitrate=Number.parseInt(e.bitrate,10)),e.frameRate&&(t.frameRate=Number.parseInt(e.frameRate,10)),e.keyFrameInterval&&(t.keyFrameInterval=Number.parseInt(e.keyFrameInterval,10)),e.numberOfChannels&&(t.numberOfChannels=Number.parseInt(e.numberOfChannels,10)),e.sampleRate&&(t.sampleRate=Number.parseInt(e.sampleRate,10)),t}parseBooleanParameter(e){if(e!==null)return e==="true"||e==="1"}parseURLSearchParams(e){const t={};if(e.has("format")&&(t.format=e.get("format")??void 0),e.has("quality")&&(t.quality=e.get("quality")?Number.parseInt(e.get("quality"),10):void 0),e.has("width")&&(t.width=e.get("width")?Number.parseInt(e.get("width"),10):void 0),e.has("height")&&(t.height=e.get("height")?Number.parseInt(e.get("height"),10):void 0),e.has("fit")){const a=e.get("fit");a&&["contain","cover","fill","inside","outside"].includes(a)&&(t.fit=a)}if(e.has("position")&&(t.position=e.get("position")??void 0),e.has("withoutEnlargement")){const a=e.get("withoutEnlargement");t.withoutEnlargement=a==="true"?!0:void 0}if(e.has("withoutReduction")){const a=e.get("withoutReduction");t.withoutReduction=a==="true"?!0:void 0}if(e.has("left")&&(t.left=e.get("left")?Number.parseInt(e.get("left"),10):void 0),e.has("top")&&(t.top=e.get("top")?Number.parseInt(e.get("top"),10):void 0),e.has("cropWidth")&&(t.cropWidth=e.get("cropWidth")?Number.parseInt(e.get("cropWidth"),10):void 0),e.has("cropHeight")&&(t.cropHeight=e.get("cropHeight")?Number.parseInt(e.get("cropHeight"),10):void 0),e.has("angle")){const a=e.get("angle")?Number.parseInt(e.get("angle"),10):void 0;a!==void 0&&(t.angle=a)}if(e.has("background")&&(t.background=e.get("background")??void 0),e.has("blur")&&(t.blur=this.parseBooleanParameter(e.get("blur"))),e.has("sharpen")&&(t.sharpen=this.parseBooleanParameter(e.get("sharpen"))),e.has("median")&&(t.median=e.get("median")?Number.parseInt(e.get("median"),10):void 0),e.has("clahe")&&(t.clahe=this.parseBooleanParameter(e.get("clahe"))),e.has("threshold")&&(t.threshold=e.get("threshold")?Number.parseInt(e.get("threshold"),10):void 0),e.has("gamma")&&(t.gamma=this.parseBooleanParameter(e.get("gamma"))),e.has("negate")&&(t.negate=this.parseBooleanParameter(e.get("negate"))),(e.has("normalise")||e.has("normalize"))&&(t.normalise=this.parseBooleanParameter(e.get("normalise"))||this.parseBooleanParameter(e.get("normalize"))),e.has("flatten")&&(t.flatten=this.parseBooleanParameter(e.get("flatten"))),e.has("unflatten")&&(t.unflatten=this.parseBooleanParameter(e.get("unflatten"))),e.has("flip")&&(t.flip=this.parseBooleanParameter(e.get("flip"))),e.has("flop")&&(t.flop=this.parseBooleanParameter(e.get("flop"))),e.has("affine")&&(t.affine=this.parseBooleanParameter(e.get("affine"))),e.has("dilate")&&(t.dilate=this.parseBooleanParameter(e.get("dilate"))),e.has("erode")&&(t.erode=this.parseBooleanParameter(e.get("erode"))),e.has("pipelineColourspace")&&(t.pipelineColourspace=this.parseBooleanParameter(e.get("pipelineColourspace"))),e.has("toColourspace")&&(t.toColourspace=this.parseBooleanParameter(e.get("toColourspace"))),e.has("removeAlpha")&&(t.removeAlpha=this.parseBooleanParameter(e.get("removeAlpha"))),e.has("ensureAlpha")&&(t.ensureAlpha=this.parseBooleanParameter(e.get("ensureAlpha"))),(e.has("greyscale")||e.has("grayscale"))&&(t.greyscale=this.parseBooleanParameter(e.get("greyscale"))||this.parseBooleanParameter(e.get("grayscale"))),e.has("modulate")&&(t.modulate=this.parseBooleanParameter(e.get("modulate"))),e.has("tint")&&(t.tint=this.parseBooleanParameter(e.get("tint"))),e.has("brightness")&&(t.brightness=e.get("brightness")?Number.parseFloat(e.get("brightness")):void 0),e.has("saturation")&&(t.saturation=e.get("saturation")?Number.parseFloat(e.get("saturation")):void 0),e.has("hue")&&(t.hue=e.get("hue")?Number.parseInt(e.get("hue"),10):void 0),e.has("lightness")&&(t.lightness=e.get("lightness")?Number.parseInt(e.get("lightness"),10):void 0),e.has("kernel")&&(t.kernel=e.get("kernel")??void 0),e.has("fastShrinkOnLoad")&&(t.fastShrinkOnLoad=e.get("fastShrinkOnLoad")==="true"),e.has("codec")){const a=e.get("codec");a&&["avc","hevc","vp8","vp9","av1","aac","opus","mp3","vorbis","flac"].includes(a)&&(t.codec=a)}return e.has("bitrate")&&(t.bitrate=e.get("bitrate")?Number.parseInt(e.get("bitrate"),10):void 0),e.has("frameRate")&&(t.frameRate=e.get("frameRate")?Number.parseInt(e.get("frameRate"),10):void 0),e.has("keyFrameInterval")&&(t.keyFrameInterval=e.get("keyFrameInterval")?Number.parseInt(e.get("keyFrameInterval"),10):void 0),e.has("numberOfChannels")&&(t.numberOfChannels=e.get("numberOfChannels")?Number.parseInt(e.get("numberOfChannels"),10):void 0),e.has("sampleRate")&&(t.sampleRate=e.get("sampleRate")?Number.parseInt(e.get("sampleRate"),10):void 0),t}detectMediaType(e){if(!e)throw new Error("Cannot detect media type: no content type provided");if(!v(e))throw new Error(`Unknown or invalid content type: ${e}`);if(e.startsWith("image/"))return"image";if(e.startsWith("video/"))return"video";if(e.startsWith("audio/"))return"audio";throw new Error(`Unsupported media type for content type: ${e}`)}hasImageTransformations(e){return!!(e.width||e.height||e.fit||e.position||e.withoutEnlargement||e.withoutReduction||e.left!==void 0||e.top!==void 0||e.cropWidth||e.cropHeight||e.angle!==void 0||e.background||e.blur||e.sharpen||e.median||e.clahe||e.threshold!==void 0||e.gamma||e.negate||e.normalise||e.flatten||e.unflatten||e.flip||e.flop||e.greyscale||e.modulate||e.tint||e.brightness!==void 0||e.saturation!==void 0||e.hue!==void 0||e.lightness!==void 0||e.kernel||e.fastShrinkOnLoad||e.affine||e.dilate||e.erode||e.pipelineColourspace||e.toColourspace||e.removeAlpha||e.ensureAlpha||e.format||e.quality)}hasVideoTransformations(e){return!!(e.width||e.height||e.fit||e.position||e.withoutEnlargement||e.withoutReduction||e.left!==void 0||e.top!==void 0||e.cropWidth||e.cropHeight||e.angle||e.background||e.codec||e.bitrate||e.frameRate||e.keyFrameInterval||e.format||e.quality)}hasAudioTransformations(e){return!!(e.sampleRate||e.numberOfChannels||e.codec||e.bitrate||e.format||e.quality)}convertImageResult(e){return{buffer:e.buffer,format:e.format,height:e.height,mediaType:"image",originalFile:e.originalFile,size:e.size,width:e.width}}convertVideoResult(e){return{bitrate:e.bitrate,buffer:e.buffer,duration:e.duration,format:e.format,height:e.height,mediaType:"video",originalFile:e.originalFile,size:e.size,width:e.width}}convertAudioResult(e){return{bitrate:e.bitrate,buffer:e.buffer,duration:e.duration,format:e.format,mediaType:"audio",numberOfChannels:e.numberOfChannels,originalFile:e.originalFile,sampleRate:e.sampleRate,size:e.size}}}export{S as default};
@@ -0,0 +1 @@
1
+ var s=Object.defineProperty;var r=(t,e)=>s(t,"name",{value:e,configurable:!0});var o=Object.defineProperty,a=r((t,e)=>o(t,"name",{value:e,configurable:!0}),"r");class f{static{r(this,"o")}static{a(this,"MetaStorage")}prefix="";suffix="";logger;constructor(e){this.prefix=e?.prefix??"",this.suffix=e?.suffix??".META",this.logger=e?.logger}async save(e,i){return i}async delete(e){throw new Error("Not implemented")}async get(e){throw new Error("Not implemented")}async touch(e,i){throw new Error("Not implemented")}getMetaName(e){return this.prefix+e+this.suffix}getIdFromMetaName(e){return e.slice(this.prefix.length,-this.suffix.length)}}export{f as default};
@@ -0,0 +1 @@
1
+ var u=Object.defineProperty;var l=(e,t)=>u(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,p=l((e,t)=>d(e,"name",{value:t,configurable:!0}),"o");const c=p(e=>e!==null&&typeof e=="object"&&!Array.isArray(e),"isRecord");var g=Object.defineProperty,n=l((e,t)=>g(e,"name",{value:t,configurable:!0}),"i");const y=" ".codePointAt(0)??32,m=",".codePointAt(0)??44,v=/^[\d+/A-Z]*={0,2}$/i,b=n(e=>{if(typeof e!="string")return!1;const t=Number.parseFloat(e);return!Number.isNaN(t)&&Number.isFinite(t)},"isNumeric");class j{static{l(this,"Metadata")}static{n(this,"Metadata")}psize;pname;pfiletype;ptype;pmimeType;pcontentType;ptitle;pfilename;poriginalName;plastModified}const A=n(e=>c(e),"isMetadata"),h=n(e=>{if(e.length===0)return!1;for(let t=0;t<e.length;t+=1){const a=e.codePointAt(t);if(a>127||a===y||a===m)return!1}return!0},"validateKey"),M=n(e=>e.length%4!==0?!1:v.test(e),"validateValue"),O=n(e=>Object.entries(e).map(([t,a])=>{if(a==null)return t;const i=typeof a=="object"?JSON.stringify(a):String(a),o=Buffer.from(i,"utf8").toString("base64");return`${t} ${o}`}).join(","),"stringifyMetadata"),P=n(e=>{const t={};if(!e||e.trim().length===0)throw new Error("Metadata string is not valid");for(const a of e.split(",")){const i=a.split(" "),[o,f]=i;if((i.length===1||i.length===2)&&h(o)&&(i.length===1||M(f))&&!(o in t)){let r="";i.length===1?r=void 0:f&&(r=Buffer.from(f,"base64").toString("utf8"));let s=r;if(r!==void 0)try{s=JSON.parse(r)}catch{r==="true"?s=!0:r==="false"?s=!1:b(r)&&(s=Number(r))}t[o]=s}else throw new Error("Metadata string is not valid")}return t},"parseMetadata");export{j as Metadata,A as isMetadata,P as parseMetadata,O as stringifyMetadata,h as validateKey,M as validateValue};
@@ -0,0 +1 @@
1
+ var l=Object.defineProperty;var d=(s,t)=>l(s,"name",{value:t,configurable:!0});import{Readable as a}from"node:stream";import{parseMultipartRequest as m,MaxFileSizeExceededError as u,MultipartParseError as f}from"@remix-run/multipart-parser/node";import{n as i}from"./headers-DC2MEOrK.js";import{g as h}from"./base-handler-core-BYDQditz.js";import{b as c}from"./storage-Dh0tJh7j.js";import{F as p}from"./base-handler-node-Dety2rQB.js";import{F as g}from"./multipart-base-BxckfvQf.js";var x=Object.defineProperty,F=d((s,t)=>x(s,"name",{value:t,configurable:!0}),"d");const S=/^multipart\/.+|application\/x-www-form-urlencoded$/i;class O extends p{static{d(this,"x")}static{F(this,"Multipart")}static methods=["delete","download","get","options","post"];multipartBase;maxFileSize;maxHeaderSize;constructor(t){super(t),this.maxFileSize=t.maxFileSize??Math.min(this.storage.maxUploadSize,1024*1024*1024),this.maxHeaderSize=t.maxHeaderSize??64*1024;const e=this;this.multipartBase=new class extends g{get storage(){return e.storage}get maxFileSize(){return e.maxFileSize}get maxHeaderSize(){return e.maxHeaderSize}buildFileUrl(r,o){return e.buildFileUrl({url:r},o)}createStreamFromBytes(r){return r instanceof Uint8Array||Buffer.isBuffer(r)?a.from(Buffer.from(r)):typeof r=="number"?a.from(Buffer.alloc(0)):a.from(Buffer.from(String(r)))}createEmptyStream(){return a.from(new Uint8Array(0))}}}async post(t){if(!S.test(t.headers["content-type"]?.split(";")[0]??""))throw i(400,"Invalid content-type");try{const e=[];for await(const n of m(t,{maxFileSize:this.maxFileSize,maxHeaderSize:this.maxHeaderSize}))e.push(n);const r=e.find(n=>n.isFile);if(!r)throw i(400,"No file found in multipart request");const o=t.originalUrl||t.url||"";return this.multipartBase.handlePost(r,e,o)}catch(e){throw e instanceof u?i(413,"File size limit exceeded"):e instanceof f?i(400,"Invalid multipart request"):e instanceof c&&e.statusCode?i(e.statusCode,e.message||e.body||"Validation failed"):e}}async delete(t){try{const e=h(t);return this.multipartBase.handleDelete(e)}catch(e){throw this.checkForUndefinedIdOrPath(e),e.code==="ENOENT"?i(404,"File not found"):e}}compose(){this.registeredHandlers.set("POST",this.post.bind(this)),this.registeredHandlers.set("DELETE",this.delete.bind(this)),this.registeredHandlers.set("GET",this.get.bind(this)),this.registeredHandlers.set("OPTIONS",this.options.bind(this)),this.logger?.debug("Registered handler: %s",[...this.registeredHandlers.keys()].join(", "))}}export{O as default};
@@ -0,0 +1 @@
1
+ var u=Object.defineProperty;var l=(s,t)=>u(s,"name",{value:t,configurable:!0});import{Readable as o}from"node:stream";import{parseMultipartRequest as c,MaxFileSizeExceededError as f,MultipartParseError as p}from"@remix-run/multipart-parser";import{n as i}from"./headers-DC2MEOrK.js";import{b as g,B as x}from"./storage-Dh0tJh7j.js";import{O as S}from"./base-handler-fetch-DWzsPkmV.js";import{F as y}from"./multipart-base-BxckfvQf.js";var w=Object.defineProperty,d=l((s,t)=>w(s,"name",{value:t,configurable:!0}),"l");const z=/^multipart\/.+|application\/x-www-form-urlencoded$/i,F=d(s=>{let t;try{const r=new URL(s).pathname.split("/").filter(Boolean);t=r[r.length-1]||void 0}catch{return}if(t){try{x.assertSafeId(t)}catch{throw i(400,`Invalid file id: "${t}"`)}return t}},"getIdFromRequestUrl");class m extends S{static{l(this,"d")}static{d(this,"Multipart")}static methods=["delete","download","get","options","post"];multipartBase;maxFileSize;maxHeaderSize;constructor(t){super(t),this.maxFileSize=t.maxFileSize??Math.min(this.storage.maxUploadSize,1024*1024*1024),this.maxHeaderSize=t.maxHeaderSize??64*1024;const r=this;this.multipartBase=new class extends y{get storage(){return r.storage}get maxFileSize(){return r.maxFileSize}get maxHeaderSize(){return r.maxHeaderSize}buildFileUrl(e,a){return r.buildFileUrl({url:e},a)}createStreamFromBytes(e){return e instanceof Uint8Array?o.from(Buffer.from(e)):e instanceof ArrayBuffer?o.from(Buffer.from(e)):o.from(new Uint8Array(0))}createEmptyStream(){return o.from(new Uint8Array(0))}}}async post(t){const r=t.headers.get("content-type")||"";if(!z.test(r.split(";")[0]||""))throw i(400,"Invalid content-type");try{const e=[];for await(const n of c(t,{maxFileSize:this.maxFileSize,maxHeaderSize:this.maxHeaderSize}))e.push(n);const a=e.find(n=>n.isFile);if(!a)throw i(400,"No file found in multipart request");const h=t.url;return this.multipartBase.handlePost(a,e,h)}catch(e){throw e instanceof f?i(413,"File size limit exceeded"):e instanceof p?i(400,"Invalid multipart request"):e instanceof g&&e.statusCode?i(e.statusCode,e.message||e.body||"Validation failed"):e}}async delete(t){const r=F(t.url);if(!r)throw i(404,"File not found");try{return this.multipartBase.handleDelete(r)}catch(e){throw e.code==="ENOENT"?i(404,"File not found"):e}}async options(t){return{headers:{"Access-Control-Allow-Methods":(this.constructor.methods||m.methods).map(r=>r.toUpperCase()).join(", ")},statusCode:204}}async get(t){throw i(500,"GET requests should be handled via fetch() method")}compose(){this.registeredHandlers.set("POST",this.post.bind(this)),this.registeredHandlers.set("DELETE",this.delete.bind(this)),this.registeredHandlers.set("GET",this.get.bind(this)),this.registeredHandlers.set("OPTIONS",this.options.bind(this)),this.logger?.debug("Registered handler: %s",[...this.registeredHandlers.keys()].join(", "))}}export{m as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(e,t)=>r(e,"name",{value:t,configurable:!0});import l from"./File-BhfUgJjs.js";var i=Object.defineProperty,o=a((e,t)=>i(e,"name",{value:t,configurable:!0}),"e");class n extends l{static{a(this,"p")}static{o(this,"NetlifyBlobFile")}url;pathname}export{n as default};
@@ -0,0 +1 @@
1
+ var r=Object.defineProperty;var a=(t,e)=>r(t,"name",{value:e,configurable:!0});import{v as o}from"./local-meta-storage-Bi0mK6gD.js";var s=Object.defineProperty,l=a((t,e)=>s(t,"name",{value:e,configurable:!0}),"a");class u extends o{static{a(this,"l")}static{l(this,"NetlifyBlobMetaStorage")}constructor(e){super(e)}}export{u as default};