@visulima/storage 1.0.0-alpha.28 → 1.0.0-alpha.29

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 (190) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +2 -2
  3. package/dist/adapter/nuxt/module.d.ts +4 -4
  4. package/dist/adapter/nuxt/node_modules/.bin/nuxi +2 -2
  5. package/dist/adapter/nuxt/node_modules/.bin/nuxt +2 -2
  6. package/dist/ai/ai-sdk/index.d.ts +3 -3
  7. package/dist/ai/claude/index.d.ts +2 -2
  8. package/dist/ai/openai/index.d.ts +3 -3
  9. package/dist/ai/tanstack/index.d.ts +2 -2
  10. package/dist/handler/http/fetch/index.d.ts +7 -7
  11. package/dist/handler/http/fetch/index.js +1 -1
  12. package/dist/handler/http/hono/index.d.ts +4 -4
  13. package/dist/handler/http/hono/index.js +1 -1
  14. package/dist/handler/http/nextjs/index.d.ts +4 -4
  15. package/dist/handler/http/nextjs/index.js +1 -1
  16. package/dist/handler/http/node/index.d.ts +7 -7
  17. package/dist/handler/http/node/index.js +1 -1
  18. package/dist/handler/http/solid-start/index.d.ts +4 -4
  19. package/dist/handler/http/solid-start/index.js +1 -1
  20. package/dist/index.d.ts +5 -5
  21. package/dist/index.js +1 -1
  22. package/dist/packem_shared/{AwsLightMetaStorage-DHz1nf_H.js → AwsLightMetaStorage-B-iQbToR.js} +1 -1
  23. package/dist/packem_shared/AwsLightStorage-w21RxjUm.js +1 -0
  24. package/dist/packem_shared/AzureSMetaStorage-CR-lfQNQ.js +1 -0
  25. package/dist/packem_shared/AzureStorage-2kl7JDXs.js +1 -0
  26. package/dist/packem_shared/BoxMetaStorage-DLdXbZaV.js +1 -0
  27. package/dist/packem_shared/BoxStorage-BUeEJoGL.js +1 -0
  28. package/dist/packem_shared/BunS3File-D-SRiyrm.js +1 -0
  29. package/dist/packem_shared/BunS3MetaStorage-Bv_CTTMz.js +1 -0
  30. package/dist/packem_shared/BunS3Storage-WM3rF6Fw.js +1 -0
  31. package/dist/packem_shared/BunnyMetaStorage-DNMTSeoN.js +1 -0
  32. package/dist/packem_shared/BunnyStorage-D3s2fRB3.js +1 -0
  33. package/dist/packem_shared/CloudinaryFile-B5-m33eS.js +1 -0
  34. package/dist/packem_shared/CloudinaryMetaStorage-DEBk5eQy.js +1 -0
  35. package/dist/packem_shared/CloudinaryStorage-BBE2-aVz.js +1 -0
  36. package/dist/packem_shared/DiskStorage-DL0GiG6k.js +1 -0
  37. package/dist/packem_shared/{DiskStorageWithChecksum-CbXWpSOr.js → DiskStorageWithChecksum-BvUTn7O-.js} +1 -1
  38. package/dist/packem_shared/{DropboxMetaStorage-CICuUZ1n.js → DropboxMetaStorage-C6vj1QDA.js} +1 -1
  39. package/dist/packem_shared/DropboxStorage-BL3OIdE_.js +1 -0
  40. package/dist/packem_shared/{Files-BhvjnhTE.js → Files-CJh9_N-9.js} +1 -1
  41. package/dist/packem_shared/FirebaseFile-JEu3plMP.js +1 -0
  42. package/dist/packem_shared/FirebaseMetaStorage-CzyOim-J.js +1 -0
  43. package/dist/packem_shared/FirebaseStorage-lXMXy3Pm.js +2 -0
  44. package/dist/packem_shared/FtpFile-B8jaICTB.js +1 -0
  45. package/dist/packem_shared/FtpMetaStorage-1Njy0DpU.js +1 -0
  46. package/dist/packem_shared/FtpStorage-Dw94efNW.js +1 -0
  47. package/dist/packem_shared/{GCSMetaStorage-Cm_Pse62.js → GCSMetaStorage-DvRxZhmq.js} +1 -1
  48. package/dist/packem_shared/GCStorage-U4f4WsWC.js +1 -0
  49. package/dist/packem_shared/{GoogleDriveMetaStorage-rghGy3Fa.js → GoogleDriveMetaStorage-WGuUZPyx.js} +1 -1
  50. package/dist/packem_shared/GoogleDriveStorage-C0NhBBWH.js +1 -0
  51. package/dist/packem_shared/{LocalMetaStorage-B5uh1snG.js → LocalMetaStorage-QMKL7McF.js} +1 -1
  52. package/dist/packem_shared/{Multipart-7FSSy2n1.js → Multipart-CIFfQksD.js} +1 -1
  53. package/dist/packem_shared/{Multipart-DACQFsrn.js → Multipart-D9WIud9R.js} +1 -1
  54. package/dist/packem_shared/NetlifyBlobMetaStorage-ClIFdTkT.js +1 -0
  55. package/dist/packem_shared/NetlifyBlobStorage-CO89TGvF.js +1 -0
  56. package/dist/packem_shared/OneDriveMetaStorage-DS4f83X2.js +1 -0
  57. package/dist/packem_shared/OneDriveStorage-jAN46vRm.js +1 -0
  58. package/dist/packem_shared/PocketBaseFile-CkAiSBb0.js +1 -0
  59. package/dist/packem_shared/PocketBaseMetaStorage-B6utPncj.js +1 -0
  60. package/dist/packem_shared/PocketBaseStorage-DpOjOKAt.js +1 -0
  61. package/dist/packem_shared/{Rest-5NwM1xYj.js → Rest-BuD3ySAg.js} +1 -1
  62. package/dist/packem_shared/{Rest-y8Vz2Rt0.js → Rest-URrQ5FYM.js} +1 -1
  63. package/dist/packem_shared/S3Storage-n1ohEZj4.js +1 -0
  64. package/dist/packem_shared/SftpFile-CQCxZNVq.js +1 -0
  65. package/dist/packem_shared/SftpMetaStorage-DYqXwCdM.js +1 -0
  66. package/dist/packem_shared/SftpStorage-Ban-WN8v.js +1 -0
  67. package/dist/packem_shared/SharePointFile-BA6X9Sxr.js +1 -0
  68. package/dist/packem_shared/SharePointMetaStorage-DVM5-X6g.js +1 -0
  69. package/dist/packem_shared/SharePointStorage-BY90zh1c.js +1 -0
  70. package/dist/packem_shared/SupabaseMetaStorage-ivXoYVUu.js +1 -0
  71. package/dist/packem_shared/SupabaseStorage-pNbHAE1Y.js +1 -0
  72. package/dist/packem_shared/{Tus-CJMcygk7.js → Tus-Fp_hx5ug.js} +1 -1
  73. package/dist/packem_shared/{Tus-BCVAbJIi.js → Tus-TNG9HAY8.js} +1 -1
  74. package/dist/packem_shared/UploadThingMetaStorage-BvKNzgm7.js +1 -0
  75. package/dist/packem_shared/UploadThingStorage-BcmIE2dI.js +1 -0
  76. package/dist/packem_shared/{VercelBlobMetaStorage-Do9ZoKrl.js → VercelBlobMetaStorage-CwaqWucZ.js} +1 -1
  77. package/dist/packem_shared/VercelBlobStorage-C89IUiQ1.js +1 -0
  78. package/dist/packem_shared/alibaba-BJQ6ijoK.js +1 -0
  79. package/dist/packem_shared/aws-light-meta-storage-CstQBYXG.js +4 -0
  80. package/dist/packem_shared/azure-meta-storage-C4SrMtT2.js +1 -0
  81. package/dist/packem_shared/{base-handler-core-BfwZ1RS1.js → base-handler-core-BYDQditz.js} +1 -1
  82. package/dist/packem_shared/{base-handler-fetch-CLxqXTQf.js → base-handler-fetch-DWzsPkmV.js} +1 -1
  83. package/dist/packem_shared/{base-handler-node-DBZjcqsp.js → base-handler-node-Dety2rQB.js} +1 -1
  84. package/dist/packem_shared/defaultCloudStorageFileNameValidation-shIZX_7L.js +1 -0
  85. package/dist/packem_shared/disk-storage-CKAJvhcj.js +1 -0
  86. package/dist/packem_shared/{disk-storage-with-checksum.d-8gCPEZZC.d.ts → disk-storage-with-checksum.d-mHcg2uLw.d.ts} +1 -1
  87. package/dist/packem_shared/{executors.d-DgroC6pk.d.ts → executors.d-X4hz3zfu.d.ts} +1 -1
  88. package/dist/packem_shared/exoscale-O0HzxoDz.js +1 -0
  89. package/dist/packem_shared/filebase-D-urO4Ob.js +1 -0
  90. package/dist/packem_shared/{gcs-meta-storage-DibQBpU8.js → gcs-meta-storage-Br_I-m9X.js} +1 -1
  91. package/dist/packem_shared/ibmCos-Rx_yku4H.js +1 -0
  92. package/dist/packem_shared/idriveE2-BFhw0Vwy.js +1 -0
  93. package/dist/packem_shared/index-B4ETk0Lu.js +5 -0
  94. package/dist/packem_shared/{index.d-CKaAalRr.d.ts → index.d-C4Fivh4I.d.ts} +1 -1
  95. package/dist/packem_shared/isRetryableError-BhizNeAz.js +1 -0
  96. package/dist/packem_shared/{local-meta-storage-CT1audnK.js → local-meta-storage-Bi0mK6gD.js} +1 -1
  97. package/dist/packem_shared/{local-meta-storage.d-KWaPZTSN.d.ts → local-meta-storage.d-B11vHYNm.d.ts} +1 -1
  98. package/dist/packem_shared/{media-transformer.d-Dt9W_its.d.ts → media-transformer.d-j1W9HAXw.d.ts} +2 -2
  99. package/dist/packem_shared/oracleCloud-D5T9s4JV.js +1 -0
  100. package/dist/packem_shared/ovhCloud-DCwef2fe.js +1 -0
  101. package/dist/packem_shared/posix-dirname-CiHXPPnw.js +1 -0
  102. package/dist/packem_shared/{rest-base-CCv78k7h.js → rest-base-DI7xFXr5.js} +1 -1
  103. package/dist/packem_shared/s3-base-storage-Dbexfg7p.js +1 -0
  104. package/dist/packem_shared/{s3-base-storage.d-DTxJKx3M.d.ts → s3-base-storage.d-V3N2nKCt.d.ts} +31 -22
  105. package/dist/packem_shared/scaleway-ygRXOss9.js +1 -0
  106. package/dist/packem_shared/storage-Dh0tJh7j.js +1 -0
  107. package/dist/packem_shared/{storage.d-D9YA4MRs.d.ts → storage.d-RteRC-cG.d.ts} +131 -65
  108. package/dist/packem_shared/tencent-CAcAGaIW.js +1 -0
  109. package/dist/packem_shared/{tus-base.d-BeCT7hH6.d.ts → tus-base.d-wZsb3umJ.d.ts} +3 -3
  110. package/dist/packem_shared/{types.d-P2Kxr4cB.d.ts → types.d-B5qPfCr5.d.ts} +2 -2
  111. package/dist/packem_shared/types.d-ChNXbbHG.d.ts +104 -0
  112. package/dist/packem_shared/{types.d-CBvMCJmv.d.ts → types.d-DzPvh74p.d.ts} +2 -2
  113. package/dist/packem_shared/vultr-lK9L-sFk.js +1 -0
  114. package/dist/packem_shared/yandex-ZwvE77v4.js +1 -0
  115. package/dist/storage/aws/clients/index.d.ts +372 -1
  116. package/dist/storage/aws/clients/index.js +1 -1
  117. package/dist/storage/aws/index.d.ts +13 -13
  118. package/dist/storage/aws/index.js +1 -1
  119. package/dist/storage/aws-light/index.d.ts +13 -13
  120. package/dist/storage/aws-light/index.js +1 -1
  121. package/dist/storage/azure/index.d.ts +82 -14
  122. package/dist/storage/azure/index.js +1 -1
  123. package/dist/storage/box/index.d.ts +12 -9
  124. package/dist/storage/box/index.js +1 -1
  125. package/dist/storage/bun-s3/index.d.ts +200 -0
  126. package/dist/storage/bun-s3/index.js +1 -0
  127. package/dist/storage/bunny/index.d.ts +12 -9
  128. package/dist/storage/bunny/index.js +1 -1
  129. package/dist/storage/cloudinary/index.d.ts +121 -0
  130. package/dist/storage/cloudinary/index.js +1 -0
  131. package/dist/storage/dropbox/index.d.ts +12 -9
  132. package/dist/storage/dropbox/index.js +1 -1
  133. package/dist/storage/firebase/index.d.ts +192 -0
  134. package/dist/storage/firebase/index.js +1 -0
  135. package/dist/storage/ftp/index.d.ts +85 -0
  136. package/dist/storage/ftp/index.js +1 -0
  137. package/dist/storage/gcs/index.d.ts +19 -10
  138. package/dist/storage/gcs/index.js +1 -1
  139. package/dist/storage/google-drive/index.d.ts +12 -9
  140. package/dist/storage/google-drive/index.js +1 -1
  141. package/dist/storage/local/index.d.ts +3 -3
  142. package/dist/storage/local/index.js +1 -1
  143. package/dist/storage/netlify-blob/index.d.ts +15 -12
  144. package/dist/storage/netlify-blob/index.js +1 -1
  145. package/dist/storage/onedrive/index.d.ts +22 -111
  146. package/dist/storage/onedrive/index.js +1 -1
  147. package/dist/storage/pocketbase/index.d.ts +172 -0
  148. package/dist/storage/pocketbase/index.js +1 -0
  149. package/dist/storage/sftp/index.d.ts +86 -0
  150. package/dist/storage/sftp/index.js +1 -0
  151. package/dist/storage/sharepoint/index.d.ts +180 -0
  152. package/dist/storage/sharepoint/index.js +1 -0
  153. package/dist/storage/supabase/index.d.ts +14 -10
  154. package/dist/storage/supabase/index.js +1 -1
  155. package/dist/storage/uploadthing/index.d.ts +13 -9
  156. package/dist/storage/uploadthing/index.js +1 -1
  157. package/dist/storage/vercel-blob/index.d.ts +13 -10
  158. package/dist/storage/vercel-blob/index.js +1 -1
  159. package/dist/transformer/audio-transformer.d.ts +2 -2
  160. package/dist/transformer/image-transformer.d.ts +2 -2
  161. package/dist/transformer/index.d.ts +3 -3
  162. package/dist/transformer/video-transformer.d.ts +2 -2
  163. package/package.json +55 -3
  164. package/dist/packem_shared/AwsLightStorage-SH7j-myh.js +0 -1
  165. package/dist/packem_shared/AzureSMetaStorage-DV2tNjKh.js +0 -1
  166. package/dist/packem_shared/AzureStorage-BVYMFEBP.js +0 -1
  167. package/dist/packem_shared/BoxMetaStorage-BUe5Qmqe.js +0 -1
  168. package/dist/packem_shared/BoxStorage-CgC81_So.js +0 -1
  169. package/dist/packem_shared/BunnyMetaStorage-D0mT6veJ.js +0 -1
  170. package/dist/packem_shared/BunnyStorage-Bl4usdVT.js +0 -1
  171. package/dist/packem_shared/DiskStorage-B5uIDVXr.js +0 -1
  172. package/dist/packem_shared/DropboxStorage-CPjhDN5B.js +0 -1
  173. package/dist/packem_shared/GCStorage-CNCPTaGF.js +0 -1
  174. package/dist/packem_shared/GoogleDriveStorage-DuB6glUk.js +0 -1
  175. package/dist/packem_shared/NetlifyBlobMetaStorage-BcRFPky8.js +0 -1
  176. package/dist/packem_shared/NetlifyBlobStorage-C4qkJv1R.js +0 -1
  177. package/dist/packem_shared/OneDriveMetaStorage-B_BkGLzW.js +0 -1
  178. package/dist/packem_shared/OneDriveStorage-Cu0cGcrh.js +0 -1
  179. package/dist/packem_shared/S3Storage-D8dopWoO.js +0 -1
  180. package/dist/packem_shared/SupabaseMetaStorage-BR1UGqnj.js +0 -1
  181. package/dist/packem_shared/SupabaseStorage-CCtMTiN5.js +0 -1
  182. package/dist/packem_shared/UploadThingMetaStorage-DyGNyaAq.js +0 -1
  183. package/dist/packem_shared/UploadThingStorage-B_fNzNFO.js +0 -1
  184. package/dist/packem_shared/VercelBlobStorage-D5zy4PPQ.js +0 -1
  185. package/dist/packem_shared/aws-light-meta-storage-TPyQwLvk.js +0 -4
  186. package/dist/packem_shared/defaultCloudStorageFileNameValidation-6URTv-Mp.js +0 -1
  187. package/dist/packem_shared/disk-storage-CbSSPnOf.js +0 -5
  188. package/dist/packem_shared/isRetryableError-B6ZS_-5I.js +0 -1
  189. package/dist/packem_shared/s3-base-storage-f_EyFAAt.js +0 -1
  190. package/dist/packem_shared/storage-CoyB2O-Y.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ ## @visulima/storage [1.0.0-alpha.29](https://github.com/visulima/visulima/compare/@visulima/storage@1.0.0-alpha.28...@visulima/storage@1.0.0-alpha.29) (2026-05-19)
