@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,97 +0,0 @@
|
|
|
1
|
-
var ERRORS = /* @__PURE__ */ ((ERRORS2) => {
|
|
2
|
-
ERRORS2["BAD_REQUEST"] = "BadRequest";
|
|
3
|
-
ERRORS2["CHECKSUM_MISMATCH"] = "ChecksumMismatch";
|
|
4
|
-
ERRORS2["FILE_CONFLICT"] = "FileConflict";
|
|
5
|
-
ERRORS2["FILE_ERROR"] = "FileError";
|
|
6
|
-
ERRORS2["FILE_LOCKED"] = "FileLocked";
|
|
7
|
-
ERRORS2["FILE_NOT_ALLOWED"] = "FileNotAllowed";
|
|
8
|
-
ERRORS2["FILE_NOT_FOUND"] = "FileNotFound";
|
|
9
|
-
ERRORS2["FORBIDDEN"] = "Forbidden";
|
|
10
|
-
ERRORS2["GONE"] = "Gone";
|
|
11
|
-
ERRORS2["INVALID_FILE_NAME"] = "InvalidFileName";
|
|
12
|
-
ERRORS2["INVALID_FILE_SIZE"] = "InvalidFileSize";
|
|
13
|
-
ERRORS2["INVALID_RANGE"] = "InvalidRange";
|
|
14
|
-
ERRORS2["INVALID_TYPE"] = "Invalidtype";
|
|
15
|
-
ERRORS2["METHOD_NOT_ALLOWED"] = "MethodNotAllowed";
|
|
16
|
-
ERRORS2["REQUEST_ABORTED"] = "RequestAborted";
|
|
17
|
-
ERRORS2["REQUEST_ENTITY_TOO_LARGE"] = "RequestEntityTooLarge";
|
|
18
|
-
ERRORS2["STORAGE_BUSY"] = "StorageBusy";
|
|
19
|
-
ERRORS2["STORAGE_ERROR"] = "StorageError";
|
|
20
|
-
ERRORS2["TOO_MANY_REQUESTS"] = "TooManyRequests";
|
|
21
|
-
ERRORS2["UNKNOWN_ERROR"] = "UnknownError";
|
|
22
|
-
ERRORS2["UNPROCESSABLE_ENTITY"] = "UnprocessableEntity";
|
|
23
|
-
ERRORS2["UNSUPPORTED_CHECKSUM_ALGORITHM"] = "UnsupportedChecksumAlgorithm";
|
|
24
|
-
ERRORS2["UNSUPPORTED_MEDIA_TYPE"] = "UnsupportedMediaType";
|
|
25
|
-
return ERRORS2;
|
|
26
|
-
})(ERRORS || {});
|
|
27
|
-
const ErrorMap = (() => {
|
|
28
|
-
const errors = {
|
|
29
|
-
BadRequest: [400, "Bad request"],
|
|
30
|
-
ChecksumMismatch: [460, "Checksum mismatch"],
|
|
31
|
-
FileConflict: [409, "File conflict"],
|
|
32
|
-
FileError: [500, "Something went wrong writing the file"],
|
|
33
|
-
FileLocked: [423, "File locked"],
|
|
34
|
-
FileNotAllowed: [403, "File not allowed"],
|
|
35
|
-
FileNotFound: [404, "Not found"],
|
|
36
|
-
Forbidden: [403, "Authenticated user is not allowed access"],
|
|
37
|
-
Gone: [410, "The file for this url no longer exists"],
|
|
38
|
-
InvalidFileName: [400, "Invalid file name or it cannot be retrieved"],
|
|
39
|
-
InvalidFileSize: [400, "File size cannot be retrieved"],
|
|
40
|
-
InvalidRange: [400, "Invalid or missing content-range header"],
|
|
41
|
-
Invalidtype: [400, 'Invalid or missing "content-type" header'],
|
|
42
|
-
MethodNotAllowed: [405, "Method not allowed"],
|
|
43
|
-
RequestAborted: [499, "Request aborted"],
|
|
44
|
-
RequestEntityTooLarge: [413, "Request entity too large"],
|
|
45
|
-
StorageBusy: [503, "Storage is busy"],
|
|
46
|
-
StorageError: [503, "Storage error"],
|
|
47
|
-
TooManyRequests: [429, "Too many requests"],
|
|
48
|
-
UnknownError: [500, "Something went wrong"],
|
|
49
|
-
UnprocessableEntity: [422, "Validation failed"],
|
|
50
|
-
UnsupportedChecksumAlgorithm: [400, "Unsupported checksum algorithm"],
|
|
51
|
-
UnsupportedMediaType: [415, "Unsupported media type"]
|
|
52
|
-
};
|
|
53
|
-
const errorMap = {};
|
|
54
|
-
Object.keys(errors).forEach((code) => {
|
|
55
|
-
const [statusCode, message] = errors[code];
|
|
56
|
-
errorMap[code] = { code, message, statusCode };
|
|
57
|
-
});
|
|
58
|
-
return errorMap;
|
|
59
|
-
})();
|
|
60
|
-
class UploadError extends Error {
|
|
61
|
-
name = "UploadError";
|
|
62
|
-
/** The standardized error code from the ERRORS enum */
|
|
63
|
-
UploadErrorCode = "UnknownError" /* UNKNOWN_ERROR */;
|
|
64
|
-
/** Optional additional error details */
|
|
65
|
-
detail;
|
|
66
|
-
/**
|
|
67
|
-
* Creates a new UploadError instance.
|
|
68
|
-
* @param code Standardized error code (defaults to UNKNOWN_ERROR)
|
|
69
|
-
* @param message Human-readable error message (defaults to the code)
|
|
70
|
-
* @param detail Optional additional error details
|
|
71
|
-
*/
|
|
72
|
-
constructor(code = "UnknownError" /* UNKNOWN_ERROR */, message, detail) {
|
|
73
|
-
super(message || code);
|
|
74
|
-
this.name = "UploadError";
|
|
75
|
-
this.detail = detail;
|
|
76
|
-
if (Object.values(ERRORS).includes(code)) {
|
|
77
|
-
this.UploadErrorCode = code;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
const isUploadError = (error) => !!error.UploadErrorCode;
|
|
82
|
-
const throwErrorCode = (UploadErrorCode, detail) => {
|
|
83
|
-
const errorCode = UploadErrorCode;
|
|
84
|
-
let errorResponse;
|
|
85
|
-
if (errorCode && typeof errorCode === "string" && errorCode in ErrorMap) {
|
|
86
|
-
errorResponse = ErrorMap[errorCode];
|
|
87
|
-
}
|
|
88
|
-
const message = detail || (errorResponse?.body && typeof errorResponse.body === "object" && "message" in errorResponse.body ? errorResponse.body.message : void 0) || errorResponse?.message || "UnknownError" /* UNKNOWN_ERROR */;
|
|
89
|
-
const error = new UploadError(errorCode, message);
|
|
90
|
-
error.UploadErrorCode = errorCode;
|
|
91
|
-
if (typeof detail === "string") {
|
|
92
|
-
error.detail = detail;
|
|
93
|
-
}
|
|
94
|
-
throw error;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
export { ERRORS, ErrorMap, UploadError, isUploadError, throwErrorCode };
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import fnv1a from '@sindresorhus/fnv1a';
|
|
2
|
-
import { nanoid } from 'nanoid';
|
|
3
|
-
|
|
4
|
-
const hash = (value) => fnv1a(value, { size: 64 }).toString(16);
|
|
5
|
-
const extractMimeType = (meta) => {
|
|
6
|
-
if (typeof meta.mimeType === "string") {
|
|
7
|
-
return meta.mimeType;
|
|
8
|
-
}
|
|
9
|
-
if (typeof meta.type === "string") {
|
|
10
|
-
return meta.type;
|
|
11
|
-
}
|
|
12
|
-
if (typeof meta.filetype === "string") {
|
|
13
|
-
return meta.filetype;
|
|
14
|
-
}
|
|
15
|
-
return void 0;
|
|
16
|
-
};
|
|
17
|
-
const extractOriginalName = (meta) => {
|
|
18
|
-
if (typeof meta.name === "string") {
|
|
19
|
-
return meta.name;
|
|
20
|
-
}
|
|
21
|
-
if (typeof meta.title === "string") {
|
|
22
|
-
return meta.title;
|
|
23
|
-
}
|
|
24
|
-
if (typeof meta.originalName === "string") {
|
|
25
|
-
return meta.originalName;
|
|
26
|
-
}
|
|
27
|
-
if (typeof meta.filename === "string") {
|
|
28
|
-
return meta.filename;
|
|
29
|
-
}
|
|
30
|
-
return void 0;
|
|
31
|
-
};
|
|
32
|
-
const generateFileId = (file) => {
|
|
33
|
-
const { metadata, originalName, size } = file;
|
|
34
|
-
const mtime = String(metadata.lastModified ?? Date.now());
|
|
35
|
-
return [originalName, size, mtime].filter(Boolean).map(String).map((value) => hash(value)).join("-");
|
|
36
|
-
};
|
|
37
|
-
class File {
|
|
38
|
-
bytesWritten = Number.NaN;
|
|
39
|
-
contentType;
|
|
40
|
-
originalName;
|
|
41
|
-
id;
|
|
42
|
-
metadata;
|
|
43
|
-
name = "";
|
|
44
|
-
size;
|
|
45
|
-
status;
|
|
46
|
-
expiredAt;
|
|
47
|
-
createdAt;
|
|
48
|
-
modifiedAt;
|
|
49
|
-
hash;
|
|
50
|
-
content;
|
|
51
|
-
ETag;
|
|
52
|
-
constructor({ contentType, expiredAt, metadata = {}, originalName, size }) {
|
|
53
|
-
this.metadata = metadata;
|
|
54
|
-
this.originalName = originalName || extractOriginalName(metadata) || (this.id = nanoid());
|
|
55
|
-
this.contentType = contentType || extractMimeType(metadata) || "application/octet-stream";
|
|
56
|
-
this.expiredAt = expiredAt;
|
|
57
|
-
if (typeof size === "string" || typeof size === "number") {
|
|
58
|
-
this.size = Number(size);
|
|
59
|
-
} else if (typeof metadata.size === "string" || typeof metadata.size === "number") {
|
|
60
|
-
this.size = Number(metadata.size);
|
|
61
|
-
}
|
|
62
|
-
if (typeof this.size === "number" && this.size <= 0) {
|
|
63
|
-
this.size = void 0;
|
|
64
|
-
}
|
|
65
|
-
this.id ||= generateFileId(this);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export { File as default };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const GCSConfig = {
|
|
2
|
-
authScopes: [
|
|
3
|
-
"https://www.googleapis.com/auth/iam",
|
|
4
|
-
"https://www.googleapis.com/auth/cloud-platform",
|
|
5
|
-
"https://www.googleapis.com/auth/devstorage.full_control"
|
|
6
|
-
],
|
|
7
|
-
storageAPI: "https://storage.googleapis.com/storage/v1/b",
|
|
8
|
-
uploadAPI: "https://storage.googleapis.com/upload/storage/v1/b"
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export { GCSConfig as default };
|
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { request } from 'gaxios';
|
|
3
|
-
import { GoogleAuth } from 'google-auth-library';
|
|
4
|
-
import { r as retryOptions, G as GCSMetaStorage, g as getRangeEnd, p as package_, b as buildContentRange } from './gcs-meta-storage-0tgMNnPO.js';
|
|
5
|
-
import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
|
|
6
|
-
import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
|
|
7
|
-
import { B as BaseStorage, t as toMilliseconds } from './storage-C6NSXb8h.js';
|
|
8
|
-
import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
|
|
9
|
-
import GCSConfig from './GCSConfig-vPP22kN6.js';
|
|
10
|
-
import GCSFile from './GCSFile-BIEunhAN.js';
|
|
11
|
-
import { h as hasContent } from './has-content-CY66ehMK.js';
|
|
12
|
-
|
|
13
|
-
class FetchError extends Error {
|
|
14
|
-
constructor(message, code, config) {
|
|
15
|
-
super(message);
|
|
16
|
-
this.code = code;
|
|
17
|
-
this.config = config;
|
|
18
|
-
}
|
|
19
|
-
name = "FetchError";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const validateStatus = (code) => code >= 200 && code < 300 || code === 308 || code === 499;
|
|
23
|
-
class GCStorage extends BaseStorage {
|
|
24
|
-
static name = "gcs";
|
|
25
|
-
checksumTypes = ["md5", "crc32c"];
|
|
26
|
-
meta;
|
|
27
|
-
bucket;
|
|
28
|
-
authClient;
|
|
29
|
-
storageBaseURI;
|
|
30
|
-
uploadBaseURI;
|
|
31
|
-
isCustomEndpoint = false;
|
|
32
|
-
retryOptions = {};
|
|
33
|
-
useAuthWithCustomEndpoint;
|
|
34
|
-
userProject;
|
|
35
|
-
constructor(config) {
|
|
36
|
-
super(config);
|
|
37
|
-
const bucketName = config.bucket || process.env.GCS_BUCKET;
|
|
38
|
-
if (!bucketName) {
|
|
39
|
-
throw new Error("GCS bucket is not defined");
|
|
40
|
-
}
|
|
41
|
-
if (!config.projectId) {
|
|
42
|
-
throw new Error("Sorry, we cannot connect to Cloud Services without a project ID.");
|
|
43
|
-
}
|
|
44
|
-
this.bucket = bucketName;
|
|
45
|
-
this.storageBaseURI = `${config.storageAPI || GCSConfig.storageAPI}/${this.bucket}/o`;
|
|
46
|
-
this.uploadBaseURI = `${config.uploadAPI || GCSConfig.uploadAPI}/${this.bucket}/o`;
|
|
47
|
-
this.isCustomEndpoint = new URL(this.storageBaseURI).hostname !== "storage.googleapis.com";
|
|
48
|
-
const { retryOptions: retryOptions$1, useAuthWithCustomEndpoint, userProject } = config;
|
|
49
|
-
this.userProject = userProject;
|
|
50
|
-
this.useAuthWithCustomEndpoint = useAuthWithCustomEndpoint || false;
|
|
51
|
-
this.retryOptions = {
|
|
52
|
-
...retryOptions,
|
|
53
|
-
...retryOptions$1
|
|
54
|
-
};
|
|
55
|
-
config.scopes ||= GCSConfig.authScopes;
|
|
56
|
-
this.authClient = new GoogleAuth(config);
|
|
57
|
-
const { bucket, metaStorage, metaStorageConfig, projectId } = config;
|
|
58
|
-
if (metaStorage) {
|
|
59
|
-
this.meta = metaStorage;
|
|
60
|
-
} else {
|
|
61
|
-
let metaConfig = { ...config, ...metaStorageConfig, logger: this.logger };
|
|
62
|
-
const localMeta = "directory" in metaConfig;
|
|
63
|
-
if (localMeta) {
|
|
64
|
-
this.logger?.debug("Using local meta storage");
|
|
65
|
-
this.meta = new LocalMetaStorage(metaConfig);
|
|
66
|
-
} else {
|
|
67
|
-
if (bucket === metaConfig.bucket && projectId === metaConfig.projectId) {
|
|
68
|
-
metaConfig = { ...metaConfig, authClient: this.authClient };
|
|
69
|
-
}
|
|
70
|
-
this.meta = new GCSMetaStorage(metaConfig);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
this.isReady = false;
|
|
74
|
-
this.accessCheck().then(() => {
|
|
75
|
-
this.isReady = true;
|
|
76
|
-
return void 0;
|
|
77
|
-
}).catch((error) => {
|
|
78
|
-
this.logger?.error("Storage access check failed: %O", error);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
normalizeError(error) {
|
|
82
|
-
if (error.config) {
|
|
83
|
-
const statusCode = +error.code || 500;
|
|
84
|
-
return {
|
|
85
|
-
code: `GCS${statusCode}`,
|
|
86
|
-
message: error.message,
|
|
87
|
-
name: error.name,
|
|
88
|
-
retryable: statusCode >= 499,
|
|
89
|
-
statusCode
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
code: "GenericUploadError",
|
|
94
|
-
message: `[${this.constructor.name}] ${error.message}`,
|
|
95
|
-
name: error.name,
|
|
96
|
-
statusCode: 500
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
async create(config) {
|
|
100
|
-
return this.instrumentOperation("create", async () => {
|
|
101
|
-
const processedConfig = { ...config };
|
|
102
|
-
if (config.ttl) {
|
|
103
|
-
const ttlMs = typeof config.ttl === "string" ? toMilliseconds(config.ttl) : config.ttl;
|
|
104
|
-
if (ttlMs !== void 0) {
|
|
105
|
-
processedConfig.expiredAt = Date.now() + ttlMs;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
const file = new GCSFile(processedConfig);
|
|
109
|
-
file.name = this.namingFunction(file);
|
|
110
|
-
await this.validate(file);
|
|
111
|
-
try {
|
|
112
|
-
const existing = await this.getMeta(file.id);
|
|
113
|
-
existing.bytesWritten = await this.internalWrite(existing);
|
|
114
|
-
return existing;
|
|
115
|
-
} catch {
|
|
116
|
-
}
|
|
117
|
-
const headers = {
|
|
118
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
119
|
-
"X-Goog-Upload-Command": "start",
|
|
120
|
-
"X-Goog-Upload-Protocol": "resumable",
|
|
121
|
-
"X-Upload-Content-Length": file.size.toString(),
|
|
122
|
-
"X-Upload-Content-Type": file.contentType
|
|
123
|
-
};
|
|
124
|
-
const options = {
|
|
125
|
-
body: JSON.stringify({ metadata: file.metadata }),
|
|
126
|
-
headers,
|
|
127
|
-
method: "POST",
|
|
128
|
-
params: { name: file.name, size: file.size, uploadType: "resumable" },
|
|
129
|
-
url: this.uploadBaseURI
|
|
130
|
-
};
|
|
131
|
-
const response = await this.makeRequest(options);
|
|
132
|
-
if (response.status !== 200) {
|
|
133
|
-
throw new Error("Expected 200 response from GCS");
|
|
134
|
-
}
|
|
135
|
-
const hdr = response.headers.get("X-Goog-Upload-Status") || response.headers.get("x-goog-upload-status");
|
|
136
|
-
if (hdr !== "active") {
|
|
137
|
-
throw new Error(`X-Goog-Upload-Status response header expected 'active' got: ${hdr}`);
|
|
138
|
-
}
|
|
139
|
-
file.uri = response.headers.get("location");
|
|
140
|
-
if (this.config.clientDirectUpload) {
|
|
141
|
-
file.GCSUploadURI = file.uri;
|
|
142
|
-
this.logger?.debug("send uploadURI to client: %s", file.GCSUploadURI);
|
|
143
|
-
file.status = "created";
|
|
144
|
-
return file;
|
|
145
|
-
}
|
|
146
|
-
file.bytesWritten = 0;
|
|
147
|
-
await this.saveMeta(file);
|
|
148
|
-
file.status = "created";
|
|
149
|
-
await this.onCreate(file);
|
|
150
|
-
return file;
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
async write(part) {
|
|
154
|
-
return this.instrumentOperation("write", async () => {
|
|
155
|
-
let file;
|
|
156
|
-
if ("contentType" in part && "metadata" in part && !("body" in part) && !("start" in part)) {
|
|
157
|
-
file = part;
|
|
158
|
-
} else {
|
|
159
|
-
file = await this.getMeta(part.id);
|
|
160
|
-
await this.checkIfExpired(file);
|
|
161
|
-
}
|
|
162
|
-
if (file.status === "completed") {
|
|
163
|
-
return file;
|
|
164
|
-
}
|
|
165
|
-
if (!partMatch(part, file)) {
|
|
166
|
-
return throwErrorCode(ERRORS.FILE_CONFLICT);
|
|
167
|
-
}
|
|
168
|
-
await this.lock(part.id);
|
|
169
|
-
try {
|
|
170
|
-
if (hasContent(part) && (file.bytesWritten === 0 || Number.isNaN(file.bytesWritten)) && (!file.contentType || file.contentType === "application/octet-stream")) {
|
|
171
|
-
try {
|
|
172
|
-
const { fileType, stream: detectedStream } = await detectFileTypeFromStream(part.body);
|
|
173
|
-
if (fileType?.mime) {
|
|
174
|
-
file.contentType = fileType.mime;
|
|
175
|
-
}
|
|
176
|
-
part.body = detectedStream;
|
|
177
|
-
} catch {
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
file.bytesWritten = await this.internalWrite({ ...file, ...part });
|
|
181
|
-
file.status = getFileStatus(file);
|
|
182
|
-
if (file.status === "completed") {
|
|
183
|
-
file.uri = `${this.storageBaseURI}/${file.name}`;
|
|
184
|
-
await this.internalOnComplete(file);
|
|
185
|
-
}
|
|
186
|
-
} finally {
|
|
187
|
-
await this.unlock(part.id);
|
|
188
|
-
}
|
|
189
|
-
return file;
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Deletes an upload and its metadata.
|
|
194
|
-
* @param query File query containing the file ID to delete.
|
|
195
|
-
* @param query.id File ID to delete.
|
|
196
|
-
* @returns Promise resolving to the deleted file object with status: "deleted".
|
|
197
|
-
* @throws {UploadError} If the file metadata cannot be found.
|
|
198
|
-
*/
|
|
199
|
-
async delete({ id }) {
|
|
200
|
-
return this.instrumentOperation("delete", async () => {
|
|
201
|
-
const file = await this.getMeta(id);
|
|
202
|
-
if (!file.uri) {
|
|
203
|
-
throw new Error(`File ${id} does not have a valid URI`);
|
|
204
|
-
}
|
|
205
|
-
file.status = "deleted";
|
|
206
|
-
await Promise.all([this.makeRequest({ method: "DELETE", url: file.uri, validateStatus }), this.deleteMeta(file.id)]);
|
|
207
|
-
const deletedFile = { ...file };
|
|
208
|
-
await this.onDelete(deletedFile);
|
|
209
|
-
return deletedFile;
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Copies an upload file to a new location.
|
|
214
|
-
* @param name Source file name/ID.
|
|
215
|
-
* @param destination Destination file name/ID.
|
|
216
|
-
* @returns Promise resolving to the copied file object.
|
|
217
|
-
* @throws {UploadError} If the source file cannot be found.
|
|
218
|
-
*/
|
|
219
|
-
async copy(name, destination) {
|
|
220
|
-
return this.instrumentOperation("copy", async () => {
|
|
221
|
-
const baseUrl = new URL(`/${this.bucket}/${name}`, "file://");
|
|
222
|
-
const resolvedUrl = new URL(encodeURI(destination), baseUrl);
|
|
223
|
-
const newPath = resolvedUrl.pathname;
|
|
224
|
-
const [, bucket, ...pathSegments] = newPath.split("/");
|
|
225
|
-
const filename = pathSegments.join("/");
|
|
226
|
-
const url = `${this.storageBaseURI}/${name}/rewriteTo/b/${bucket}/o/${filename}`;
|
|
227
|
-
let progress = {};
|
|
228
|
-
const requestOptions = {
|
|
229
|
-
body: "",
|
|
230
|
-
headers: { "Content-Type": "application/json" },
|
|
231
|
-
method: "POST",
|
|
232
|
-
url
|
|
233
|
-
};
|
|
234
|
-
do {
|
|
235
|
-
requestOptions.body = progress.rewriteToken ? JSON.stringify({ rewriteToken: progress.rewriteToken }) : "";
|
|
236
|
-
const response = await this.makeRequest(requestOptions);
|
|
237
|
-
progress = response.data || {};
|
|
238
|
-
} while (progress.rewriteToken);
|
|
239
|
-
return await this.getMeta(destination);
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Moves an upload file to a new location.
|
|
244
|
-
* @param name Source file name/ID.
|
|
245
|
-
* @param destination Destination file name/ID.
|
|
246
|
-
* @returns Promise resolving to the moved file object.
|
|
247
|
-
* @throws {UploadError} If the source file cannot be found.
|
|
248
|
-
*/
|
|
249
|
-
async move(name, destination) {
|
|
250
|
-
return this.instrumentOperation("move", async () => {
|
|
251
|
-
const copiedFile = await this.copy(name, destination);
|
|
252
|
-
const url = `${this.storageBaseURI}/${name}`;
|
|
253
|
-
await this.makeRequest({ method: "DELETE", url });
|
|
254
|
-
return copiedFile;
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Gets an uploaded file by ID with content buffer.
|
|
259
|
-
* @param query File query object containing the file ID.
|
|
260
|
-
* @param query.id Unique identifier of the file to retrieve.
|
|
261
|
-
* @returns Promise resolving to file object with content buffer.
|
|
262
|
-
* @throws {UploadError} If the file cannot be found (ERRORS.FILE_NOT_FOUND) or has expired (ERRORS.GONE).
|
|
263
|
-
*/
|
|
264
|
-
async get({ id }) {
|
|
265
|
-
return this.instrumentOperation("get", async () => {
|
|
266
|
-
const { data } = await this.makeRequest({ params: { alt: "json" }, url: `${this.storageBaseURI}/${id}` });
|
|
267
|
-
await this.checkIfExpired({ expiredAt: data.timeDeleted });
|
|
268
|
-
if (!data.uri) {
|
|
269
|
-
throw new Error("File URI not found");
|
|
270
|
-
}
|
|
271
|
-
const response = await this.makeRequest({ params: { alt: "media" }, url: data.uri });
|
|
272
|
-
const responseData = response.data;
|
|
273
|
-
let bufferData;
|
|
274
|
-
if (typeof responseData === "string") {
|
|
275
|
-
bufferData = Buffer.from(responseData, "utf8");
|
|
276
|
-
} else if (responseData && typeof responseData === "object" && "data" in responseData) {
|
|
277
|
-
const dataValue = responseData.data;
|
|
278
|
-
bufferData = Buffer.from(dataValue);
|
|
279
|
-
} else {
|
|
280
|
-
bufferData = Buffer.from(responseData);
|
|
281
|
-
}
|
|
282
|
-
return {
|
|
283
|
-
...data,
|
|
284
|
-
content: bufferData
|
|
285
|
-
};
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Checks if a file exists by verifying both metadata and the actual GCS object.
|
|
290
|
-
* Returns true only if both the metadata and the GCS object exist.
|
|
291
|
-
* @param query File query containing the file ID to check.
|
|
292
|
-
* @returns Promise resolving to true if both metadata and GCS object exist, false otherwise.
|
|
293
|
-
*/
|
|
294
|
-
async exists({ id }) {
|
|
295
|
-
return this.instrumentOperation("exists", async () => {
|
|
296
|
-
try {
|
|
297
|
-
await this.getMeta(id);
|
|
298
|
-
await this.makeRequest({
|
|
299
|
-
method: "HEAD",
|
|
300
|
-
url: `${this.storageBaseURI}/${id}`
|
|
301
|
-
});
|
|
302
|
-
return true;
|
|
303
|
-
} catch (error) {
|
|
304
|
-
const errorWithStatus = error;
|
|
305
|
-
const statusCode = errorWithStatus.status || errorWithStatus.response?.status;
|
|
306
|
-
if (statusCode === 404) {
|
|
307
|
-
return false;
|
|
308
|
-
}
|
|
309
|
-
return false;
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
async list(limit = 1e3) {
|
|
314
|
-
return this.instrumentOperation(
|
|
315
|
-
"list",
|
|
316
|
-
async () => {
|
|
317
|
-
const items = [];
|
|
318
|
-
let truncated = true;
|
|
319
|
-
let parameters = { params: { maxResults: limit }, url: this.storageBaseURI };
|
|
320
|
-
while (truncated) {
|
|
321
|
-
try {
|
|
322
|
-
const { data } = await this.makeRequest(parameters);
|
|
323
|
-
(data?.items || []).forEach(({ name, timeCreated, updated }) => {
|
|
324
|
-
items.push({
|
|
325
|
-
createdAt: timeCreated,
|
|
326
|
-
id: name,
|
|
327
|
-
modifiedAt: updated
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
truncated = data?.nextPageToken !== void 0;
|
|
331
|
-
if (truncated) {
|
|
332
|
-
parameters = { ...parameters, params: { ...parameters.params, pageToken: data.nextPageToken } };
|
|
333
|
-
}
|
|
334
|
-
} catch (error) {
|
|
335
|
-
const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
336
|
-
await this.onError(httpError);
|
|
337
|
-
throw error;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return items;
|
|
341
|
-
},
|
|
342
|
-
{ limit }
|
|
343
|
-
);
|
|
344
|
-
}
|
|
345
|
-
async internalWrite(part) {
|
|
346
|
-
const { body, bytesWritten, size, uri = "" } = part;
|
|
347
|
-
const contentRange = buildContentRange(part);
|
|
348
|
-
const options = { method: "PUT" };
|
|
349
|
-
if (body?.on) {
|
|
350
|
-
const abortController = new AbortController();
|
|
351
|
-
body.on("aborted", () => abortController.abort());
|
|
352
|
-
options.body = body;
|
|
353
|
-
options.signal = abortController.signal;
|
|
354
|
-
}
|
|
355
|
-
options.headers = {
|
|
356
|
-
Accept: "application/json",
|
|
357
|
-
"Content-Range": contentRange,
|
|
358
|
-
...size === bytesWritten ? { "X-Goog-Upload-Command": "upload, finalize" } : {}
|
|
359
|
-
};
|
|
360
|
-
try {
|
|
361
|
-
const response = await this.makeRequest({ url: uri, ...options });
|
|
362
|
-
if (response.status === 308) {
|
|
363
|
-
const range = response.headers.get("range");
|
|
364
|
-
return range ? getRangeEnd(range) : 0;
|
|
365
|
-
}
|
|
366
|
-
if (response.status === 200) {
|
|
367
|
-
this.logger?.debug("uploaded %O", response.data);
|
|
368
|
-
return size;
|
|
369
|
-
}
|
|
370
|
-
throw new FetchError(String(response.data), `GCS${response.status}`, { uri });
|
|
371
|
-
} catch (error) {
|
|
372
|
-
this.logger?.error(uri, error);
|
|
373
|
-
const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
374
|
-
await this.onError(httpError);
|
|
375
|
-
throw error;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
internalOnComplete = (file) => this.deleteMeta(file.id);
|
|
379
|
-
async makeRequest(data) {
|
|
380
|
-
if (typeof data.url === "string") {
|
|
381
|
-
data.url = data.url.replaceAll("/:", ":");
|
|
382
|
-
}
|
|
383
|
-
data = {
|
|
384
|
-
...data,
|
|
385
|
-
headers: {
|
|
386
|
-
"User-Agent": `${package_.name}/${package_.version}`,
|
|
387
|
-
"x-goog-api-client": `gl-node/${process.versions.node} gccl/${package_.version} gccl-invocation-id/${randomUUID()}`
|
|
388
|
-
},
|
|
389
|
-
params: {
|
|
390
|
-
...this.userProject === void 0 ? {} : { userProject: this.userProject }
|
|
391
|
-
},
|
|
392
|
-
retry: true,
|
|
393
|
-
retryConfig: this.retryOptions,
|
|
394
|
-
timeout: 6e4
|
|
395
|
-
};
|
|
396
|
-
if (this.isCustomEndpoint && !this.useAuthWithCustomEndpoint) {
|
|
397
|
-
return request(data);
|
|
398
|
-
}
|
|
399
|
-
return this.authClient.request(data);
|
|
400
|
-
}
|
|
401
|
-
async accessCheck() {
|
|
402
|
-
return this.makeRequest({ url: this.storageBaseURI.replace("/o", "") });
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
export { GCStorage as default };
|