@visulima/storage 1.0.0-alpha.3 → 1.0.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +361 -0
- package/LICENSE.md +213 -573
- package/README.md +83 -470
- package/dist/adapter/nuxt/module.d.ts +41 -34
- package/dist/adapter/nuxt/module.js +1 -93
- package/dist/adapter/nuxt/node_modules/.bin/nuxi +22 -0
- package/dist/adapter/nuxt/node_modules/.bin/nuxt +22 -0
- package/dist/adapter/nuxt/package.json +0 -6
- package/dist/ai/ai-sdk/index.d.ts +113 -0
- package/dist/ai/ai-sdk/index.js +1 -0
- package/dist/ai/claude/index.d.ts +177 -0
- package/dist/ai/claude/index.js +1 -0
- package/dist/ai/openai/index.d.ts +205 -0
- package/dist/ai/openai/index.js +1 -0
- package/dist/ai/tanstack/index.d.ts +115 -0
- package/dist/ai/tanstack/index.js +1 -0
- package/dist/handler/http/fetch/index.d.ts +303 -4
- package/dist/handler/http/fetch/index.js +1 -4
- package/dist/handler/http/hono/index.d.ts +73 -64
- package/dist/handler/http/hono/index.js +1 -65
- package/dist/handler/http/nextjs/index.d.ts +66 -58
- package/dist/handler/http/nextjs/index.js +1 -37
- package/dist/handler/http/node/index.d.ts +361 -4
- package/dist/handler/http/node/index.js +1 -4
- package/dist/handler/http/solid-start/index.d.ts +66 -57
- package/dist/handler/http/solid-start/index.js +1 -44
- package/dist/index.d.ts +58 -17
- package/dist/index.js +1 -13
- package/dist/openapi/index.d.ts +24 -5
- package/dist/openapi/index.js +1 -5
- package/dist/packem_shared/AwsLightFile-BSqjc_rD.js +1 -0
- package/dist/packem_shared/AwsLightMetaStorage-B-iQbToR.js +1 -0
- package/dist/packem_shared/AwsLightStorage-w21RxjUm.js +1 -0
- package/dist/packem_shared/AzureFile-Dgj2Tef4.js +1 -0
- package/dist/packem_shared/AzureSMetaStorage-CR-lfQNQ.js +1 -0
- package/dist/packem_shared/AzureStorage-2kl7JDXs.js +1 -0
- package/dist/packem_shared/BaseTransformer-Fpcuz4kj.js +1 -0
- package/dist/packem_shared/BoxFile-Be0S4N1L.js +1 -0
- package/dist/packem_shared/BoxMetaStorage-DLdXbZaV.js +1 -0
- package/dist/packem_shared/BoxStorage-BUeEJoGL.js +1 -0
- package/dist/packem_shared/BunS3File-D-SRiyrm.js +1 -0
- package/dist/packem_shared/BunS3MetaStorage-Bv_CTTMz.js +1 -0
- package/dist/packem_shared/BunS3Storage-WM3rF6Fw.js +1 -0
- package/dist/packem_shared/BunnyFile-Dotl-lO9.js +1 -0
- package/dist/packem_shared/BunnyMetaStorage-DNMTSeoN.js +1 -0
- package/dist/packem_shared/BunnyStorage-D3s2fRB3.js +1 -0
- package/dist/packem_shared/CloudinaryFile-B5-m33eS.js +1 -0
- package/dist/packem_shared/CloudinaryMetaStorage-DEBk5eQy.js +1 -0
- package/dist/packem_shared/CloudinaryStorage-BBE2-aVz.js +1 -0
- package/dist/packem_shared/DiskStorage-DL0GiG6k.js +1 -0
- package/dist/packem_shared/DiskStorageWithChecksum-BvUTn7O-.js +1 -0
- package/dist/packem_shared/DropboxFile-BGVG2kXM.js +1 -0
- package/dist/packem_shared/DropboxMetaStorage-C6vj1QDA.js +1 -0
- package/dist/packem_shared/DropboxStorage-BL3OIdE_.js +1 -0
- package/dist/packem_shared/ERRORS-CyOuSMLY.js +1 -0
- package/dist/packem_shared/File-BhfUgJjs.js +1 -0
- package/dist/packem_shared/Files-CJh9_N-9.js +1 -0
- package/dist/packem_shared/FirebaseFile-JEu3plMP.js +1 -0
- package/dist/packem_shared/FirebaseMetaStorage-CzyOim-J.js +1 -0
- package/dist/packem_shared/FirebaseStorage-lXMXy3Pm.js +2 -0
- package/dist/packem_shared/FtpFile-B8jaICTB.js +1 -0
- package/dist/packem_shared/FtpMetaStorage-1Njy0DpU.js +1 -0
- package/dist/packem_shared/FtpStorage-Dw94efNW.js +1 -0
- package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
- package/dist/packem_shared/GCSFile-CDQ6IWAz.js +1 -0
- package/dist/packem_shared/GCSMetaStorage-udgXA5ia.js +1 -0
- package/dist/packem_shared/GCStorage-ChY6uJuO.js +1 -0
- package/dist/packem_shared/GoogleDriveFile-D0aGfGbL.js +1 -0
- package/dist/packem_shared/GoogleDriveMetaStorage-WGuUZPyx.js +1 -0
- package/dist/packem_shared/GoogleDriveStorage-C0NhBBWH.js +1 -0
- package/dist/packem_shared/LocalMetaStorage-QMKL7McF.js +1 -0
- package/dist/packem_shared/MediaTransformer-D-1c9Q_k.js +1 -0
- package/dist/packem_shared/MetaStorage-Y4m1dWgd.js +1 -0
- package/dist/packem_shared/Metadata-B6Ir0KO7.js +1 -0
- package/dist/packem_shared/Multipart-CIFfQksD.js +1 -0
- package/dist/packem_shared/Multipart-D9WIud9R.js +1 -0
- package/dist/packem_shared/NetlifyBlobFile-PMZLJ8AC.js +1 -0
- package/dist/packem_shared/NetlifyBlobMetaStorage-ClIFdTkT.js +1 -0
- package/dist/packem_shared/NetlifyBlobStorage-CO89TGvF.js +1 -0
- package/dist/packem_shared/NoOpMetrics-Dky06sf1.js +1 -0
- package/dist/packem_shared/OneDriveFile-XbVVKIJh.js +1 -0
- package/dist/packem_shared/OneDriveMetaStorage-DS4f83X2.js +1 -0
- package/dist/packem_shared/OneDriveStorage-jAN46vRm.js +1 -0
- package/dist/packem_shared/OpenTelemetryMetrics-9uxQMSlg.js +1 -0
- package/dist/packem_shared/PocketBaseFile-CkAiSBb0.js +1 -0
- package/dist/packem_shared/PocketBaseMetaStorage-B6utPncj.js +1 -0
- package/dist/packem_shared/PocketBaseStorage-DpOjOKAt.js +1 -0
- package/dist/packem_shared/Rest-BuD3ySAg.js +1 -0
- package/dist/packem_shared/Rest-URrQ5FYM.js +1 -0
- package/dist/packem_shared/S3File-BfmCOET4.js +1 -0
- package/dist/packem_shared/S3MetaStorage-vcriiosn.js +1 -0
- package/dist/packem_shared/S3Storage-n1ohEZj4.js +1 -0
- package/dist/packem_shared/SftpFile-CQCxZNVq.js +1 -0
- package/dist/packem_shared/SftpMetaStorage-DYqXwCdM.js +1 -0
- package/dist/packem_shared/SftpStorage-Ban-WN8v.js +1 -0
- package/dist/packem_shared/SharePointFile-BA6X9Sxr.js +1 -0
- package/dist/packem_shared/SharePointMetaStorage-DVM5-X6g.js +1 -0
- package/dist/packem_shared/SharePointStorage-BY90zh1c.js +1 -0
- package/dist/packem_shared/SupabaseFile-DZ1iv9gM.js +1 -0
- package/dist/packem_shared/SupabaseMetaStorage-ivXoYVUu.js +1 -0
- package/dist/packem_shared/SupabaseStorage-pNbHAE1Y.js +1 -0
- package/dist/packem_shared/TUS_RESUMABLE-B7KtPVeC.js +1 -0
- package/dist/packem_shared/Tus-Fp_hx5ug.js +1 -0
- package/dist/packem_shared/Tus-TNG9HAY8.js +1 -0
- package/dist/packem_shared/UploadThingFile-BpG9mE8K.js +1 -0
- package/dist/packem_shared/UploadThingMetaStorage-BvKNzgm7.js +1 -0
- package/dist/packem_shared/UploadThingStorage-BcmIE2dI.js +1 -0
- package/dist/packem_shared/ValidationError-D8KKJiKA.js +1 -0
- package/dist/packem_shared/VercelBlobFile-Cni_1qwD.js +1 -0
- package/dist/packem_shared/VercelBlobMetaStorage-CwaqWucZ.js +1 -0
- package/dist/packem_shared/VercelBlobStorage-s260zfFo.js +1 -0
- package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +1 -0
- package/dist/packem_shared/agentsListFiles-R-CnGKc4.js +1 -0
- package/dist/packem_shared/akamai-BYS9pP8S.js +1 -0
- package/dist/packem_shared/alibaba-BJQ6ijoK.js +1 -0
- package/dist/packem_shared/approval-BBeX3o4E.js +1 -0
- package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
- package/dist/packem_shared/aws-light-meta-storage-CstQBYXG.js +4 -0
- package/dist/packem_shared/azure-meta-storage-C4SrMtT2.js +1 -0
- package/dist/packem_shared/backblaze-CvdtCvJL.js +1 -0
- package/dist/packem_shared/base-handler-core-BYDQditz.js +1 -0
- package/dist/packem_shared/base-handler-fetch-DWzsPkmV.js +1 -0
- package/dist/packem_shared/base-handler-node-Dety2rQB.js +1 -0
- package/dist/packem_shared/cache-qV_5Umeq.js +1 -0
- package/dist/packem_shared/claudeListFiles-DAezbKEi.js +1 -0
- package/dist/packem_shared/cloudflare-Bm_Pg6yx.js +1 -0
- package/dist/packem_shared/createResponsesFileTools-BCep-qdO.js +1 -0
- package/dist/packem_shared/defaultCloudStorageFileNameValidation-shIZX_7L.js +1 -0
- package/dist/packem_shared/detect-file-type-5JhzC9RU.js +1 -0
- package/dist/packem_shared/digitalOcean-Lj1NfDzc.js +1 -0
- package/dist/packem_shared/disk-storage-CKAJvhcj.js +1 -0
- package/dist/packem_shared/disk-storage-with-checksum.d-mHcg2uLw.d.ts +150 -0
- package/dist/packem_shared/executors-DG6hGtvm.js +1 -0
- package/dist/packem_shared/executors.d-X4hz3zfu.d.ts +65 -0
- package/dist/packem_shared/exoscale-O0HzxoDz.js +1 -0
- package/dist/packem_shared/filebase-D-urO4Ob.js +1 -0
- package/dist/packem_shared/gcs-meta-storage-mZiqlX-9.js +1 -0
- package/dist/packem_shared/has-content-Bx2p8Okx.js +1 -0
- package/dist/packem_shared/headers-DC2MEOrK.js +27 -0
- package/dist/packem_shared/hetzner-DDxE7Gy7.js +1 -0
- package/dist/packem_shared/ibmCos-Rx_yku4H.js +1 -0
- package/dist/packem_shared/idriveE2-BFhw0Vwy.js +1 -0
- package/dist/packem_shared/index-B4ETk0Lu.js +5 -0
- package/dist/packem_shared/index.d-C4Fivh4I.d.ts +94 -0
- package/dist/packem_shared/is-expired-1JuZjDtb.js +1 -0
- package/dist/packem_shared/isRetryableError-BhizNeAz.js +1 -0
- package/dist/packem_shared/isValidMediaType-B-2UKjZx.js +1 -0
- package/dist/packem_shared/listFiles-B6VF05d-.js +1 -0
- package/dist/packem_shared/listFiles-BtP6VnUp.js +1 -0
- package/dist/packem_shared/local-meta-storage-Bi0mK6gD.js +1 -0
- package/dist/packem_shared/local-meta-storage.d-B11vHYNm.d.ts +21 -0
- package/dist/packem_shared/media-transformer.d-C3QvECD7.d.ts +331 -0
- package/dist/packem_shared/minio-T_Z3iEy7.js +1 -0
- package/dist/packem_shared/multipart-base-BxckfvQf.js +1 -0
- package/dist/packem_shared/oauth-refresh-Dg2ybc6_.js +1 -0
- package/dist/packem_shared/oracleCloud-D5T9s4JV.js +1 -0
- package/dist/packem_shared/ovhCloud-DCwef2fe.js +1 -0
- package/dist/packem_shared/part-match-B5fLLmFw.js +1 -0
- package/dist/packem_shared/path-D7rMc9nq-B718mbm6.js +1 -0
- package/dist/packem_shared/posix-dirname-CiHXPPnw.js +1 -0
- package/dist/packem_shared/response-builder-Wdo_fvcF.js +1 -0
- package/dist/packem_shared/rest-base-DI7xFXr5.js +1 -0
- package/dist/packem_shared/restOpenApiSpec-PaIVbESh.js +1 -0
- package/dist/packem_shared/s3-base-storage-Dbexfg7p.js +1 -0
- package/dist/packem_shared/s3-base-storage.d-V3N2nKCt.d.ts +260 -0
- package/dist/packem_shared/scaleway-ygRXOss9.js +1 -0
- package/dist/packem_shared/sharedGet-Ce7WGAsc.js +1 -0
- package/dist/packem_shared/storage-Dh0tJh7j.js +1 -0
- package/dist/packem_shared/storage.d-RteRC-cG.d.ts +1106 -0
- package/dist/packem_shared/storj-CVA9mM-7.js +1 -0
- package/dist/packem_shared/tencent-CAcAGaIW.js +1 -0
- package/dist/packem_shared/tigris-wmhjfsH2.js +1 -0
- package/dist/packem_shared/transformOpenApiSpec-C0vEbDTO.js +1 -0
- package/dist/packem_shared/tus-base.d-CygntIPM.d.ts +99 -0
- package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
- package/dist/packem_shared/types.d-ChNXbbHG.d.ts +104 -0
- package/dist/packem_shared/types.d-DxonY4XS.d.ts +720 -0
- package/dist/packem_shared/types.d-cI_cMxcZ.d.ts +49 -0
- package/dist/packem_shared/update-size-DANV7aa2.js +1 -0
- package/dist/packem_shared/vultr-lK9L-sFk.js +1 -0
- package/dist/packem_shared/waitForStorage-ChSBLhLc.js +1 -0
- package/dist/packem_shared/wasabi-JQzxdrFy.js +1 -0
- package/dist/packem_shared/xhrOpenApiSpec-nyoboz83.js +1 -0
- package/dist/packem_shared/yandex-ZwvE77v4.js +1 -0
- package/dist/storage/aws/clients/index.d.ts +612 -6
- package/dist/storage/aws/clients/index.js +1 -6
- package/dist/storage/aws/index.d.ts +321 -4
- package/dist/storage/aws/index.js +1 -3
- package/dist/storage/aws-light/index.d.ts +254 -4
- package/dist/storage/aws-light/index.js +1 -3
- package/dist/storage/azure/index.d.ts +217 -4
- package/dist/storage/azure/index.js +1 -3
- package/dist/storage/box/index.d.ts +189 -0
- package/dist/storage/box/index.js +1 -0
- package/dist/storage/bun-s3/index.d.ts +200 -0
- package/dist/storage/bun-s3/index.js +1 -0
- package/dist/storage/bunny/index.d.ts +119 -0
- package/dist/storage/bunny/index.js +1 -0
- package/dist/storage/cloudinary/index.d.ts +121 -0
- package/dist/storage/cloudinary/index.js +1 -0
- package/dist/storage/dropbox/index.d.ts +132 -0
- package/dist/storage/dropbox/index.js +1 -0
- package/dist/storage/firebase/index.d.ts +192 -0
- package/dist/storage/firebase/index.js +1 -0
- package/dist/storage/ftp/index.d.ts +85 -0
- package/dist/storage/ftp/index.js +1 -0
- package/dist/storage/gcs/index.d.ts +181 -5
- package/dist/storage/gcs/index.js +1 -4
- package/dist/storage/google-drive/index.d.ts +148 -0
- package/dist/storage/google-drive/index.js +1 -0
- package/dist/storage/local/index.d.ts +7 -4
- package/dist/storage/local/index.js +1 -3
- package/dist/storage/netlify-blob/index.d.ts +147 -4
- package/dist/storage/netlify-blob/index.js +1 -3
- package/dist/storage/onedrive/index.d.ts +103 -0
- package/dist/storage/onedrive/index.js +1 -0
- package/dist/storage/pocketbase/index.d.ts +172 -0
- package/dist/storage/pocketbase/index.js +1 -0
- package/dist/storage/sftp/index.d.ts +86 -0
- package/dist/storage/sftp/index.js +1 -0
- package/dist/storage/sharepoint/index.d.ts +180 -0
- package/dist/storage/sharepoint/index.js +1 -0
- package/dist/storage/supabase/index.d.ts +115 -0
- package/dist/storage/supabase/index.js +1 -0
- package/dist/storage/uploadthing/index.d.ts +95 -0
- package/dist/storage/uploadthing/index.js +1 -0
- package/dist/storage/vercel-blob/index.d.ts +189 -4
- package/dist/storage/vercel-blob/index.js +1 -3
- package/dist/transformer/audio-transformer.d.ts +127 -125
- package/dist/transformer/audio-transformer.js +1 -278
- package/dist/transformer/image-transformer.d.ts +573 -568
- package/dist/transformer/image-transformer.js +1 -1100
- package/dist/transformer/index.d.ts +62 -5
- package/dist/transformer/index.js +1 -4
- package/dist/transformer/video-transformer.d.ts +144 -142
- package/dist/transformer/video-transformer.js +1 -310
- package/package.json +195 -47
- package/dist/handler/base/base-handler-core.d.ts +0 -91
- package/dist/handler/base/base-handler-fetch.d.ts +0 -76
- package/dist/handler/base/base-handler-node.d.ts +0 -137
- package/dist/handler/multipart/multipart-base.d.ts +0 -84
- package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
- package/dist/handler/multipart/multipart.d.ts +0 -49
- package/dist/handler/rest/rest-base.d.ts +0 -106
- package/dist/handler/rest/rest-fetch.d.ts +0 -88
- package/dist/handler/rest/rest.d.ts +0 -93
- package/dist/handler/tus/tus-base.d.ts +0 -152
- package/dist/handler/tus/tus-fetch.d.ts +0 -72
- package/dist/handler/tus/tus.d.ts +0 -78
- package/dist/handler/types.d.ts +0 -53
- package/dist/handler/utils/request-parser.d.ts +0 -72
- package/dist/handler/utils/response-builder.d.ts +0 -83
- package/dist/handler/utils/storage-utils.d.ts +0 -10
- package/dist/handler/utils/stream-utils.d.ts +0 -29
- package/dist/handler/utils/upload-handlers.d.ts +0 -76
- package/dist/metrics/index.d.ts +0 -2
- package/dist/metrics/no-op-metrics.d.ts +0 -15
- package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
- package/dist/openapi/rest.d.ts +0 -7
- package/dist/openapi/shared.d.ts +0 -13
- package/dist/openapi/transform.d.ts +0 -3
- package/dist/openapi/tus.d.ts +0 -7
- package/dist/openapi/xhr.d.ts +0 -7
- package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
- package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
- package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
- package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
- package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
- package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
- package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
- package/dist/packem_shared/DiskStorage-BlltBst6.js +0 -12
- package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +0 -238
- package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
- package/dist/packem_shared/File-Bb3P23dr.js +0 -69
- package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
- package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
- package/dist/packem_shared/GCSMetaStorage-BMFEdzJ7.js +0 -7
- package/dist/packem_shared/GCStorage-DnhiwaS9.js +0 -406
- package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
- package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
- package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
- package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
- package/dist/packem_shared/Multipart-CNFK_Okz.js +0 -163
- package/dist/packem_shared/Multipart-CtUL7BQw.js +0 -128
- package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
- package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
- package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
- package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
- package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
- package/dist/packem_shared/Rest-CAOAEkOj.js +0 -267
- package/dist/packem_shared/Rest-DNuLwBrK.js +0 -228
- package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
- package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
- package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
- package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +0 -434
- package/dist/packem_shared/Tus-B8PmlMgR.js +0 -200
- package/dist/packem_shared/Tus-C4F1aYOl.js +0 -195
- package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
- package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
- package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
- package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
- package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
- package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
- package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
- package/dist/packem_shared/base-handler-core-BKuf4YLT.js +0 -303
- package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +0 -291
- package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +0 -730
- package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
- package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
- package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
- package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
- package/dist/packem_shared/disk-storage-Bh2wy3YW.js +0 -810
- package/dist/packem_shared/gcs-meta-storage-0tgMNnPO.js +0 -158
- package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
- package/dist/packem_shared/headers-DoS5nwM-.js +0 -3220
- package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
- package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
- package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
- package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
- package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
- package/dist/packem_shared/multipart-base-B3i67SSX.js +0 -102
- package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
- package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
- package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
- package/dist/packem_shared/rest-base-GRCcnan7.js +0 -457
- package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +0 -800
- package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
- package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
- package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
- package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
- package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
- package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +0 -740
- package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
- package/dist/packem_shared/validator-BeX_lJet.js +0 -78
- package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
- package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
- package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +0 -264
- package/dist/storage/aws/clients/backblaze.d.ts +0 -12
- package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
- package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
- package/dist/storage/aws/clients/minio.d.ts +0 -13
- package/dist/storage/aws/clients/tigris.d.ts +0 -12
- package/dist/storage/aws/clients/types.d.ts +0 -95
- package/dist/storage/aws/clients/wasabi.d.ts +0 -12
- package/dist/storage/aws/s3-base-storage.d.ts +0 -248
- package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
- package/dist/storage/aws/s3-file.d.ts +0 -10
- package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
- package/dist/storage/aws/s3-storage.d.ts +0 -70
- package/dist/storage/aws/types.d.ts +0 -119
- package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
- package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
- package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
- package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
- package/dist/storage/aws-light/types.d.ts +0 -37
- package/dist/storage/azure/azure-file.d.ts +0 -6
- package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
- package/dist/storage/azure/azure-storage.d.ts +0 -69
- package/dist/storage/azure/types.d.ts +0 -62
- package/dist/storage/gcs/fetch-error.d.ts +0 -11
- package/dist/storage/gcs/gcs-config.d.ts +0 -2
- package/dist/storage/gcs/gcs-file.d.ts +0 -6
- package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
- package/dist/storage/gcs/gcs-storage.d.ts +0 -91
- package/dist/storage/gcs/types.d.ts +0 -55
- package/dist/storage/gcs/utils.d.ts +0 -7
- package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
- package/dist/storage/local/disk-storage.d.ts +0 -135
- package/dist/storage/local/local-meta-storage.d.ts +0 -32
- package/dist/storage/meta-storage.d.ts +0 -30
- package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
- package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
- package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
- package/dist/storage/netlify-blob/types.d.ts +0 -30
- package/dist/storage/storage.d.ts +0 -353
- package/dist/storage/types.d.ts +0 -221
- package/dist/storage/utils/file/file.d.ts +0 -25
- package/dist/storage/utils/file/get-file-status.d.ts +0 -9
- package/dist/storage/utils/file/has-content.d.ts +0 -9
- package/dist/storage/utils/file/index.d.ts +0 -10
- package/dist/storage/utils/file/is-expired.d.ts +0 -8
- package/dist/storage/utils/file/metadata.d.ts +0 -18
- package/dist/storage/utils/file/part-match.d.ts +0 -11
- package/dist/storage/utils/file/types.d.ts +0 -37
- package/dist/storage/utils/file/update-metadata.d.ts +0 -10
- package/dist/storage/utils/file/update-size.d.ts +0 -10
- package/dist/storage/vercel-blob/types.d.ts +0 -32
- package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
- package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
- package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
- package/dist/transformer/base-transformer.d.ts +0 -63
- package/dist/transformer/media-transformer.d.ts +0 -332
- package/dist/transformer/types.d.ts +0 -652
- package/dist/transformer/utils.d.ts +0 -33
- package/dist/transformer/validation-error.d.ts +0 -23
- package/dist/utils/cache.d.ts +0 -32
- package/dist/utils/chunked-upload.d.ts +0 -65
- package/dist/utils/detect-file-type.d.ts +0 -28
- package/dist/utils/errors.d.ts +0 -74
- package/dist/utils/file-path-url-matcher.d.ts +0 -18
- package/dist/utils/headers.d.ts +0 -111
- package/dist/utils/http.d.ts +0 -92
- package/dist/utils/locker.d.ts +0 -26
- package/dist/utils/pipes/stream-checksum.d.ts +0 -47
- package/dist/utils/pipes/stream-length.d.ts +0 -22
- package/dist/utils/primitives/get-last-one.d.ts +0 -3
- package/dist/utils/primitives/is-record.d.ts +0 -2
- package/dist/utils/primitives/map-values.d.ts +0 -9
- package/dist/utils/primitives/pick.d.ts +0 -2
- package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
- package/dist/utils/primitives/to-seconds.d.ts +0 -12
- package/dist/utils/range-checksum.d.ts +0 -33
- package/dist/utils/range-hasher.d.ts +0 -46
- package/dist/utils/retry.d.ts +0 -64
- package/dist/utils/types.d.ts +0 -108
- package/dist/utils/validation-error.d.ts +0 -22
- package/dist/utils/validator.d.ts +0 -36
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
import { format } from 'node:url';
|
|
3
|
-
import mime from 'mime';
|
|
4
|
-
import { ErrorMap } from './ERRORS-D0apMqnc.js';
|
|
5
|
-
import { H as HeaderUtilities } from './headers-DoS5nwM-.js';
|
|
6
|
-
import { Readable } from 'node:stream';
|
|
7
|
-
import 'type-is';
|
|
8
|
-
|
|
9
|
-
const getLastOne = (value) => value.at(-1);
|
|
10
|
-
|
|
11
|
-
const extractForwarded = (request) => {
|
|
12
|
-
let proto = "";
|
|
13
|
-
let host = "";
|
|
14
|
-
const header = getHeader(request, "forwarded");
|
|
15
|
-
if (header) {
|
|
16
|
-
const kvPairs = header.split(";");
|
|
17
|
-
kvPairs.forEach((kv) => {
|
|
18
|
-
const [token, value] = kv.split("=");
|
|
19
|
-
if (token === "proto") {
|
|
20
|
-
proto = value;
|
|
21
|
-
}
|
|
22
|
-
if (token === "host") {
|
|
23
|
-
host = value;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return { host, proto };
|
|
28
|
-
};
|
|
29
|
-
const readBody = (request, encoding = "utf8", limit) => new Promise((resolve, reject) => {
|
|
30
|
-
let body = "";
|
|
31
|
-
request.setEncoding(encoding);
|
|
32
|
-
request.on("data", (chunk) => {
|
|
33
|
-
if (body.length + chunk.length > limit) {
|
|
34
|
-
return reject(new Error("Request body length limit exceeded"));
|
|
35
|
-
}
|
|
36
|
-
body += chunk;
|
|
37
|
-
});
|
|
38
|
-
request.once("end", () => resolve(body));
|
|
39
|
-
});
|
|
40
|
-
const getHeader = (request, name, all = false) => {
|
|
41
|
-
const raw = request.headers?.[name.toLowerCase()];
|
|
42
|
-
if (!raw || raw.length === 0) {
|
|
43
|
-
return "";
|
|
44
|
-
}
|
|
45
|
-
if (all) {
|
|
46
|
-
return raw.toString().trim();
|
|
47
|
-
}
|
|
48
|
-
const array = Array.isArray(raw) ? raw : raw.split(",");
|
|
49
|
-
return getLastOne(array).trim();
|
|
50
|
-
};
|
|
51
|
-
const appendHeader = (response, name, value) => {
|
|
52
|
-
const s = [response.getHeader(name), value].flat().filter(Boolean).toString();
|
|
53
|
-
response.setHeader(name, s);
|
|
54
|
-
};
|
|
55
|
-
const setHeaders = (response, headers = {}) => {
|
|
56
|
-
const keys = Object.keys(headers);
|
|
57
|
-
if (keys.length > 0) {
|
|
58
|
-
appendHeader(response, "Access-Control-Expose-Headers", keys);
|
|
59
|
-
}
|
|
60
|
-
keys.forEach((key) => {
|
|
61
|
-
if (["link", "location"].includes(key.toLowerCase())) {
|
|
62
|
-
response.setHeader(key, encodeURI(headers[key].toString()));
|
|
63
|
-
} else {
|
|
64
|
-
response.setHeader(key, headers[key]);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
const extractHost = (request) => getHeader(request, "host") || getHeader(request, "x-forwarded-host");
|
|
69
|
-
const extractProto = (request) => getHeader(request, "x-forwarded-proto").toLowerCase();
|
|
70
|
-
const getBaseUrl = (request) => {
|
|
71
|
-
let { host, proto } = extractForwarded(request);
|
|
72
|
-
host ||= extractHost(request);
|
|
73
|
-
proto ||= extractProto(request);
|
|
74
|
-
if (!host) {
|
|
75
|
-
return "";
|
|
76
|
-
}
|
|
77
|
-
return proto ? `${proto}://${host}` : `//${host}`;
|
|
78
|
-
};
|
|
79
|
-
const getRealPath = (request) => {
|
|
80
|
-
let realPath = (request.originalUrl || request.url || "").split("?")[0];
|
|
81
|
-
if (!realPath) {
|
|
82
|
-
throw new TypeError("Invalid request URL");
|
|
83
|
-
}
|
|
84
|
-
if (!realPath.startsWith("/")) {
|
|
85
|
-
realPath = `/${realPath}`;
|
|
86
|
-
}
|
|
87
|
-
if (realPath.startsWith("http")) {
|
|
88
|
-
const url = new URL(realPath);
|
|
89
|
-
realPath = url.pathname;
|
|
90
|
-
}
|
|
91
|
-
return realPath;
|
|
92
|
-
};
|
|
93
|
-
const uuidRegex = /(?:[\dA-Z]+-){2}[\dA-Z]+/i;
|
|
94
|
-
const getIdFromRequest = (request) => {
|
|
95
|
-
const realPath = getRealPath(request);
|
|
96
|
-
const segments = realPath.split("/").filter(Boolean);
|
|
97
|
-
if (segments.length === 0) {
|
|
98
|
-
throw new Error("Invalid request URL");
|
|
99
|
-
}
|
|
100
|
-
for (let index = segments.length - 1; index >= 0; index -= 1) {
|
|
101
|
-
const segment = segments[index];
|
|
102
|
-
if (!segment) {
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
const cleanSegment = segment.replace(/\.[^/.]+$/, "");
|
|
106
|
-
const commonPathNames2 = ["files", "metadata", "upload", "download", "http-rest", "http-rest-chunked"];
|
|
107
|
-
if (commonPathNames2.includes(cleanSegment.toLowerCase())) {
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (uuidRegex.test(cleanSegment)) {
|
|
111
|
-
return cleanSegment;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
const lastSegment = segments[segments.length - 1];
|
|
115
|
-
if (!lastSegment) {
|
|
116
|
-
throw new Error("Invalid request URL");
|
|
117
|
-
}
|
|
118
|
-
const cleanLastSegment = lastSegment.replace(/\.[^/.]+$/, "");
|
|
119
|
-
const commonPathNames = ["files", "metadata", "upload", "download", "http-rest", "http-rest-chunked"];
|
|
120
|
-
if (commonPathNames.includes(cleanLastSegment.toLowerCase())) {
|
|
121
|
-
throw new Error("Invalid request URL");
|
|
122
|
-
}
|
|
123
|
-
if (cleanLastSegment.length < 8) {
|
|
124
|
-
throw new Error("Invalid request URL");
|
|
125
|
-
}
|
|
126
|
-
if (segments.length > 1) {
|
|
127
|
-
return cleanLastSegment;
|
|
128
|
-
}
|
|
129
|
-
throw new Error("Invalid request URL");
|
|
130
|
-
};
|
|
131
|
-
const getRequestStream = (request) => {
|
|
132
|
-
if ("body" in request && request.body && typeof request.body.getReader === "function") {
|
|
133
|
-
return Readable.fromWeb(request.body);
|
|
134
|
-
}
|
|
135
|
-
if ("body" in request && request.body && request.body instanceof Uint8Array) {
|
|
136
|
-
return Readable.from(Buffer.from(request.body));
|
|
137
|
-
}
|
|
138
|
-
if (request instanceof Readable) {
|
|
139
|
-
return request;
|
|
140
|
-
}
|
|
141
|
-
return Readable.from(new Uint8Array(0));
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
const pick = (object, whitelist) => {
|
|
145
|
-
const result = {};
|
|
146
|
-
whitelist.forEach((key) => {
|
|
147
|
-
result[key] = object[key];
|
|
148
|
-
});
|
|
149
|
-
return result;
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
class BaseHandlerCore extends EventEmitter {
|
|
153
|
-
/**
|
|
154
|
-
* Response body type for the handler.
|
|
155
|
-
*/
|
|
156
|
-
responseType = "json";
|
|
157
|
-
/**
|
|
158
|
-
* Storage instance for file operations.
|
|
159
|
-
*/
|
|
160
|
-
storage;
|
|
161
|
-
/**
|
|
162
|
-
* Optional media transformer for image/video processing.
|
|
163
|
-
*/
|
|
164
|
-
mediaTransformer;
|
|
165
|
-
/**
|
|
166
|
-
* Whether to disable termination for finished uploads.
|
|
167
|
-
*/
|
|
168
|
-
disableTerminationForFinishedUploads;
|
|
169
|
-
/**
|
|
170
|
-
* Logger instance for debugging and error reporting.
|
|
171
|
-
*/
|
|
172
|
-
logger;
|
|
173
|
-
/**
|
|
174
|
-
* Gets the logger instance.
|
|
175
|
-
* @returns Logger instance or undefined.
|
|
176
|
-
*/
|
|
177
|
-
get loggerInstance() {
|
|
178
|
-
return this.logger;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Internal error responses configuration.
|
|
182
|
-
*/
|
|
183
|
-
internalErrorResponses = {};
|
|
184
|
-
/**
|
|
185
|
-
* Gets the error responses configuration.
|
|
186
|
-
* @returns Error responses configuration.
|
|
187
|
-
*/
|
|
188
|
-
get errorResponses() {
|
|
189
|
-
return this.internalErrorResponses;
|
|
190
|
-
}
|
|
191
|
-
constructor({ disableTerminationForFinishedUploads, mediaTransformer, storage }) {
|
|
192
|
-
super();
|
|
193
|
-
this.storage = storage;
|
|
194
|
-
this.mediaTransformer = mediaTransformer;
|
|
195
|
-
this.disableTerminationForFinishedUploads = disableTerminationForFinishedUploads;
|
|
196
|
-
this.logger = this.storage?.logger;
|
|
197
|
-
this.assembleErrors();
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Sets custom error responses.
|
|
201
|
-
* @param value Partial error responses to override defaults.
|
|
202
|
-
*/
|
|
203
|
-
set errorResponses(value) {
|
|
204
|
-
this.assembleErrors(value);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Assemble error responses by merging defaults with custom overrides.
|
|
208
|
-
* @param customErrors Custom error responses to override defaults
|
|
209
|
-
*/
|
|
210
|
-
assembleErrors = (customErrors = {}) => {
|
|
211
|
-
this.internalErrorResponses = {
|
|
212
|
-
...ErrorMap,
|
|
213
|
-
...this.internalErrorResponses,
|
|
214
|
-
...this.storage.errorResponses,
|
|
215
|
-
...customErrors
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
/**
|
|
219
|
-
* Parses HTTP Range header and returns start/end byte positions for partial content requests.
|
|
220
|
-
* @param rangeHeader HTTP Range header value (e.g., "bytes=0-1023").
|
|
221
|
-
* @param fileSize Total size of the file in bytes.
|
|
222
|
-
* @returns Object with start and end positions, or undefined if range is invalid.
|
|
223
|
-
*/
|
|
224
|
-
// eslint-disable-next-line class-methods-use-this
|
|
225
|
-
parseRangeHeader(rangeHeader, fileSize) {
|
|
226
|
-
if (!rangeHeader || !rangeHeader.startsWith("bytes=")) {
|
|
227
|
-
return void 0;
|
|
228
|
-
}
|
|
229
|
-
const ranges = rangeHeader.slice(6).split(",");
|
|
230
|
-
if (ranges.length !== 1) {
|
|
231
|
-
return void 0;
|
|
232
|
-
}
|
|
233
|
-
const range = ranges[0]?.trim();
|
|
234
|
-
if (!range) {
|
|
235
|
-
return void 0;
|
|
236
|
-
}
|
|
237
|
-
const parts = range.split("-");
|
|
238
|
-
if (parts.length !== 2) {
|
|
239
|
-
return void 0;
|
|
240
|
-
}
|
|
241
|
-
const [startString, endString] = parts;
|
|
242
|
-
let start;
|
|
243
|
-
let end;
|
|
244
|
-
if (startString && endString) {
|
|
245
|
-
start = Number.parseInt(startString, 10);
|
|
246
|
-
end = Number.parseInt(endString, 10);
|
|
247
|
-
} else if (startString && !endString) {
|
|
248
|
-
start = Number.parseInt(startString, 10);
|
|
249
|
-
end = fileSize - 1;
|
|
250
|
-
} else if (!startString && endString) {
|
|
251
|
-
const suffixLength = Number.parseInt(endString, 10);
|
|
252
|
-
start = Math.max(0, fileSize - suffixLength);
|
|
253
|
-
end = fileSize - 1;
|
|
254
|
-
} else {
|
|
255
|
-
return void 0;
|
|
256
|
-
}
|
|
257
|
-
if (Number.isNaN(start) || Number.isNaN(end) || start >= fileSize || end >= fileSize || start > end) {
|
|
258
|
-
return void 0;
|
|
259
|
-
}
|
|
260
|
-
return { end, start };
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Build file URL from request and file data.
|
|
264
|
-
* Platform-agnostic version that accepts URL string.
|
|
265
|
-
* @param requestUrl Request URL string
|
|
266
|
-
* @param file File object containing ID and content type
|
|
267
|
-
* @returns Constructed file URL with extension based on content type
|
|
268
|
-
*/
|
|
269
|
-
buildFileUrlFromString(requestUrl, file) {
|
|
270
|
-
const url = new URL(requestUrl, "http://localhost");
|
|
271
|
-
const { pathname } = url;
|
|
272
|
-
const query = Object.fromEntries(url.searchParams.entries());
|
|
273
|
-
const relative = format({ pathname: `${pathname}/${file.id}`, query });
|
|
274
|
-
const baseUrl = this.storage.config.useRelativeLocation ? "" : getBaseUrl({ });
|
|
275
|
-
return `${baseUrl}${relative}.${mime.getExtension(file.contentType)}`;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Negotiates content type based on Accept header and supported formats.
|
|
279
|
-
* Platform-agnostic version that accepts header string.
|
|
280
|
-
* @param acceptHeader Accept header value
|
|
281
|
-
* @param supportedTypes Array of supported MIME types to match against
|
|
282
|
-
* @returns Best matching content type or undefined if no match found
|
|
283
|
-
*/
|
|
284
|
-
// eslint-disable-next-line class-methods-use-this
|
|
285
|
-
negotiateContentTypeFromHeader(acceptHeader, supportedTypes) {
|
|
286
|
-
if (!acceptHeader) {
|
|
287
|
-
return void 0;
|
|
288
|
-
}
|
|
289
|
-
return HeaderUtilities.getPreferredMediaType(acceptHeader, supportedTypes);
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Check for undefined ID or path errors and throw appropriate HTTP errors.
|
|
293
|
-
* @param error The error to check
|
|
294
|
-
*/
|
|
295
|
-
// eslint-disable-next-line class-methods-use-this
|
|
296
|
-
checkForUndefinedIdOrPath(error) {
|
|
297
|
-
if (error instanceof Error && ["Id is undefined", "Invalid request URL", "Path is undefined"].includes(error.message)) {
|
|
298
|
-
throw error;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export { BaseHandlerCore as B, getHeader as a, getRequestStream as b, getBaseUrl as c, getRealPath as d, getIdFromRequest as g, pick as p, readBody as r, setHeaders as s, uuidRegex as u };
|
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import { H as HeaderUtilities, h as httpErrorsExports } from './headers-DoS5nwM-.js';
|
|
2
|
-
import { ERRORS, isUploadError } from './ERRORS-D0apMqnc.js';
|
|
3
|
-
import { B as BaseHandlerCore, p as pick } from './base-handler-core-BKuf4YLT.js';
|
|
4
|
-
import { i as isValidationError } from './validator-BeX_lJet.js';
|
|
5
|
-
import { waitForStorage } from './waitForStorage-Cscw85sx.js';
|
|
6
|
-
|
|
7
|
-
class BaseHandlerFetch extends BaseHandlerCore {
|
|
8
|
-
/**
|
|
9
|
-
* Limiting enabled HTTP method handler.
|
|
10
|
-
*/
|
|
11
|
-
static methods = ["delete", "get", "head", "options", "patch", "post", "put"];
|
|
12
|
-
/**
|
|
13
|
-
* Map of registered HTTP method handlers.
|
|
14
|
-
*/
|
|
15
|
-
registeredHandlers = /* @__PURE__ */ new Map();
|
|
16
|
-
constructor(options) {
|
|
17
|
-
super(options);
|
|
18
|
-
this.compose();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Gets the registered handlers map.
|
|
22
|
-
* @returns Map of registered handlers.
|
|
23
|
-
*/
|
|
24
|
-
get handlers() {
|
|
25
|
-
return this.registeredHandlers;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Handles Web API Fetch requests (for Hono, Cloudflare Workers, etc.).
|
|
29
|
-
* @param request Web API Request object.
|
|
30
|
-
* @returns Promise resolving to Web API Response.
|
|
31
|
-
*/
|
|
32
|
-
async fetch(request) {
|
|
33
|
-
this.logger?.debug("[fetch request]: %s %s", request.method, request.url);
|
|
34
|
-
const handler = this.registeredHandlers.get(request.method || "GET");
|
|
35
|
-
if (!handler) {
|
|
36
|
-
return this.createErrorResponse({ UploadErrorCode: ERRORS.METHOD_NOT_ALLOWED });
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
await waitForStorage(this.storage);
|
|
40
|
-
} catch {
|
|
41
|
-
return this.createErrorResponse({ UploadErrorCode: ERRORS.STORAGE_ERROR });
|
|
42
|
-
}
|
|
43
|
-
try {
|
|
44
|
-
const file = await handler.call(this, request);
|
|
45
|
-
return this.handleFetchResponse(request, file);
|
|
46
|
-
} catch (error) {
|
|
47
|
-
const errorObject = error instanceof Error ? error : new Error(String(error));
|
|
48
|
-
const uError = pick(errorObject, ["name", ...Object.getOwnPropertyNames(errorObject)]);
|
|
49
|
-
const errorEvent = {
|
|
50
|
-
...uError,
|
|
51
|
-
request: {
|
|
52
|
-
headers: Object.fromEntries(request.headers.entries()),
|
|
53
|
-
method: request.method,
|
|
54
|
-
url: request.url
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
if (this.listenerCount("error") > 0) {
|
|
58
|
-
this.emit("error", errorEvent);
|
|
59
|
-
}
|
|
60
|
-
this.logger?.error("[fetch error]: %O", errorEvent);
|
|
61
|
-
return this.createErrorResponse(errorObject);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Handle the response from handlers for fetch requests and convert to Web API Response.
|
|
66
|
-
* @param request Web API Request object
|
|
67
|
-
* @param file Response file or list from handler
|
|
68
|
-
* @returns Promise resolving to Web API Response object
|
|
69
|
-
*/
|
|
70
|
-
async handleFetchResponse(request, file) {
|
|
71
|
-
if (request.method === "HEAD" || request.method === "OPTIONS") {
|
|
72
|
-
const { headers: headers2, statusCode: statusCode2 } = file;
|
|
73
|
-
return new Response(void 0, {
|
|
74
|
-
headers: this.convertHeaders({
|
|
75
|
-
...headers2,
|
|
76
|
-
"Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control"
|
|
77
|
-
}),
|
|
78
|
-
status: statusCode2
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (request.method === "GET") {
|
|
82
|
-
const { headers: headers2, statusCode: statusCode2 } = file;
|
|
83
|
-
let body = "";
|
|
84
|
-
if (file.content !== void 0) {
|
|
85
|
-
body = new Uint8Array(file.content);
|
|
86
|
-
} else if (typeof file === "object" && "data" in file) {
|
|
87
|
-
body = JSON.stringify(file.data);
|
|
88
|
-
}
|
|
89
|
-
return new Response(body, {
|
|
90
|
-
headers: this.convertHeaders({
|
|
91
|
-
...headers2,
|
|
92
|
-
"Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control"
|
|
93
|
-
}),
|
|
94
|
-
status: statusCode2
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
const { headers, statusCode, ...basicFile } = file;
|
|
98
|
-
if (basicFile.status !== void 0 && this.listenerCount(basicFile.status) > 0) {
|
|
99
|
-
this.emit(basicFile.status, {
|
|
100
|
-
...basicFile,
|
|
101
|
-
request: {
|
|
102
|
-
headers: Object.fromEntries(request.headers.entries()),
|
|
103
|
-
method: request.method,
|
|
104
|
-
url: request.url
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
if (basicFile.status === "completed") {
|
|
109
|
-
const responseFile = file;
|
|
110
|
-
if (responseFile.headers === void 0) {
|
|
111
|
-
responseFile.headers = {};
|
|
112
|
-
}
|
|
113
|
-
if (responseFile.statusCode === void 0) {
|
|
114
|
-
responseFile.statusCode = 200;
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
await this.storage.onComplete(basicFile, responseFile);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
this.logger?.error("[onComplete error]: %O", error);
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
const { headers: responseFileHeaders2, statusCode: responseFileStatusCode, ...fileData } = responseFile;
|
|
123
|
-
const { content, stream, ...cleanFileData } = fileData;
|
|
124
|
-
return this.createResponse({
|
|
125
|
-
body: cleanFileData,
|
|
126
|
-
headers: responseFileHeaders2 || headers,
|
|
127
|
-
statusCode: responseFileStatusCode || statusCode || 200
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
const allHeaders = {
|
|
131
|
-
...headers,
|
|
132
|
-
...file.headers
|
|
133
|
-
};
|
|
134
|
-
const convertedHeaders = this.convertHeaders({
|
|
135
|
-
...allHeaders,
|
|
136
|
-
"Access-Control-Expose-Headers": "location,upload-expires,upload-offset,upload-length,upload-metadata,upload-defer-length,tus-resumable,tus-extension,tus-max-size,tus-version,tus-checksum-algorithm,cache-control",
|
|
137
|
-
...basicFile.hash === void 0 ? {} : { [`X-Range-${basicFile.hash?.algorithm.toUpperCase()}`]: basicFile.hash?.value }
|
|
138
|
-
});
|
|
139
|
-
const responseFileHeaders = file.headers || {};
|
|
140
|
-
if (responseFileHeaders.Location && !convertedHeaders.location && !convertedHeaders.Location) {
|
|
141
|
-
convertedHeaders.location = String(responseFileHeaders.Location);
|
|
142
|
-
} else if (responseFileHeaders.location && !convertedHeaders.location && !convertedHeaders.Location) {
|
|
143
|
-
convertedHeaders.location = String(responseFileHeaders.location);
|
|
144
|
-
} else if (headers.Location && !convertedHeaders.location && !convertedHeaders.Location) {
|
|
145
|
-
convertedHeaders.location = String(headers.Location);
|
|
146
|
-
} else if (headers.location && !convertedHeaders.location && !convertedHeaders.Location) {
|
|
147
|
-
convertedHeaders.location = String(headers.location);
|
|
148
|
-
}
|
|
149
|
-
let responseBody;
|
|
150
|
-
if (statusCode >= 200 && statusCode < 300) {
|
|
151
|
-
responseBody = Object.keys(basicFile).length > 0 ? { ...basicFile } : {};
|
|
152
|
-
if ("content" in responseBody) {
|
|
153
|
-
delete responseBody.content;
|
|
154
|
-
}
|
|
155
|
-
if ("stream" in responseBody) {
|
|
156
|
-
delete responseBody.stream;
|
|
157
|
-
}
|
|
158
|
-
if (Object.keys(responseBody).length === 0) {
|
|
159
|
-
responseBody = {};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return this.createResponse({
|
|
163
|
-
body: responseBody,
|
|
164
|
-
headers: convertedHeaders,
|
|
165
|
-
statusCode: statusCode || 200
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Convert headers to Web API Headers format by flattening arrays and converting to strings.
|
|
170
|
-
* @param headers Headers object with potentially array values
|
|
171
|
-
* @returns Headers object with all values as strings
|
|
172
|
-
*/
|
|
173
|
-
// eslint-disable-next-line class-methods-use-this
|
|
174
|
-
convertHeaders(headers) {
|
|
175
|
-
const result = {};
|
|
176
|
-
for (const [key, value] of Object.entries(headers)) {
|
|
177
|
-
result[key] = Array.isArray(value) ? value.join(", ") : String(value);
|
|
178
|
-
}
|
|
179
|
-
return result;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Create Web API Response from UploadResponse object.
|
|
183
|
-
* @param uploadResponse Upload response containing body, headers, and status code
|
|
184
|
-
* @returns Web API Response object
|
|
185
|
-
*/
|
|
186
|
-
createResponse(uploadResponse) {
|
|
187
|
-
const { body, headers = {}, statusCode } = uploadResponse;
|
|
188
|
-
let responseBody;
|
|
189
|
-
if (statusCode === 204) {
|
|
190
|
-
responseBody = null;
|
|
191
|
-
} else if (typeof body === "string") {
|
|
192
|
-
responseBody = body;
|
|
193
|
-
} else if (body instanceof Buffer) {
|
|
194
|
-
responseBody = new Uint8Array(body);
|
|
195
|
-
} else if (body && typeof body === "object") {
|
|
196
|
-
responseBody = JSON.stringify(body);
|
|
197
|
-
if (!headers["Content-Type"]) {
|
|
198
|
-
headers["Content-Type"] = HeaderUtilities.createContentType({
|
|
199
|
-
charset: "utf8",
|
|
200
|
-
mediaType: "application/json"
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
} else if (body === void 0 && statusCode !== void 0 && statusCode >= 200 && statusCode < 300) {
|
|
204
|
-
responseBody = "{}";
|
|
205
|
-
if (!headers["Content-Type"]) {
|
|
206
|
-
headers["Content-Type"] = HeaderUtilities.createContentType({
|
|
207
|
-
charset: "utf8",
|
|
208
|
-
mediaType: "application/json"
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return new Response(responseBody, {
|
|
213
|
-
headers: this.convertHeaders(headers),
|
|
214
|
-
status: statusCode
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Create error Response from Error object with appropriate status code and message.
|
|
219
|
-
* @param error Error object to convert to HTTP error response
|
|
220
|
-
* @returns Web API Response object with error details
|
|
221
|
-
*/
|
|
222
|
-
async createErrorResponse(error) {
|
|
223
|
-
let httpError;
|
|
224
|
-
if (isUploadError(error)) {
|
|
225
|
-
httpError = this.internalErrorResponses[error.UploadErrorCode];
|
|
226
|
-
} else if (!isValidationError(error) && !httpErrorsExports.isHttpError(error)) {
|
|
227
|
-
httpError = this.storage.normalizeError(error);
|
|
228
|
-
} else {
|
|
229
|
-
httpError = {
|
|
230
|
-
...error,
|
|
231
|
-
code: error.code || error.name,
|
|
232
|
-
headers: error.headers || {},
|
|
233
|
-
message: error.message,
|
|
234
|
-
name: error.name,
|
|
235
|
-
statusCode: error.statusCode || 500
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
await this.storage.onError(httpError);
|
|
239
|
-
let errorResponse;
|
|
240
|
-
if (httpError.body) {
|
|
241
|
-
if (typeof httpError.body === "object" && httpError.body !== null) {
|
|
242
|
-
errorResponse = { body: httpError.body, headers: httpError.headers, statusCode: httpError.statusCode };
|
|
243
|
-
} else {
|
|
244
|
-
errorResponse = {
|
|
245
|
-
body: {
|
|
246
|
-
error: {
|
|
247
|
-
code: httpError.code || httpError.name || "Error",
|
|
248
|
-
message: httpError.body || httpError.message || "Unknown error",
|
|
249
|
-
name: httpError.name || "Error"
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
headers: httpError.headers,
|
|
253
|
-
statusCode: httpError.statusCode || 500
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
} else {
|
|
257
|
-
errorResponse = {
|
|
258
|
-
body: {
|
|
259
|
-
error: {
|
|
260
|
-
code: httpError.code || httpError.name || "Error",
|
|
261
|
-
message: httpError.message || "Unknown error",
|
|
262
|
-
name: httpError.name || "Error"
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
headers: httpError.headers,
|
|
266
|
-
statusCode: httpError.statusCode || 500
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
return this.createResponse(errorResponse);
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Build file URL from request and file data.
|
|
273
|
-
* @param request Web API Request object
|
|
274
|
-
* @param file File object containing ID and content type
|
|
275
|
-
* @returns Constructed file URL with extension based on content type
|
|
276
|
-
*/
|
|
277
|
-
buildFileUrl(request, file) {
|
|
278
|
-
return this.buildFileUrlFromString(request.url, file);
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Negotiates content type based on Accept header and supported formats.
|
|
282
|
-
* @param request Web API Request object containing Accept header.
|
|
283
|
-
* @param supportedTypes Array of supported MIME types to match against.
|
|
284
|
-
* @returns Best matching content type or undefined if no match found.
|
|
285
|
-
*/
|
|
286
|
-
negotiateContentType(request, supportedTypes) {
|
|
287
|
-
return super.negotiateContentTypeFromHeader(request.headers.get("accept") || void 0, supportedTypes);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
export { BaseHandlerFetch as B };
|