@visulima/storage 2.0.0 → 2.0.1
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.
- package/CHANGELOG.md +7 -0
- package/LICENSE.md +130 -1
- package/dist/adapter/nuxt/module.d.ts +5 -5
- package/dist/adapter/nuxt/module.js +1 -1
- package/dist/ai/ai-sdk/index.d.ts +7 -7
- package/dist/ai/ai-sdk/index.js +1 -1
- package/dist/ai/claude/index.d.ts +5 -5
- package/dist/ai/claude/index.js +1 -1
- package/dist/ai/openai/index.d.ts +13 -5
- package/dist/ai/openai/index.js +1 -1
- package/dist/ai/tanstack/index.d.ts +6 -6
- package/dist/ai/tanstack/index.js +1 -1
- package/dist/handler/http/fetch/index.d.ts +8 -8
- package/dist/handler/http/fetch/index.js +1 -1
- package/dist/handler/http/hono/index.d.ts +7 -7
- package/dist/handler/http/hono/index.js +1 -1
- package/dist/handler/http/nextjs/index.d.ts +7 -7
- package/dist/handler/http/nextjs/index.js +1 -1
- package/dist/handler/http/node/index.d.ts +7 -7
- package/dist/handler/http/node/index.js +1 -1
- package/dist/handler/http/solid-start/index.d.ts +7 -7
- package/dist/handler/http/solid-start/index.js +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +1 -1
- package/dist/openapi/index.js +1 -1
- package/dist/packem_shared/AbstractBaseStorage-CcIPoAES.js +1 -0
- package/dist/packem_shared/AwsLightFile-CqeZ6M7o.js +1 -0
- package/dist/packem_shared/AwsLightMetaStorage-Cb4xIpax.js +1 -0
- package/dist/packem_shared/AwsLightStorage-Bhg6C3fo.js +1 -0
- package/dist/packem_shared/AzureFile-DoUVXQMI.js +1 -0
- package/dist/packem_shared/AzureSMetaStorage-ByKDwgWo.js +1 -0
- package/dist/packem_shared/AzureStorage-BzYWVRnX.js +1 -0
- package/dist/packem_shared/BaseTransformer-ByIAKnn8.js +1 -0
- package/dist/packem_shared/BoxFile-CKKRYACc.js +1 -0
- package/dist/packem_shared/BoxMetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/BoxStorage-Bmzt-OTx.js +1 -0
- package/dist/packem_shared/BunS3File-B2rczbY_.js +1 -0
- package/dist/packem_shared/BunS3MetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/{BunS3Storage-B_roVJ29.js → BunS3Storage-uJ-u5wpg.js} +1 -1
- package/dist/packem_shared/BunnyFile-CBJdpNcB.js +1 -0
- package/dist/packem_shared/BunnyMetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/BunnyStorage-9fw8VeuO.js +1 -0
- package/dist/packem_shared/CloudinaryFile-Dl8cnbJo.js +1 -0
- package/dist/packem_shared/CloudinaryMetaStorage-CYWznm7F.js +1 -0
- package/dist/packem_shared/CloudinaryStorage-CRVFUrEK.js +1 -0
- package/dist/packem_shared/DiskStorage-Wm6PC8Rc.js +1 -0
- package/dist/packem_shared/DiskStorageWithChecksum-CyhRDK5M.js +1 -0
- package/dist/packem_shared/DropboxFile-BUSubTWW.js +1 -0
- package/dist/packem_shared/DropboxMetaStorage-BYbJBJXr.js +1 -0
- package/dist/packem_shared/DropboxStorage-ZfgP7IMo.js +1 -0
- package/dist/packem_shared/{ERRORS-BIBxE2oR.js → ERRORS-olUcTqo2.js} +1 -1
- package/dist/packem_shared/File-DLAa0hBv.js +1 -0
- package/dist/packem_shared/Files-NF7wRh5C.js +1 -0
- package/dist/packem_shared/FirebaseFile-Dl8cnbJo.js +1 -0
- package/dist/packem_shared/FirebaseMetaStorage-DX1-58UY.js +1 -0
- package/dist/packem_shared/FirebaseStorage-D8NgHiZh.js +2 -0
- package/dist/packem_shared/FtpFile-H8EmE3S_.js +1 -0
- package/dist/packem_shared/FtpMetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/FtpStorage-BjBdLfTV.js +1 -0
- package/dist/packem_shared/GCSFile-mFuZfcTW.js +1 -0
- package/dist/packem_shared/GCSMetaStorage-Dm8m-iJT.js +1 -0
- package/dist/packem_shared/GCStorage-BWV6QQqd.js +1 -0
- package/dist/packem_shared/GoogleDriveFile-fDYE1aaN.js +1 -0
- package/dist/packem_shared/GoogleDriveMetaStorage-CEleJNZZ.js +1 -0
- package/dist/packem_shared/{GoogleDriveStorage-Du7uBhSm.js → GoogleDriveStorage-CS9nWKP5.js} +1 -1
- package/dist/packem_shared/LocalMetaStorage-EnWCLyKq.js +1 -0
- package/dist/packem_shared/MediaTransformer-GqBUkOvz.js +1 -0
- package/dist/packem_shared/MemoryMetaStorage-DdAIGIVO.js +1 -0
- package/dist/packem_shared/{MemoryStorage-ChKyI6OY.js → MemoryStorage-CJw7SAlG.js} +1 -1
- package/dist/packem_shared/Metadata-BeQVDFer.js +1 -0
- package/dist/packem_shared/{Multipart-V64Bg5dt.js → Multipart-C3ve9Z0D.js} +1 -1
- package/dist/packem_shared/Multipart-PlMON60C.js +1 -0
- package/dist/packem_shared/NetlifyBlobFile-Br5HPqlC.js +1 -0
- package/dist/packem_shared/NetlifyBlobMetaStorage-DD5mbms5.js +1 -0
- package/dist/packem_shared/NetlifyBlobStorage-DVpJgN3v.js +1 -0
- package/dist/packem_shared/NoOpMetrics-CWqe9gwp.js +1 -0
- package/dist/packem_shared/OneDriveFile-Ccv5bkno.js +1 -0
- package/dist/packem_shared/OneDriveMetaStorage-D0GzJ0FC.js +1 -0
- package/dist/packem_shared/OneDriveStorage-CTYdWnnf.js +1 -0
- package/dist/packem_shared/OpenTelemetryMetrics-opDTaCRp.js +1 -0
- package/dist/packem_shared/PocketBaseFile-Dl8cnbJo.js +1 -0
- package/dist/packem_shared/PocketBaseMetaStorage-DgKNhi2j.js +1 -0
- package/dist/packem_shared/PocketBaseStorage-CHQVk7lR.js +1 -0
- package/dist/packem_shared/Rest-DQRxx8yQ.js +1 -0
- package/dist/packem_shared/Rest-DYXzbF-Q.js +1 -0
- package/dist/packem_shared/S3File-CyL0Q6Nx.js +1 -0
- package/dist/packem_shared/S3MetaStorage-DszTVQMa.js +1 -0
- package/dist/packem_shared/S3Storage-Bdns7a3N.js +1 -0
- package/dist/packem_shared/SftpFile-H8EmE3S_.js +1 -0
- package/dist/packem_shared/SftpMetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/SftpStorage-D08to8f6.js +1 -0
- package/dist/packem_shared/SharePointFile-BWfd3Rel.js +1 -0
- package/dist/packem_shared/SharePointMetaStorage-BI-G6aeO.js +1 -0
- package/dist/packem_shared/{SharePointStorage-Dtnt5-wk.js → SharePointStorage-PtgEmyCY.js} +1 -1
- package/dist/packem_shared/SupabaseFile-CI0eFAyo.js +1 -0
- package/dist/packem_shared/SupabaseMetaStorage-CRw0xTXk.js +1 -0
- package/dist/packem_shared/SupabaseStorage-DJe4YZJD.js +1 -0
- package/dist/packem_shared/TUS_RESUMABLE-Dsxqcx-u.js +1 -0
- package/dist/packem_shared/{Tus-CJBgnJrn.js → Tus-C800fRBi.js} +1 -1
- package/dist/packem_shared/Tus-Vttn79I2.js +1 -0
- package/dist/packem_shared/UploadThingFile-DP4kNmpS.js +1 -0
- package/dist/packem_shared/UploadThingMetaStorage-CYWznm7F.js +1 -0
- package/dist/packem_shared/UploadThingStorage-S3iYzJ8Z.js +1 -0
- package/dist/packem_shared/ValidationError-SzFFFHiN.js +1 -0
- package/dist/packem_shared/VercelBlobFile-Censq2sD.js +1 -0
- package/dist/packem_shared/VercelBlobMetaStorage-DgKNhi2j.js +1 -0
- package/dist/packem_shared/VercelBlobStorage-D1eytZwU.js +1 -0
- package/dist/packem_shared/_commonjsHelpers-CqkleIqs.js +1 -0
- package/dist/packem_shared/agentsCopyFile-BMTcfVHg.js +1 -0
- package/dist/packem_shared/akamai-BPAk4688.js +1 -0
- package/dist/packem_shared/alibaba-CPhhkaQs.js +1 -0
- package/dist/packem_shared/approval-DcuhtQKs.js +1 -0
- package/dist/packem_shared/aws-light-meta-storage-CgGLgB8g.js +4 -0
- package/dist/packem_shared/azure-meta-storage-DmBO5MmP.js +1 -0
- package/dist/packem_shared/backblaze-CjeWkpeg.js +1 -0
- package/dist/packem_shared/base-handler-core-BvNgdV-9.js +1 -0
- package/dist/packem_shared/base-handler-fetch-DDSPIzWT.js +1 -0
- package/dist/packem_shared/base-handler-node-C83nCFpv.js +1 -0
- package/dist/packem_shared/claudeCopyFile-CMKFZHFh.js +1 -0
- package/dist/packem_shared/cloudflare-CijqmNaq.js +1 -0
- package/dist/packem_shared/copyFile-B7PNh9O7.js +1 -0
- package/dist/packem_shared/copyFile-Q5eYZIU5.js +1 -0
- package/dist/packem_shared/createResponsesFileTools-SU-K9JG4.js +1 -0
- package/dist/packem_shared/createRetryWrapper-BM8PL0cI.js +1 -0
- package/dist/packem_shared/detect-file-type-go3r-MOD.js +1 -0
- package/dist/packem_shared/digitalOcean-BE_d_CcF.js +1 -0
- package/dist/packem_shared/disk-storage-DEOi12bM.js +1 -0
- package/dist/packem_shared/{executors-BDzMjc4y.js → executors-DgKT6b1T.js} +1 -1
- package/dist/packem_shared/{executors.d-B9dIy3NT.d.ts → executors.d-HWHR3Ids.d.ts} +1 -6
- package/dist/packem_shared/exoscale-BzXbsZ3A.js +1 -0
- package/dist/packem_shared/{filebase-CsFYJIwB.js → filebase-pfolz904.js} +1 -1
- package/dist/packem_shared/{files.d-CmSZi3M0.d.ts → files.d-DuIceNg2.d.ts} +1 -1
- package/dist/packem_shared/gcs-meta-storage-A5uvIda3.js +1 -0
- package/dist/packem_shared/{get-file-status-y3wTtDQs.js → get-file-status-B8WmWzcM.js} +1 -1
- package/dist/packem_shared/getFormatFromContentType-BAVdaQ0o.js +1 -0
- package/dist/packem_shared/has-content-96mmyLn2.js +1 -0
- package/dist/packem_shared/headers-erjZrwbT.js +26 -0
- package/dist/packem_shared/hetzner-CaLW6ANw.js +1 -0
- package/dist/packem_shared/{ibmCos-j-3TfJ5p.js → ibmCos-Dbcs7XEJ.js} +1 -1
- package/dist/packem_shared/idriveE2-BiiGl7tr.js +1 -0
- package/dist/packem_shared/index-DKzU1HON.js +5 -0
- package/dist/packem_shared/internal-Zb__DDsV.js +1 -0
- package/dist/packem_shared/is-expired-CZlgTFFz.js +1 -0
- package/dist/packem_shared/local-meta-storage-Ca6WrUmN.js +1 -0
- package/dist/packem_shared/{local-meta-storage.d-cRTXr1kb.d.ts → local-meta-storage.d-CYWYyCUo.d.ts} +1 -2
- package/dist/packem_shared/{media-transformer.d-C8tn4J2Z.d.ts → media-transformer.d-Co37isNg.d.ts} +2 -2
- package/dist/packem_shared/minio-CC_RGR-q.js +1 -0
- package/dist/packem_shared/multipart-base-0AXqLN-B.js +1 -0
- package/dist/packem_shared/oauth-refresh-Cf1z47zf.js +1 -0
- package/dist/packem_shared/{oracleCloud-DslqNpn6.js → oracleCloud-eAWm6voZ.js} +1 -1
- package/dist/packem_shared/{ovhCloud-CMHE6uLV.js → ovhCloud-D00DprwO.js} +1 -1
- package/dist/packem_shared/part-match-Cb6xL9eN.js +1 -0
- package/dist/packem_shared/path-CxEa27Rz-DSh0_A5o.js +1 -0
- package/dist/packem_shared/posix-dirname-CSjB98Q5.js +1 -0
- package/dist/packem_shared/response-builder-tJ84C7n4.js +1 -0
- package/dist/packem_shared/rest-base-CzhSrUnH.js +1 -0
- package/dist/packem_shared/{restOpenApiSpec-Csv513qf.js → restOpenApiSpec-BNBrZFuE.js} +1 -1
- package/dist/packem_shared/s3-base-storage-DuHVKzSw.js +1 -0
- package/dist/packem_shared/{s3-base-storage.d-ks99NSs-.d.ts → s3-base-storage.d-BmuspwCF.d.ts} +1 -1
- package/dist/packem_shared/scaleway-Dms2IqTd.js +1 -0
- package/dist/packem_shared/{sharedErrorSchemaObject-YN65aAKj.js → sharedErrorSchemaObject-GTCM7U0s.js} +1 -1
- package/dist/packem_shared/{storage-DR7qdwBN.js → storage-uypoNkqu.js} +1 -1
- package/dist/packem_shared/{storage.d-DwdJrArF.d.ts → storage.d-C9EdfTf1.d.ts} +1 -1
- package/dist/packem_shared/storj-DzEePQoh.js +1 -0
- package/dist/packem_shared/sync-ClnPrYjk.js +1 -0
- package/dist/packem_shared/tencent-7P8z8AwE.js +1 -0
- package/dist/packem_shared/tigris-DlNWhmsM.js +1 -0
- package/dist/packem_shared/{transformOpenApiSpec-CIEAgpBD.js → transformOpenApiSpec-Bcnw9LVy.js} +1 -1
- package/dist/packem_shared/{tus-base.d-BKBoJVy0.d.ts → tus-base.d-Dgnbivbj.d.ts} +3 -8
- package/dist/packem_shared/{tusOpenApiSpec-D96B03t5.js → tusOpenApiSpec-BU8nhLH2.js} +1 -1
- package/dist/packem_shared/{types.d-BEUv414z.d.ts → types.d-D1TIRqKW.d.ts} +1 -1
- package/dist/packem_shared/{types.d-D7Zlz5RE.d.ts → types.d-D6Jkz0Sp.d.ts} +2 -2
- package/dist/packem_shared/{types.d-B1_xZIhu.d.ts → types.d-ZrDWKyVi.d.ts} +1 -2
- package/dist/packem_shared/update-size-Dxc1hvbI.js +1 -0
- package/dist/packem_shared/vultr-Crvmg314.js +1 -0
- package/dist/packem_shared/waitForStorage-afkqWeuz.js +1 -0
- package/dist/packem_shared/wasabi-CyCMxoUT.js +1 -0
- package/dist/packem_shared/{xhrOpenApiSpec-DQR4h6M8.js → xhrOpenApiSpec-xDSkxm2d.js} +1 -1
- package/dist/packem_shared/yandex-D1HwCz7g.js +1 -0
- package/dist/storage/aws/clients/index.js +1 -1
- package/dist/storage/aws/index.d.ts +3 -3
- package/dist/storage/aws/index.js +1 -1
- package/dist/storage/aws-light/index.d.ts +2 -2
- package/dist/storage/aws-light/index.js +1 -1
- package/dist/storage/azure/index.d.ts +2 -2
- package/dist/storage/azure/index.js +1 -1
- package/dist/storage/box/index.d.ts +3 -3
- package/dist/storage/box/index.js +1 -1
- package/dist/storage/bun-s3/index.d.ts +2 -2
- package/dist/storage/bun-s3/index.js +1 -1
- package/dist/storage/bunny/index.d.ts +3 -3
- package/dist/storage/bunny/index.js +1 -1
- package/dist/storage/cloudinary/index.d.ts +3 -3
- package/dist/storage/cloudinary/index.js +1 -1
- package/dist/storage/dropbox/index.d.ts +3 -3
- package/dist/storage/dropbox/index.js +1 -1
- package/dist/storage/firebase/index.d.ts +2 -2
- package/dist/storage/firebase/index.js +1 -1
- package/dist/storage/ftp/index.d.ts +3 -3
- package/dist/storage/ftp/index.js +1 -1
- package/dist/storage/gcs/index.d.ts +2 -2
- package/dist/storage/gcs/index.js +1 -1
- package/dist/storage/google-drive/index.d.ts +3 -3
- package/dist/storage/google-drive/index.js +1 -1
- package/dist/storage/local/index.d.ts +148 -4
- package/dist/storage/local/index.js +1 -1
- package/dist/storage/memory/index.d.ts +93 -3
- package/dist/storage/memory/index.js +1 -1
- package/dist/storage/netlify-blob/index.d.ts +3 -3
- package/dist/storage/netlify-blob/index.js +1 -1
- package/dist/storage/onedrive/index.d.ts +4 -4
- package/dist/storage/onedrive/index.js +1 -1
- package/dist/storage/pocketbase/index.d.ts +2 -2
- package/dist/storage/pocketbase/index.js +1 -1
- package/dist/storage/sftp/index.d.ts +3 -3
- package/dist/storage/sftp/index.js +1 -1
- package/dist/storage/sharepoint/index.d.ts +3 -3
- package/dist/storage/sharepoint/index.js +1 -1
- package/dist/storage/supabase/index.d.ts +3 -3
- package/dist/storage/supabase/index.js +1 -1
- package/dist/storage/uploadthing/index.d.ts +2 -2
- package/dist/storage/uploadthing/index.js +1 -1
- package/dist/storage/vercel-blob/index.d.ts +3 -3
- package/dist/storage/vercel-blob/index.js +1 -1
- package/dist/transformer/audio-transformer.d.ts +2 -2
- package/dist/transformer/audio-transformer.js +1 -1
- package/dist/transformer/image-transformer.d.ts +2 -2
- package/dist/transformer/image-transformer.js +1 -1
- package/dist/transformer/index.d.ts +3 -3
- package/dist/transformer/index.js +1 -1
- package/dist/transformer/video-transformer.d.ts +2 -2
- package/dist/transformer/video-transformer.js +1 -1
- package/package.json +19 -18
- package/dist/packem_shared/AbstractBaseStorage-CLsYmMZg.js +0 -1
- package/dist/packem_shared/AwsLightFile-CpZrubaV.js +0 -1
- package/dist/packem_shared/AwsLightMetaStorage-DPqJ9LTr.js +0 -1
- package/dist/packem_shared/AwsLightStorage-DGSPFUqr.js +0 -1
- package/dist/packem_shared/AzureFile-DFSaVe25.js +0 -1
- package/dist/packem_shared/AzureSMetaStorage-ByzM6Aix.js +0 -1
- package/dist/packem_shared/AzureStorage-DvKk_hhz.js +0 -1
- package/dist/packem_shared/BaseTransformer-Buw5lX_3.js +0 -1
- package/dist/packem_shared/BoxFile-CseIoPW1.js +0 -1
- package/dist/packem_shared/BoxMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/BoxStorage-CmM95wi2.js +0 -1
- package/dist/packem_shared/BunS3File-BcYmsz1n.js +0 -1
- package/dist/packem_shared/BunS3MetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/BunnyFile-BgEOlcYI.js +0 -1
- package/dist/packem_shared/BunnyMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/BunnyStorage-eZ1QDVaY.js +0 -1
- package/dist/packem_shared/CloudinaryFile-Bo5B-vM1.js +0 -1
- package/dist/packem_shared/CloudinaryMetaStorage-Bv_YCZ0Q.js +0 -1
- package/dist/packem_shared/CloudinaryStorage-CpH2f0Fv.js +0 -1
- package/dist/packem_shared/DiskStorage-DzjjqCzo.js +0 -1
- package/dist/packem_shared/DiskStorageWithChecksum-MZkDEyts.js +0 -1
- package/dist/packem_shared/DropboxFile-BFb7eOzy.js +0 -1
- package/dist/packem_shared/DropboxMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/DropboxStorage-BB9NoWK2.js +0 -1
- package/dist/packem_shared/File-W8aOo15X.js +0 -1
- package/dist/packem_shared/Files-DyMJ9FPN.js +0 -1
- package/dist/packem_shared/FirebaseFile-BLaBxa2A.js +0 -1
- package/dist/packem_shared/FirebaseMetaStorage-Bv_YCZ0Q.js +0 -1
- package/dist/packem_shared/FirebaseStorage-BgbxzYNC.js +0 -2
- package/dist/packem_shared/FtpFile-ClWDYnt2.js +0 -1
- package/dist/packem_shared/FtpMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/FtpStorage-CNqXDz7P.js +0 -1
- package/dist/packem_shared/GCSFile-Cero7qZN.js +0 -1
- package/dist/packem_shared/GCSMetaStorage-Cm_XzR0C.js +0 -1
- package/dist/packem_shared/GCStorage-DcvsI7eu.js +0 -1
- package/dist/packem_shared/GoogleDriveFile-DHpLhzg9.js +0 -1
- package/dist/packem_shared/GoogleDriveMetaStorage-B0gLF7Io.js +0 -1
- package/dist/packem_shared/LocalMetaStorage-CcGfFG39.js +0 -1
- package/dist/packem_shared/MediaTransformer-D2kUsklW.js +0 -1
- package/dist/packem_shared/MemoryMetaStorage-Ksgh9pe7.js +0 -1
- package/dist/packem_shared/Metadata-B7CcBueg.js +0 -1
- package/dist/packem_shared/Multipart-C35TR2qL.js +0 -1
- package/dist/packem_shared/NetlifyBlobFile-DoFhkzaH.js +0 -1
- package/dist/packem_shared/NetlifyBlobMetaStorage-Bv_YCZ0Q.js +0 -1
- package/dist/packem_shared/NetlifyBlobStorage-CZsr_0DF.js +0 -1
- package/dist/packem_shared/NoOpMetrics-BLo6u4NY.js +0 -1
- package/dist/packem_shared/OneDriveFile-CNNJYI43.js +0 -1
- package/dist/packem_shared/OneDriveMetaStorage-B0gLF7Io.js +0 -1
- package/dist/packem_shared/OneDriveStorage-B8qFgMq1.js +0 -1
- package/dist/packem_shared/OpenTelemetryMetrics-DJDQsNKp.js +0 -1
- package/dist/packem_shared/PocketBaseFile-DpJpxl3e.js +0 -1
- package/dist/packem_shared/PocketBaseMetaStorage-Cm3v8g1-.js +0 -1
- package/dist/packem_shared/PocketBaseStorage-D2vMN-oY.js +0 -1
- package/dist/packem_shared/Rest-BrEMYgxZ.js +0 -1
- package/dist/packem_shared/Rest-aPVP2ww1.js +0 -1
- package/dist/packem_shared/S3File-CpZrubaV.js +0 -1
- package/dist/packem_shared/S3MetaStorage-CMonflzp.js +0 -1
- package/dist/packem_shared/S3Storage-CTe_BMDl.js +0 -1
- package/dist/packem_shared/SftpFile-ClWDYnt2.js +0 -1
- package/dist/packem_shared/SftpMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/SftpStorage-BKeAzuej.js +0 -1
- package/dist/packem_shared/SharePointFile-Blz9FS4h.js +0 -1
- package/dist/packem_shared/SharePointMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/SupabaseFile-Bo5B-vM1.js +0 -1
- package/dist/packem_shared/SupabaseMetaStorage-B0gLF7Io.js +0 -1
- package/dist/packem_shared/SupabaseStorage-CmGQjqXf.js +0 -1
- package/dist/packem_shared/TUS_RESUMABLE-CyTSRvPU.js +0 -1
- package/dist/packem_shared/Tus-D9c7KDnl.js +0 -1
- package/dist/packem_shared/UploadThingFile-BTFMpcIA.js +0 -1
- package/dist/packem_shared/UploadThingMetaStorage-Bv_YCZ0Q.js +0 -1
- package/dist/packem_shared/UploadThingStorage-DZ4zNvDH.js +0 -1
- package/dist/packem_shared/ValidationError-3B06DFyE.js +0 -1
- package/dist/packem_shared/VercelBlobFile-CVQwKlZk.js +0 -1
- package/dist/packem_shared/VercelBlobMetaStorage-CJsyeQ63.js +0 -1
- package/dist/packem_shared/VercelBlobStorage-DDNEofR3.js +0 -1
- package/dist/packem_shared/_commonjsHelpers-CWAkuNXM.js +0 -1
- package/dist/packem_shared/agentsCopyFile-Dl5iffdH.js +0 -1
- package/dist/packem_shared/akamai-DthkaFul.js +0 -1
- package/dist/packem_shared/alibaba-BEi25O1g.js +0 -1
- package/dist/packem_shared/approval-fVHwBp7u.js +0 -1
- package/dist/packem_shared/aws-light-meta-storage-DGrn72VJ.js +0 -4
- package/dist/packem_shared/azure-meta-storage-ClbEsfI4.js +0 -1
- package/dist/packem_shared/backblaze-m1N5NZ9q.js +0 -1
- package/dist/packem_shared/base-handler-core-BJP9jHCE.js +0 -1
- package/dist/packem_shared/base-handler-fetch-yrYrukwL.js +0 -1
- package/dist/packem_shared/base-handler-node-C8P9rkaH.js +0 -1
- package/dist/packem_shared/claudeCopyFile-BX9O4ORk.js +0 -1
- package/dist/packem_shared/cloudflare-CdUTErlo.js +0 -1
- package/dist/packem_shared/copyFile-49FtxXcm.js +0 -1
- package/dist/packem_shared/copyFile-BUPezT_c.js +0 -1
- package/dist/packem_shared/createResponsesFileTools-6Tvt2PNr.js +0 -1
- package/dist/packem_shared/createRetryWrapper-DgmeHPNF.js +0 -1
- package/dist/packem_shared/detect-file-type-BA7UBLKA.js +0 -1
- package/dist/packem_shared/digitalOcean-B2uB6pgz.js +0 -1
- package/dist/packem_shared/disk-storage-DqnnFQAQ.js +0 -1
- package/dist/packem_shared/disk-storage-with-checksum.d-Dgwyza8a.d.ts +0 -146
- package/dist/packem_shared/exoscale-BDa1Gjth.js +0 -1
- package/dist/packem_shared/gcs-meta-storage-Bu2upyHK.js +0 -1
- package/dist/packem_shared/getFormatFromContentType-DCTTPQHm.js +0 -1
- package/dist/packem_shared/has-content-50BsqrWw.js +0 -1
- package/dist/packem_shared/headers-BAiAKekR.js +0 -26
- package/dist/packem_shared/hetzner-BGGFiRGD.js +0 -1
- package/dist/packem_shared/idriveE2-C6pQ5pQ0.js +0 -1
- package/dist/packem_shared/index-nZWCQrSe.js +0 -5
- package/dist/packem_shared/internal-D_cZIFwI.js +0 -1
- package/dist/packem_shared/is-expired-CBEk6XBi.js +0 -1
- package/dist/packem_shared/local-meta-storage-BELb1YwO.js +0 -11
- package/dist/packem_shared/memory-storage.d-BNZvDG1b.d.ts +0 -93
- package/dist/packem_shared/minio-NKquuBfS.js +0 -1
- package/dist/packem_shared/multipart-base-BOzY19lb.js +0 -1
- package/dist/packem_shared/oauth-refresh-EdGzlcOZ.js +0 -1
- package/dist/packem_shared/part-match-D-9dGX42.js +0 -1
- package/dist/packem_shared/path-C-OWflAo-_mqb5p5d.js +0 -1
- package/dist/packem_shared/posix-dirname-CfpH5wZi.js +0 -1
- package/dist/packem_shared/response-builder-CbSA8qPa.js +0 -1
- package/dist/packem_shared/rest-base-BQ_dhWyV.js +0 -1
- package/dist/packem_shared/s3-base-storage-CX94H-Za.js +0 -1
- package/dist/packem_shared/scaleway-U1In3v70.js +0 -1
- package/dist/packem_shared/storj-Cb59q9kF.js +0 -1
- package/dist/packem_shared/sync-DhR3536K.js +0 -1
- package/dist/packem_shared/tencent-Q1y2GENc.js +0 -1
- package/dist/packem_shared/tigris-BELKoyyp.js +0 -1
- package/dist/packem_shared/update-size-DuNuLyxj.js +0 -1
- package/dist/packem_shared/vultr-B491cQ4e.js +0 -1
- package/dist/packem_shared/waitForStorage-ByQmG4xF.js +0 -1
- package/dist/packem_shared/wasabi-DFrwIoab.js +0 -1
- package/dist/packem_shared/yandex-CwzHuEKP.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createReadStream as Z,createWriteStream as tt}from"node:fs";import{truncate as et,stat as x,open as rt,copyFile as D}from"node:fs/promises";import{PassThrough as st,Transform as V,pipeline as it}from"node:stream";import{n as Q,r as nt,h as H,C as $,g as ot,L as at,z as ct,p as L}from"./local-meta-storage-Ca6WrUmN.js";import{m as k,U as W,e as q,G,$ as X,v as lt}from"./path-CxEa27Rz-DSh0_A5o.js";import{e as ht}from"./index-DKzU1HON.js";import{a as mt}from"./detect-file-type-go3r-MOD.js";import{throwErrorCode as b,ERRORS as y,isUploadError as dt}from"./ERRORS-olUcTqo2.js";import{createHash as ut}from"node:crypto";import{B as ft,a as gt,t as yt}from"./storage-uypoNkqu.js";import pt from"./File-DLAa0hBv.js";import{createRequire as A}from"node:module";import{g as _}from"./get-file-status-B8WmWzcM.js";import{u as wt}from"./update-size-Dxc1hvbI.js";import{p as Et}from"./part-match-Cb6xL9eN.js";import{h as St}from"./has-content-96mmyLn2.js";let bt;const Ft=s=>(bt??=A(import.meta.url))(s),C=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Tt=s=>{if(typeof C<"u"&&C.versions&&C.versions.node){const[t,e]=C.versions.node.split(".").map(Number);if(t>22||t===22&&e>=3||t===20&&e>=16)return C.getBuiltinModule(s)}return Ft(s)},{lstat:Nt,writeFile:vt}=Tt("node:fs/promises"),O=async s=>{Q(s);try{const t=await Nt(s);if(!t.isFile())throw new Error(`Ensure path exists, expected 'file', got '${String(nt(t))}'`)}catch(t){if(t.code==="ENOENT"){await H(k($(s))),await vt(s,new Uint8Array);return}throw t}};class U extends Error{root;constructor(t,e){super(`${t instanceof Error?t.message:String(t)} for path "${e}"`),this.cause=t,this.root=e}get name(){return"WalkError"}set name(t){throw new Error("Cannot overwrite name of WalkError")}}const kt=s=>{const t=[],e=new Set;let r=0;for(const a of s){if(a==="{")t.push(r);else if(a==="}"){const c=t.pop();c!==void 0&&(e.add(c),e.add(r))}r+=1}let o=0,n=0,i="";for(const a of s)a==="{"?e.has(n)?(i+="(",o+=1):i+=String.raw`\{`:a==="}"?e.has(n)?(i+=")",o-=1):i+=String.raw`\}`:a===","&&o>0?i+="|":i+=a,n+=1;return i},B=s=>{const t=s.replace(/[$()+\\^]/g,String.raw`\$&`).replace(/\.\*/g,".([^/]*)").replace(/\*\*/g,"(.*)").replace(/(?<!\.)\*(?!\*)/g,"([^/]*)").replace(/\?/g,"[^/]").replace(/\.(?!\*)/g,String.raw`\.`),e=kt(t).replace(/\[!(.*?)\]/g,"[^$1]");try{return new RegExp(`^${e}$`)}catch(r){throw new Error(`Invalid glob pattern: ${s}`,{cause:r})}};class Ct{name;path;#t;constructor(t,e,r){this.#t=t,this.name=e,this.path=r}isDirectory(){return this.#t.isDirectory()}isFile(){return this.#t.isFile()}isSymbolicLink(){return this.#t.isSymbolicLink()}}const P=(s,t,e)=>new Ct(s,t,e),z=(s,t,e,r)=>{if(Array.isArray(t)&&t.length>0&&!t.some(n=>s.endsWith(n)))return!1;const o=s.includes("\\")?s.replaceAll("\\","/"):s;return e&&!e.some(n=>n.test(o))?!1:!r?.some(n=>n.test(o))};let Rt;const xt=s=>(Rt??=A(import.meta.url))(s),R=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,zt=s=>{if(typeof R<"u"&&R.versions&&R.versions.node){const[t,e]=R.versions.node.split(".").map(Number);if(t>22||t===22&&e>=3||t===20&&e>=16)return R.getBuiltinModule(s)}return xt(s)},{readdir:It,realpath:Mt,stat:Y}=zt("node:fs/promises"),Ot=async s=>{const t=G(s),e=X(t),r=await Y(t);return P(r,e,t)};async function*j(s,t={}){const{extensions:e,followSymlinks:r=!1,includeDirs:o=!0,includeFiles:n=!0,includeSymlinks:i=!0,match:a,maxDepth:c=Number.POSITIVE_INFINITY,skip:u}=t;if(Q(s),c<0)return;const f=t.visited??new Set,g=a?a.map(l=>typeof l=="string"?B(l):l):void 0,h=u?u.map(l=>typeof l=="string"?B(l):l):void 0;if(s=W($(s)),o&&z(s,e,g,h)&&(yield await Ot(s)),!(c<1||!z(s,void 0,void 0,h)))try{const l=await It(s,{withFileTypes:!0});for(const p of l){let d=q(s,p.name),m=p,{name:w}=p,E=p.isDirectory(),S=p.isFile();if(p.isSymbolicLink())if(r){const F=G(await Mt(d));if(f.has(F))continue;d=F;const T=await Y(F);E=T.isDirectory(),S=T.isFile(),m=T,w=X(F)}else if(i&&z(d,e,g,h)){yield P(p,p.name,d);continue}else continue;E?(r&&f.add(d),yield*j(d,{extensions:e,followSymlinks:r,includeDirs:o,includeFiles:n,includeSymlinks:i,match:g,maxDepth:c-1,skip:h,visited:f})):S&&n&&z(d,e,g,h)&&(yield P(m,w,d))}}catch(l){throw l instanceof U?l:new U(l,s)}}let Wt;const Pt=s=>(Wt??=A(import.meta.url))(s),N=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,K=s=>{if(typeof N<"u"&&N.versions&&N.versions.node){const[t,e]=N.versions.node.split(".").map(Number);if(t>22||t===22&&e>=3||t===20&&e>=16)return N.getBuiltinModule(s)}return Pt(s)},{cwd:$t}=N,{mkdir:At,rename:Dt,copyFile:Lt,unlink:_t}=K("node:fs/promises"),{mkdirSync:he,renameSync:me,copyFileSync:de,unlinkSync:ue}=K("node:fs");class Ut extends Error{constructor(t,e){super(`Source directory "${k(t)}" does not match destination directory "${k(e)}"`),this.name="SameDirectoryError"}}const Bt=(s,t)=>{if(!s||!t)throw new Error("Source and destination paths must not be empty");if(k(s)!==k(t))throw new Ut(s,t)},Vt=async(s,t,{cwd:e,directoryMode:r,overwrite:o,validateDirectory:n})=>{if(e&&(s=W(e,s),t=W(e,t)),n&&Bt(s,t),!o&&await ot(t))throw new Error(`The destination file exists: ${t}`);await At(k(t),{mode:r,recursive:!0});try{await Dt(s,t)}catch(i){if(i.code==="EXDEV")await Lt(s,t),await _t(s);else throw i}},Qt=async(s,t,e={})=>{const r={overwrite:!0,validateDirectory:!1,...e,cwd:e.cwd?$(e.cwd):$t()};await Vt(s,t,r)};class Ht extends V{constructor(t,e,r="base64"){super(),this.checksum=t,this.algorithm=e,this.encoding=r,this.hash=ut(e)}checksum;algorithm;encoding;length=0;digest="";hash;get calculatedDigest(){return this.digest}_transform(t,e,r){this.push(t),this.hash.update(t),this.length+=t.length,r()}_flush(t){this.digest=this.hash.digest(this.encoding),this.checksum&&this.checksum!==this.digest?t(new Error("Checksum mismatch")):t()}}const qt=(s,t,e="base64")=>t?new Ht(s,t,e):new st;class Gt extends V{constructor(t=Number.POSITIVE_INFINITY){super(),this.limit=t}limit;length=0;_transform(t,e,r){const o=this.length+t.length;this.limit>=o?(this.push(t),this.length=o,r()):r(new Error("Stream length limit exceeded"))}}class v extends ft{static name="disk";checksumTypes=["md5","sha1"];supportsRange=!0;get raw(){return{directory:this.directory}}directory;meta;constructor(t){const e={...t,fileNameValidation:t.fileNameValidation??gt};if(super(e),this.directory=e.directory,e.metaStorage)this.meta=e.metaStorage;else{const r={...e,...e.metaStorageConfig,logger:this.logger};this.meta=new at(r)}this.isReady=!1,this.accessCheck().then(()=>{this.isReady=!0}).catch(r=>{this.logger?.error("Storage access check failed: %O",r)})}normalizeError(t){return super.normalizeError(t)}async create(t){return this.instrumentOperation("create",async()=>{const e={...t};if(t.ttl){const n=typeof t.ttl=="string"?yt(t.ttl):t.ttl;n!==void 0&&(e.expiredAt=Date.now()+n)}e.size!==void 0&&Number(e.size)<0&&b(y.REQUEST_ENTITY_TOO_LARGE,"Request entity too large");const r=new pt(e);try{const n=await this.getMeta(r.id);if(n.status==="completed")return n}catch{}r.name=this.namingFunction(r),(r.size===void 0||Number.isNaN(r.size))&&(r.size===void 0||(r.size=this.maxUploadSize)),await this.validate(r);const o=this.getFilePath(r.name);try{await O(o),r.bytesWritten=0}catch(n){const i=this.normalizeError(n instanceof Error?n:new Error(String(n)));await this.onError(i),b(y.FILE_ERROR,i.message)}return r.status=_(r),await this.saveMeta(r),await this.onCreate(r),r})}async write(t){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&&wt(e,t.size),!Et(t,e))return b(y.FILE_CONFLICT);const o=this.getFilePath(e.name),n=await this.lock(o);try{const i=t.start||0;if(await O(o),e.bytesWritten===0&&(e.bytesWritten=i),St(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))return b(y.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:d,stream:m}=await mt(t.body);d?.mime&&(e.contentType=d.mime),t.body=m}catch{}const c=t.signal,u={...e,...t,body:t.body};c&&(u.signal=c);const[f,g]=await this.lazyWrite(u);if(g)return await et(o,e.bytesWritten),b(g);if(Number.isNaN(f)){const{size:d}=await x(o);e.bytesWritten=d}else{const d=i+(t.contentLength||0);e.bytesWritten=Math.max(e.bytesWritten||0,d),e.bytesWritten=Math.max(e.bytesWritten||0,f)}const h=e.status;e.status=_(e),await this.saveMeta(e);const l=e.status,p=h!==void 0&&h!=="completed"}else await O(o),e.bytesWritten=0;return e}catch(i){if(dt(i))throw i;const a=this.normalizeError(i instanceof Error?i:new Error(String(i)));return await this.onError(a),b(y.FILE_ERROR,(typeof a.message=="string"?a.message:String(i))||String(i))}finally{await this.unlock(o,n)}})}async get({id:t},e){return this.instrumentOperation("get",async()=>{const r=await this.checkIfExpired(await this.meta.get(t)),{bytesWritten:o,contentType:n,expiredAt:i,metadata:a,modifiedAt:c,name:u,originalName:f,size:g}=r,h=this.getFilePath(u),l=e?.range,p=async m=>{const w=m;if(w.code==="ENOENT"||w.code==="EPERM"){const S=this.normalizeError(m instanceof Error?m:new Error(w.message||String(m)));return await this.onError(S),b(y.FILE_NOT_FOUND,(typeof S.message=="string"?S.message:String(m))||String(m))}const E=this.normalizeError(m instanceof Error?m:new Error(String(m)));throw await this.onError(E),m};if(l){let m;try{m=await x(h)}catch(M){return p(M)}const w=m.size,E=Math.max(0,l.start),S=l.end===void 0?w-1:Math.min(w-1,l.end);if(E>S||E>=w)return b(y.BAD_REQUEST,`Invalid range ${E}-${l.end??""}`);const F=S-E+1,T=Buffer.allocUnsafe(F);let I;try{I=await rt(h,"r"),await I.read(T,0,F,E)}catch(M){return p(M)}finally{await I?.close()}const J=`W/"${w.toString(16)}-${Math.trunc(m.mtimeMs).toString(16)}-${E}-${S}"`;return{content:T,contentType:n,ETag:J,expiredAt:i,id:t,metadata:a,modifiedAt:c,name:u,originalName:f,size:F}}let d;try{d=await ct(h,{buffer:!0})}catch(m){return p(m)}return{content:d,contentType:n,ETag:ht(d),expiredAt:i,id:t,metadata:a,modifiedAt:c,name:u,originalName:f,size:g||o}})}async exists({id:t}){return this.instrumentOperation("exists",async()=>{try{const e=await this.getMeta(t),r=this.getFilePath(e.name);return await x(r),!0}catch(e){return e.code==="ENOENT",!1}})}async getStream({id:t}){return this.instrumentOperation("getStream",async()=>{try{const e=await this.checkIfExpired(await this.meta.get(t)),{bytesWritten:r,contentType:o,expiredAt:n,modifiedAt:i,name:a,size:c}=e,u=Z(this.getFilePath(a));return{headers:{"Content-Length":String(c||r),"Content-Type":o,...n&&{"X-Upload-Expires":n.toString()},...i&&{"Last-Modified":i.toString()}},size:c||r,stream:u}}catch(e){const r=this.normalizeError(e instanceof Error?e:new Error(String(e)));throw await this.onError(r),b(y.FILE_NOT_FOUND,(typeof r.message=="string"?r.message:String(e))||String(e))}})}async delete({id:t}){return this.instrumentOperation("delete",async()=>{const e=await this.getMeta(t);await L(this.getFilePath(e.name)),await this.deleteMeta(t);const r={...e,status:"deleted"};return await this.onDelete(r),r})}async copy(t,e){return this.instrumentOperation("copy",async()=>{v.assertSafeId(t),v.assertSafeId(e);const r=await this.getMeta(t);return await D(this.getFilePath(r.name),this.getFilePath(e)),{...r,name:e}})}async move(t,e){return this.instrumentOperation("move",async()=>{v.assertSafeId(t),v.assertSafeId(e);const r=await this.getMeta(t),o=this.getFilePath(r.name),n=this.getFilePath(e);try{await Qt(o,n)}catch(i){if(i?.code==="EXDEV")await D(o,n),await L(o);else{const c=this.normalizeError(i instanceof Error?i:new Error(String(i)));throw await this.onError(c),i}}return{...r,id:r.id,name:e}})}async list(){return this.instrumentOperation("list",async()=>{const t={followSymlinks:!1,includeDirs:!1,includeFiles:!0,skip:["*.META$"]},e=[],{directory:r}=this,o=i=>i.replaceAll("\\","/"),n=o(r);for await(const i of j(r,t)){const{suffix:a}=this.meta,{path:c}=i;if(!c.includes(a)){const{birthtime:u,ctime:f,mtime:g}=await x(c),h=o(c),l=h.startsWith(n)?h.slice(n.length):h;e.push({createdAt:u||f,id:l,modifiedAt:g})}}return e})}getFilePath(t){return v.assertSafeId(t),lt(t)&&b(y.INVALID_FILE_NAME,`Invalid file id: "${t}"`),q(this.directory,t)}lazyWrite(t){return new Promise((e,r)=>{const o=tt(this.getFilePath(t.name),{flags:"r+",start:t.start}),n=new Gt(t.contentLength||t.size-t.start),i=qt(t.checksum,t.checksumAlgorithm),a=!t.checksum,{signal:c}=t,u=()=>{o.close(),n.destroy(),i.destroy()},f=h=>{u(),e([Number.NaN,h])};if(n.on("error",()=>{f(y.FILE_CONFLICT)}),i.on("error",()=>{f(y.CHECKSUM_MISMATCH)}),t.body.on("aborted",()=>{f(a?void 0:y.REQUEST_ABORTED)}),t.body.on("error",h=>{u(),r(h)}),c?.aborted){f(a?void 0:y.REQUEST_ABORTED);return}let g;c&&(g=()=>{u(),o.destroy(),n.destroy(),i.destroy(),t.body.destroy(),e([Number.NaN,a?void 0:y.REQUEST_ABORTED])},c.addEventListener("abort",g,{once:!0})),it(t.body,n,i,o,h=>{if(c&&g&&c.removeEventListener("abort",g),h){if(u(),c?.aborted){e([Number.NaN,a?void 0:y.REQUEST_ABORTED]);return}e([Number.NaN,y.FILE_ERROR]);return}e([t.start+o.bytesWritten])})})}async accessCheck(){await H(this.directory)}}export{v as D,O as F,Gt as S,qt as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"zod";const p=1024*1024,l=10*1024*1024,
|
|
1
|
+
import*as e from"zod";const p=1024*1024,l=10*1024*1024,u=e.object({limit:e.int().positive().max(1e3).optional().meta({description:"Maximum number of items to return"}),prefix:e.string().trim().optional().meta({description:"Only return keys that start with this prefix"})}),y=e.object({key:e.string().trim().meta({description:"The object key to inspect"})}),m=e.object({binary:e.boolean().optional().meta({description:"When true, returns base64-encoded bytes instead of UTF-8 text"}),key:e.string().trim().meta({description:"The object key to download"}),maxBytes:e.int().positive().max(l).optional().meta({description:`Reject downloads larger than this byte count (default ${p}, maximum ${l}). Verified via head() before transferring.`})}),g=e.object({expiresIn:e.int().positive().optional().meta({description:"Override the adapter default URL expiry in seconds. Ignored by permanent-CDN adapters."}),key:e.string().trim().meta({description:"The object key to build a URL for"}),responseContentDisposition:e.string().trim().optional().meta({description:`Force a Content-Disposition header on the response (e.g. 'attachment; filename="f.txt"'). Strongly recommended for user-uploaded content to prevent inline rendering of HTML/SVG.`})}),f=e.object({content:e.string().meta({description:'File body. Treated as UTF-8 text unless encoding is "base64".'}),contentType:e.string().trim().optional().meta({description:"MIME type recorded with the object"}),encoding:e.enum(["text","base64"]).optional().meta({description:"How to interpret content (default: text)"}),key:e.string().trim().meta({description:"Destination object key"}),metadata:e.record(e.string().trim(),e.string()).optional().meta({description:"Custom string metadata to attach to the object"})}),b=e.object({key:e.string().trim().meta({description:"Object key to delete"})}),h=e.object({from:e.string().trim().meta({description:"Source object key"}),to:e.string().trim().meta({description:"Destination object key"})}),w=e.object({contentType:e.string().trim().optional().meta({description:"Content-Type that the upload must declare"}),expiresIn:e.int().positive().meta({description:"Lifetime of the presigned URL in seconds"}),key:e.string().trim().meta({description:"Destination object key"})}),T={copyFile:{description:"Copy a file to a new key within the configured bucket. The source remains intact.",input:h},deleteFile:{description:"Permanently delete a file from the configured bucket.",input:b},downloadFile:{description:"Download a file and return its contents. Returns UTF-8 text by default; set binary=true to receive base64-encoded bytes. Files larger than maxBytes are rejected before transfer.",input:m},getFileMetadata:{description:"Fetch metadata for a single file (size, content type, etag, custom metadata) without transferring its body.",input:y},getFileUrl:{description:"Return a signed, time-limited URL the caller can use to fetch a file. Adapters that don't support presigning will throw MethodNotAllowed.",input:g},listFiles:{description:"List files in the configured bucket, optionally filtered by key prefix.",input:u},signUploadUrl:{description:"Issue a presigned URL that lets a client upload directly to the configured bucket. Approval-gated by default — the URL grants upload permission until it expires.",input:w},uploadFile:{description:'Upload a file to the configured bucket. Pass content as UTF-8 text by default, or as base64 with encoding="base64" for binary payloads.',input:f}},F=["uploadFile","deleteFile","copyFile","signUploadUrl"],x=new Set(F),d=i=>{if(i!==void 0)return i instanceof Date?i.toISOString():typeof i=="number"?new Date(i).toISOString():i},U={copyFile:async(i,{from:o,to:t})=>{const r=await i.copy(o,t);return{copied:!0,etag:r.etag,from:o,key:r.key,to:t}},deleteFile:async(i,{key:o})=>(await i.delete(o),{deleted:!0,key:o}),downloadFile:async(i,{binary:o,key:t,maxBytes:r})=>{const n=r??p;if(n>l)throw new RangeError(`downloadFile refused: maxBytes (${n}) exceeds the maximum of ${l}. Use getFileUrl to delegate larger downloads to the client.`);const c=await i.head(t);if(typeof c.size=="number"&&c.size>n)throw new RangeError(`downloadFile refused: "${t}" is ${c.size} bytes which exceeds the maxBytes limit of ${n}. Use getFileUrl to delegate to the client, or raise maxBytes.`);const a=await i.download(t);if(a.body.byteLength>n)throw new RangeError(`downloadFile refused: "${t}" returned ${a.body.byteLength} bytes which exceeds the maxBytes limit of ${n}. Use getFileUrl instead.`);return o?{content:a.body.toString("base64"),contentType:a.contentType,encoding:"base64",key:a.key,...typeof a.size=="number"?{size:a.size}:{}}:{content:a.body.toString("utf8"),contentType:a.contentType,encoding:"text",key:a.key,...typeof a.size=="number"?{size:a.size}:{}}},getFileMetadata:async(i,{key:o})=>{const t=await i.head(o);return{contentType:t.contentType,...t.etag?{etag:t.etag}:{},key:t.key,...d(t.lastModified)?{lastModified:d(t.lastModified)}:{},...t.metadata?{metadata:t.metadata}:{},...typeof t.size=="number"?{size:t.size}:{}}},getFileUrl:async(i,{expiresIn:o,key:t,responseContentDisposition:r})=>{const n=await i.url(t,{expiresIn:o,responseContentDisposition:r});return{key:t,url:n}},listFiles:async(i,{limit:o,prefix:t})=>({items:(await i.list({limit:o,prefix:t})).map(n=>({contentType:n.contentType,...n.etag?{etag:n.etag}:{},key:n.key,...d(n.lastModified)?{lastModified:d(n.lastModified)}:{},...typeof n.size=="number"?{size:n.size}:{}}))}),signUploadUrl:async(i,{contentType:o,expiresIn:t,key:r})=>{const n=await i.signedUploadUrl(r,{contentType:o,expiresIn:t});return{key:r,url:n}},uploadFile:async(i,{content:o,contentType:t,encoding:r,key:n,metadata:c})=>{const a=r==="base64"?Buffer.from(o,"base64"):Buffer.from(o,"utf8"),s=await i.upload(n,a,{contentType:t,metadata:c});return{contentType:s.contentType,...s.etag?{etag:s.etag}:{},key:s.key,...d(s.lastModified)?{lastModified:d(s.lastModified)}:{},...typeof s.size=="number"?{size:s.size}:{}}}};export{T,x as W,U as e};
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import { F as Files } from "./files.d-CmSZi3M0.js";
|
|
2
|
-
import 'node:stream';
|
|
3
|
-
import 'node:timers';
|
|
4
|
-
import 'node:crypto';
|
|
5
|
-
import 'node:http';
|
|
6
|
-
import 'lru-cache';
|
|
7
1
|
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 } from "./approval.d-C-d-t94D.js";
|
|
2
|
+
import { F as Files } from "./files.d-DuIceNg2.js";
|
|
8
3
|
interface CopyFileResult {
|
|
9
4
|
copied: true;
|
|
10
5
|
etag: string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const o=e=>{const E=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.EXOSCALE_ACCESS_KEY_ID??process.env.EXOSCALE_ACCESS_KEY,c=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.EXOSCALE_SECRET_ACCESS_KEY??process.env.EXOSCALE_SECRET_KEY,s=e?.zone??process.env.EXOSCALE_ZONE;if(!s||!E||!c)throw new Error("Missing required parameters for Exoscale SOS client.");return{credentials:{accessKeyId:E,secretAccessKey:c},endpoint:`https://sos-${s}.exo.io`,forcePathStyle:!1,region:s}};export{o as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const n=e=>{const s=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.FILEBASE_ACCESS_KEY_ID??process.env.FILEBASE_ACCESS_KEY,c=e?.endpoint??process.env.FILEBASE_ENDPOINT,E=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.FILEBASE_SECRET_ACCESS_KEY??process.env.FILEBASE_SECRET_KEY;if(!s||!E)throw new Error("Missing required parameters for Filebase client.");return{credentials:{accessKeyId:s,secretAccessKey:E},endpoint:c??"https://s3.filebase.com",forcePathStyle:!0,region:"us-east-1"}};export{n as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BaseStorage, O as OperationOptions } from "./storage.d-
|
|
1
|
+
import { B as BaseStorage, O as OperationOptions } from "./storage.d-C9EdfTf1.js";
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
3
|
/**
|
|
4
4
|
* Pause / resume / abort handle threaded into {@link Files.upload} via {@link UploadOptions.control}.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{randomUUID as p}from"node:crypto";import{request as l}from"gaxios";import{GoogleAuth as g}from"google-auth-library";import f from"./MetaStorage-DPEUyWgN.js";import{stringifyMetadata as C,parseMetadata as y}from"./Metadata-BeQVDFer.js";import a from"./GCSConfig-BQ0OpVhe.js";import{h as R}from"./has-content-96mmyLn2.js";var E="@visulima/storage",I="2.0.0";const n={name:E,version:I},M=o=>{const t=o.match(/(\d+)-(\d+)/),s=t?.[2]?+t[2]:0;return s>0?s+1:0},j=o=>{if(R(o)){const t=o.contentLength?o.start+o.contentLength-1:"*";return`bytes ${o.start}-${t}/${o.size??"*"}`}return`bytes */${o.size??"*"}`},v=o=>{if(o.response!==void 0){const{response:t}=o;return t.data?.error?.errors?.map(({reason:e=""})=>e==="rateLimitExceeded"||e==="userRateLimitExceeded"?!0:!!(e&&e.includes("EAI_AGAIN"))).includes(!0)??!1}return!1},$={retry:3,shouldRetry:v,statusCodesToRetry:[[408,429,500,502,503,504],[100,199],[429],[500,599]]};class b extends f{constructor(t){super(t),this.config=t;const{authClient:s,...e}=t,r=e.bucket||process.env.GCS_BUCKET;if(s===void 0){if(!r)throw new Error("GCS bucket is not defined");if(!e.projectId)throw new Error("Sorry, we cannot connect to Cloud Services without a project ID.");e.scopes||=a.authScopes,this.authClient=new g(e)}else this.authClient=s;this.storageBaseURI=`${e.storageAPI||a.storageAPI}/${r}/o`,this.uploadBaseURI=`${e.uploadAPI||a.uploadAPI}/${r}/o`;const u=["storage.googleapis.com"],c=new URL(this.storageBaseURI).hostname;this.isCustomEndpoint=!u.includes(c);const{retryOptions:h,useAuthWithCustomEndpoint:d,userProject:m}=t;this.userProject=m,this.useAuthWithCustomEndpoint=d||!1,this.retryOptions={...$,...h},s===void 0&&this.accessCheck().catch(i=>{throw i.code==="404"?new Error(`Bucket ${r} does not exist`):i})}config;authClient;storageBaseURI;uploadBaseURI;isCustomEndpoint=!1;retryOptions={};useAuthWithCustomEndpoint;userProject;async save(t,s){const e={...s};return e.metadata&&(e.metadata=C(s.metadata)),await this.makeRequest({body:JSON.stringify(e),headers:{"Content-Type":"application/json; charset=utf-8"},method:"POST",params:{name:encodeURIComponent(this.getMetaName(t)),uploadType:"media"},url:this.uploadBaseURI}),s}async delete(t){const s=this.getMetaPath(t);await this.makeRequest({method:"DELETE",url:s})}async get(t){const s=this.getMetaPath(t),{data:e}=await this.makeRequest({params:{alt:"media"},url:s});return e.metadata&&typeof e.metadata=="string"&&(e.metadata=y(e.metadata)),e}async touch(t,s){return this.save(t,s)}async accessCheck(){return this.makeRequest({url:this.storageBaseURI.replace("/o","")})}getMetaPath(t){return`${this.storageBaseURI}/${this.getMetaName(t)}`}async makeRequest(t){return typeof t.url=="string"&&(t.url=t.url.replaceAll("/:",":")),t={...t,headers:{"User-Agent":`${n.name}/${n.version}`,"x-goog-api-client":`gl-node/${process.versions.node} gccl/${n.version} gccl-invocation-id/${p()}`},params:{...this.userProject===void 0?{}:{userProject:this.userProject}},retry:!0,retryConfig:this.retryOptions,timeout:6e4},this.isCustomEndpoint&&!this.useAuthWithCustomEndpoint?l(t):this.authClient.request(t)}}export{b as G,j as b,M as g,n as p,$ as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=t=>t.bytesWritten===t.size?"completed":t.createdAt?"part":"created";export{e as
|
|
1
|
+
const e=t=>t.bytesWritten===t.size?"completed":t.createdAt?"part":"created";export{e as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import i from"mime";const n=(r,t)=>r?r.startsWith(`${t}/`):!1,a=r=>{if(r)return i.getExtension(r)||void 0},u=(r,t,o)=>{const s=typeof r.size=="string"?Number.parseInt(r.size,10):r.size;if(o?.maxSize&&s>o.maxSize)throw new Error(`${t} size ${s} exceeds maximum allowed size ${o.maxSize}`);if(!n(r.contentType,t))throw new Error(`File is not ${t==="image"?"an":"a"} ${t}: ${r.contentType}`);const e=a(r.contentType);if(o?.supportedFormats&&e&&!o.supportedFormats.includes(e))throw new Error(`Unsupported ${t} format: ${e}`)},z=r=>r?!!i.getExtension(r):!1;export{a as getFormatFromContentType,z as isKnownContentType,n as isValidMediaType,u as validateMediaFile};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const o=t=>typeof t.start=="number"&&t.start>=0&&!!t.body;export{o as h};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{g as ae}from"./_commonjsHelpers-CqkleIqs.js";import ie from"path";var $={exports:{}},H,K;function oe(){if(K)return H;K=1;/*!
|
|
2
|
+
* depd
|
|
3
|
+
* Copyright(c) 2014-2018 Douglas Christopher Wilson
|
|
4
|
+
* MIT Licensed
|
|
5
|
+
*/var r=ie.relative;H=m;var e=process.cwd();function t(n,a){for(var u=n.split(/[ ,]+/),s=String(a).toLowerCase(),o=0;o<u.length;o++){var y=u[o];if(y&&(y==="*"||y.toLowerCase()===s))return!0}return!1}function i(n,a,u){var s=Object.getOwnPropertyDescriptor(n,a),o=s.value;return s.get=function(){return o},s.writable&&(s.set=function(b){return o=b}),delete s.value,delete s.writable,Object.defineProperty(n,a,s),s}function f(n){for(var a="",u=0;u<n;u++)a+=", arg"+u;return a.substr(2)}function l(n){var a=this.name+": "+this.namespace;this.message&&(a+=" deprecated "+this.message);for(var u=0;u<n.length;u++)a+=`
|
|
6
|
+
at `+n[u].toString();return a}function m(n){if(!n)throw new TypeError("argument namespace is required");var a=v(),u=E(a[1]),s=u[0];function o(y){S.call(o,y)}return o._file=s,o._ignored=x(n),o._namespace=n,o._traced=T(n),o._warned=Object.create(null),o.function=w,o.property=d,o}function h(n,a){var u=typeof n.listenerCount!="function"?n.listeners(a).length:n.listenerCount(a);return u>0}function x(n){if(process.noDeprecation)return!0;var a=process.env.NO_DEPRECATION||"";return t(a,n)}function T(n){if(process.traceDeprecation)return!0;var a=process.env.TRACE_DEPRECATION||"";return t(a,n)}function S(n,a){var u=h(process,"deprecation");if(!(!u&&this._ignored)){var s,o,y,b,C=0,j=!1,O=v(),M=this._file;for(a?(b=a,y=E(O[1]),y.name=b.name,M=y[0]):(C=2,b=E(O[C]),y=b);C<O.length;C++)if(s=E(O[C]),o=s[0],o===M)j=!0;else if(o===this._file)M=this._file;else if(j)break;var D=s?b.join(":")+"__"+s.join(":"):void 0;if(!(D!==void 0&&D in this._warned)){this._warned[D]=!0;var _=n;if(_||(_=y===b||!y.name?P(b):P(y)),u){var re=g(this._namespace,_,O.slice(C));process.emit("deprecation",re);return}var te=process.stderr.isTTY?R:I,ne=te.call(this,_,s,O.slice(C));process.stderr.write(ne+`
|
|
7
|
+
`,"utf8")}}}function E(n){var a=n.getFileName()||"<anonymous>",u=n.getLineNumber(),s=n.getColumnNumber();n.isEval()&&(a=n.getEvalOrigin()+", "+a);var o=[a,u,s];return o.callSite=n,o.name=n.getFunctionName(),o}function P(n){var a=n.callSite,u=n.name;u||(u="<anonymous@"+p(n)+">");var s=a.getThis(),o=s&&a.getTypeName();return o==="Object"&&(o=void 0),o==="Function"&&(o=s.name||o),o&&a.getMethodName()?o+"."+u:u}function I(n,a,u){var s=new Date().toUTCString(),o=s+" "+this._namespace+" deprecated "+n;if(this._traced){for(var y=0;y<u.length;y++)o+=`
|
|
8
|
+
at `+u[y].toString();return o}return a&&(o+=" at "+p(a)),o}function R(n,a,u){var s="\x1B[36;1m"+this._namespace+"\x1B[22;39m \x1B[33;1mdeprecated\x1B[22;39m \x1B[0m"+n+"\x1B[39m";if(this._traced){for(var o=0;o<u.length;o++)s+=`
|
|
9
|
+
\x1B[36mat `+u[o].toString()+"\x1B[39m";return s}return a&&(s+=" \x1B[36m"+p(a)+"\x1B[39m"),s}function p(n){return r(e,n[0])+":"+n[1]+":"+n[2]}function v(){var n=Error.stackTraceLimit,a={},u=Error.prepareStackTrace;Error.prepareStackTrace=c,Error.stackTraceLimit=Math.max(10,n),Error.captureStackTrace(a);var s=a.stack.slice(1);return Error.prepareStackTrace=u,Error.stackTraceLimit=n,s}function c(n,a){return a}function w(n,a){if(typeof n!="function")throw new TypeError("argument fn must be a function");var u=f(n.length),s=v(),o=E(s[1]);o.name=n.name;var y=new Function("fn","log","deprecate","message","site",`"use strict"
|
|
10
|
+
return function (`+u+`) {log.call(deprecate, message, site)
|
|
11
|
+
return fn.apply(this, arguments)
|
|
12
|
+
}`)(n,S,this,a,o);return y}function d(n,a,u){if(!n||typeof n!="object"&&typeof n!="function")throw new TypeError("argument obj must be object");var s=Object.getOwnPropertyDescriptor(n,a);if(!s)throw new TypeError("must call property on owner object");if(!s.configurable)throw new TypeError("property must be configurable");var o=this,y=v(),b=E(y[1]);b.name=a,"value"in s&&(s=i(n,a));var C=s.get,j=s.set;typeof C=="function"&&(s.get=function(){return S.call(o,u,b),C.apply(this,arguments)}),typeof j=="function"&&(s.set=function(){return S.call(o,u,b),j.apply(this,arguments)}),Object.defineProperty(n,a,s)}function g(n,a,u){var s=new Error,o;return Object.defineProperty(s,"constructor",{value:g}),Object.defineProperty(s,"message",{configurable:!0,enumerable:!1,value:a,writable:!0}),Object.defineProperty(s,"name",{enumerable:!1,configurable:!0,value:"DeprecationError",writable:!0}),Object.defineProperty(s,"namespace",{configurable:!0,enumerable:!1,value:n,writable:!0}),Object.defineProperty(s,"stack",{configurable:!0,enumerable:!1,get:function(){return o!==void 0?o:o=l.call(this,u)},set:function(b){o=b}}),s}return H}var B,Y;function se(){if(Y)return B;Y=1,B=Object.setPrototypeOf||({__proto__:[]}instanceof Array?r:e);function r(t,i){return t.__proto__=i,t}function e(t,i){for(var f in i)Object.prototype.hasOwnProperty.call(t,f)||(t[f]=i[f]);return t}return B}var U,J;function ue(){return J||(J=1,U={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}),U}var W,Q;function ce(){if(Q)return W;Q=1;/*!
|
|
13
|
+
* statuses
|
|
14
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
15
|
+
* Copyright(c) 2016 Douglas Christopher Wilson
|
|
16
|
+
* MIT Licensed
|
|
17
|
+
*/var r=ue();W=l,l.message=r,l.code=e(r),l.codes=t(r),l.redirect={300:!0,301:!0,302:!0,303:!0,305:!0,307:!0,308:!0},l.empty={204:!0,205:!0,304:!0},l.retry={502:!0,503:!0,504:!0};function e(m){var h={};return Object.keys(m).forEach(function(T){var S=m[T],E=Number(T);h[S.toLowerCase()]=E}),h}function t(m){return Object.keys(m).map(function(x){return Number(x)})}function i(m){var h=m.toLowerCase();if(!Object.prototype.hasOwnProperty.call(l.code,h))throw new Error('invalid status message: "'+m+'"');return l.code[h]}function f(m){if(!Object.prototype.hasOwnProperty.call(l.message,m))throw new Error("invalid status code: "+m);return l.message[m]}function l(m){if(typeof m=="number")return f(m);if(typeof m!="string")throw new TypeError("code must be a number or string");var h=parseInt(m,10);return isNaN(h)?i(m):f(h)}return W}var L={exports:{}},k={exports:{}},X;function fe(){return X||(X=1,typeof Object.create=="function"?k.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:k.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}),k.exports}var Z;function pe(){if(Z)return L.exports;Z=1;try{var r=require("util");if(typeof r.inherits!="function")throw"";L.exports=r.inherits}catch{L.exports=fe()}return L.exports}var z,V;function le(){if(V)return z;V=1;/*!
|
|
18
|
+
* toidentifier
|
|
19
|
+
* Copyright(c) 2016 Douglas Christopher Wilson
|
|
20
|
+
* MIT Licensed
|
|
21
|
+
*/z=r;function r(e){return e.split(" ").map(function(t){return t.slice(0,1).toUpperCase()+t.slice(1)}).join("").replace(/[^ _0-9a-z]/gi,"")}return z}var ee;function me(){return ee||(ee=1,(function(r){/*!
|
|
22
|
+
* http-errors
|
|
23
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
24
|
+
* Copyright(c) 2016 Douglas Christopher Wilson
|
|
25
|
+
* MIT Licensed
|
|
26
|
+
*/var e=oe()("http-errors"),t=se(),i=ce(),f=pe(),l=le();r.exports=h,r.exports.HttpError=x(),r.exports.isHttpError=S(r.exports.HttpError),I(r.exports,i.codes,r.exports.HttpError);function m(p){return+(String(p).charAt(0)+"00")}function h(){for(var p,v,c=500,w={},d=0;d<arguments.length;d++){var g=arguments[d],n=typeof g;if(n==="object"&&g instanceof Error)p=g,c=p.status||p.statusCode||c;else if(n==="number"&&d===0)c=g;else if(n==="string")v=g;else if(n==="object")w=g;else throw new TypeError("argument #"+(d+1)+" unsupported type "+n)}typeof c=="number"&&(c<400||c>=600)&&e("non-error status code; use only 4xx or 5xx status codes"),(typeof c!="number"||!i.message[c]&&(c<400||c>=600))&&(c=500);var a=h[c]||h[m(c)];p||(p=a?new a(v):new Error(v||i.message[c]),Error.captureStackTrace(p,h)),(!a||!(p instanceof a)||p.status!==c)&&(p.expose=c<500,p.status=p.statusCode=c);for(var u in w)u!=="status"&&u!=="statusCode"&&(p[u]=w[u]);return p}function x(){function p(){throw new TypeError("cannot construct abstract class")}return f(p,Error),p}function T(p,v,c){var w=R(v);function d(g){var n=g??i.message[c],a=new Error(n);return Error.captureStackTrace(a,d),t(a,d.prototype),Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,value:n,writable:!0}),Object.defineProperty(a,"name",{enumerable:!1,configurable:!0,value:w,writable:!0}),a}return f(d,p),P(d,w),d.prototype.status=c,d.prototype.statusCode=c,d.prototype.expose=!0,d}function S(p){return function(c){return!c||typeof c!="object"?!1:c instanceof p?!0:c instanceof Error&&typeof c.expose=="boolean"&&typeof c.statusCode=="number"&&c.status===c.statusCode}}function E(p,v,c){var w=R(v);function d(g){var n=g??i.message[c],a=new Error(n);return Error.captureStackTrace(a,d),t(a,d.prototype),Object.defineProperty(a,"message",{enumerable:!0,configurable:!0,value:n,writable:!0}),Object.defineProperty(a,"name",{enumerable:!1,configurable:!0,value:w,writable:!0}),a}return f(d,p),P(d,w),d.prototype.status=c,d.prototype.statusCode=c,d.prototype.expose=!1,d}function P(p,v){var c=Object.getOwnPropertyDescriptor(p,"name");c&&c.configurable&&(c.value=v,Object.defineProperty(p,"name",c))}function I(p,v,c){v.forEach(function(d){var g,n=l(i.message[d]);switch(m(d)){case 400:g=T(c,n,d);break;case 500:g=E(c,n,d);break}g&&(p[d]=g,p[n]=g)})}function R(p){return p.slice(-5)==="Error"?p:p+"Error"}})($)),$.exports}var de=me();const we=ae(de);function G(r,e=";"){let t=e===";"?/(?:^|;)\s*([^=;\s]+)(\s*=\s*(?:"((?:[^"\\]|\\.)*)"|((?:[^;]|\\;)+))?)?/g:/(?:^|,)\s*([^=,\s]+)(\s*=\s*(?:"((?:[^"\\]|\\.)*)"|((?:[^,]|\\,)+))?)?/g,i=[],f;for(;(f=t.exec(r))!==null;){let l=f[1].trim(),m;f[2]&&(m=(f[3]||f[4]||"").replace(/\\(.)/g,"$1").trim()),i.push([l,m])}return i}function A(r){return r.includes('"')||r.includes(";")||r.includes(" ")?`"${r.replace(/"/g,'\\"')}"`:r}function he(r){return r!=null&&typeof r[Symbol.iterator]=="function"}class F{#e;constructor(e){if(e)return F.from(e);this.#e=new Map}#r(){this.#e=new Map([...this.#e].sort((e,t)=>t[1]-e[1]))}get mediaTypes(){return Array.from(this.#e.keys())}get weights(){return Array.from(this.#e.values())}get size(){return this.#e.size}accepts(e){return this.getWeight(e)>0}getWeight(e){let[t,i]=e.toLowerCase().split("/");for(let[f,l]of this){let[m,h]=f.split("/");if((m===t||m==="*"||t==="*")&&(h===i||h==="*"||i==="*"))return l}return 0}getPreferred(e){let i=e.map(f=>[f,this.getWeight(f)]).sort((f,l)=>l[1]-f[1])[0];return i!==void 0&&i[1]>0?i[0]:null}get(e){return this.#e.get(e.toLowerCase())??null}set(e,t=1){this.#e.set(e.toLowerCase(),t),this.#r()}delete(e){this.#e.delete(e.toLowerCase())}has(e){return this.#e.has(e.toLowerCase())}clear(){this.#e.clear()}entries(){return this.#e.entries()}[Symbol.iterator](){return this.entries()}forEach(e,t){for(let[i,f]of this)e.call(t,i,f,this)}toString(){let e=[];for(let[t,i]of this.#e)e.push(`${t}${i===1?"":`;q=${i}`}`);return e.join(",")}static from(e){let t=new F;if(e!==null){if(typeof e=="string")for(let i of e.split(/\s*,\s*/)){let f=G(i);if(f.length<1)continue;let l=f[0][0],m=1;for(let h=1;h<f.length;h++){let[x,T]=f[h];if(x==="q"){m=Number(T);break}}t.#e.set(l.toLowerCase(),m)}else if(he(e))for(let i of e)Array.isArray(i)?t.#e.set(i[0].toLowerCase(),i[1]):t.#e.set(i.toLowerCase(),1);else for(let i of Object.getOwnPropertyNames(e))t.#e.set(i.toLowerCase(),e[i]);t.#r()}return t}}class N{filename;filenameSplat;name;type;constructor(e){if(e)return N.from(e)}get preferredFilename(){let e=this.filenameSplat;if(e){let t=ye(e);if(t)return t}return this.filename}toString(){if(!this.type)return"";let e=[this.type];return this.name&&e.push(`name=${A(this.name)}`),this.filename&&e.push(`filename=${A(this.filename)}`),this.filenameSplat&&e.push(`filename*=${A(this.filenameSplat)}`),e.join("; ")}static from(e){let t=new N;if(e!==null)if(typeof e=="string"){let i=G(e);if(i.length>0){t.type=i[0][0];for(let[f,l]of i.slice(1))f==="filename"?t.filename=l:f==="filename*"?t.filenameSplat=l:f==="name"&&(t.name=l)}}else t.filename=e.filename,t.filenameSplat=e.filenameSplat,t.name=e.name,t.type=e.type;return t}}function ye(r){let e=r.match(/^([\w-]+)'([^']*)'(.+)$/);if(!e)return null;let[,t,,i]=e,f=ge(i);try{let l=new TextDecoder(t),m=new Uint8Array(f.split("").map(h=>h.charCodeAt(0)));return l.decode(m)}catch(l){return console.warn(`Failed to decode filename from charset ${t}:`,l),f}}function ge(r){return r.replace(/%([0-9A-Fa-f]{2})/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}class q{boundary;charset;mediaType;constructor(e){if(e)return q.from(e)}toString(){if(!this.mediaType)return"";let e=[this.mediaType];return this.charset&&e.push(`charset=${A(this.charset)}`),this.boundary&&e.push(`boundary=${A(this.boundary)}`),e.join("; ")}static from(e){let t=new q;if(e!==null)if(typeof e=="string"){let i=G(e);if(i.length>0){t.mediaType=i[0][0];for(let[f,l]of i.slice(1))f==="boundary"?t.boundary=l:f==="charset"&&(t.charset=l)}}else t.boundary=e.boundary,t.charset=e.charset,t.mediaType=e.mediaType;return t}}const Ee={acceptsMediaType(r,e){const t=this.parseAccept(r);return t?t.accepts(e):!1},createCacheControl(r){const e=[];return r.public&&e.push("public"),r.private&&e.push("private"),r.noCache&&e.push("no-cache"),r.noStore&&e.push("no-store"),r.immutable&&e.push("immutable"),r.mustRevalidate&&e.push("must-revalidate"),r.proxyRevalidate&&e.push("proxy-revalidate"),r.maxAge!==void 0&&e.push(`max-age=${r.maxAge}`),r.sMaxAge!==void 0&&e.push(`s-maxage=${r.sMaxAge}`),r.minFresh!==void 0&&e.push(`min-fresh=${r.minFresh}`),r.staleWhileRevalidate!==void 0&&e.push(`stale-while-revalidate=${r.staleWhileRevalidate}`),r.staleIfError!==void 0&&e.push(`stale-if-error=${r.staleIfError}`),e.join(", ")},createCacheControlPreset(r){const e={immutable:{immutable:!0,maxAge:31536e3},"no-cache":{noCache:!0},"no-store":{noStore:!0},private:{maxAge:3600,private:!0},public:{maxAge:3600,public:!0}};return this.createCacheControl(e[r])},createContentDisposition(r){return new N({type:r.type,...r.filename&&{filename:r.filename},...r.filenameSplat&&{filenameSplat:r.filenameSplat}}).toString()},createContentType(r){return new q({mediaType:r.mediaType,...r.charset&&{charset:r.charset},...r.boundary&&{boundary:r.boundary}}).toString()},ensureCharset(r,e="utf8"){const t=this.parseContentType(r);return t?(t.charset||(t.charset=e),t.toString()):r},fromHeaders(r){const e=new Headers;return Array.isArray(r)?r.forEach(([t,i])=>{e.set(t,Array.isArray(i)?i.join(", "):String(i))}):Object.entries(r).forEach(([t,i])=>{e.set(t,Array.isArray(i)?i.join(", "):String(i))}),e},getPreferredMediaType(r,e){const t=this.parseAccept(r);if(t){for(const i of e)if(t.accepts(i))return i}},parseAccept(r){if(r)try{return new F(r)}catch{return}},parseContentDisposition(r){if(r)try{return new N(r)}catch{return}},parseContentType(r){if(r)try{return new q(r)}catch{return}}};export{Ee as H,we as c,de as h};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const c=new Set(["fsn1","hel1","nbg1"]),E=s=>{const o=s?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.HETZNER_ACCESS_KEY_ID??process.env.HETZNER_ACCESS_KEY,e=s?.location??process.env.HETZNER_LOCATION,n=s?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.HETZNER_SECRET_ACCESS_KEY??process.env.HETZNER_SECRET_KEY;if(!o||!n||!e)throw new Error("Missing required parameters for Hetzner Object Storage client.");if(!c.has(e))throw new Error(`Invalid Hetzner location "${e}". Expected one of: ${[...c].join(", ")}.`);return{credentials:{accessKeyId:o,secretAccessKey:n},endpoint:`https://${e}.your-objectstorage.com`,forcePathStyle:!1,region:e}};export{E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _=e=>{const
|
|
1
|
+
const _=e=>{const o=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.IBM_COS_ACCESS_KEY_ID??process.env.IBM_COS_ACCESS_KEY,n=e?.endpoint??process.env.IBM_COS_ENDPOINT,s=e?.region??process.env.IBM_COS_REGION,c=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.IBM_COS_SECRET_ACCESS_KEY??process.env.IBM_COS_SECRET_KEY;if(!s||!o||!c)throw new Error("Missing required parameters for IBM Cloud Object Storage client.");return{credentials:{accessKeyId:o,secretAccessKey:c},endpoint:n??`https://s3.${s}.cloud-object-storage.appdomain.cloud`,forcePathStyle:!1,region:s}};export{_ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r=e=>{const s=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.IDRIVE_E2_ACCESS_KEY_ID??process.env.IDRIVE_E2_ACCESS_KEY,E=e?.endpoint??process.env.AWS_ENDPOINT??process.env.IDRIVE_E2_ENDPOINT,n=e?.region??process.env.AWS_REGION??process.env.IDRIVE_E2_REGION,c=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.IDRIVE_E2_SECRET_ACCESS_KEY??process.env.IDRIVE_E2_SECRET_KEY;if(!E||!s||!c)throw new Error("Missing required parameters for iDrive e2 client.");return{credentials:{accessKeyId:s,secretAccessKey:c},endpoint:E,forcePathStyle:!0,region:n??"us-east-1"}};export{r as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{g as v}from"./_commonjsHelpers-CqkleIqs.js";import l from"crypto";import h from"fs";var a,f;function S(){if(f)return a;f=1;/*!
|
|
2
|
+
* etag
|
|
3
|
+
* Copyright(c) 2014-2016 Douglas Christopher Wilson
|
|
4
|
+
* MIT Licensed
|
|
5
|
+
*/a=g;var o=l,i=h.Stats,n=Object.prototype.toString;function s(t){if(t.length===0)return'"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"';var r=o.createHash("sha1").update(t,"utf8").digest("base64").substring(0,27),e=typeof t=="string"?Buffer.byteLength(t,"utf8"):t.length;return'"'+e.toString(16)+"-"+r+'"'}function g(t,r){if(t==null)throw new TypeError("argument entity is required");var e=m(t),p=r&&typeof r.weak=="boolean"?r.weak:e;if(!e&&typeof t!="string"&&!Buffer.isBuffer(t))throw new TypeError("argument entity must be string, Buffer, or fs.Stats");var u=e?c(t):s(t);return p?"W/"+u:u}function m(t){return typeof i=="function"&&t instanceof i?!0:t&&typeof t=="object"&&"ctime"in t&&n.call(t.ctime)==="[object Date]"&&"mtime"in t&&n.call(t.mtime)==="[object Date]"&&"ino"in t&&typeof t.ino=="number"&&"size"in t&&typeof t.size=="number"}function c(t){var r=t.mtime.getTime().toString(16),e=t.size.toString(16);return'"'+e+"-"+r+'"'}return a}var w=S();const q=v(w);export{q as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Readable as i}from"node:stream";import{throwErrorCode as p,ERRORS as m}from"./ERRORS-olUcTqo2.js";const l=8,h=e=>typeof e=="object"&&e!==null&&typeof e.getReader=="function",y=e=>typeof e=="object"&&e!==null&&typeof e.pipe=="function"&&typeof e.read=="function",N=async(e,t)=>{if(typeof e=="string"){const r=Buffer.from(e);return{size:r.byteLength,stream:i.from(r)}}if(Buffer.isBuffer(e))return{size:e.byteLength,stream:i.from(e)};if(e instanceof Uint8Array){const r=Buffer.from(e.buffer,e.byteOffset,e.byteLength);return{size:r.byteLength,stream:i.from(r)}}if(e instanceof ArrayBuffer){const r=Buffer.from(e);return{size:r.byteLength,stream:i.from(r)}}if(ArrayBuffer.isView(e)){const r=e,n=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return{size:n.byteLength,stream:i.from(n)}}if(typeof Blob<"u"&&e instanceof Blob)return{size:e.size,stream:i.fromWeb(e.stream())};if(h(e))return{size:t,stream:i.fromWeb(e)};if(y(e))return{size:t,stream:e};throw new TypeError(`Unsupported body type: ${Object.prototype.toString.call(e)}`)},w=(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}),b=(e,t)=>{e.split("/").some(r=>r==="."||r==="..")&&p(m.INVALID_FILE_NAME,`${m.INVALID_FILE_NAME}: ${t} must not contain "." or ".." path segments: "${e}"`)},E=e=>{if(!e)return"";const t=e.split("/").filter(r=>r.length>0).join("/");return b(t,"prefix"),t},A=(e,t)=>{if(!t&&!e.signal&&e.timeout===void 0&&e.retries===void 0)return;const r={...e};return t&&(t.signal!==void 0&&(r.signal=t.signal),t.timeout!==void 0&&(r.timeout=t.timeout),t.retries!==void 0&&(r.retries=t.retries)),e.signal&&t?.signal&&(r.signal=AbortSignal.any([e.signal,t.signal])),r},B=async(e,t,r)=>{const n=Array.from({length:e.length});let s=0,a=!1;const u=async()=>{for(;s<e.length;){if(a||r.signal?.aborted)return;const o=s;s+=1;try{const f=await t(e[o],o);n[o]={status:"fulfilled",value:f}}catch(f){n[o]={reason:f,status:"rejected"},r.stopOnError&&(a=!0)}}},c=Math.max(1,Math.min(r.concurrency,e.length)),g=Array.from({length:c},()=>u());return await Promise.all(g),n},L=(e,t)=>t instanceof Error?{error:t,key:e}:{error:new Error(typeof t=="string"?t:"Unknown error",{cause:t}),key:e},v=(e,t)=>{if(e)try{e(t)}catch{}},M=(e,t)=>{if(typeof e.size=="number"&&typeof t.size=="number"&&e.size!==t.size)return!1;if(e.etag&&t.etag)return e.etag===t.etag;if(typeof e.size=="number"&&typeof t.size=="number")return!0;const r=e.lastModified===void 0?void 0:Number(new Date(e.lastModified)),n=t.lastModified===void 0?void 0:Number(new Date(t.lastModified));return r!==void 0&&n!==void 0&&!Number.isNaN(r)&&!Number.isNaN(n)?r<=n:!0};export{l as D,b as a,N as b,L as c,A as m,E as n,M as o,B as r,v as s,w as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r=e=>e.expiredAt?Date.now()>+new Date(e.expiredAt):!1;export{r as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{utimes as I}from"node:fs/promises";import{tmpdir as U}from"node:os";import{createRequire as d}from"node:module";import{_ as W,m as X,G as F,e as V}from"./path-CxEa27Rz-DSh0_A5o.js";import{throwErrorCode as S,ERRORS as k}from"./ERRORS-olUcTqo2.js";import q from"./MetaStorage-DPEUyWgN.js";import{stringifyMetadata as J,parseMetadata as G}from"./Metadata-BeQVDFer.js";const _=0;let H;const K=t=>(H??=d(import.meta.url))(t),g=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Q=t=>{if(typeof g<"u"&&g.versions&&g.versions.node){const[e,r]=g.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return g.getBuiltinModule(t)}return K(t)},{fileURLToPath:Y}=Q("node:url");function Z(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var O,B;function tt(){return B||(B=1,O=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cr3","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),O}var et=tt();const rt=Z(et);new Set(rt);const z=t=>W(t instanceof URL?Y(t):t);let ot=class extends Error{constructor(e){super(`EEXIST: ${e}`)}get code(){return"EEXIST"}set code(e){throw new Error("Cannot overwrite code EEXIST")}get name(){return"AlreadyExistsError"}set name(e){throw new Error("Cannot overwrite name of AlreadyExistsError")}};const T=t=>{if(!t||!(t instanceof URL)&&typeof t!="string")throw new TypeError("Path must be a non-empty string or URL.")},P=t=>{if(t.isFile())return"file";if(t.isDirectory())return"dir";if(t.isSymbolicLink())return"symlink"};let st;const it=t=>(st??=d(import.meta.url))(t),y=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,nt=t=>{if(typeof y<"u"&&y.versions&&y.versions.node){const[e,r]=y.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return y.getBuiltinModule(t)}return it(t)},{lstat:j,mkdir:at}=nt("node:fs/promises"),ct=async t=>{T(t);try{const e=await j(t);if(!e.isDirectory())throw new Error(`Ensure path exists, expected 'dir', got '${String(P(e))}'`);return}catch(e){if(e.code!=="ENOENT")throw e}try{await at(t,{recursive:!0})}catch(e){if(e.code!=="EEXIST")throw e;const r=await j(t);if(!r.isDirectory())throw new Error(`Ensure path exists, expected 'dir', got '${String(P(r))}'`,{cause:e})}};let pt;const lt=t=>(pt??=d(import.meta.url))(t),w=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ut=t=>{if(typeof w<"u"&&w.versions&&w.versions.node){const[e,r]=w.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return w.getBuiltinModule(t)}return lt(t)},{access:ft}=ut("node:fs/promises");async function A(t,e=_){T(t),t=z(t);try{return await ft(t,e),!0}catch{return!1}}let dt=class extends Error{constructor(e){super(`ENOENT: ${e}`)}get code(){return"ENOENT"}set code(e){throw new Error("Cannot overwrite code ENOENT")}get name(){return"NotFoundError"}set name(e){throw new Error("Cannot overwrite name of NotFoundError")}};class mt extends Error{constructor(e){super(`EPERM: Operation not permitted, ${e}`)}get code(){return"EPERM"}set code(e){throw new Error("Cannot overwrite code EPERM")}get name(){return"PermissionError"}set name(e){throw new Error("Cannot overwrite name of PermissionError")}}const ht=(t,e)=>{const r=t?.code;return r==="ENOENT"?new dt(`no such file or directory, open '${e}'`):r==="EACCES"||r==="EPERM"?new mt(`unable to read the non-readable file: ${e}`):t};let gt;const yt=t=>(gt??=d(import.meta.url))(t),v=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,L=t=>{if(typeof v<"u"&&v.versions&&v.versions.node){const[e,r]=v.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return v.getBuiltinModule(t)}return yt(t)},{readFile:wt}=L("node:fs/promises"),{unzip:vt,brotliDecompress:bt}=L("node:zlib"),xt={brotli:bt,gzip:vt,none:(t,e)=>{e(null,t)}},Et=async(t,e)=>{T(t),t=z(t);const{buffer:r,compression:o,encoding:l,flag:m}=e??{};let u;try{u=await wt(t,m?{flag:m}:{})}catch(n){throw ht(n,t)}return await new Promise((n,p)=>{xt[o??"none"](u,(f,s)=>{f?p(f):n(r?s:s.toString(l??"utf8"))})})},$t=t=>{const e={force:!0,recursive:!0};return t?.maxRetries!==void 0&&(e.maxRetries=t.maxRetries),t?.retryDelay!==void 0&&(e.retryDelay=t.retryDelay),e};let Tt;const St=t=>(Tt??=d(import.meta.url))(t),b=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,kt=t=>{if(typeof b<"u"&&b.versions&&b.versions.node){const[e,r]=b.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return b.getBuiltinModule(t)}return St(t)},{rm:Nt}=kt("node:fs/promises"),zt=async(t,e={})=>{T(t),await Nt(t,$t(e))},Mt=t=>{if(typeof t!="string"&&!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))throw new TypeError("File contents must be a string, ArrayBuffer, or ArrayBuffer view.")};let Ct;const Ft=t=>(Ct??=d(import.meta.url))(t),x=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ot=t=>{if(typeof x<"u"&&x.versions&&x.versions.node){const[e,r]=x.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return x.getBuiltinModule(t)}return Ft(t)},{randomBytes:Bt}=Ot("node:crypto"),Pt=t=>`${t}.${process.pid.toString(36)}.${Bt(6).toString("hex")}.tmp`,jt=new TextEncoder,At=t=>{if(t instanceof Uint8Array)return t;if(typeof t=="string")return jt.encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t)){const e=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength);return new Uint8Array(e)}throw new TypeError("Invalid contents type. Expected string or ArrayBuffer.")};let Dt;const Rt=t=>(Dt??=d(import.meta.url))(t),E=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,_t=t=>{if(typeof E<"u"&&E.versions&&E.versions.node){const[e,r]=E.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return E.getBuiltinModule(t)}return Rt(t)},{mkdir:Lt,readFile:It,writeFile:Ut,stat:Wt,rename:D,chown:Xt,chmod:Vt,unlink:qt}=_t("node:fs/promises"),Jt=async(t,e,r)=>{r={backup:!1,encoding:"utf8",flag:"w",overwrite:!0,recursive:!0,...r},T(t),Mt(e),t=z(t);const o=await A(t,_),l=r.flag??"w",m=l.includes("a"),u=l.includes("x");if(o&&(!r.overwrite||u))throw new ot(`file already exists, open '${t}'`);const n=Pt(t);try{!o&&r.recursive&&await Lt(X(t),{recursive:!0});let p,f=typeof e=="string"?Buffer.from(e,r.encoding??"utf8"):At(e);if(m&&o&&(f=Buffer.concat([await It(t),f])),await Ut(n,f,{flag:"wx"}),o&&r.backup&&(p=await Wt(t),r.chown??={gid:p.gid,uid:p.uid},await D(t,`${t}.bak`)),r.chown)try{await Xt(n,r.chown.uid,r.chown.gid)}catch{}const s=p&&r.mode===void 0?p.mode:r.mode;s!==void 0&&await Vt(n,s),await D(n,t)}catch(p){throw new Error(`Failed to write file at: ${t} - ${p.message}`,{cause:p})}finally{await A(n)&&await qt(n)}};let Gt;const Ht=t=>(Gt??=d(import.meta.url))(t),$=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,M=t=>{if(typeof $<"u"&&$.versions&&$.versions.node){const[e,r]=$.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return $.getBuiltinModule(t)}return Ht(t)},Kt=M("fs"),Qt=M("os"),Yt=M("path");var N={},R;function Zt(){if(R)return N;R=1;var t=Object.defineProperty,e=(s,i)=>t(s,"name",{value:i,configurable:!0}),r=Kt,o=Qt,l=Yt;const m=e(s=>{let i="";for(let a=0;a<s.length;a+=1){const c=s[a],h=c.toUpperCase();i+=c===h?c.toLowerCase():h}return i},"invertCase"),u=new Map,n=e((s,i)=>{const a=l.join(s,`.is-fs-case-sensitive-test-${process.pid}`);try{return i.writeFileSync(a,""),!i.existsSync(m(a))}finally{try{i.unlinkSync(a)}catch{}}},"checkDirectoryCaseWithWrite"),p=e((s,i,a)=>{try{return n(s,a)}catch(c){if(i===void 0)return n(o.tmpdir(),a);throw c}},"checkDirectoryCaseWithFallback"),f=e((s,i=r,a=!0)=>{const c=s??process.cwd();if(a&&u.has(c))return u.get(c);let h;const C=m(c);return C!==c&&i.existsSync(c)?h=!i.existsSync(C):h=p(c,s,i),a&&u.set(c,h),h},"isFsCaseSensitive");return N.isFsCaseSensitive=f,N}var te=Zt();te.isFsCaseSensitive;class le extends q{directory;constructor(e){super(e),this.directory=F(e?.directory||V(U(),"Upload_meta")),this.accessCheck().catch(r=>{this.logger?.error("Metadata storage access check failed: %O",r)})}getMetaPath=e=>{const r=F(`${this.directory}/${this.prefix}${e}${this.suffix}`),o=this.directory.endsWith("/")?this.directory:`${this.directory}/`;return r.startsWith(o)?r:S(k.INVALID_FILE_NAME,`Invalid id: "${e}" resolves outside the meta directory`)};getIdFromPath=e=>e.slice(`${this.directory}/${this.prefix}`.length,-this.suffix.length);async save(e,r){await this.accessCheck();const o={...r};return o.metadata&&(o.metadata=J(r.metadata)),await Jt(this.getMetaPath(e),JSON.stringify(o),{recursive:!0}),r}async touch(e,r){const o=new Date;return await I(this.getMetaPath(e),o,o),r}async get(e){try{const r=await Et(this.getMetaPath(e));if(r===void 0)throw S(k.FILE_NOT_FOUND);const o=JSON.parse(r);return o.metadata&&typeof o.metadata=="string"&&(o.metadata=G(o.metadata)),o}catch(r){const o=r,l=r instanceof SyntaxError;throw o.code==="ENOENT"||l?S(k.FILE_NOT_FOUND):(r instanceof Error&&"UploadErrorCode"in r,r)}}async delete(e){await zt(this.getMetaPath(e))}async accessCheck(){await ct(this.directory)}}export{z as C,le as L,A as g,ct as h,T as n,zt as p,P as r,Et as z};
|
package/dist/packem_shared/{local-meta-storage.d-cRTXr1kb.d.ts → local-meta-storage.d-CYWYyCUo.d.ts}
RENAMED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { F as File, L as LocalMetaStorageOptions, M as MetaStorage } from "./storage.d-
|
|
2
|
-
import 'node:stream';
|
|
1
|
+
import { F as File, L as LocalMetaStorageOptions, M as MetaStorage } from "./storage.d-C9EdfTf1.js";
|
|
3
2
|
/**
|
|
4
3
|
* Stores upload metafiles on local disk
|
|
5
4
|
*/
|
package/dist/packem_shared/{media-transformer.d-C8tn4J2Z.d.ts → media-transformer.d-Co37isNg.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as File, g as FileReturn, B as BaseStorage } from "./storage.d-
|
|
2
|
-
import { M as MediaTransformerConfig, a as MediaTransformResult } from "./types.d-
|
|
1
|
+
import { F as File, g as FileReturn, B as BaseStorage } from "./storage.d-C9EdfTf1.js";
|
|
2
|
+
import { M as MediaTransformerConfig, a as MediaTransformResult } from "./types.d-D1TIRqKW.js";
|
|
3
3
|
/**
|
|
4
4
|
* Unified media transformer that automatically detects media type and routes to appropriate transformer.
|
|
5
5
|
* @template TFile The file type used by this transformer.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r=e=>{const s=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.MINIO_ACCESS_KEY_ID??process.env.MINIO_ACCESS_KEY,c=e?.endpoint??process.env.AWS_ENDPOINT??process.env.MINIO_ENDPOINT,n=e?.region??process.env.AWS_REGION??process.env.MINIO_REGION,o=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.MINIO_SECRET_ACCESS_KEY??process.env.MINIO_SECRET_KEY;if(!n||!s||!o||!c)throw new Error("Missing required parameters for Minio client.");return{credentials:{accessKeyId:s,secretAccessKey:o},endpoint:c,forcePathStyle:!0,region:n}};export{r as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as m}from"./headers-erjZrwbT.js";class g{async handlePost(e,s,d){const i={contentType:e.mediaType||"application/octet-stream",metadata:{},originalName:e.filename,size:e.size};for(const t of s)if(!t.isFile&&t.name){let r={};if(t.name==="metadata"&&t.text)try{r=JSON.parse(t.text)}catch{}else t.name&&(r={[t.name]:t.text});Object.assign(i.metadata,r)}const n=await this.storage.create(i),l=this.createStreamFromBytes(e.bytes),o=await this.storage.write({body:l,contentLength:e.size,id:n.id,start:0});let a=o;if(Object.keys(i.metadata).length>0){const t={...o.metadata,...i.metadata};a={...await this.storage.update({id:o.id},{metadata:t}),status:o.status}}const c=this.buildFileUrl(d,a);return{...a,headers:{Location:c,...a.expiredAt===void 0?{}:{"X-Upload-Expires":a.expiredAt.toString()},...a.ETag===void 0?{}:{ETag:a.ETag}},statusCode:200}}async handleDelete(e){const s=await this.storage.delete({id:e});if(s.status===void 0)throw m(404,"File not found");return{...s,headers:{},statusCode:204}}get storage(){throw new Error("storage must be implemented")}buildFileUrl(e,s){throw new Error("buildFileUrl must be implemented")}}export{g as M};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const f=e=>{let r,n;const o=e.leewayMs??6e4,c=async()=>{const a=Date.now(),s=await fetch(e.tokenUrl,{body:e.buildBody(),headers:{"Content-Type":"application/x-www-form-urlencoded"},method:"POST"});if(!s.ok){const h=await s.text().catch(()=>"");throw new Error(`${e.provider}: token exchange failed (${s.status}): ${h||s.statusText}`)}const t=await s.json();if(!t.access_token)throw new Error(`${e.provider}: token response missing access_token`);return r={expiresOnMs:a+(t.expires_in??3600)*1e3,token:t.access_token},e.onRefresh?.(t.access_token),t.refresh_token&&e.onRefreshToken?.(t.refresh_token),t.access_token};return{getAccessToken:async()=>r&&r.expiresOnMs-o>Date.now()?r.token:n||(n=c().finally(()=>{n=void 0}),n)}};export{f as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const E=e=>{const c=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.ORACLE_CLOUD_ACCESS_KEY_ID??process.env.ORACLE_CLOUD_ACCESS_KEY,o=e?.namespace??process.env.ORACLE_CLOUD_NAMESPACE,s=e?.region??process.env.ORACLE_CLOUD_REGION,C=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.ORACLE_CLOUD_SECRET_ACCESS_KEY??process.env.ORACLE_CLOUD_SECRET_KEY;if(!o||!s||!c||!C)throw new Error("Missing required parameters for Oracle Cloud Object Storage client.");return{credentials:{accessKeyId:c,secretAccessKey:C},endpoint:`https://${o}.compat.objectstorage.${s}.oraclecloud.com`,forcePathStyle:!0,region:s}};export{E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=e=>{const s=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.OVHCLOUD_ACCESS_KEY_ID??process.env.OVHCLOUD_ACCESS_KEY,
|
|
1
|
+
const t=e=>{const s=e?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.OVHCLOUD_ACCESS_KEY_ID??process.env.OVHCLOUD_ACCESS_KEY,r=e?.endpoint??process.env.OVHCLOUD_ENDPOINT,o=e?.region??process.env.OVHCLOUD_REGION,c=e?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.OVHCLOUD_SECRET_ACCESS_KEY??process.env.OVHCLOUD_SECRET_KEY;if(!o||!s||!c)throw new Error("Missing required parameters for OVHcloud Object Storage client.");const n=o.toLowerCase();return{credentials:{accessKeyId:s,secretAccessKey:c},endpoint:r??`https://s3.${n}.io.cloud.ovh.net`,forcePathStyle:!1,region:n}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const i=(e,s)=>e.size!==void 0&&s.size!==void 0&&e.size>0&&s.size>0&&e.size>s.size?!1:s.size===void 0?!0:(e.start||0)+(e.contentLength||0)<=s.size;export{i as p};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const u=/^[A-Z]:\//i,s=(t="")=>t&&t.replaceAll("\\","/").replace(u,n=>n.toUpperCase()),$=/^[/\\]{2}/,p=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i,g=/^[A-Z]:$/i,d=/\/$/,x=()=>{if(typeof process.cwd=="function")try{const t=process.cwd();if(typeof t=="string")return s(t)}catch{}return"/"},a=(t,n)=>{let e="",c=0,l=-1,o=0,r;for(let i=0;i<=t.length;++i){if(i<t.length)r=t[i];else{if(r==="/")break;r="/"}if(r==="/"){if(!(l===i-1||o===1))if(o===2){if(e.length<2||c!==2||!e.endsWith(".")||e.at(-2)!=="."){if(e.length>2){const h=e.lastIndexOf("/");h===-1?(e="",c=0):(e=e.slice(0,h),c=e.length-1-e.lastIndexOf("/")),l=i,o=0;continue}else if(e.length>0){e="",c=0,l=i,o=0;continue}}n&&(e+=e.length>0?"/..":"..",c=2)}else e.length>0?e+=`/${t.slice(l+1,i)}`:e=t.slice(l+1,i),c=i-l-1;l=i,o=0}else r==="."&&o!==-1?++o:o=-1}return e},f=t=>p.test(t),I=function(t){if(t.length===0)return".";t=s(t);const n=$.exec(t),e=f(t),c=t.at(-1)==="/";return t=a(t,!e),t.length===0?e?"/":c?"./":".":(c&&(t+="/"),g.test(t)&&(t+="/"),n?e?`//${t}`:`//./${t}`:e&&!f(t)?`/${t}`:t)},m=(...t)=>{let n="";for(const e of t)if(e)if(n.length>0){const c=n.at(-1)==="/",l=e[0]==="/";c&&l?n+=e.slice(1):n+=c||l?e:`/${e}`}else n+=e;return I(n)},A=function(...t){t=t.map(c=>s(c));let n="",e=!1;for(let c=t.length-1;c>=-1&&!e;c--){const l=c>=0?t[c]:x();!l||l.length===0||(n=`${l}/${n}`,e=f(l))}return n=a(n,!e),g.test(n)?`${n}/`:e&&!f(n)?`/${n}`:n.length>0?n:"."},O=t=>{const n=s(t).replace(d,""),e=n.lastIndexOf("/");if(e===-1)return f(t)?"/":".";const c=n.slice(0,e);return g.test(c)?`${c}/`:c||(f(t)?"/":".")},y=(t,n)=>{const e=s(t),c=e.slice(e.lastIndexOf("/")+1);if(n&&c.endsWith(n)){if(n===e)return"";const l=c.slice(0,-n.length);if(l.length>0)return l}return c};export{y as $,I as G,A as U,s as _,m as e,O as m,f as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=async n=>{const t=[];for await(const s of n)t.push(Buffer.from(s));return Buffer.concat(t)},r=n=>{let t=0,s=n.length;for(;t<s&&n[t]==="/";)t+=1;for(;s>t&&n[s-1]==="/";)s-=1;return t===0&&s===n.length?n:n.slice(t,s)},c=n=>{const t=r(n),s=t.lastIndexOf("/");return s<=0?n.startsWith("/")&&s===0?"/":"":n.startsWith("/")?`/${t.slice(0,s)}`:t.slice(0,s)};export{e as c,c as p,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const a=(t,r={},e=200)=>({...t,headers:r,statusCode:e}),o=(t,r,e={})=>({Location:r,...t.expiredAt===void 0?{}:{"X-Upload-Expires":t.expiredAt.toString()},...t.ETag===void 0?{}:{ETag:t.ETag},...e}),d=(t,r)=>{const e=t.metadata||{},n={"x-chunked-upload":"true","x-upload-complete":r?"true":"false","x-upload-offset":String(t.bytesWritten||0)};return Array.isArray(e._chunks)&&e._chunks.length>0&&(n["x-received-chunks"]=JSON.stringify(e._chunks)),n},s=t=>({"Content-Length":String(t.size||0),"Content-Type":t.contentType,...t.expiredAt===void 0?{}:{"X-Upload-Expires":t.expiredAt.toString()},...t.modifiedAt===void 0?{}:{"Last-Modified":t.modifiedAt.toString()},...t.ETag===void 0?{}:{ETag:t.ETag}}),i=t=>{const r={};for(const[e,n]of Object.entries(t))r[e]=Array.isArray(n)?n.join(", "):String(n);return r};export{o as a,a as b,d as c,s as d,i as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c}from"./headers-erjZrwbT.js";import{hasBody as v}from"type-is";import{b as f}from"./base-handler-core-BvNgdV-9.js";import{ERRORS as X}from"./ERRORS-olUcTqo2.js";import{b as p,a as b,c as S,d as A}from"./response-builder-tJ84C7n4.js";const H=(a,t={})=>{const e=f(a,"x-file-metadata",!0);if(!e)return t;try{return{...t,...JSON.parse(e)}}catch{return t}},M=a=>{if(!a)return;const t=2e3,e=a.length>t?a.slice(0,Math.max(0,t)):a,r=e.toLowerCase().indexOf("filename");if(r===-1)return;let s=r+8;for(;s<e.length&&(e[s]==="*"||e[s]===" "||e[s]===" ");)s++;if(s>=e.length||e[s]!=="=")return;for(s++;s<e.length&&(e[s]===" "||e[s]===" ");)s++;if(s>=e.length)return;let o=s,i;const n=e[s];return n==='"'||n==="'"?(o=s+1,i=e.indexOf(n,o),i===-1&&(i=e.indexOf(";",o),i===-1&&(i=e.length))):(i=e.indexOf(";",o),i===-1&&(i=e.length)),o>=i?void 0:e.substring(o,i).trim()||void 0},O=a=>{const t=f(a,"content-disposition",!0);return M(t)},I=a=>{const t=f(a,"x-chunked-upload",!0)==="true",e=f(a,"x-chunk-offset",!0),r=f(a,"x-total-size",!0),s={isChunkedUpload:t};if(e){const o=Number.parseInt(e,10);!Number.isNaN(o)&&o>=0&&(s.chunkOffset=o)}if(r){const o=Number.parseInt(r,10);!Number.isNaN(o)&&o>0&&(s.totalSize=o)}return s},j=(a,t=!1)=>{const e=f(a,"x-chunked-upload",!0)==="true";if(t&&e)return;if(!v(a))throw c(400,"Request body is required");if(Number.parseInt(f(a,"content-length")||"0",10)===0&&!e)throw c(400,"Content-Length is required and must be greater than 0")},J=(a,t=!1,e)=>{const r=f(a,"x-chunked-upload",!0)==="true",s=Number.parseInt(f(a,"content-length")||"0",10);if(!t&&!r&&s===0)throw c(400,"Content-Length is required and must be greater than 0");if(e!==void 0&&s>e)throw c(413,`File size exceeds maximum allowed size of ${e} bytes`);return s},K=(a,t,e="application/octet-stream")=>{const r=O(a),s=H(a),{isChunkedUpload:o,totalSize:i}=I(a),n=o&&i?i:t;return o&&i&&(s._chunkedUpload=!0,s._chunks=[],s._totalSize=i),{contentType:e,metadata:s,originalName:r,size:n}},x=(a,t)=>{if(a.length===0)return!1;const e=[...a].toSorted((o,i)=>o.offset-i.offset),r=e[0];if(r?.offset!==0)return!1;let s=r.length;for(let o=1;o<e.length;o+=1){const i=e[o];if(i){if(i.offset>s)return!1;s=Math.max(s,i.offset+i.length)}}return s>=t},R=(a,t,e,r)=>{if(Number.isNaN(a)||a<0)throw new Error("Chunk offset must be a valid non-negative number");if(t<=0)throw new Error("Chunk length must be greater than 0");if(t>r)throw new Error(`Chunk size exceeds maximum allowed size of ${r} bytes`);if(a+t>e)throw new Error(`Chunk exceeds file size. Offset: ${a}, Size: ${t}, Total: ${e}`)},T=(a,t)=>{const e=a.find(r=>r.offset===t.offset&&r.length===t.length);return e?t.checksum&&e.checksum!==t.checksum?a.map(r=>r.offset===t.offset?{...r,checksum:t.checksum}:r):a:[...a,t]},F=a=>(a.metadata||{})._chunkedUpload===!0,k=a=>{const t=a.metadata||{};if(t._chunkedUpload===!0&&typeof t._totalSize=="number")return t._totalSize};class V{async deleteSingle(t){const e=await this.storage.delete({id:t});if(e.status===void 0)throw c(404,"File not found");return{...e,headers:{},statusCode:204}}async handlePost(t,e,r,s,o){if(e&&t.size!==void 0){const u=typeof t.size=="number"?t.size:Number.parseInt(String(t.size),10);if(u>0&&u>this.storage.maxUploadSize)throw c(413,`File size exceeds maximum allowed size of ${this.storage.maxUploadSize} bytes`)}const i=await this.storage.create(t);if(e){const u=this.buildFileUrl(r,i);return p(i,{...b(i,u),"X-Chunked-Upload":"true","X-Upload-ID":i.id},201)}const n=await this.storage.write({body:s,contentLength:o,id:i.id,start:0}),d=this.buildFileUrl(r,n);return p(n,b(n,d),201)}async handlePut(t,e,r,s,o,i){let n,d=!1;try{await this.storage.getMeta(t),d=!0,i&&await this.storage.update({id:t},{metadata:i}),n=await this.storage.write({body:s,contentLength:o,id:t,start:0})}catch(h){const U=h;if(U.UploadErrorCode===X.FILE_NOT_FOUND||U.code==="ENOENT")try{const g=await this.storage.create(e);n=await this.storage.write({body:s,contentLength:o,id:g.id,start:0})}catch(g){throw g}else throw h}const u=this.buildFileUrl(r,n);return p(n,b(n,u),d?200:201)}async handlePatch(t,e,r,s,o,i){let n=await this.storage.getMeta(t);const d=n.metadata||{},u=F(n);if(u){const l=k(n);l&&n.size!==l&&(n={...n,size:l})}const h=typeof d._totalSize=="number"?d._totalSize:n.size||0;if(!u)throw c(400,"File is not a chunked upload. Use POST or PUT for full file uploads.");const U=100*1024*1024;try{R(e,r,h,U)}catch(l){throw l instanceof Error&&l.message.includes("exceeds maximum")?c(413,l.message):c(400,l instanceof Error?l.message:String(l))}if(n.status==="completed"){const l=this.buildFileUrl(o,n);return p(n,{...b(n,l),"X-Upload-Complete":"true"},200)}const g=await this.storage.withLock(`chunks:${t}`,async()=>{const z=(await this.storage.getMeta(t)).metadata??{},E=Array.isArray(z._chunks)?z._chunks:[],y=T(E,{checksum:s,length:r,offset:e});return await this.storage.update({id:t},{metadata:{...z,_chunks:y}}),y});let m=await this.storage.write({body:i,contentLength:r,id:t,start:e}),C=m.bytesWritten>=h;u&&(C=x(g,h),m.status==="completed"&&!C&&(await this.storage.update({id:t},{status:"part"}),m={...m,status:"part"}));const w=C&&m.bytesWritten!==h?{...m,bytesWritten:h}:m,N=this.buildFileUrl(o,w),_={...b(w,N),...S(w,C),"x-upload-offset":String(w.bytesWritten||0)};return p(w,_,C?200:202)}async handleHead(t){let e=await this.storage.getMeta(t);const r=F(e);if(r){const o=k(e);o&&e.size!==o&&(e={...e,size:o})}const s={...A(e)};if(r){const o=e.metadata||{},i=k(e)||e.size||0,n=Array.isArray(o._chunks)?o._chunks:[],d=x(n,i);Object.assign(s,S(e,d))}return p(e,s,200)}handleOptions(t,e){return{headers:{"Access-Control-Allow-Headers":"Authorization, Content-Type, Content-Length, Content-Disposition, X-File-Metadata, X-Chunked-Upload, X-Total-Size, X-Chunk-Offset, X-Chunk-Checksum","Access-Control-Allow-Methods":t.map(s=>s.toUpperCase()).join(", "),"Access-Control-Max-Age":86400,"X-Max-Upload-Size":String(e)},statusCode:204}}async deleteBatch(t){const e=await this.storage.deleteBatch(t);if(e.successfulCount===0&&e.failedCount>0){const r=e.failed.map(s=>s.id).join(", ");throw c(404,`Failed to delete files: ${r}`)}return{data:e.successful,headers:e.failedCount>0?{"X-Delete-Errors":JSON.stringify(e.failed),"X-Delete-Failed":String(e.failedCount),"X-Delete-Successful":String(e.successfulCount)}:{"X-Delete-Successful":String(e.successfulCount)},statusCode:e.successfulCount===t.length?204:207}}get storage(){throw new Error("storage must be implemented")}buildFileUrl(t,e){throw new Error("buildFileUrl must be implemented")}}export{V as R,J as a,O as b,I as c,K as e,M as p,j as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as n}from"node:crypto";import{createPaginationMetaSchemaObject as d,createPaginationSchemaObject as p}from"@visulima/pagination";import{sharedFileMetaSchemaObject as c,sharedErrorSchemaObject as l,sharedFileMetaExampleObject as m,sharedGetList as u,sharedGet as h,sharedGetMeta as f}from"./sharedErrorSchemaObject-YN65aAKj.js";const U=(a,e,i)=>{const{supportedTransformerFormat:o,tags:t,transformer:r}={tags:["REST"],transformer:!1,...i},s=n("sha256").update(e).digest("base64");return{components:{examples:m,parameters:{UploadIDinPath:{description:"Upload ID",in:"path",name:"id",schema:{type:"string"}}},responses:{404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"}},schemas:{"X-Chunk-Checksum":{description:"SHA256 checksum of the chunk data for validation. Format: 'sha256 <base64-encoded-checksum>'.",type:"string"},"X-Chunk-Offset":{description:"Byte offset for the chunk being uploaded. Required for PATCH requests in chunked uploads.",type:"integer"},"X-Chunked-Upload":{description:"Header to indicate chunked upload initialization. Set to 'true' to initialize a chunked upload session.",enum:["true"],type:"string"},"X-Chunked-Upload-Response":{description:"Indicates this is a chunked upload session. Returned in HEAD responses.",enum:["true"],type:"string"},"X-Received-Chunks":{description:"JSON array of received chunk offsets. Used for resumable uploads.",type:"string"},"X-Total-Size":{description:"Total size of the file in bytes for chunked uploads. Required when X-Chunked-Upload is 'true'.",type:"integer"},"X-Upload-Complete":{description:"Indicates if the upload is complete. Set to 'true' when all chunks have been uploaded.",enum:["true","false"],type:"string"},"X-Upload-Offset":{description:"Current upload offset in bytes. Returned in responses for chunked uploads.",type:"integer"},...p("FileMetaPagination",{$ref:"#/components/schemas/PaginationMeta"},"#/components/schemas/PaginationMeta"),...d("PaginationMeta"),...l,...c}},paths:{[`${e.replace(/\/$/,"")}/{id}/metadata`]:{get:f(`${s}RestGetFileMeta`,t)},[`${e.replace(/\/$/,"")}/{id}`]:{delete:{description:"Delete a single file",operationId:`${s}RestDeleteFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],responses:{204:{description:"No Content - File deleted successfully"},404:{$ref:"#/components/responses/404"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Delete file",tags:t},get:h(`${s}RestGetFile`,t,r,o),head:{description:"Get file metadata and upload progress. For chunked uploads, returns progress information including current offset and completion status.",operationId:`${s}RestHeadFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],responses:{200:{description:"OK",headers:{"Content-Length":{description:"File size in bytes",schema:{type:"integer"}},"Content-Type":{description:"MIME type of the file",schema:{type:"string"}},ETag:{description:"Entity tag for caching",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},"Last-Modified":{description:"Last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Chunked-Upload":{description:"Indicates this is a chunked upload session",schema:{$ref:"#/components/schemas/X-Chunked-Upload-Response"}},"X-Received-Chunks":{description:"JSON array of received chunk offsets (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Received-Chunks"}},"X-Upload-Complete":{description:"Indicates if upload is complete (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Upload-Complete"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Offset":{description:"Current upload offset in bytes (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Upload-Offset"}}}},404:{$ref:"#/components/responses/404"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get file metadata",tags:t},patch:{description:"Upload a chunk for chunked uploads. Requires X-Chunk-Offset header and chunk data in the request body.",operationId:`${s}RestPatchChunk`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"},{description:"Byte offset for this chunk",in:"header",name:"X-Chunk-Offset",required:!0,schema:{$ref:"#/components/schemas/X-Chunk-Offset"}},{description:"SHA256 checksum of the chunk (optional)",in:"header",name:"X-Chunk-Checksum",required:!1,schema:{$ref:"#/components/schemas/X-Chunk-Checksum"}}],requestBody:{content:{"application/octet-stream":{description:"Chunk data as raw binary",schema:{format:"binary",type:"string"}}},description:"Chunk data",required:!0},responses:{200:{description:"Chunk uploaded successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Complete":{description:"Indicates if upload is complete",schema:{$ref:"#/components/schemas/X-Upload-Complete"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Offset":{description:"Current upload offset after this chunk",schema:{$ref:"#/components/schemas/X-Upload-Offset"}}}},201:{description:"Upload completed (all chunks received)",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Complete":{description:"Upload is complete",schema:{enum:["true"],type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"X-Chunk-Offset header is required"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Upload session not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"Chunk size exceeds maximum allowed size of 104857600 bytes"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Upload chunk",tags:t},put:{description:"Create or update a file. Requires file ID in the URL path. If file exists, it will be overwritten.",operationId:`${s}RestPutFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],requestBody:{content:{"application/octet-stream":{description:"File data as raw binary",schema:{format:"binary",type:"string"}}},description:"File data",required:!0},responses:{200:{description:"File updated successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},201:{description:"File created successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"Request body is required"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"File size exceeds maximum allowed size"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Create or update file",tags:t}},[e.trimEnd()]:{delete:{description:'Delete multiple files. Supports batch delete via query parameter (?ids=id1,id2,id3) or JSON body ({ids: ["id1", "id2"]} or ["id1", "id2"]).',operationId:`${s}RestBatchDelete`,parameters:[{description:"Comma-separated list of file IDs to delete",in:"query",name:"ids",required:!1,schema:{example:"id1,id2,id3",type:"string"}}],requestBody:{content:{"application/json":{schema:{oneOf:[{properties:{ids:{description:"Array of file IDs to delete",items:{type:"string"},type:"array"}},required:["ids"],type:"object"},{description:"Array of file IDs to delete",items:{type:"string"},type:"array"}]}}},description:"File IDs to delete (optional if using query parameter)",required:!1},responses:{204:{description:"All files deleted successfully"},207:{description:"Multi-Status - Some files deleted successfully",headers:{"X-Delete-Errors":{description:"JSON array of deletion errors",schema:{type:"string"}},"X-Delete-Failed":{description:"Number of files that failed to delete",schema:{type:"integer"}},"X-Delete-Successful":{description:"Number of files successfully deleted",schema:{type:"integer"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"No file IDs provided"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Failed to delete files: id1, id2"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Batch delete files",tags:t},get:u(`${s}RestGetList`,t),post:{description:"Upload a file with raw binary data or initialize a chunked upload session. For chunked uploads, set X-Chunked-Upload: true and X-Total-Size headers.",operationId:`${s}RestPostFile`,parameters:[{description:"Set to 'true' to initialize a chunked upload session",in:"header",name:"X-Chunked-Upload",required:!1,schema:{$ref:"#/components/schemas/X-Chunked-Upload"}},{description:"Total size of the file in bytes (required for chunked uploads)",in:"header",name:"X-Total-Size",required:!1,schema:{$ref:"#/components/schemas/X-Total-Size"}},{description:"Optional filename",in:"header",name:"Content-Disposition",required:!1,schema:{example:'attachment; filename="photo.jpg"',type:"string"}},{description:"Optional JSON metadata",in:"header",name:"X-File-Metadata",required:!1,schema:{example:'{"description":"My photo"}',type:"string"}}],requestBody:{content:{"application/octet-stream":{description:"File data as raw binary. For chunked upload initialization, body can be empty.",schema:{format:"binary",type:"string"}}},description:"File data (optional for chunked upload initialization)",required:!1},responses:{200:{description:"The file already exists, send a resume request",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},201:{description:"File uploaded successfully or chunked upload session initialized",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL or chunked upload session URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"Request body is required for non-chunked uploads"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"File size exceeds maximum allowed size"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Upload file or initialize chunked upload",tags:t}}}}};export{U as default};
|
|
1
|
+
import{createHash as n}from"node:crypto";import{createPaginationMetaSchemaObject as d,createPaginationSchemaObject as p}from"@visulima/pagination";import{sharedFileMetaSchemaObject as c,sharedErrorSchemaObject as l,sharedFileMetaExampleObject as m,sharedGetList as u,sharedGet as h,sharedGetMeta as f}from"./sharedErrorSchemaObject-GTCM7U0s.js";const U=(a,e,i)=>{const{supportedTransformerFormat:o,tags:t,transformer:r}={tags:["REST"],transformer:!1,...i},s=n("sha256").update(e).digest("base64");return{components:{examples:m,parameters:{UploadIDinPath:{description:"Upload ID",in:"path",name:"id",schema:{type:"string"}}},responses:{404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"}},schemas:{"X-Chunk-Checksum":{description:"SHA256 checksum of the chunk data for validation. Format: 'sha256 <base64-encoded-checksum>'.",type:"string"},"X-Chunk-Offset":{description:"Byte offset for the chunk being uploaded. Required for PATCH requests in chunked uploads.",type:"integer"},"X-Chunked-Upload":{description:"Header to indicate chunked upload initialization. Set to 'true' to initialize a chunked upload session.",enum:["true"],type:"string"},"X-Chunked-Upload-Response":{description:"Indicates this is a chunked upload session. Returned in HEAD responses.",enum:["true"],type:"string"},"X-Received-Chunks":{description:"JSON array of received chunk offsets. Used for resumable uploads.",type:"string"},"X-Total-Size":{description:"Total size of the file in bytes for chunked uploads. Required when X-Chunked-Upload is 'true'.",type:"integer"},"X-Upload-Complete":{description:"Indicates if the upload is complete. Set to 'true' when all chunks have been uploaded.",enum:["true","false"],type:"string"},"X-Upload-Offset":{description:"Current upload offset in bytes. Returned in responses for chunked uploads.",type:"integer"},...p("FileMetaPagination",{$ref:"#/components/schemas/PaginationMeta"},"#/components/schemas/PaginationMeta"),...d("PaginationMeta"),...l,...c}},paths:{[`${e.replace(/\/$/,"")}/{id}/metadata`]:{get:f(`${s}RestGetFileMeta`,t)},[`${e.replace(/\/$/,"")}/{id}`]:{delete:{description:"Delete a single file",operationId:`${s}RestDeleteFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],responses:{204:{description:"No Content - File deleted successfully"},404:{$ref:"#/components/responses/404"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Delete file",tags:t},get:h(`${s}RestGetFile`,t,r,o),head:{description:"Get file metadata and upload progress. For chunked uploads, returns progress information including current offset and completion status.",operationId:`${s}RestHeadFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],responses:{200:{description:"OK",headers:{"Content-Length":{description:"File size in bytes",schema:{type:"integer"}},"Content-Type":{description:"MIME type of the file",schema:{type:"string"}},ETag:{description:"Entity tag for caching",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},"Last-Modified":{description:"Last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Chunked-Upload":{description:"Indicates this is a chunked upload session",schema:{$ref:"#/components/schemas/X-Chunked-Upload-Response"}},"X-Received-Chunks":{description:"JSON array of received chunk offsets (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Received-Chunks"}},"X-Upload-Complete":{description:"Indicates if upload is complete (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Upload-Complete"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Offset":{description:"Current upload offset in bytes (chunked uploads only)",schema:{$ref:"#/components/schemas/X-Upload-Offset"}}}},404:{$ref:"#/components/responses/404"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get file metadata",tags:t},patch:{description:"Upload a chunk for chunked uploads. Requires X-Chunk-Offset header and chunk data in the request body.",operationId:`${s}RestPatchChunk`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"},{description:"Byte offset for this chunk",in:"header",name:"X-Chunk-Offset",required:!0,schema:{$ref:"#/components/schemas/X-Chunk-Offset"}},{description:"SHA256 checksum of the chunk (optional)",in:"header",name:"X-Chunk-Checksum",required:!1,schema:{$ref:"#/components/schemas/X-Chunk-Checksum"}}],requestBody:{content:{"application/octet-stream":{description:"Chunk data as raw binary",schema:{format:"binary",type:"string"}}},description:"Chunk data",required:!0},responses:{200:{description:"Chunk uploaded successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Complete":{description:"Indicates if upload is complete",schema:{$ref:"#/components/schemas/X-Upload-Complete"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Offset":{description:"Current upload offset after this chunk",schema:{$ref:"#/components/schemas/X-Upload-Offset"}}}},201:{description:"Upload completed (all chunks received)",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Complete":{description:"Upload is complete",schema:{enum:["true"],type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"X-Chunk-Offset header is required"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Upload session not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"Chunk size exceeds maximum allowed size of 104857600 bytes"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Upload chunk",tags:t},put:{description:"Create or update a file. Requires file ID in the URL path. If file exists, it will be overwritten.",operationId:`${s}RestPutFile`,parameters:[{$ref:"#/components/parameters/UploadIDinPath"}],requestBody:{content:{"application/octet-stream":{description:"File data as raw binary",schema:{format:"binary",type:"string"}}},description:"File data",required:!0},responses:{200:{description:"File updated successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},201:{description:"File created successfully",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"Request body is required"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"File size exceeds maximum allowed size"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Create or update file",tags:t}},[e.trimEnd()]:{delete:{description:'Delete multiple files. Supports batch delete via query parameter (?ids=id1,id2,id3) or JSON body ({ids: ["id1", "id2"]} or ["id1", "id2"]).',operationId:`${s}RestBatchDelete`,parameters:[{description:"Comma-separated list of file IDs to delete",in:"query",name:"ids",required:!1,schema:{example:"id1,id2,id3",type:"string"}}],requestBody:{content:{"application/json":{schema:{oneOf:[{properties:{ids:{description:"Array of file IDs to delete",items:{type:"string"},type:"array"}},required:["ids"],type:"object"},{description:"Array of file IDs to delete",items:{type:"string"},type:"array"}]}}},description:"File IDs to delete (optional if using query parameter)",required:!1},responses:{204:{description:"All files deleted successfully"},207:{description:"Multi-Status - Some files deleted successfully",headers:{"X-Delete-Errors":{description:"JSON array of deletion errors",schema:{type:"string"}},"X-Delete-Failed":{description:"Number of files that failed to delete",schema:{type:"integer"}},"X-Delete-Successful":{description:"Number of files successfully deleted",schema:{type:"integer"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"No file IDs provided"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Failed to delete files: id1, id2"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Batch delete files",tags:t},get:u(`${s}RestGetList`,t),post:{description:"Upload a file with raw binary data or initialize a chunked upload session. For chunked uploads, set X-Chunked-Upload: true and X-Total-Size headers.",operationId:`${s}RestPostFile`,parameters:[{description:"Set to 'true' to initialize a chunked upload session",in:"header",name:"X-Chunked-Upload",required:!1,schema:{$ref:"#/components/schemas/X-Chunked-Upload"}},{description:"Total size of the file in bytes (required for chunked uploads)",in:"header",name:"X-Total-Size",required:!1,schema:{$ref:"#/components/schemas/X-Total-Size"}},{description:"Optional filename",in:"header",name:"Content-Disposition",required:!1,schema:{example:'attachment; filename="photo.jpg"',type:"string"}},{description:"Optional JSON metadata",in:"header",name:"X-File-Metadata",required:!1,schema:{example:'{"description":"My photo"}',type:"string"}}],requestBody:{content:{"application/octet-stream":{description:"File data as raw binary. For chunked upload initialization, body can be empty.",schema:{format:"binary",type:"string"}}},description:"File data (optional for chunked upload initialization)",required:!1},responses:{200:{description:"The file already exists, send a resume request",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},201:{description:"File uploaded successfully or chunked upload session initialized",headers:{ETag:{description:"Upload ETag",schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},Location:{description:"File URL or chunked upload session URL",schema:{example:`${a}${e}/file-id`,format:"uri",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},400:{content:{"application/json":{example:{error:{code:"BadRequest",message:"Request body is required for non-chunked uploads"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Bad Request"},413:{content:{"application/json":{example:{error:{code:"RequestEntityTooLarge",message:"File size exceeds maximum allowed size"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Request Entity Too Large"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Upload file or initialize chunked upload",tags:t}}}}};export{U as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Readable as w}from"node:stream";import{b as C,B as P,z as E,t as U}from"./storage-uypoNkqu.js";import{a as I}from"./detect-file-type-go3r-MOD.js";import{throwErrorCode as y,ERRORS as g}from"./ERRORS-olUcTqo2.js";import{createRetryWrapper as O}from"./createRetryWrapper-BM8PL0cI.js";import{L as S}from"./local-meta-storage-Ca6WrUmN.js";import{u as x}from"./update-size-Dxc1hvbI.js";import{p as R}from"./part-match-Cb6xL9eN.js";import{h as T}from"./has-content-96mmyLn2.js";import{g as k}from"./get-file-status-B8WmWzcM.js";const z=(d,t)=>{const i={};return Object.keys(d).forEach(e=>{i[e]=t(d[e])}),i},L=d=>d===Number(d)?d:(C(d)??0)/1e3,v=5*1024*1024,B=16*1024*1024,N=d=>{if(d)return`bytes=${Math.max(0,d.start)}-${d.end===void 0?"":d.end}`};class b extends P{checksumTypes=["md5","crc32","crc32c","sha1","sha256"];supportsRange=!0;supportsDelimiter=!0;bucket;meta;MAX_PARTS=1e4;partSize;retry;resolvedRetryConfig;constructor(t){if(super(t),this.bucket=t.bucket,this.partSize=typeof t.partSize=="string"?E(t.partSize):t.partSize||B,this.partSize<v)throw new Error("Minimum allowed partSize value is 5MB");const i={backoffMultiplier:2,initialDelay:1e3,maxDelay:3e4,maxRetries:3,retryableStatusCodes:[408,429,500,502,503,504],shouldRetry:a=>{const s=a;return s.statusCode&&[408,429,500,502,503,504].includes(s.statusCode)||s.retryable===!0?!0:void 0},...t.retryConfig};this.retry=O(i),this.resolvedRetryConfig=i;const{metaStorage:e,metaStorageConfig:r}=t;if(e)this.meta=e;else{const a={...t,...r,logger:this.logger};"directory"in a?(this.logger?.debug("Using local meta storage"),this.meta=new S(a)):this.meta=new S(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,i){return this.instrumentOperation("create",async()=>{const e={...t};if(t.ttl){const n=typeof t.ttl=="string"?U(t.ttl):t.ttl;n!==void 0&&(e.expiredAt=Date.now()+n)}const r=new(this.getFileClass())(e);r.name=this.namingFunction(r),await this.validate(r);try{const n=await this.getMeta(r.id);if(n.bytesWritten>=0)return n}catch{}const a=this.getS3Api();let s;try{s=await this.runOperation(i,n=>a.createMultipartUpload({ACL:this.getAcl(),Bucket:this.bucket,ContentType:r.contentType,Key:r.name,Metadata:z({originalName:r.originalName,...r.metadata},o=>encodeURI(String(o)))},{signal:n}))}catch{return y(g.FILE_ERROR,"s3 create upload error")}const{UploadId:c}=s||{};return c?(r.UploadId=c,r.bytesWritten=0,this.config.clientDirectUpload&&(r.partSize??=this.partSize),await this.saveMeta(r),r.status="created",await this.onCreate(r),this.config.clientDirectUpload?this.buildPresigned(r):r):y(g.FILE_ERROR,"s3 create upload error")})}async write(t,i){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(typeof t.size=="number"&&t.size>0&&x(e,t.size),!R(t,e))return y(g.FILE_CONFLICT);if(this.config.clientDirectUpload)return this.buildPresigned(e);e.Parts??=await this.getParts(e),e.bytesWritten=e.Parts.map(a=>a.Size||0).reduce((a,s)=>a+s,0);const r=await this.lock(t.id);try{if(T(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))return y(g.UNSUPPORTED_CHECKSUM_ALGORITHM);if(e.Parts.length===0&&(!e.contentType||e.contentType==="application/octet-stream"))try{const l=t.body instanceof w?t.body:w.fromWeb(t.body),{fileType:m,stream:f}=await I(l);m?.mime&&(e.contentType=m.mime),t.body=f}catch{}if(e.Parts.length>this.MAX_PARTS)throw new Error(`Exceeded ${this.MAX_PARTS} as part of the upload to ${this.bucket}.`);const a=e.Parts.length+1,s=this.getS3Api(),c=e.UploadId;if(!c)throw new Error("UploadId is required");const n=t.body,o=n instanceof Uint8Array,{ETag:u}=await this.runOperation(i,l=>s.uploadPart({Body:n,Bucket:this.bucket,ContentLength:t.contentLength||0,Key:e.name,PartNumber:a,UploadId:c,...t.checksumAlgorithm==="md5"?{ContentMD5:t.checksum}:{}},{signal:l}),{replayable:o}),p={ETag:u,PartNumber:a,Size:t.contentLength};e.Parts=[...e.Parts,p],e.bytesWritten+=t.contentLength||0}if(this.cache.set(e.id,e),e.status=k(e),e.status==="completed"){const[a]=await this.internalOnComplete(e);delete e.Parts,e.uri=a.Location,e.ETag=a.ETag}}finally{await this.unlock(t.id,r)}return e})}async delete({id:t},i){return this.instrumentOperation("delete",async()=>{const e=await this.getMeta(t);e.status="deleted",await this.abortMultipartUpload(e,i),await this.deleteMeta(e.id);const r={...e};return await this.onDelete(r),r})}async copy(t,i,e){return this.instrumentOperation("copy",async()=>{b.assertSafeId(t),b.assertSafeId(i);const r=await this.getMeta(t),a=`${this.bucket}/${t}`,s=this.bucket,c=i,n=this.getS3Api();return await this.runOperation(e,o=>n.copyObject({Bucket:s,CopySource:a,Key:c,...e?.storageClass&&{StorageClass:e.storageClass}},{signal:o})),{...r,id:c,name:c}})}async move(t,i,e){return this.instrumentOperation("move",async()=>{await this.copy(t,i,e);const r=this.getS3Api();return await this.runOperation(e,a=>r.deleteObject({Bucket:this.bucket,Key:t},{signal:a})),await this.getMeta(i)})}async list(t=1e3,i){return this.instrumentOperation("list",async()=>{const e=this.getS3Api(),r=Math.min(t,1e3);let a={Bucket:this.bucket,MaxKeys:r};const s=[];let c=!0;for(;c&&s.length<t;)try{const n=await this.runOperation(i,o=>e.listObjectsV2(a,{signal:o}));for(const{Key:o,LastModified:u}of n?.Contents||[]){if(s.length>=t)break;o!==void 0&&s.push({id:o,...u&&{createdAt:u}})}c=n.IsTruncated||!1,c&&n.NextContinuationToken&&s.length<t&&(a={...a,ContinuationToken:n.NextContinuationToken,MaxKeys:Math.min(r,t-s.length)})}catch(n){const o=this.normalizeError(n instanceof Error?n:new Error(String(n)));throw await this.onError(o),n}return s},{limit:t})}async listDirectory(t){return this.instrumentOperation("listDirectory",async()=>{const i=this.getS3Api(),e=t?.limit??1e3,r=Math.min(e,1e3);let a={Bucket:this.bucket,Delimiter:t?.delimiter,MaxKeys:r,...t?.prefix!==void 0&&{Prefix:t.prefix}};const s=[],c=new Set;let n=!0;for(;n&&s.length<e;)try{const o=await this.runOperation(t,u=>i.listObjectsV2(a,{signal:u}));for(const{Prefix:u}of o?.CommonPrefixes||[])u!==void 0&&c.add(u);for(const{Key:u,LastModified:p}of o?.Contents||[]){if(s.length>=e)break;u!==void 0&&s.push({id:u,...p&&{createdAt:p}})}n=o.IsTruncated||!1,n&&o.NextContinuationToken&&s.length<e&&(a={...a,ContinuationToken:o.NextContinuationToken,MaxKeys:Math.min(r,e-s.length)})}catch(o){const u=this.normalizeError(o instanceof Error?o:new Error(String(o)));throw await this.onError(u),o}return{files:s,prefixes:[...c]}},{limit:t?.limit??1e3})}async exists({id:t},i){return this.instrumentOperation("exists",async()=>{try{await this.getMeta(t);const e=this.getS3Api();return await this.runOperation(i,r=>e.headObject({Bucket:this.bucket,Key:t},{signal:r})),!0}catch(e){return e.$metadata?.httpStatusCode===404,!1}})}async get({id:t},i){return this.instrumentOperation("get",async()=>{const e=this.getS3Api(),r=N(i?.range),{Body:a,ContentLength:s,ContentType:c,ETag:n,Expires:o,LastModified:u,Metadata:p}=await this.runOperation(i,h=>e.getObject({Bucket:this.bucket,Key:t,...r!==void 0&&{Range:r}},{signal:h}));await this.checkIfExpired({expiredAt:o});const l=[];if(a)if(a instanceof w)for await(const h of a)l.push(h instanceof Uint8Array?h:new Uint8Array(h));else{const h=a.getReader();try{for(;;){const{done:M,value:A}=await h.read();if(M)break;l.push(A)}}finally{h.releaseLock()}}const{originalName:m,...f}=p||{};return{content:Buffer.concat(l),contentType:c,ETag:n,expiredAt:o,id:t,metadata:f,modifiedAt:u,name:t,originalName:m||t,size:Number(s)}})}async buildPresigned(t){const i=t;if(i.Parts?.length||(i.Parts=await this.getParts(t)),i.bytesWritten=i.Parts.map(e=>e.Size||0).reduce((e,r)=>e+r,0),t.status=k(i),i.partsUrls?.length||(i.partsUrls=await this.getPartsPresignedUrls(t)),t.status==="completed"){const[e]=await this.internalOnComplete(t);return delete i.Parts,i.uri=e.Location,t}return t}async getPartsPresignedUrls(t){t.partSize??=this.partSize;const i=t.UploadId;if(!i)throw new Error("UploadId is required for getting presigned URLs");const e=Math.trunc(t.size/this.partSize)+1,r=[],a=Math.trunc(L(this.config.expiration?.maxAge||"6hrs")),s=this.getS3Api();for(let c=0;c<e;c++)r.push(s.getPresignedUrl({Bucket:this.bucket,expiresIn:a,Key:t.name,PartNumber:c+1,UploadId:i}));return Promise.all(r)}async getParts(t){const i=this.getS3Api(),e=t.UploadId;if(!e)throw new Error("UploadId is required");const{Parts:r=[]}=await this.runOperation(void 0,a=>i.listParts({Bucket:this.bucket,Key:t.name,UploadId:e},{signal:a}));return r}completeMultipartUpload(t){const i=this.getS3Api(),e=t.UploadId;if(!e)throw new Error("UploadId is required");const r=t.Parts?.map(({ETag:a,PartNumber:s})=>{if(!a||!s)throw new Error("ETag and PartNumber are required");return{ETag:a,PartNumber:s}})||[];return this.runOperation(void 0,a=>i.completeMultipartUpload({Bucket:this.bucket,Key:t.name,Parts:r,UploadId:e},{signal:a}))}async abortMultipartUpload(t,i){if(t.status!=="completed")try{const e=this.getS3Api(),r=t.UploadId;if(!r)return;await this.runOperation(i,a=>e.abortMultipartUpload({Bucket:this.bucket,Key:t.name,UploadId:r},{signal:a}))}catch(e){this.logger?.error("abortMultipartUploadError: ",e);const r=this.normalizeError(e instanceof Error?e:new Error(String(e)));await this.onError(r)}}internalOnComplete=async t=>{const[i]=await Promise.all([this.completeMultipartUpload(t),this.deleteMeta(t.id)]);return[i,t]}}export{b as S,N as b};
|
package/dist/packem_shared/{s3-base-storage.d-ks99NSs-.d.ts → s3-base-storage.d-BmuspwCF.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
|
-
import { F as File, M as MetaStorage, c as createRetryWrapper, R as RetryConfig, d as FileInit, B as BaseStorage, O as OperationOptions, e as FilePart, f as FileQuery, g as FileReturn } from "./storage.d-
|
|
2
|
+
import { F as File, M as MetaStorage, c as createRetryWrapper, R as RetryConfig, d as FileInit, B as BaseStorage, O as OperationOptions, e as FilePart, f as FileQuery, g as FileReturn } from "./storage.d-C9EdfTf1.js";
|
|
3
3
|
/**
|
|
4
4
|
* Part interface for multipart uploads.
|
|
5
5
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const o=new Set(["fr-par","nl-ams","pl-waw"]),r=s=>{const c=s?.accessKeyId??process.env.AWS_ACCESS_KEY_ID??process.env.SCALEWAY_ACCESS_KEY_ID??process.env.SCALEWAY_ACCESS_KEY,E=s?.endpoint??process.env.SCALEWAY_ENDPOINT,e=s?.region??process.env.SCALEWAY_REGION,n=s?.secretAccessKey??process.env.AWS_SECRET_ACCESS_KEY??process.env.SCALEWAY_SECRET_ACCESS_KEY??process.env.SCALEWAY_SECRET_KEY;if(!e||!c||!n)throw new Error("Missing required parameters for Scaleway Object Storage client.");if(!o.has(e))throw new Error(`Invalid Scaleway region "${e}". Expected one of: ${[...o].join(", ")}.`);return{credentials:{accessKeyId:c,secretAccessKey:n},endpoint:E??`https://s3.${e}.scw.cloud`,forcePathStyle:!1,region:e}};export{r as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const c={value:{createdAt:"2022-12-16T10:35:17.466Z",id:"391c9157ec481ac6-f72b2d884632d7e6-cdeb2056546033e3",modifiedAt:"2022-12-16T10:35:17.470Z"}},o=(e,t)=>e.map(i=>({...i,description:`[${t}] ${i.description}`,"x-group":t})),d=(e,t=["jpeg","png","webp","avif","tiff","gif","mp4","webm","mkv","ogg","mp3","wav","aac","flac"])=>{if(!e)return[];const i=o([{description:"Output format for the transformed media",in:"query",name:"format",schema:{enum:t,type:"string"}},{description:"Quality setting (0-100 for images, affects compression)",in:"query",name:"quality",schema:{maximum:100,minimum:1,type:"integer"}}],"Common"),n=o([{description:"Desired width in pixels",in:"query",name:"width",schema:{minimum:1,type:"integer"}},{description:"Desired height in pixels",in:"query",name:"height",schema:{minimum:1,type:"integer"}},{description:"Resize fit mode",in:"query",name:"fit",schema:{enum:["cover","contain","fill","inside","outside"],type:"string"}},{description:"Position for cover/contain fits",in:"query",name:"position",schema:{oneOf:[{enum:["top","right","bottom","left","center"],type:"string"},{minimum:0,type:"integer"}]}},{description:"Avoid enlarging images smaller than specified dimensions",in:"query",name:"withoutEnlargement",schema:{type:"boolean"}},{description:"Avoid reducing images larger than specified dimensions",in:"query",name:"withoutReduction",schema:{type:"boolean"}},{description:"Resize kernel algorithm",in:"query",name:"kernel",schema:{enum:["nearest","cubic","mitchell","lanczos2","lanczos3"],type:"string"}},{description:"Fast shrink on load for large images",in:"query",name:"fastShrinkOnLoad",schema:{type:"boolean"}},{description:"Crop area left offset",in:"query",name:"left",schema:{minimum:0,type:"integer"}},{description:"Crop area top offset",in:"query",name:"top",schema:{minimum:0,type:"integer"}},{description:"Crop area width",in:"query",name:"cropWidth",schema:{minimum:1,type:"integer"}},{description:"Crop area height",in:"query",name:"cropHeight",schema:{minimum:1,type:"integer"}},{description:"Rotation angle in degrees. Note: angles other than 90°, 180°, and 270° require interpolation and may affect quality",in:"query",name:"angle",schema:{type:"number"}},{description:"Background color for rotation (hex, rgb, or color name)",in:"query",name:"background",schema:{type:"string"}},{description:"Apply blur effect",in:"query",name:"blur",schema:{type:"boolean"}},{description:"Apply sharpening",in:"query",name:"sharpen",schema:{type:"boolean"}},{description:"Apply median filter with specified size",in:"query",name:"median",schema:{minimum:1,type:"integer"}},{description:"Apply CLAHE (Contrast Limited Adaptive Histogram Equalization)",in:"query",name:"clahe",schema:{type:"boolean"}},{description:"Apply thresholding with specified value (0-255)",in:"query",name:"threshold",schema:{maximum:255,minimum:0,type:"integer"}},{description:"Apply gamma correction",in:"query",name:"gamma",schema:{type:"boolean"}},{description:"Negate (invert) the image",in:"query",name:"negate",schema:{type:"boolean"}},{description:"Normalise the image",in:"query",name:"normalise",schema:{type:"boolean"}},{description:"Flatten alpha channel",in:"query",name:"flatten",schema:{type:"boolean"}},{description:"Unflatten alpha channel",in:"query",name:"unflatten",schema:{type:"boolean"}},{description:"Flip image vertically",in:"query",name:"flip",schema:{type:"boolean"}},{description:"Flop image horizontally",in:"query",name:"flop",schema:{type:"boolean"}},{description:"Convert to greyscale",in:"query",name:"greyscale",schema:{type:"boolean"}},{description:"Apply modulation effects",in:"query",name:"modulate",schema:{type:"boolean"}},{description:"Brightness multiplier for modulation",in:"query",name:"brightness",schema:{type:"number"}},{description:"Saturation multiplier for modulation",in:"query",name:"saturation",schema:{type:"number"}},{description:"Hue rotation in degrees for modulation",in:"query",name:"hue",schema:{type:"integer"}},{description:"Lightness adjustment for modulation",in:"query",name:"lightness",schema:{type:"integer"}},{description:"Apply tinting",in:"query",name:"tint",schema:{type:"boolean"}},{description:"Convert colourspace",in:"query",name:"colourspace",schema:{enum:["srgb","rgb","cmyk","lab","b-w"],type:"string"}},{description:"Apply affine transformation",in:"query",name:"affine",schema:{type:"boolean"}},{description:"Apply dilation",in:"query",name:"dilate",schema:{type:"boolean"}},{description:"Apply erosion",in:"query",name:"erode",schema:{type:"boolean"}},{description:"Set pipeline colourspace",in:"query",name:"pipelineColourspace",schema:{type:"boolean"}},{description:"Convert to colourspace",in:"query",name:"toColourspace",schema:{type:"boolean"}},{description:"Remove alpha channel",in:"query",name:"removeAlpha",schema:{type:"boolean"}},{description:"Ensure alpha channel",in:"query",name:"ensureAlpha",schema:{type:"boolean"}}],"Image"),s=o([{description:"Desired width in pixels",in:"query",name:"width",schema:{minimum:1,type:"integer"}},{description:"Desired height in pixels",in:"query",name:"height",schema:{minimum:1,type:"integer"}},{description:"Video frame rate in Hz",in:"query",name:"frameRate",schema:{minimum:1,type:"number"}},{description:"Video key frame interval in seconds",in:"query",name:"keyFrameInterval",schema:{minimum:.1,type:"number"}}],"Video"),r=o([{description:"Target bitrate in bits per second",in:"query",name:"bitrate",schema:{minimum:1,type:"integer"}},{description:"Video or audio codec",in:"query",name:"codec",schema:{enum:["avc","hevc","vp8","vp9","av1","aac","opus","mp3","vorbis","flac"],type:"string"}}],"Video/Audio"),l=o([{description:"Audio channel count",in:"query",name:"numberOfChannels",schema:{enum:[1,2,3,4,5,6,7,8],type:"integer"}},{description:"Audio sample rate in Hz",in:"query",name:"sampleRate",schema:{enum:[8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,192e3],type:"integer"}}],"Audio");let a=[];a=[...a,...i],(e===!0||e==="image")&&(a=[...a,...n]),(e===!0||e==="video")&&(a=[...a,...s]),(e===!0||e==="video"||e==="audio")&&(a=[...a,...r]),(e===!0||e==="audio")&&(a=[...a,...l]);const m=new Set;return a.filter(p=>m.has(p.name)?!1:(m.add(p.name),!0))},y=(e,t=["jpeg","png","webp","avif","tiff","gif","mp4","webm","mkv","ogg","mp3","wav","aac","flac"])=>{const i=d(e,t),n={};return i.forEach(s=>{const r=s["x-group"]||"Other";n[r]||(n[r]=[]),n[r].push(s.name)}),{groups:n,parameters:i}},u=e=>e?{"X-Media-Type":{description:"Type of media (image/video/audio)",schema:{enum:["image","video","audio"],type:"string"}},"X-Original-Format":{description:"Original file format",schema:{type:"string"}},"X-Transformed-Format":{description:"Transformed file format",schema:{type:"string"}}}:{},h=e=>e?{400:{content:{"application/json":{examples:{ValidationError:{value:{error:{code:"INVALID_PARAMS_FOR_IMAGE",details:{invalidParams:["codec","bitrate"],mediaType:"image",validParams:["format","quality","width","height","fit","position","withoutEnlargement","withoutReduction","kernel","fastShrinkOnLoad","left","top","cropWidth","cropHeight","angle","background","blur","sharpen","median","clahe","threshold","gamma","negate","normalise","flatten","unflatten","flip","flop","greyscale","modulate","brightness","saturation","hue","lightness","tint","colourspace","affine","dilate","erode","pipelineColourspace","toColourspace","removeAlpha","ensureAlpha"]},message:"Invalid query parameters for image transformation: codec, bitrate. Images support: format, quality, width, height, fit, position, withoutEnlargement, withoutReduction, kernel, fastShrinkOnLoad, left, top, cropWidth, cropHeight, angle, background, blur, sharpen, median, clahe, threshold, gamma, negate, normalise, flatten, unflatten, flip, flop, greyscale, modulate, brightness, saturation, hue, lightness, tint, colourspace, affine, dilate, erode, pipelineColourspace, toColourspace, removeAlpha, ensureAlpha. Video/audio parameters (codec, bitrate) are not supported for images.",name:"ValidationError"}}}},schema:{$ref:"#/components/schemas/ValidationError"}}},description:"Invalid transformation parameters"},413:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"File too large for transformation"},415:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Unsupported media type for transformation"}}:{},g=(e,t,i,n)=>({description:"Get the uploaded file with optional media transformation support",operationId:e,parameters:[{in:"path",name:"id",required:!0,schema:{type:"string"}},...d(i,n)],responses:{200:{content:{"*/*":{schema:{description:i?"Transformed file content":"File content",format:"binary",type:"string"}}},description:i?"File retrieved and transformed successfully":"File retrieved successfully",headers:{"Content-Type":{description:`MIME type of the file${i?" (or transformed file)":""}`,schema:{type:"string"}},ETag:{description:`Upload ETag${i?" (or transformed file ETag)":""}`,schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},"Last-Modified":{description:"Upload last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},...u(i),"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},...h(i),404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get the uploaded file",tags:t}),f=(e,t)=>({description:"Get the uploaded file metadata",operationId:e,parameters:[{in:"path",name:"id",required:!0,schema:{type:"string"}}],responses:{200:{content:{"application/json":{schema:{$ref:"#/components/schemas/FileMeta"}}},description:"OK",headers:{"Last-Modified":{description:"Upload last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"File metadata not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get the uploaded file metadata",tags:t}),b={Error:{description:"Error",properties:{error:{properties:{code:{minLength:1,type:"string"},message:{minLength:1,type:"string"},name:{minLength:3,type:"string"}},required:["message"],type:"object"}},required:["error"],type:"object"},ValidationError:{description:"Validation error response",properties:{code:{enum:["INVALID_PARAMS_FOR_IMAGE","INVALID_PARAMS_FOR_VIDEO","INVALID_PARAMS_FOR_AUDIO","INVALID_FIT_VALUE","INVALID_ANGLE_VALUE","INVALID_FORMAT","INCOMPLETE_CROP_PARAMS","INVALID_VIDEO_CODEC","INVALID_VIDEO_FORMAT","INVALID_WIDTH","INVALID_HEIGHT","INVALID_BITRATE","INVALID_FRAME_RATE","INVALID_KEY_FRAME_INTERVAL","INVALID_AUDIO_CODEC","INVALID_AUDIO_FORMAT","INVALID_CHANNEL_COUNT","INVALID_SAMPLE_RATE"],type:"string"},details:{properties:{invalidParams:{items:{type:"string"},type:"array"},mediaType:{enum:["image","video","audio"],type:"string"},suggestions:{items:{type:"string"},type:"array"},validParams:{items:{type:"string"},type:"array"}},required:["invalidParams","validParams","mediaType"],type:"object"},message:{type:"string"},name:{enum:["ValidationError"],type:"string"}},required:["code","details","message","name"],type:"object"}},A={FileMeta:{description:"File meta",properties:{bytesWritten:{type:"integer"},contentType:{type:"string"},createdAt:{format:"date-time",type:"string"},id:{minLength:1,type:"string"},metadata:{type:"object"},name:{minLength:1,type:"string"},originalName:{minLength:1,type:"string"},status:{enum:["completed","part","deleted","created"],type:"string"}},type:"object"}},q={FileMeta:{value:[c]},FileMetaPagination:{value:{data:[c.value],meta:{firstPage:1,firstPageUrl:"/?page=1",lastPage:1,lastPageUrl:"/?page=10",nextPageUrl:"/?page=2",page:1,perPage:1,previousPageUrl:void 0,total:1}}}},I=(e,t)=>({description:"List upload",operationId:e,parameters:[{description:"Maximum number of elements to retrieve.",in:"query",name:"limit",schema:{nullable:!0,type:"integer"}},{description:"Page number. Use only for pagination.",in:"query",name:"page",schema:{nullable:!0,type:"integer"}}],responses:{200:{content:{"application/json":{examples:{Default:{$ref:"#/components/examples/FileMeta"},Pagination:{$ref:"#/components/examples/FileMetaPagination"}},schema:{$ref:"#/components/schemas/FileMeta"}}},description:"OK"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"List upload",tags:t});export{y as getOrganizedTransformationParameters,b as sharedErrorSchemaObject,q as sharedFileMetaExampleObject,A as sharedFileMetaSchemaObject,g as sharedGet,I as sharedGetList,f as sharedGetMeta};
|
|
1
|
+
const c={value:{createdAt:"2022-12-16T10:35:17.466Z",id:"391c9157ec481ac6-f72b2d884632d7e6-cdeb2056546033e3",modifiedAt:"2022-12-16T10:35:17.470Z"}},o=(e,t)=>e.map(i=>({...i,description:`[${t}] ${i.description}`,"x-group":t})),d=(e,t=["jpeg","png","webp","avif","tiff","gif","mp4","webm","mkv","ogg","mp3","wav","aac","flac"])=>{if(!e)return[];const i=o([{description:"Output format for the transformed media",in:"query",name:"format",schema:{enum:t,type:"string"}},{description:"Quality setting (0-100 for images, affects compression)",in:"query",name:"quality",schema:{maximum:100,minimum:1,type:"integer"}}],"Common"),n=o([{description:"Desired width in pixels",in:"query",name:"width",schema:{minimum:1,type:"integer"}},{description:"Desired height in pixels",in:"query",name:"height",schema:{minimum:1,type:"integer"}},{description:"Resize fit mode",in:"query",name:"fit",schema:{enum:["cover","contain","fill","inside","outside"],type:"string"}},{description:"Position for cover/contain fits",in:"query",name:"position",schema:{oneOf:[{enum:["top","right","bottom","left","center"],type:"string"},{minimum:0,type:"integer"}]}},{description:"Avoid enlarging images smaller than specified dimensions",in:"query",name:"withoutEnlargement",schema:{type:"boolean"}},{description:"Avoid reducing images larger than specified dimensions",in:"query",name:"withoutReduction",schema:{type:"boolean"}},{description:"Resize kernel algorithm",in:"query",name:"kernel",schema:{enum:["nearest","cubic","mitchell","lanczos2","lanczos3"],type:"string"}},{description:"Fast shrink on load for large images",in:"query",name:"fastShrinkOnLoad",schema:{type:"boolean"}},{description:"Crop area left offset",in:"query",name:"left",schema:{minimum:0,type:"integer"}},{description:"Crop area top offset",in:"query",name:"top",schema:{minimum:0,type:"integer"}},{description:"Crop area width",in:"query",name:"cropWidth",schema:{minimum:1,type:"integer"}},{description:"Crop area height",in:"query",name:"cropHeight",schema:{minimum:1,type:"integer"}},{description:"Rotation angle in degrees. Note: angles other than 90°, 180°, and 270° require interpolation and may affect quality",in:"query",name:"angle",schema:{type:"number"}},{description:"Background color for rotation (hex, rgb, or color name)",in:"query",name:"background",schema:{type:"string"}},{description:"Apply blur effect",in:"query",name:"blur",schema:{type:"boolean"}},{description:"Apply sharpening",in:"query",name:"sharpen",schema:{type:"boolean"}},{description:"Apply median filter with specified size",in:"query",name:"median",schema:{minimum:1,type:"integer"}},{description:"Apply CLAHE (Contrast Limited Adaptive Histogram Equalization)",in:"query",name:"clahe",schema:{type:"boolean"}},{description:"Apply thresholding with specified value (0-255)",in:"query",name:"threshold",schema:{maximum:255,minimum:0,type:"integer"}},{description:"Apply gamma correction",in:"query",name:"gamma",schema:{type:"boolean"}},{description:"Negate (invert) the image",in:"query",name:"negate",schema:{type:"boolean"}},{description:"Normalise the image",in:"query",name:"normalise",schema:{type:"boolean"}},{description:"Flatten alpha channel",in:"query",name:"flatten",schema:{type:"boolean"}},{description:"Unflatten alpha channel",in:"query",name:"unflatten",schema:{type:"boolean"}},{description:"Flip image vertically",in:"query",name:"flip",schema:{type:"boolean"}},{description:"Flop image horizontally",in:"query",name:"flop",schema:{type:"boolean"}},{description:"Convert to greyscale",in:"query",name:"greyscale",schema:{type:"boolean"}},{description:"Apply modulation effects",in:"query",name:"modulate",schema:{type:"boolean"}},{description:"Brightness multiplier for modulation",in:"query",name:"brightness",schema:{type:"number"}},{description:"Saturation multiplier for modulation",in:"query",name:"saturation",schema:{type:"number"}},{description:"Hue rotation in degrees for modulation",in:"query",name:"hue",schema:{type:"integer"}},{description:"Lightness adjustment for modulation",in:"query",name:"lightness",schema:{type:"integer"}},{description:"Apply tinting",in:"query",name:"tint",schema:{type:"boolean"}},{description:"Convert colourspace",in:"query",name:"colourspace",schema:{enum:["srgb","rgb","cmyk","lab","b-w"],type:"string"}},{description:"Apply affine transformation",in:"query",name:"affine",schema:{type:"boolean"}},{description:"Apply dilation",in:"query",name:"dilate",schema:{type:"boolean"}},{description:"Apply erosion",in:"query",name:"erode",schema:{type:"boolean"}},{description:"Set pipeline colourspace",in:"query",name:"pipelineColourspace",schema:{type:"boolean"}},{description:"Convert to colourspace",in:"query",name:"toColourspace",schema:{type:"boolean"}},{description:"Remove alpha channel",in:"query",name:"removeAlpha",schema:{type:"boolean"}},{description:"Ensure alpha channel",in:"query",name:"ensureAlpha",schema:{type:"boolean"}}],"Image"),s=o([{description:"Desired width in pixels",in:"query",name:"width",schema:{minimum:1,type:"integer"}},{description:"Desired height in pixels",in:"query",name:"height",schema:{minimum:1,type:"integer"}},{description:"Video frame rate in Hz",in:"query",name:"frameRate",schema:{minimum:1,type:"number"}},{description:"Video key frame interval in seconds",in:"query",name:"keyFrameInterval",schema:{minimum:.1,type:"number"}}],"Video"),r=o([{description:"Target bitrate in bits per second",in:"query",name:"bitrate",schema:{minimum:1,type:"integer"}},{description:"Video or audio codec",in:"query",name:"codec",schema:{enum:["avc","hevc","vp8","vp9","av1","aac","opus","mp3","vorbis","flac"],type:"string"}}],"Video/Audio"),l=o([{description:"Audio channel count",in:"query",name:"numberOfChannels",schema:{enum:[1,2,3,4,5,6,7,8],type:"integer"}},{description:"Audio sample rate in Hz",in:"query",name:"sampleRate",schema:{enum:[8e3,11025,16e3,22050,32e3,44100,48e3,88200,96e3,192e3],type:"integer"}}],"Audio");let a=[];a=[...a,...i],(e===!0||e==="image")&&(a=[...a,...n]),(e===!0||e==="video")&&(a=[...a,...s]),(e===!0||e==="video"||e==="audio")&&(a=[...a,...r]),(e===!0||e==="audio")&&(a=[...a,...l]);const m=new Set;return a.filter(p=>m.has(p.name)?!1:(m.add(p.name),!0))},y=(e,t=["jpeg","png","webp","avif","tiff","gif","mp4","webm","mkv","ogg","mp3","wav","aac","flac"])=>{const i=d(e,t),n={};return i.forEach(s=>{const r=s["x-group"]||"Other";n[r]||(n[r]=[]),n[r].push(s.name)}),{groups:n,parameters:i}},u=e=>e?{"X-Media-Type":{description:"Type of media (image/video/audio)",schema:{enum:["image","video","audio"],type:"string"}},"X-Original-Format":{description:"Original file format",schema:{type:"string"}},"X-Transformed-Format":{description:"Transformed file format",schema:{type:"string"}}}:{},h=e=>e?{400:{content:{"application/json":{examples:{ValidationError:{value:{error:{code:"INVALID_PARAMS_FOR_IMAGE",details:{invalidParams:["codec","bitrate"],mediaType:"image",validParams:["format","quality","width","height","fit","position","withoutEnlargement","withoutReduction","kernel","fastShrinkOnLoad","left","top","cropWidth","cropHeight","angle","background","blur","sharpen","median","clahe","threshold","gamma","negate","normalise","flatten","unflatten","flip","flop","greyscale","modulate","brightness","saturation","hue","lightness","tint","colourspace","affine","dilate","erode","pipelineColourspace","toColourspace","removeAlpha","ensureAlpha"]},message:"Invalid query parameters for image transformation: codec, bitrate. Images support: format, quality, width, height, fit, position, withoutEnlargement, withoutReduction, kernel, fastShrinkOnLoad, left, top, cropWidth, cropHeight, angle, background, blur, sharpen, median, clahe, threshold, gamma, negate, normalise, flatten, unflatten, flip, flop, greyscale, modulate, brightness, saturation, hue, lightness, tint, colourspace, affine, dilate, erode, pipelineColourspace, toColourspace, removeAlpha, ensureAlpha. Video/audio parameters (codec, bitrate) are not supported for images.",name:"ValidationError"}}}},schema:{$ref:"#/components/schemas/ValidationError"}}},description:"Invalid transformation parameters"},413:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"File too large for transformation"},415:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Unsupported media type for transformation"}}:{},g=(e,t,i,n)=>({description:"Get the uploaded file with optional media transformation support",operationId:e,parameters:[{in:"path",name:"id",required:!0,schema:{type:"string"}},...d(i,n)],responses:{200:{content:{"*/*":{schema:{description:i?"Transformed file content":"File content",format:"binary",type:"string"}}},description:i?"File retrieved and transformed successfully":"File retrieved successfully",headers:{"Content-Type":{description:`MIME type of the file${i?" (or transformed file)":""}`,schema:{type:"string"}},ETag:{description:`Upload ETag${i?" (or transformed file ETag)":""}`,schema:{example:"d41d8cd98f00b204e9800998ecf8427e",type:"string"}},"Last-Modified":{description:"Upload last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},...u(i),"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},...h(i),404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"Not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get the uploaded file",tags:t}),f=(e,t)=>({description:"Get the uploaded file metadata",operationId:e,parameters:[{in:"path",name:"id",required:!0,schema:{type:"string"}}],responses:{200:{content:{"application/json":{schema:{$ref:"#/components/schemas/FileMeta"}}},description:"OK",headers:{"Last-Modified":{description:"Upload last modified date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}},"X-Upload-Expires":{description:"Upload expiration date",schema:{example:"2021-08-25T11:12:26.635Z",format:"date-time",type:"string"}}}},404:{content:{"application/json":{example:{error:{code:"FileNotFound",message:"File metadata not found"}},schema:{$ref:"#/components/schemas/Error"}}},description:"Not Found"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"Get the uploaded file metadata",tags:t}),A={Error:{description:"Error",properties:{error:{properties:{code:{minLength:1,type:"string"},message:{minLength:1,type:"string"},name:{minLength:3,type:"string"}},required:["message"],type:"object"}},required:["error"],type:"object"},ValidationError:{description:"Validation error response",properties:{code:{enum:["INVALID_PARAMS_FOR_IMAGE","INVALID_PARAMS_FOR_VIDEO","INVALID_PARAMS_FOR_AUDIO","INVALID_FIT_VALUE","INVALID_ANGLE_VALUE","INVALID_FORMAT","INCOMPLETE_CROP_PARAMS","INVALID_VIDEO_CODEC","INVALID_VIDEO_FORMAT","INVALID_WIDTH","INVALID_HEIGHT","INVALID_BITRATE","INVALID_FRAME_RATE","INVALID_KEY_FRAME_INTERVAL","INVALID_AUDIO_CODEC","INVALID_AUDIO_FORMAT","INVALID_CHANNEL_COUNT","INVALID_SAMPLE_RATE"],type:"string"},details:{properties:{invalidParams:{items:{type:"string"},type:"array"},mediaType:{enum:["image","video","audio"],type:"string"},suggestions:{items:{type:"string"},type:"array"},validParams:{items:{type:"string"},type:"array"}},required:["invalidParams","validParams","mediaType"],type:"object"},message:{type:"string"},name:{enum:["ValidationError"],type:"string"}},required:["code","details","message","name"],type:"object"}},b={FileMeta:{description:"File meta",properties:{bytesWritten:{type:"integer"},contentType:{type:"string"},createdAt:{format:"date-time",type:"string"},id:{minLength:1,type:"string"},metadata:{type:"object"},name:{minLength:1,type:"string"},originalName:{minLength:1,type:"string"},status:{enum:["completed","part","deleted","created"],type:"string"}},type:"object"}},q={FileMeta:{value:[c]},FileMetaPagination:{value:{data:[c.value],meta:{firstPage:1,firstPageUrl:"/?page=1",lastPage:1,lastPageUrl:"/?page=10",nextPageUrl:"/?page=2",page:1,perPage:1,previousPageUrl:void 0,total:1}}}},E=(e,t)=>({description:"List upload",operationId:e,parameters:[{description:"Maximum number of elements to retrieve.",in:"query",name:"limit",schema:{nullable:!0,type:"integer"}},{description:"Page number. Use only for pagination.",in:"query",name:"page",schema:{nullable:!0,type:"integer"}}],responses:{200:{content:{"application/json":{examples:{Default:{$ref:"#/components/examples/FileMeta"},Pagination:{$ref:"#/components/examples/FileMetaPagination"}},schema:{$ref:"#/components/schemas/FileMeta"}}},description:"OK"},default:{content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}},description:"Error"}},summary:"List upload",tags:t});export{y as getOrganizedTransformationParameters,A as sharedErrorSchemaObject,q as sharedFileMetaExampleObject,b as sharedFileMetaSchemaObject,g as sharedGet,E as sharedGetList,f as sharedGetMeta};
|