2
+
3
+ ### Features
4
+
5
+ * **storage:** add Bun-native S3 adapter and S3-compatible docs ([12650a4](https://github.com/visulima/visulima/commit/12650a4d9da7ca93a3d0f86c0952026dcdaa03ed))
6
+ * **storage:** add Cloudinary, Firebase, PocketBase, SharePoint adapters + S3-compat presets ([72e0fc5](https://github.com/visulima/visulima/commit/72e0fc5e0d433f5af0768e7d194a1d533dd46940))
7
+ * **storage:** add FTP and SFTP storage backends ([5631dd2](https://github.com/visulima/visulima/commit/5631dd2d1193bc51decc8cc34a1c71df1220d75a))
8
+ * **storage:** add per-operation signal/timeout/retries ([45797da](https://github.com/visulima/visulima/commit/45797dacb4757ab9a1c857ed4f795e50d41fdbab))
9
+
10
+ ### Bug Fixes
11
+
12
+ * **storage:** make operation timeout per-attempt ([3610ffa](https://github.com/visulima/visulima/commit/3610ffa498c1bf7ec8515ddf1e556648393c149e))
13
+
14
+
15
+ ### Dependencies
16
+
17
+ * **@visulima/fs:** upgraded to 5.0.0-alpha.24
18
+
1
19
  ## @visulima/storage [1.0.0-alpha.28](https://github.com/visulima/visulima/compare/@visulima/storage@1.0.0-alpha.27...@visulima/storage@1.0.0-alpha.28) (2026-05-16)
2
20
 
3
21
  ### Features
package/README.md CHANGED
@@ -117,11 +117,11 @@ Object storage (service credentials, presigned URLs, S3-style):
117
117
 
118
118
  S3-compatible (branded client configs under `provider/aws/s3/clients`):
119
119
 
120
- - Cloudflare R2 · DigitalOcean Spaces · MinIO · Hetzner · Storj · Backblaze B2 · Tigris · Wasabi · Akamai
120
+ - Cloudflare R2 · DigitalOcean Spaces · MinIO · Hetzner · Storj · Backblaze B2 · Tigris · Wasabi · Akamai · Scaleway · Vultr · Exoscale · Filebase · iDrive e2 · IBM Cloud Object Storage · Oracle Cloud (OCI) · OVHcloud · Alibaba Cloud OSS · Tencent Cloud COS · Yandex Object Storage
121
121
 
122
122
  Consumer providers (user OAuth or service-credential, all peer-dep gated):
123
123
 
124
- - Dropbox · Google Drive · Microsoft OneDrive · Box · Supabase · UploadThing · Bunny Storage
124
+ - Dropbox · Google Drive · Microsoft OneDrive · SharePoint · Box · Supabase · UploadThing · Bunny Storage · Cloudinary · Firebase Storage · PocketBase
125
125
 
126
126
  → See the [capability matrix](https://visulima.com/docs/packages/storage/services/capabilities) for what each provider supports (presign, copy, list, signed uploads, …).
127
127
 
@@ -1,11 +1,11 @@
1
- import { U as UploadOptions } from "../../packem_shared/types.d-CBvMCJmv.js";
2
- import { U as UploadFile, B as BaseStorage } from "../../packem_shared/storage.d-D9YA4MRs.js";
1
+ import { U as UploadOptions } from "../../packem_shared/types.d-DzPvh74p.js";
2
+ import { U as UploadFile, B as BaseStorage } from "../../packem_shared/storage.d-RteRC-cG.js";
3
3
  import 'node:stream';
4
4
  import 'node:events';
5
5
  import 'node:http';
6
6
  import '@visulima/pagination';
7
- import "../../packem_shared/media-transformer.d-Dt9W_its.js";
8
- import "../../packem_shared/types.d-P2Kxr4cB.js";
7
+ import "../../packem_shared/media-transformer.d-j1W9HAXw.js";
8
+ import "../../packem_shared/types.d-B5qPfCr5.js";
9
9
  import 'node:crypto';
10
10
  import 'lru-cache';
11
11
  /**
@@ -10,9 +10,9 @@ case `uname` in
10
10
  esac
11
11
 
12
12
  if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules"
13
+ export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules"
14
14
  else
15
- export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules:$NODE_PATH"
15
+ export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
18
  exec "$basedir/node" "$basedir/../nuxt/bin/nuxt.mjs" "$@"
@@ -10,9 +10,9 @@ case `uname` in
10
10
  esac
11
11
 
12
12
  if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules"
13
+ export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules"
14
14
  else
15
- export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_1aae0e4fab03570b1935cfa86e9bcafe/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules:$NODE_PATH"
15
+ export NODE_PATH="/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules/nuxt/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/nuxt@4.4.4_@azure+storage-blob@12.31.0_@babel+core@7.29.0_@babel+plugin-proposal-decora_640587a4b2a7735c32e4776a14160088/node_modules:/home/runner/work/visulima/visulima/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
18
  exec "$basedir/node" "$basedir/../nuxt/bin/nuxt.mjs" "$@"
@@ -1,9 +1,9 @@
1
- import { F as Files } from "../../packem_shared/index.d-CKaAalRr.js";
1
+ import { F as Files } from "../../packem_shared/index.d-C4Fivh4I.js";
2
2
  import { C as CopyFileInput, D as DeleteFileInput, a as DownloadFileInput, G as GetFileMetadataInput, b as GetFileUrlInput, L as ListFilesInput, S as SignUploadUrlInput, U as UploadFileInput, F as FileToolName, A as ApprovalConfig, c as FileReadToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
3
  export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
4
  import { Tool } from 'ai';
5
- import { e as executors } from "../../packem_shared/executors.d-DgroC6pk.js";
6
- import "../../packem_shared/storage.d-D9YA4MRs.js";
5
+ import { e as executors } from "../../packem_shared/executors.d-X4hz3zfu.js";
6
+ import "../../packem_shared/storage.d-RteRC-cG.js";
7
7
  import 'node:stream';
8
8
  import 'node:crypto';
9
9
  import 'node:http';
@@ -1,8 +1,8 @@
1
1
  import { SdkMcpToolDefinition, CanUseTool, McpSdkServerConfigWithInstance } from '@anthropic-ai/claude-agent-sdk';
2
- import { F as Files } from "../../packem_shared/index.d-CKaAalRr.js";
2
+ import { F as Files } from "../../packem_shared/index.d-C4Fivh4I.js";
3
3
  import { T as TOOL_SCHEMAS, F as FileToolName, A as ApprovalConfig } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
4
  export { type c as FileReadToolName, type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
5
- import "../../packem_shared/storage.d-D9YA4MRs.js";
5
+ import "../../packem_shared/storage.d-RteRC-cG.js";
6
6
  import 'node:stream';
7
7
  import 'node:crypto';
8
8
  import 'node:http';
@@ -1,10 +1,10 @@
1
1
  import { T as TOOL_SCHEMAS, F as FileToolName, A as ApprovalConfig, c as FileReadToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
2
2
  export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
3
  import { UnknownContext, FunctionTool } from '@openai/agents';
4
- import { F as Files } from "../../packem_shared/index.d-CKaAalRr.js";
5
- import { e as executors } from "../../packem_shared/executors.d-DgroC6pk.js";
4
+ import { F as Files } from "../../packem_shared/index.d-C4Fivh4I.js";
5
+ import { e as executors } from "../../packem_shared/executors.d-X4hz3zfu.js";
6
6
  import 'zod';
7
- import "../../packem_shared/storage.d-D9YA4MRs.js";
7
+ import "../../packem_shared/storage.d-RteRC-cG.js";
8
8
  import 'node:stream';
9
9
  import 'node:crypto';
10
10
  import 'node:http';
@@ -1,8 +1,8 @@
1
- import { F as Files } from "../../packem_shared/index.d-CKaAalRr.js";
1
+ import { F as Files } from "../../packem_shared/index.d-C4Fivh4I.js";
2
2
  import { T as TOOL_SCHEMAS, c as FileReadToolName, F as FileToolName, A as ApprovalConfig } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
3
  export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
4
  import { ServerTool } from '@tanstack/ai';
5
- import "../../packem_shared/storage.d-D9YA4MRs.js";
5
+ import "../../packem_shared/storage.d-RteRC-cG.js";
6
6
  import 'node:stream';
7
7
  import 'node:crypto';
8
8
  import 'node:http';
@@ -1,16 +1,16 @@
1
- import { U as UploadFile, J as UploadResponse } from "../../../packem_shared/storage.d-D9YA4MRs.js";
1
+ import { U as UploadFile, K as UploadResponse } from "../../../packem_shared/storage.d-RteRC-cG.js";
2
2
  import 'node:stream';
3
- import { H as Handlers, R as ResponseFile, a as ResponseList, U as UploadOptions } from "../../../packem_shared/types.d-CBvMCJmv.js";
4
- export { type A as AsyncHandler, type B as BaseHandler, type M as MethodHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-CBvMCJmv.js";
5
- import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-BeCT7hH6.js";
6
- export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-BeCT7hH6.js";
3
+ import { H as Handlers, R as ResponseFile, a as ResponseList, U as UploadOptions } from "../../../packem_shared/types.d-DzPvh74p.js";
4
+ export { type A as AsyncHandler, type B as BaseHandler, type M as MethodHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-DzPvh74p.js";
5
+ import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-wZsb3umJ.js";
6
+ export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-wZsb3umJ.js";
7
7
  import 'node:crypto';
8
8
  import 'node:http';
9
9
  import 'lru-cache';
10
10
  import 'node:events';
11
11
  import '@visulima/pagination';
12
- import "../../../packem_shared/media-transformer.d-Dt9W_its.js";
13
- import "../../../packem_shared/types.d-P2Kxr4cB.js";
12
+ import "../../../packem_shared/media-transformer.d-j1W9HAXw.js";
13
+ import "../../../packem_shared/types.d-B5qPfCr5.js";
14
14
  /**
15
15
  * Base handler for Web API Fetch platform (Request/Response).
16
16
  * Extends BaseHandlerCore with Fetch-specific request/response handling.
@@ -1 +1 @@
1
- import{default as o}from"../../../packem_shared/Multipart-DACQFsrn.js";import{default as f}from"../../../packem_shared/Rest-5NwM1xYj.js";import{Tus as p}from"../../../packem_shared/Tus-CJMcygk7.js";import{TUS_RESUMABLE as s,TUS_VERSION as u}from"../../../packem_shared/TUS_RESUMABLE-B7KtPVeC.js";export{o as Multipart,f as Rest,s as TUS_RESUMABLE,u as TUS_VERSION,p as Tus};
1
+ import{default as o}from"../../../packem_shared/Multipart-D9WIud9R.js";import{default as f}from"../../../packem_shared/Rest-BuD3ySAg.js";import{Tus as p}from"../../../packem_shared/Tus-Fp_hx5ug.js";import{TUS_RESUMABLE as s,TUS_VERSION as u}from"../../../packem_shared/TUS_RESUMABLE-B7KtPVeC.js";export{o as Multipart,f as Rest,s as TUS_RESUMABLE,u as TUS_VERSION,p as Tus};
@@ -1,14 +1,14 @@
1
1
  import { Hono } from 'hono';
2
- import { U as UploadFile } from "../../../packem_shared/storage.d-D9YA4MRs.js";
2
+ import { U as UploadFile } from "../../../packem_shared/storage.d-RteRC-cG.js";
3
3
  import 'node:stream';
4
- import { U as UploadOptions } from "../../../packem_shared/types.d-CBvMCJmv.js";
4
+ import { U as UploadOptions } from "../../../packem_shared/types.d-DzPvh74p.js";
5
5
  import 'node:crypto';
6
6
  import 'node:http';
7
7
  import 'lru-cache';
8
8
  import 'node:events';
9
9
  import '@visulima/pagination';
10
- import "../../../packem_shared/media-transformer.d-Dt9W_its.js";
11
- import "../../../packem_shared/types.d-P2Kxr4cB.js";
10
+ import "../../../packem_shared/media-transformer.d-j1W9HAXw.js";
11
+ import "../../../packem_shared/types.d-B5qPfCr5.js";
12
12
  /**
13
13
  * Registers upload handler routes on a Hono app instance.
14
14
  * Automatically registers all required HTTP methods for the specified handler type.
@@ -1 +1 @@
1
- var d=Object.defineProperty;var c=(t,n)=>d(t,"name",{value:n,configurable:!0});import u from"../../../packem_shared/Multipart-DACQFsrn.js";import l from"../../../packem_shared/Rest-5NwM1xYj.js";import{Tus as p}from"../../../packem_shared/Tus-CJMcygk7.js";var m=Object.defineProperty,i=c((t,n)=>m(t,"name",{value:n,configurable:!0}),"a");const w=i(t=>async n=>{try{const e=n.req.raw;return await t.fetch(e)}catch(e){const a=e,s=a.statusCode||(a.status?Number.parseInt(a.status,10):void 0)||500;return Response.json({error:a.message||"Request failed"},{status:s})}},"createHandlerFunction"),k=i((t,n)=>{const{path:e,type:a,...s}=n;let o;switch(a){case"multipart":{o=new u(s);break}case"rest":{o=new l(s);break}case"tus":{o=new p(s);break}default:throw new Error(`Unknown handler type: ${String(a??"unknown")}`)}const r=w(o);switch(a){case"multipart":{t.post(e,r),t.get(`${e}/:id?/:metadata?`,r),t.delete(`${e}/:id`,r),t.on("OPTIONS",e,r);break}case"rest":{t.post(e,r),t.put(`${e}/:id`,r),t.patch(`${e}/:id`,r),t.get(`${e}/:id?`,r),t.on("HEAD",`${e}/:id`,r),t.delete(`${e}/:id?`,r),t.on("OPTIONS",e,r);break}case"tus":{t.all(e,r),t.all(`${e}/:id`,r);break}default:throw new Error(`Unknown handler type: ${String(a)}`)}},"createStorageHandler");export{k as createStorageHandler};
1
+ var d=Object.defineProperty;var c=(t,n)=>d(t,"name",{value:n,configurable:!0});import u from"../../../packem_shared/Multipart-D9WIud9R.js";import l from"../../../packem_shared/Rest-BuD3ySAg.js";import{Tus as p}from"../../../packem_shared/Tus-Fp_hx5ug.js";var m=Object.defineProperty,i=c((t,n)=>m(t,"name",{value:n,configurable:!0}),"a");const w=i(t=>async n=>{try{const e=n.req.raw;return await t.fetch(e)}catch(e){const a=e,s=a.statusCode||(a.status?Number.parseInt(a.status,10):void 0)||500;return Response.json({error:a.message||"Request failed"},{status:s})}},"createHandlerFunction"),k=i((t,n)=>{const{path:e,type:a,...s}=n;let o;switch(a){case"multipart":{o=new u(s);break}case"rest":{o=new l(s);break}case"tus":{o=new p(s);break}default:throw new Error(`Unknown handler type: ${String(a??"unknown")}`)}const r=w(o);switch(a){case"multipart":{t.post(e,r),t.get(`${e}/:id?/:metadata?`,r),t.delete(`${e}/:id`,r),t.on("OPTIONS",e,r);break}case"rest":{t.post(e,r),t.put(`${e}/:id`,r),t.patch(`${e}/:id`,r),t.get(`${e}/:id?`,r),t.on("HEAD",`${e}/:id`,r),t.delete(`${e}/:id?`,r),t.on("OPTIONS",e,r);break}case"tus":{t.all(e,r),t.all(`${e}/:id`,r);break}default:throw new Error(`Unknown handler type: ${String(a)}`)}},"createStorageHandler");export{k as createStorageHandler};
@@ -1,14 +1,14 @@
1
1
  import { NextRequest, NextResponse } from 'next/server.js';
2
- import { U as UploadFile } from "../../../packem_shared/storage.d-D9YA4MRs.js";
2
+ import { U as UploadFile } from "../../../packem_shared/storage.d-RteRC-cG.js";
3
3
  import 'node:stream';
4
- import { U as UploadOptions } from "../../../packem_shared/types.d-CBvMCJmv.js";
4
+ import { U as UploadOptions } from "../../../packem_shared/types.d-DzPvh74p.js";
5
5
  import 'node:crypto';
6
6
  import 'node:http';
7
7
  import 'lru-cache';
8
8
  import 'node:events';
9
9
  import '@visulima/pagination';
10
- import "../../../packem_shared/media-transformer.d-Dt9W_its.js";
11
- import "../../../packem_shared/types.d-P2Kxr4cB.js";
10
+ import "../../../packem_shared/media-transformer.d-j1W9HAXw.js";
11
+ import "../../../packem_shared/types.d-B5qPfCr5.js";
12
12
  /**
13
13
  * Configuration for Next.js handler.
14
14
  */
@@ -1 +1 @@
1
- var c=Object.defineProperty;var a=(e,r)=>c(e,"name",{value:r,configurable:!0});import{NextResponse as i}from"next/server.js";import m from"../../../packem_shared/Multipart-DACQFsrn.js";import p from"../../../packem_shared/Rest-5NwM1xYj.js";import{Tus as d}from"../../../packem_shared/Tus-CJMcygk7.js";var l=Object.defineProperty,n=a((e,r)=>l(e,"name",{value:r,configurable:!0}),"r");const k=n(e=>{let r;switch(e.type){case"multipart":{r=new m(e);break}case"rest":{r=new p(e);break}case"tus":{r=new d(e);break}default:throw new Error(`Unknown handler type: ${String(e.type??"unknown")}`)}return n(async s=>{try{return await r.fetch(s)}catch(o){const t=o,u=t.statusCode||(t.status?Number.parseInt(t.status,10):void 0)||500;return i.json({error:t.message||"Request failed"},{status:u})}},"nextjsHandler")},"createHandler");export{k as createHandler};
1
+ var c=Object.defineProperty;var a=(e,r)=>c(e,"name",{value:r,configurable:!0});import{NextResponse as i}from"next/server.js";import m from"../../../packem_shared/Multipart-D9WIud9R.js";import p from"../../../packem_shared/Rest-BuD3ySAg.js";import{Tus as d}from"../../../packem_shared/Tus-Fp_hx5ug.js";var l=Object.defineProperty,n=a((e,r)=>l(e,"name",{value:r,configurable:!0}),"r");const k=n(e=>{let r;switch(e.type){case"multipart":{r=new m(e);break}case"rest":{r=new p(e);break}case"tus":{r=new d(e);break}default:throw new Error(`Unknown handler type: ${String(e.type??"unknown")}`)}return n(async s=>{try{return await r.fetch(s)}catch(o){const t=o,u=t.statusCode||(t.status?Number.parseInt(t.status,10):void 0)||500;return i.json({error:t.message||"Request failed"},{status:u})}},"nextjsHandler")},"createHandler");export{k as createHandler};
@@ -1,16 +1,16 @@
1
1
  import { IncomingMessage, ServerResponse } from 'node:http';
2
- import { U as UploadFile, J as UploadResponse } from "../../../packem_shared/storage.d-D9YA4MRs.js";
2
+ import { U as UploadFile, K as UploadResponse } from "../../../packem_shared/storage.d-RteRC-cG.js";
3
3
  import { Readable } from 'node:stream';
4
- import { H as Handlers, A as AsyncHandler, U as UploadOptions, R as ResponseFile, a as ResponseList, M as MethodHandler } from "../../../packem_shared/types.d-CBvMCJmv.js";
5
- export { type B as BaseHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-CBvMCJmv.js";
6
- import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-BeCT7hH6.js";
7
- export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-BeCT7hH6.js";
4
+ import { H as Handlers, A as AsyncHandler, U as UploadOptions, R as ResponseFile, a as ResponseList, M as MethodHandler } from "../../../packem_shared/types.d-DzPvh74p.js";
5
+ export { type B as BaseHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-DzPvh74p.js";
6
+ import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-wZsb3umJ.js";
7
+ export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-wZsb3umJ.js";
8
8
  import 'node:crypto';
9
9
  import 'lru-cache';
10
10
  import 'node:events';
11
11
  import '@visulima/pagination';
12
- import "../../../packem_shared/media-transformer.d-Dt9W_its.js";
13
- import "../../../packem_shared/types.d-P2Kxr4cB.js";
12
+ import "../../../packem_shared/media-transformer.d-j1W9HAXw.js";
13
+ import "../../../packem_shared/types.d-B5qPfCr5.js";
14
14
  /**
15
15
  * Base handler for Node.js platform (IncomingMessage/ServerResponse).
16
16
  * Extends BaseHandlerCore with Node.js-specific request/response handling.
@@ -1 +1 @@
1
- import o from"../../../packem_shared/Multipart-7FSSy2n1.js";import m from"../../../packem_shared/Rest-y8Vz2Rt0.js";import{Tus as f}from"../../../packem_shared/Tus-BCVAbJIi.js";import{TUS_RESUMABLE as S,TUS_VERSION as a}from"../../../packem_shared/TUS_RESUMABLE-B7KtPVeC.js";export{o as Multipart,m as Rest,S as TUS_RESUMABLE,a as TUS_VERSION,f as Tus};
1
+ import o from"../../../packem_shared/Multipart-CIFfQksD.js";import m from"../../../packem_shared/Rest-URrQ5FYM.js";import{Tus as f}from"../../../packem_shared/Tus-TNG9HAY8.js";import{TUS_RESUMABLE as S,TUS_VERSION as a}from"../../../packem_shared/TUS_RESUMABLE-B7KtPVeC.js";export{o as Multipart,m as Rest,S as TUS_RESUMABLE,a as TUS_VERSION,f as Tus};
@@ -1,14 +1,14 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { U as UploadFile } from "../../../packem_shared/storage.d-D9YA4MRs.js";
2
+ import { U as UploadFile } from "../../../packem_shared/storage.d-RteRC-cG.js";
3
3
  import 'node:stream';
4
- import { U as UploadOptions } from "../../../packem_shared/types.d-CBvMCJmv.js";
4
+ import { U as UploadOptions } from "../../../packem_shared/types.d-DzPvh74p.js";
5
5
  import 'node:crypto';
6
6
  import 'node:http';
7
7
  import 'lru-cache';
8
8
  import 'node:events';
9
9
  import '@visulima/pagination';
10
- import "../../../packem_shared/media-transformer.d-Dt9W_its.js";
11
- import "../../../packem_shared/types.d-P2Kxr4cB.js";
10
+ import "../../../packem_shared/media-transformer.d-j1W9HAXw.js";
11
+ import "../../../packem_shared/types.d-B5qPfCr5.js";
12
12
  /**
13
13
  * Configuration for SolidStart handler.
14
14
  */
@@ -1 +1 @@
1
- var i=Object.defineProperty;var a=(t,e)=>i(t,"name",{value:e,configurable:!0});import c from"../../../packem_shared/Multipart-DACQFsrn.js";import d from"../../../packem_shared/Rest-5NwM1xYj.js";import{Tus as l}from"../../../packem_shared/Tus-CJMcygk7.js";var p=Object.defineProperty,n=a((t,e)=>p(t,"name",{value:e,configurable:!0}),"s");const b=n(t=>{let e;switch(t.type){case"multipart":{e=new c(t);break}case"rest":{e=new d(t);break}case"tus":{e=new l(t);break}default:throw new Error(`Unknown handler type: ${String(t.type??"unknown")}`)}return n(async s=>{try{return await e.fetch(s.request)}catch(o){const r=o,u=r.statusCode||(r.status?Number.parseInt(r.status,10):void 0)||500;return Response.json({error:r.message||"Request failed"},{headers:{"Content-Type":"application/json"},status:u})}},"solidStartHandler")},"createSolidStartHandler");export{b as createSolidStartHandler};
1
+ var i=Object.defineProperty;var a=(t,e)=>i(t,"name",{value:e,configurable:!0});import c from"../../../packem_shared/Multipart-D9WIud9R.js";import d from"../../../packem_shared/Rest-BuD3ySAg.js";import{Tus as l}from"../../../packem_shared/Tus-Fp_hx5ug.js";var p=Object.defineProperty,n=a((t,e)=>p(t,"name",{value:e,configurable:!0}),"s");const b=n(t=>{let e;switch(t.type){case"multipart":{e=new c(t);break}case"rest":{e=new d(t);break}case"tus":{e=new l(t);break}default:throw new Error(`Unknown handler type: ${String(t.type??"unknown")}`)}return n(async s=>{try{return await e.fetch(s.request)}catch(o){const r=o,u=r.statusCode||(r.status?Number.parseInt(r.status,10):void 0)||500;return Response.json({error:r.message||"Request failed"},{headers:{"Content-Type":"application/json"},status:u})}},"solidStartHandler")},"createSolidStartHandler");export{b as createSolidStartHandler};
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export { type D as DownloadResult, type a as FileBody, type b as FileObject, F as Files, type c as FilesOptions, type L as ListOptions, type S as SignedReadUrlOptions, type d as SignedUploadUrlOptions, type U as UploadOptions } from "./packem_shared/index.d-CKaAalRr.js";
2
- import { k as Metrics } from "./packem_shared/storage.d-D9YA4MRs.js";
3
- export { B as AbstractBaseStorage, type l as BaseStorageOptions, type m as BatchOperationResponse, type n as BatchOperationResult, type D as DiskStorageOptions, type h as DiskStorageWithChecksumOptions, E as ERRORS, o as ErrorMap, type p as ExpirationOptions, F as File, type e as FileInit, type f as FilePart, type g as FileQuery, type q as Header, type r as Headers, type H as HttpError, type s as HttpErrorBody, type I as IncomingMessageWithBody, type L as LocalMetaStorageOptions, M as MetaStorage, type t as MetaStorageOptions, u as Metadata, type O as OnComplete, type v as OnCreate, type w as OnDelete, type x as OnError, type y as OnUpdate, type P as PurgeList, type z as RangeChecksum, type A as RangeHasher, type C as ResponseBody, type i as ResponseBodyType, type G as ResponseTuple, type R as RetryConfig, b as UploadError, type c as UploadEventType, type U as UploadFile, type J as UploadResponse, type V as Validation, type K as ValidationError, type N as ValidatorConfig, d as createRetryWrapper, Q as defaultCloudStorageFileNameValidation, S as defaultFilesystemFileNameValidation, T as extractHttpStatus, W as isRetryableError, X as isUploadError, Y as mapStatusToErrorCode, Z as retry, _ as throwErrorCode, $ as wrapStorageError } from "./packem_shared/storage.d-D9YA4MRs.js";
1
+ export { type D as DownloadResult, type a as FileBody, type b as FileObject, F as Files, type c as FilesOptions, type L as ListOptions, type S as SignedReadUrlOptions, type d as SignedUploadUrlOptions, type U as UploadOptions } from "./packem_shared/index.d-C4Fivh4I.js";
2
+ import { l as Metrics } from "./packem_shared/storage.d-RteRC-cG.js";
3
+ export { B as AbstractBaseStorage, type i as BaseStorageOptions, type m as BatchOperationResponse, type n as BatchOperationResult, type D as DiskStorageOptions, type h as DiskStorageWithChecksumOptions, E as ERRORS, o as ErrorMap, type p as ExpirationOptions, F as File, type e as FileInit, type f as FilePart, type g as FileQuery, type q as Header, type r as Headers, type H as HttpError, type s as HttpErrorBody, type I as IncomingMessageWithBody, type L as LocalMetaStorageOptions, M as MetaStorage, type t as MetaStorageOptions, u as Metadata, type v as OnComplete, type w as OnCreate, type x as OnDelete, type y as OnError, type z as OnUpdate, type P as PurgeList, type A as RangeChecksum, type C as RangeHasher, type G as ResponseBody, type j as ResponseBodyType, type J as ResponseTuple, type R as RetryConfig, b as UploadError, type c as UploadEventType, type U as UploadFile, type K as UploadResponse, type V as Validation, type N as ValidationError, type Q as ValidatorConfig, d as createRetryWrapper, S as defaultCloudStorageFileNameValidation, T as defaultFilesystemFileNameValidation, W as extractHttpStatus, X as isRetryableError, Y as isUploadError, Z as mapStatusToErrorCode, _ as retry, $ as throwErrorCode, a0 as wrapStorageError } from "./packem_shared/storage.d-RteRC-cG.js";
4
4
  import { Meter } from '@opentelemetry/api';
5
- export { D as DiskStorage, a as DiskStorageWithChecksum } from "./packem_shared/disk-storage-with-checksum.d-8gCPEZZC.js";
6
- export { L as LocalMetaStorage } from "./packem_shared/local-meta-storage.d-KWaPZTSN.js";
5
+ export { D as DiskStorage, a as DiskStorageWithChecksum } from "./packem_shared/disk-storage-with-checksum.d-mHcg2uLw.js";
6
+ export { L as LocalMetaStorage } from "./packem_shared/local-meta-storage.d-B11vHYNm.js";
7
7
  export { type AnyWebReadableByteStreamWithFileType, type AnyWebReadableStream, type Detector, type FileTypeOptions, type FileTypeParser, type FileTypeResult, type StreamOptions, type TokenizerPositionError, fileTypeFromBlob, fileTypeFromBuffer, fileTypeFromTokenizer, supportedExtensions, supportedMimeTypes } from 'file-type';
8
8
  import 'node:stream';
9
9
  import 'node:crypto';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{Files as o}from"./packem_shared/Files-BhvjnhTE.js";import{waitForStorage as a}from"./packem_shared/waitForStorage-ChSBLhLc.js";import{f as s}from"./packem_shared/disk-storage-CbSSPnOf.js";import{default as l}from"./packem_shared/DiskStorageWithChecksum-CbXWpSOr.js";import{v as i}from"./packem_shared/local-meta-storage-CT1audnK.js";import{default as x}from"./packem_shared/MetaStorage-Y4m1dWgd.js";import{B as S,d as y,a as E}from"./packem_shared/storage-CoyB2O-Y.js";import{ERRORS as g,ErrorMap as c,UploadError as M,extractHttpStatus as T,isUploadError as n,mapStatusToErrorCode as R,throwErrorCode as k,wrapStorageError as B}from"./packem_shared/ERRORS-CyOuSMLY.js";import{createRetryWrapper as b,isRetryableError as h,retry as w}from"./packem_shared/isRetryableError-B6ZS_-5I.js";import{fileTypeFromBlob as O,fileTypeFromBuffer as D,fileTypeFromTokenizer as U,supportedExtensions as V,supportedMimeTypes as W}from"file-type";import{default as z}from"./packem_shared/File-BhfUgJjs.js";import{default as H}from"./packem_shared/NoOpMetrics-Dky06sf1.js";import{default as j}from"./packem_shared/OpenTelemetryMetrics-9uxQMSlg.js";import{Metadata as G}from"./packem_shared/Metadata-B6Ir0KO7.js";export{S as AbstractBaseStorage,s as DiskStorage,l as DiskStorageWithChecksum,g as ERRORS,c as ErrorMap,z as File,o as Files,i as LocalMetaStorage,x as MetaStorage,G as Metadata,H as NoOpMetrics,j as OpenTelemetryMetrics,M as UploadError,b as createRetryWrapper,y as defaultCloudStorageFileNameValidation,E as defaultFilesystemFileNameValidation,T as extractHttpStatus,O as fileTypeFromBlob,D as fileTypeFromBuffer,U as fileTypeFromTokenizer,h as isRetryableError,n as isUploadError,R as mapStatusToErrorCode,w as retry,V as supportedExtensions,W as supportedMimeTypes,k as throwErrorCode,a as waitForStorage,B as wrapStorageError};
1
+ import{Files as o}from"./packem_shared/Files-CJh9_N-9.js";import{waitForStorage as a}from"./packem_shared/waitForStorage-ChSBLhLc.js";import{f as s}from"./packem_shared/disk-storage-CKAJvhcj.js";import{default as l}from"./packem_shared/DiskStorageWithChecksum-BvUTn7O-.js";import{v as i}from"./packem_shared/local-meta-storage-Bi0mK6gD.js";import{default as x}from"./packem_shared/MetaStorage-Y4m1dWgd.js";import{B as S,d as y,a as E}from"./packem_shared/storage-Dh0tJh7j.js";import{ERRORS as g,ErrorMap as c,UploadError as M,extractHttpStatus as T,isUploadError as n,mapStatusToErrorCode as R,throwErrorCode as k,wrapStorageError as B}from"./packem_shared/ERRORS-CyOuSMLY.js";import{createRetryWrapper as b,isRetryableError as h,retry as w}from"./packem_shared/isRetryableError-BhizNeAz.js";import{fileTypeFromBlob as O,fileTypeFromBuffer as D,fileTypeFromTokenizer as U,supportedExtensions as V,supportedMimeTypes as W}from"file-type";import{default as z}from"./packem_shared/File-BhfUgJjs.js";import{default as H}from"./packem_shared/NoOpMetrics-Dky06sf1.js";import{default as j}from"./packem_shared/OpenTelemetryMetrics-9uxQMSlg.js";import{Metadata as G}from"./packem_shared/Metadata-B6Ir0KO7.js";export{S as AbstractBaseStorage,s as DiskStorage,l as DiskStorageWithChecksum,g as ERRORS,c as ErrorMap,z as File,o as Files,i as LocalMetaStorage,x as MetaStorage,G as Metadata,H as NoOpMetrics,j as OpenTelemetryMetrics,M as UploadError,b as createRetryWrapper,y as defaultCloudStorageFileNameValidation,E as defaultFilesystemFileNameValidation,T as extractHttpStatus,O as fileTypeFromBlob,D as fileTypeFromBuffer,U as fileTypeFromTokenizer,h as isRetryableError,n as isUploadError,R as mapStatusToErrorCode,w as retry,V as supportedExtensions,W as supportedMimeTypes,k as throwErrorCode,a as waitForStorage,B as wrapStorageError};
@@ -1 +1 @@
1
- import"./MetaStorage-Y4m1dWgd.js";import"./Metadata-B6Ir0KO7.js";import{l as i}from"./aws-light-meta-storage-TPyQwLvk.js";import"./is-expired-1JuZjDtb.js";export{i as default};
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
+ 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 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 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};
@@ -1 +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-CbSSPnOf.js";import{y as S}from"./local-meta-storage-CT1audnK.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};
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};
@@ -1 +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-CT1audnK.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};
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};
@@ -1 +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-CoyB2O-Y.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};
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};