express-storage 2.0.2 → 3.0.0
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/README.md +366 -34
- package/dist/cjs/config/index.d.ts +10 -0
- package/dist/cjs/config/index.d.ts.map +1 -0
- package/dist/cjs/config/index.js +19 -0
- package/dist/cjs/config/index.js.map +1 -0
- package/dist/cjs/drivers/azure.driver.d.ts +73 -0
- package/dist/cjs/drivers/azure.driver.d.ts.map +1 -0
- package/dist/cjs/drivers/azure.driver.js +390 -0
- package/dist/cjs/drivers/azure.driver.js.map +1 -0
- package/dist/cjs/drivers/base.driver.d.ts +136 -0
- package/dist/cjs/drivers/base.driver.d.ts.map +1 -0
- package/dist/cjs/drivers/base.driver.js +357 -0
- package/dist/cjs/drivers/base.driver.js.map +1 -0
- package/dist/{drivers → cjs/drivers}/gcs.driver.d.ts +20 -38
- package/dist/cjs/drivers/gcs.driver.d.ts.map +1 -0
- package/dist/cjs/drivers/gcs.driver.js +343 -0
- package/dist/cjs/drivers/gcs.driver.js.map +1 -0
- package/dist/cjs/drivers/index.d.ts +15 -0
- package/dist/cjs/drivers/index.d.ts.map +1 -0
- package/dist/cjs/drivers/index.js +26 -0
- package/dist/cjs/drivers/index.js.map +1 -0
- package/dist/cjs/drivers/local.driver.d.ts +86 -0
- package/dist/cjs/drivers/local.driver.d.ts.map +1 -0
- package/dist/cjs/drivers/local.driver.js +556 -0
- package/dist/cjs/drivers/local.driver.js.map +1 -0
- package/dist/{drivers → cjs/drivers}/s3.driver.d.ts +19 -39
- package/dist/cjs/drivers/s3.driver.d.ts.map +1 -0
- package/dist/cjs/drivers/s3.driver.js +400 -0
- package/dist/cjs/drivers/s3.driver.js.map +1 -0
- package/dist/cjs/factory/driver.factory.d.ts +43 -0
- package/dist/cjs/factory/driver.factory.d.ts.map +1 -0
- package/dist/cjs/factory/driver.factory.js +101 -0
- package/dist/cjs/factory/driver.factory.js.map +1 -0
- package/dist/cjs/index.d.ts +26 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/storage-manager.d.ts +210 -0
- package/dist/cjs/storage-manager.d.ts.map +1 -0
- package/dist/cjs/storage-manager.js +649 -0
- package/dist/cjs/storage-manager.js.map +1 -0
- package/dist/cjs/types/storage.types.d.ts +438 -0
- package/dist/cjs/types/storage.types.d.ts.map +1 -0
- package/dist/cjs/types/storage.types.js +3 -0
- package/dist/cjs/types/storage.types.js.map +1 -0
- package/dist/cjs/utils/config.utils.d.ts.map +1 -0
- package/dist/cjs/utils/config.utils.js +213 -0
- package/dist/cjs/utils/config.utils.js.map +1 -0
- package/dist/{utils → cjs/utils}/file.utils.d.ts +62 -8
- package/dist/cjs/utils/file.utils.d.ts.map +1 -0
- package/dist/cjs/utils/file.utils.js +464 -0
- package/dist/cjs/utils/file.utils.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +12 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +36 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/rate-limiter.d.ts +40 -0
- package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cjs/utils/rate-limiter.js +87 -0
- package/dist/cjs/utils/rate-limiter.js.map +1 -0
- package/dist/esm/config/index.d.ts +10 -0
- package/dist/esm/config/index.d.ts.map +1 -0
- package/dist/esm/config/index.js +10 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/drivers/azure.driver.d.ts +73 -0
- package/dist/esm/drivers/azure.driver.d.ts.map +1 -0
- package/dist/esm/drivers/azure.driver.js +353 -0
- package/dist/esm/drivers/azure.driver.js.map +1 -0
- package/dist/esm/drivers/base.driver.d.ts +136 -0
- package/dist/esm/drivers/base.driver.d.ts.map +1 -0
- package/dist/esm/drivers/base.driver.js +350 -0
- package/dist/esm/drivers/base.driver.js.map +1 -0
- package/dist/esm/drivers/gcs.driver.d.ts +68 -0
- package/dist/esm/drivers/gcs.driver.d.ts.map +1 -0
- package/dist/esm/drivers/gcs.driver.js +306 -0
- package/dist/esm/drivers/gcs.driver.js.map +1 -0
- package/dist/esm/drivers/index.d.ts +15 -0
- package/dist/esm/drivers/index.d.ts.map +1 -0
- package/dist/esm/drivers/index.js +15 -0
- package/dist/esm/drivers/index.js.map +1 -0
- package/dist/esm/drivers/local.driver.d.ts +86 -0
- package/dist/esm/drivers/local.driver.d.ts.map +1 -0
- package/dist/esm/drivers/local.driver.js +549 -0
- package/dist/esm/drivers/local.driver.js.map +1 -0
- package/dist/esm/drivers/s3.driver.d.ts +69 -0
- package/dist/esm/drivers/s3.driver.d.ts.map +1 -0
- package/dist/esm/drivers/s3.driver.js +363 -0
- package/dist/esm/drivers/s3.driver.js.map +1 -0
- package/dist/esm/factory/driver.factory.d.ts +43 -0
- package/dist/esm/factory/driver.factory.d.ts.map +1 -0
- package/dist/esm/factory/driver.factory.js +92 -0
- package/dist/esm/factory/driver.factory.js.map +1 -0
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/storage-manager.d.ts +210 -0
- package/dist/esm/storage-manager.d.ts.map +1 -0
- package/dist/esm/storage-manager.js +645 -0
- package/dist/esm/storage-manager.js.map +1 -0
- package/dist/esm/types/storage.types.d.ts +438 -0
- package/dist/esm/types/storage.types.d.ts.map +1 -0
- package/dist/esm/types/storage.types.js.map +1 -0
- package/dist/esm/utils/config.utils.d.ts +45 -0
- package/dist/esm/utils/config.utils.d.ts.map +1 -0
- package/dist/esm/utils/config.utils.js.map +1 -0
- package/dist/esm/utils/file.utils.d.ts +196 -0
- package/dist/esm/utils/file.utils.d.ts.map +1 -0
- package/dist/esm/utils/file.utils.js +439 -0
- package/dist/esm/utils/file.utils.js.map +1 -0
- package/dist/esm/utils/index.d.ts +12 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +11 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/rate-limiter.d.ts +40 -0
- package/dist/esm/utils/rate-limiter.d.ts.map +1 -0
- package/dist/esm/utils/rate-limiter.js +82 -0
- package/dist/esm/utils/rate-limiter.js.map +1 -0
- package/package.json +90 -52
- package/src/config/index.ts +17 -0
- package/src/drivers/azure.driver.ts +434 -0
- package/src/drivers/base.driver.ts +436 -0
- package/src/drivers/gcs.driver.ts +366 -0
- package/src/drivers/index.ts +15 -0
- package/src/drivers/local.driver.ts +626 -0
- package/src/drivers/s3.driver.ts +459 -0
- package/src/factory/driver.factory.ts +101 -0
- package/src/index.ts +72 -0
- package/src/storage-manager.ts +801 -0
- package/src/types/storage.types.ts +561 -0
- package/src/utils/config.utils.ts +229 -0
- package/src/utils/file.utils.ts +536 -0
- package/src/utils/index.ts +35 -0
- package/src/utils/rate-limiter.ts +94 -0
- package/dist/drivers/azure.driver.d.ts +0 -88
- package/dist/drivers/azure.driver.d.ts.map +0 -1
- package/dist/drivers/azure.driver.js +0 -391
- package/dist/drivers/azure.driver.js.map +0 -1
- package/dist/drivers/base.driver.d.ts +0 -170
- package/dist/drivers/base.driver.d.ts.map +0 -1
- package/dist/drivers/base.driver.js +0 -347
- package/dist/drivers/base.driver.js.map +0 -1
- package/dist/drivers/gcs.driver.d.ts.map +0 -1
- package/dist/drivers/gcs.driver.js +0 -354
- package/dist/drivers/gcs.driver.js.map +0 -1
- package/dist/drivers/local.driver.d.ts +0 -107
- package/dist/drivers/local.driver.d.ts.map +0 -1
- package/dist/drivers/local.driver.js +0 -621
- package/dist/drivers/local.driver.js.map +0 -1
- package/dist/drivers/s3.driver.d.ts.map +0 -1
- package/dist/drivers/s3.driver.js +0 -387
- package/dist/drivers/s3.driver.js.map +0 -1
- package/dist/factory/driver.factory.d.ts +0 -62
- package/dist/factory/driver.factory.d.ts.map +0 -1
- package/dist/factory/driver.factory.js +0 -177
- package/dist/factory/driver.factory.js.map +0 -1
- package/dist/index.d.ts +0 -30
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -33
- package/dist/index.js.map +0 -1
- package/dist/storage-manager.d.ts +0 -228
- package/dist/storage-manager.d.ts.map +0 -1
- package/dist/storage-manager.js +0 -715
- package/dist/storage-manager.js.map +0 -1
- package/dist/types/storage.types.d.ts +0 -295
- package/dist/types/storage.types.d.ts.map +0 -1
- package/dist/types/storage.types.js.map +0 -1
- package/dist/utils/config.utils.d.ts.map +0 -1
- package/dist/utils/config.utils.js.map +0 -1
- package/dist/utils/file.utils.d.ts.map +0 -1
- package/dist/utils/file.utils.js +0 -278
- package/dist/utils/file.utils.js.map +0 -1
- /package/dist/{utils → cjs/utils}/config.utils.d.ts +0 -0
- /package/dist/{types → esm/types}/storage.types.js +0 -0
- /package/dist/{utils → esm/utils}/config.utils.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.factory.js","sourceRoot":"","sources":["../../../src/factory/driver.factory.ts"],"names":[],"mappings":";;;;;;AAcA,oCAgBC;AAKD,kDAUC;AA7CD,oDAA4B;AAE5B,gEAAgE;AAChE,0DAA0D;AAC1D,4DAA4D;AAC5D,gEAAgE;AAEhE;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,MAAqB;IAChD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,IAAI,oCAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC;QACV,KAAK,cAAc;YACjB,OAAO,IAAI,8BAAe,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,KAAK,CAAC;QACX,KAAK,eAAe;YAClB,OAAO,IAAI,gCAAgB,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,OAAO,CAAC;QACb,KAAK,iBAAiB;YACpB,OAAO,IAAI,oCAAkB,CAAC,MAAM,CAAC,CAAC;QACxC;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO;QACL,OAAO;QACP,IAAI;QACJ,cAAc;QACd,KAAK;QACL,eAAe;QACf,OAAO;QACP,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAa,oBAAoB;IACd,OAAO,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE1D,UAAU,CAAC,MAAqB;QACtC,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAED,WAAW,CAAC,MAAqB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,mBAAmB;QACxB,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;CACF;AArCD,oDAqCC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Express Storage
|
|
3
|
+
*
|
|
4
|
+
* Unified file upload and storage management for Express.js.
|
|
5
|
+
* One API for local disk, AWS S3, Google Cloud Storage, and Azure Blob Storage.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import { StorageManager } from 'express-storage';
|
|
9
|
+
*
|
|
10
|
+
* const storage = new StorageManager({ driver: 'local' });
|
|
11
|
+
* const result = await storage.uploadFile(req.file);
|
|
12
|
+
*
|
|
13
|
+
* if (result.success) {
|
|
14
|
+
* console.log(result.reference); // stored file path
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* // Advanced imports:
|
|
18
|
+
* // import { withRetry, formatFileSize } from 'express-storage/utils';
|
|
19
|
+
* // import { BaseStorageDriver } from 'express-storage/drivers';
|
|
20
|
+
* // import { validateStorageConfig } from 'express-storage/config';
|
|
21
|
+
*/
|
|
22
|
+
export { StorageManager } from './storage-manager.js';
|
|
23
|
+
export { InMemoryRateLimiter } from './utils/rate-limiter.js';
|
|
24
|
+
export type { StorageDriver, StorageErrorCode, FileUploadResult, FileUploadSuccess, FileUploadError, DeleteResult, DeleteSuccess, DeleteError, PresignedUrlResult, PresignedUrlSuccess, PresignedUrlError, PresignedUploadUrlResult, PresignedUploadUrlSuccess, PresignedViewUrlResult, PresignedViewUrlSuccess, BlobValidationResult, BlobValidationSuccess, BlobValidationError, ListFilesResult, ListFilesSuccess, ListFilesError, StorageConfig, PublicStorageConfig, StorageOptions, StorageCredentials, FileValidationOptions, UploadOptions, FileMetadata, IStorageDriver, ValidationResult, EnvironmentConfig, BlobValidationOptions, FileInfo, Logger, RateLimitOptions, RateLimiterAdapter, StorageHooks, HookErrorContext, BatchOptions, } from './types/storage.types.js';
|
|
25
|
+
export type { RetryOptions, ConcurrencyOptions } from './utils/file.utils.js';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Express Storage
|
|
4
|
+
*
|
|
5
|
+
* Unified file upload and storage management for Express.js.
|
|
6
|
+
* One API for local disk, AWS S3, Google Cloud Storage, and Azure Blob Storage.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* import { StorageManager } from 'express-storage';
|
|
10
|
+
*
|
|
11
|
+
* const storage = new StorageManager({ driver: 'local' });
|
|
12
|
+
* const result = await storage.uploadFile(req.file);
|
|
13
|
+
*
|
|
14
|
+
* if (result.success) {
|
|
15
|
+
* console.log(result.reference); // stored file path
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* // Advanced imports:
|
|
19
|
+
* // import { withRetry, formatFileSize } from 'express-storage/utils';
|
|
20
|
+
* // import { BaseStorageDriver } from 'express-storage/drivers';
|
|
21
|
+
* // import { validateStorageConfig } from 'express-storage/config';
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.InMemoryRateLimiter = exports.StorageManager = void 0;
|
|
25
|
+
// Core class
|
|
26
|
+
var storage_manager_js_1 = require("./storage-manager.js");
|
|
27
|
+
Object.defineProperty(exports, "StorageManager", { enumerable: true, get: function () { return storage_manager_js_1.StorageManager; } });
|
|
28
|
+
// Rate limiter (needed for StorageOptions.rateLimiter)
|
|
29
|
+
var rate_limiter_js_1 = require("./utils/rate-limiter.js");
|
|
30
|
+
Object.defineProperty(exports, "InMemoryRateLimiter", { enumerable: true, get: function () { return rate_limiter_js_1.InMemoryRateLimiter; } });
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,aAAa;AACb,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAEvB,uDAAuD;AACvD,2DAA8D;AAArD,sHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { FileUploadResult, DeleteResult, PresignedUploadUrlResult, PresignedViewUrlResult, PublicStorageConfig, StorageOptions, FileValidationOptions, StorageDriver, BlobValidationOptions, BlobValidationResult, ListFilesResult, UploadOptions, FileMetadata, FileInfo, BatchOptions } from './types/storage.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* StorageManager - Your single point of contact for all file operations.
|
|
4
|
+
*
|
|
5
|
+
* Think of it as a universal remote that works with any storage provider.
|
|
6
|
+
* You don't need to know the specifics of S3, GCS, Azure, or local storage —
|
|
7
|
+
* just tell StorageManager what you want to do and it handles the rest.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // The simplest setup - just reads from your .env file
|
|
11
|
+
* const storage = new StorageManager();
|
|
12
|
+
*
|
|
13
|
+
* // Full-featured setup
|
|
14
|
+
* const storage = new StorageManager({
|
|
15
|
+
* driver: 's3',
|
|
16
|
+
* credentials: { bucketName: 'my-bucket', awsRegion: 'us-east-1' },
|
|
17
|
+
* hooks: {
|
|
18
|
+
* beforeUpload: async (file) => { await virusScan(file.buffer); },
|
|
19
|
+
* afterUpload: (result) => { auditLog('file_uploaded', result); },
|
|
20
|
+
* },
|
|
21
|
+
* rateLimiter: { maxRequests: 100, windowMs: 60000 },
|
|
22
|
+
* concurrency: 5,
|
|
23
|
+
* });
|
|
24
|
+
*/
|
|
25
|
+
export declare class StorageManager {
|
|
26
|
+
private driver;
|
|
27
|
+
private readonly config;
|
|
28
|
+
private readonly logger;
|
|
29
|
+
private rateLimiter;
|
|
30
|
+
private hooks;
|
|
31
|
+
private readonly concurrency;
|
|
32
|
+
private destroyed;
|
|
33
|
+
constructor(options?: StorageOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Builds the final configuration by merging environment variables with any
|
|
36
|
+
* options you passed in. Your explicit options always win over env vars.
|
|
37
|
+
*/
|
|
38
|
+
private buildConfig;
|
|
39
|
+
private assertNotDestroyed;
|
|
40
|
+
/**
|
|
41
|
+
* Uploads a single file to your configured storage.
|
|
42
|
+
*
|
|
43
|
+
* @param file - The file from Multer (req.file)
|
|
44
|
+
* @param validation - Optional rules like max size and allowed types
|
|
45
|
+
* @param uploadOptions - Optional metadata, cache headers, etc.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* const result = await storage.uploadFile(req.file, {
|
|
49
|
+
* maxSize: 5 * 1024 * 1024,
|
|
50
|
+
* allowedMimeTypes: ['image/jpeg', 'image/png'],
|
|
51
|
+
* });
|
|
52
|
+
* if (result.success) {
|
|
53
|
+
* console.log(result.reference, result.fileUrl);
|
|
54
|
+
* }
|
|
55
|
+
*/
|
|
56
|
+
uploadFile(file: Express.Multer.File, validation?: FileValidationOptions, uploadOptions?: UploadOptions): Promise<FileUploadResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Uploads multiple files at once.
|
|
59
|
+
* Files are processed in parallel (up to concurrency limit) for speed,
|
|
60
|
+
* but each file gets its own result — one failure doesn't stop the others.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const results = await storage.uploadFiles(req.files, {
|
|
64
|
+
* maxSize: 10 * 1024 * 1024,
|
|
65
|
+
* });
|
|
66
|
+
* const uploaded = results.filter(r => r.success);
|
|
67
|
+
* const failed = results.filter(r => !r.success);
|
|
68
|
+
*/
|
|
69
|
+
uploadFiles(files: Express.Multer.File[], validation?: FileValidationOptions, uploadOptions?: UploadOptions, options?: BatchOptions): Promise<FileUploadResult[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Creates a presigned URL that lets clients upload directly to cloud storage.
|
|
72
|
+
*
|
|
73
|
+
* The URL is time-limited and (for S3/GCS) locked to specific file constraints.
|
|
74
|
+
*
|
|
75
|
+
* @param fileName - What the user wants to call their file
|
|
76
|
+
* @param contentType - The MIME type (e.g., 'image/jpeg')
|
|
77
|
+
* @param fileSize - Exact size in bytes (enforced by S3/GCS, advisory for Azure)
|
|
78
|
+
* @param folder - Where to put the file (overrides your default BUCKET_PATH)
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* const result = await storage.generateUploadUrl('photo.jpg', 'image/jpeg', 204800);
|
|
82
|
+
* if (result.success) {
|
|
83
|
+
* // result.uploadUrl — PUT request goes here
|
|
84
|
+
* // result.reference — save this to confirm/view/delete later
|
|
85
|
+
* // result.expiresIn — seconds until URL expires
|
|
86
|
+
* }
|
|
87
|
+
*/
|
|
88
|
+
generateUploadUrl(fileName: string, contentType?: string, fileSize?: number, folder?: string): Promise<PresignedUploadUrlResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Creates a presigned URL for viewing/downloading an existing file.
|
|
91
|
+
*
|
|
92
|
+
* @param reference - The full path you got from generateUploadUrl
|
|
93
|
+
*/
|
|
94
|
+
generateViewUrl(reference: string): Promise<PresignedViewUrlResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Verifies that a presigned upload actually happened and the file is valid.
|
|
97
|
+
*
|
|
98
|
+
* For Azure, this is essential — Azure doesn't enforce file constraints at
|
|
99
|
+
* the URL level, so we check the actual blob properties here.
|
|
100
|
+
* For S3/GCS, this confirms the file exists and optionally validates it.
|
|
101
|
+
*/
|
|
102
|
+
validateAndConfirmUpload(reference: string, options?: BlobValidationOptions): Promise<BlobValidationResult>;
|
|
103
|
+
/**
|
|
104
|
+
* Returns true if you're using Azure presigned mode.
|
|
105
|
+
* Your hint that you MUST call validateAndConfirmUpload() after presigned uploads.
|
|
106
|
+
*/
|
|
107
|
+
requiresPostUploadValidation(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Creates presigned upload URLs for multiple files at once.
|
|
110
|
+
*/
|
|
111
|
+
generateUploadUrls(files: (string | FileMetadata)[], folder?: string, options?: BatchOptions): Promise<PresignedUploadUrlResult[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Creates presigned view URLs for multiple files at once.
|
|
114
|
+
*/
|
|
115
|
+
generateViewUrls(references: string[], options?: BatchOptions): Promise<PresignedViewUrlResult[]>;
|
|
116
|
+
/**
|
|
117
|
+
* Deletes a single file from storage.
|
|
118
|
+
*
|
|
119
|
+
* @param reference - The full path from uploadFile result or generateUploadUrl
|
|
120
|
+
* @returns DeleteResult with success status and error details on failure
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* const result = await storage.deleteFile(uploadResult.reference);
|
|
124
|
+
* if (!result.success) {
|
|
125
|
+
* console.log(result.error, result.code); // e.g., 'FILE_NOT_FOUND'
|
|
126
|
+
* }
|
|
127
|
+
*/
|
|
128
|
+
deleteFile(reference: string): Promise<DeleteResult>;
|
|
129
|
+
/**
|
|
130
|
+
* Deletes multiple files at once.
|
|
131
|
+
*/
|
|
132
|
+
deleteFiles(references: string[], options?: BatchOptions): Promise<DeleteResult[]>;
|
|
133
|
+
/**
|
|
134
|
+
* Lists files in your storage with optional filtering and pagination.
|
|
135
|
+
*
|
|
136
|
+
* @param prefix - Only show files starting with this path
|
|
137
|
+
* @param maxResults - How many files to return per page (default: 1000)
|
|
138
|
+
* @param continuationToken - Pass nextToken from previous response for next page
|
|
139
|
+
*/
|
|
140
|
+
listFiles(prefix?: string, maxResults?: number, continuationToken?: string): Promise<ListFilesResult>;
|
|
141
|
+
/**
|
|
142
|
+
* Returns metadata about a file without downloading it.
|
|
143
|
+
*
|
|
144
|
+
* @param reference - The full path from uploadFile result or generateUploadUrl
|
|
145
|
+
* @returns FileInfo with name, size, contentType, lastModified — or null if not found
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* const info = await storage.getMetadata(uploadResult.reference);
|
|
149
|
+
* if (info) {
|
|
150
|
+
* console.log(`${info.name}: ${info.size} bytes, ${info.contentType}`);
|
|
151
|
+
* }
|
|
152
|
+
*/
|
|
153
|
+
getMetadata(reference: string): Promise<FileInfo | null>;
|
|
154
|
+
/**
|
|
155
|
+
* Returns true if a file exists at the given reference.
|
|
156
|
+
*
|
|
157
|
+
* @param reference - The full path from uploadFile result or generateUploadUrl
|
|
158
|
+
*/
|
|
159
|
+
exists(reference: string): Promise<boolean>;
|
|
160
|
+
/**
|
|
161
|
+
* Returns a copy of the current configuration without credentials.
|
|
162
|
+
* Safe to log, expose in admin panels, or include in error reports.
|
|
163
|
+
*/
|
|
164
|
+
getConfig(): PublicStorageConfig;
|
|
165
|
+
getDriverType(): StorageDriver;
|
|
166
|
+
/**
|
|
167
|
+
* Returns true if the driver operates in presigned mode.
|
|
168
|
+
* In presigned mode, upload() returns URLs instead of uploading directly.
|
|
169
|
+
*/
|
|
170
|
+
isPresignedUploadMode(): boolean;
|
|
171
|
+
/**
|
|
172
|
+
* Returns rate limit status information.
|
|
173
|
+
* Returns null if rate limiting is not configured.
|
|
174
|
+
*/
|
|
175
|
+
getRateLimitStatus(): Promise<{
|
|
176
|
+
remainingRequests: number;
|
|
177
|
+
resetTimeMs: number;
|
|
178
|
+
} | null>;
|
|
179
|
+
static getAvailableDrivers(): StorageDriver[];
|
|
180
|
+
/**
|
|
181
|
+
* Releases resources held by this StorageManager instance.
|
|
182
|
+
* Clears the rate limiter and hooks. The instance should not be reused
|
|
183
|
+
* after calling this method.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* const storage = new StorageManager({ driver: 's3' });
|
|
187
|
+
* // ... use storage ...
|
|
188
|
+
* storage.destroy(); // free resources
|
|
189
|
+
*/
|
|
190
|
+
destroy(): void;
|
|
191
|
+
isDestroyed(): boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Shared upload orchestration: validation → beforeUpload hook → driver.upload → afterUpload hook.
|
|
194
|
+
* Used by both uploadFile() and uploadFiles() to eliminate duplication.
|
|
195
|
+
*/
|
|
196
|
+
private executeSingleUpload;
|
|
197
|
+
/**
|
|
198
|
+
* Shared delete orchestration: path check → beforeDelete hook → driver.delete → afterDelete hook.
|
|
199
|
+
* Used by both deleteFile() and deleteFiles() to eliminate duplication.
|
|
200
|
+
*/
|
|
201
|
+
private executeSingleDelete;
|
|
202
|
+
private checkRateLimit;
|
|
203
|
+
private buildFilePath;
|
|
204
|
+
/**
|
|
205
|
+
* Safely invokes the onError hook. Swallows hook exceptions to prevent
|
|
206
|
+
* error-in-error-handler cascades.
|
|
207
|
+
*/
|
|
208
|
+
private invokeOnError;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=storage-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../src/storage-manager.ts"],"names":[],"mappings":"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"}
|