express-storage 1.0.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +519 -348
  2. package/dist/drivers/azure.driver.d.ts +88 -0
  3. package/dist/drivers/azure.driver.d.ts.map +1 -0
  4. package/dist/drivers/azure.driver.js +367 -0
  5. package/dist/drivers/azure.driver.js.map +1 -0
  6. package/dist/drivers/base.driver.d.ts +125 -24
  7. package/dist/drivers/base.driver.d.ts.map +1 -1
  8. package/dist/drivers/base.driver.js +248 -62
  9. package/dist/drivers/base.driver.js.map +1 -1
  10. package/dist/drivers/gcs.driver.d.ts +60 -13
  11. package/dist/drivers/gcs.driver.d.ts.map +1 -1
  12. package/dist/drivers/gcs.driver.js +242 -41
  13. package/dist/drivers/gcs.driver.js.map +1 -1
  14. package/dist/drivers/local.driver.d.ts +89 -12
  15. package/dist/drivers/local.driver.d.ts.map +1 -1
  16. package/dist/drivers/local.driver.js +533 -45
  17. package/dist/drivers/local.driver.js.map +1 -1
  18. package/dist/drivers/s3.driver.d.ts +64 -13
  19. package/dist/drivers/s3.driver.d.ts.map +1 -1
  20. package/dist/drivers/s3.driver.js +269 -41
  21. package/dist/drivers/s3.driver.js.map +1 -1
  22. package/dist/factory/driver.factory.d.ts +35 -29
  23. package/dist/factory/driver.factory.d.ts.map +1 -1
  24. package/dist/factory/driver.factory.js +119 -59
  25. package/dist/factory/driver.factory.js.map +1 -1
  26. package/dist/index.d.ts +23 -22
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +26 -46
  29. package/dist/index.js.map +1 -1
  30. package/dist/storage-manager.d.ts +205 -52
  31. package/dist/storage-manager.d.ts.map +1 -1
  32. package/dist/storage-manager.js +644 -73
  33. package/dist/storage-manager.js.map +1 -1
  34. package/dist/types/storage.types.d.ts +243 -18
  35. package/dist/types/storage.types.d.ts.map +1 -1
  36. package/dist/utils/config.utils.d.ts +28 -4
  37. package/dist/utils/config.utils.d.ts.map +1 -1
  38. package/dist/utils/config.utils.js +121 -47
  39. package/dist/utils/config.utils.js.map +1 -1
  40. package/dist/utils/file.utils.d.ts +111 -14
  41. package/dist/utils/file.utils.d.ts.map +1 -1
  42. package/dist/utils/file.utils.js +215 -32
  43. package/dist/utils/file.utils.js.map +1 -1
  44. package/package.json +51 -27
  45. package/dist/drivers/oci.driver.d.ts +0 -37
  46. package/dist/drivers/oci.driver.d.ts.map +0 -1
  47. package/dist/drivers/oci.driver.js +0 -84
  48. package/dist/drivers/oci.driver.js.map +0 -1
@@ -1,55 +1,61 @@
1
1
  import { StorageConfig, IStorageDriver } from '../types/storage.types.js';
2
2
  /**
3
- * Factory class for creating storage drivers
3
+ * StorageDriverFactory - Creates and caches storage driver instances.
4
+ *
5
+ * Drivers are cached to avoid recreating connections for the same configuration.
6
+ * The cache is limited to 100 drivers to prevent memory issues in long-running apps.
7
+ *
8
+ * When the cache is full, the least recently used driver gets evicted.
4
9
  */
5
10
  export declare class StorageDriverFactory {
6
11
  private static drivers;
7
12
  /**
8
- * Create and return a storage driver based on configuration
13
+ * Gets or creates a driver for the given configuration.
14
+ *
15
+ * If a driver for this exact configuration already exists, it's reused.
16
+ * Otherwise, a new driver is created and cached.
9
17
  */
10
18
  static createDriver(config: StorageConfig): IStorageDriver;
11
19
  /**
12
- * Create a new driver instance
20
+ * Removes the oldest (least recently accessed) driver from the cache.
13
21
  */
14
- private static createNewDriver;
15
- /**
16
- * Create S3 driver
17
- */
18
- private static createS3Driver;
19
- /**
20
- * Create S3 presigned driver
21
- */
22
- private static createS3PresignedDriver;
23
- /**
24
- * Create GCS driver
25
- */
26
- private static createGCSDriver;
27
- /**
28
- * Create GCS presigned driver
29
- */
30
- private static createGCSPresignedDriver;
22
+ private static evictLRU;
31
23
  /**
32
- * Create OCI driver
24
+ * Creates a new driver instance based on the config's driver type.
33
25
  */
34
- private static createOCIDriver;
26
+ private static createNewDriver;
35
27
  /**
36
- * Create OCI presigned driver
28
+ * Creates a fingerprint of a string for cache key comparison.
29
+ * Uses triple hash approach (length + two FNV-1a hashes + checksum) for maximum collision resistance.
30
+ *
31
+ * The triple hash approach with length and checksum significantly reduces collision probability:
32
+ * - Single 32-bit hash: ~77k items for 50% collision probability
33
+ * - This approach: effectively ~128+ bits of entropy, negligible collision probability
34
+ *
35
+ * For credentials, we also include a prefix checksum to detect similar keys early.
37
36
  */
38
- private static createOCIPresignedDriver;
37
+ private static secureHash;
39
38
  /**
40
- * Generate unique key for driver caching
39
+ * Generates a unique cache key for a configuration.
40
+ * Includes all properties that affect driver behavior.
41
41
  */
42
42
  private static getDriverKey;
43
43
  /**
44
- * Clear cached drivers
44
+ * Clears all cached drivers.
45
+ * Useful in tests or when you've rotated credentials.
45
46
  */
46
47
  static clearCache(): void;
47
48
  /**
48
- * Get cached driver count
49
+ * Returns the number of cached drivers.
50
+ */
51
+ static getCacheSize(): number;
52
+ /**
53
+ * Removes a specific driver from the cache.
54
+ * Useful when credentials have changed for a specific configuration.
49
55
  */
50
- static getCachedDriverCount(): number;
56
+ static removeFromCache(config: StorageConfig): boolean;
51
57
  /**
52
- * Get available drivers
58
+ * Returns a list of all supported driver types.
53
59
  */
54
60
  static getAvailableDrivers(): string[];
55
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"driver.factory.d.ts","sourceRoot":"","sources":["../../src/factory/driver.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM1E;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,OAAO,CAA0C;IAEhE;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IAiB1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA4B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAItC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAIvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAIvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAIrC;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM,EAAE;CAWvC"}
1
+ {"version":3,"file":"driver.factory.d.ts","sourceRoot":"","sources":["../../src/factory/driver.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa1E;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsC;IAE5D;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IAuB1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAgBvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAqB9B;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAmCzB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,MAAM;IAI7B;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAKtD;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM,EAAE;CAWvC"}
@@ -1,105 +1,165 @@
1
1
  import { LocalStorageDriver } from '../drivers/local.driver.js';
2
2
  import { S3StorageDriver, S3PresignedStorageDriver } from '../drivers/s3.driver.js';
3
3
  import { GCSStorageDriver, GCSPresignedStorageDriver } from '../drivers/gcs.driver.js';
4
- import { OCIStorageDriver, OCIPresignedStorageDriver } from '../drivers/oci.driver.js';
4
+ import { AzureStorageDriver, AzurePresignedStorageDriver } from '../drivers/azure.driver.js';
5
+ const MAX_CACHED_DRIVERS = 100;
5
6
  /**
6
- * Factory class for creating storage drivers
7
+ * StorageDriverFactory - Creates and caches storage driver instances.
8
+ *
9
+ * Drivers are cached to avoid recreating connections for the same configuration.
10
+ * The cache is limited to 100 drivers to prevent memory issues in long-running apps.
11
+ *
12
+ * When the cache is full, the least recently used driver gets evicted.
7
13
  */
8
14
  export class StorageDriverFactory {
9
15
  /**
10
- * Create and return a storage driver based on configuration
16
+ * Gets or creates a driver for the given configuration.
17
+ *
18
+ * If a driver for this exact configuration already exists, it's reused.
19
+ * Otherwise, a new driver is created and cached.
11
20
  */
12
21
  static createDriver(config) {
13
22
  const driverKey = this.getDriverKey(config);
14
- // Return cached driver if exists
15
- if (this.drivers.has(driverKey)) {
16
- return this.drivers.get(driverKey);
23
+ const existing = this.drivers.get(driverKey);
24
+ if (existing) {
25
+ existing.lastAccess = Date.now();
26
+ return existing.driver;
27
+ }
28
+ if (this.drivers.size >= MAX_CACHED_DRIVERS) {
29
+ this.evictLRU();
17
30
  }
18
- // Create new driver
19
31
  const driver = this.createNewDriver(config);
20
- // Cache the driver
21
- this.drivers.set(driverKey, driver);
32
+ this.drivers.set(driverKey, {
33
+ driver,
34
+ lastAccess: Date.now(),
35
+ });
22
36
  return driver;
23
37
  }
24
38
  /**
25
- * Create a new driver instance
39
+ * Removes the oldest (least recently accessed) driver from the cache.
40
+ */
41
+ static evictLRU() {
42
+ let oldestKey = null;
43
+ let oldestTime = Infinity;
44
+ for (const [key, entry] of this.drivers.entries()) {
45
+ if (entry.lastAccess < oldestTime) {
46
+ oldestTime = entry.lastAccess;
47
+ oldestKey = key;
48
+ }
49
+ }
50
+ if (oldestKey) {
51
+ this.drivers.delete(oldestKey);
52
+ }
53
+ }
54
+ /**
55
+ * Creates a new driver instance based on the config's driver type.
26
56
  */
27
57
  static createNewDriver(config) {
28
58
  switch (config.driver) {
29
59
  case 'local':
30
60
  return new LocalStorageDriver(config);
31
61
  case 's3':
32
- return this.createS3Driver(config);
62
+ return new S3StorageDriver(config);
33
63
  case 's3-presigned':
34
- return this.createS3PresignedDriver(config);
64
+ return new S3PresignedStorageDriver(config);
35
65
  case 'gcs':
36
- return this.createGCSDriver(config);
66
+ return new GCSStorageDriver(config);
37
67
  case 'gcs-presigned':
38
- return this.createGCSPresignedDriver(config);
39
- case 'oci':
40
- return this.createOCIDriver(config);
41
- case 'oci-presigned':
42
- return this.createOCIPresignedDriver(config);
68
+ return new GCSPresignedStorageDriver(config);
69
+ case 'azure':
70
+ return new AzureStorageDriver(config);
71
+ case 'azure-presigned':
72
+ return new AzurePresignedStorageDriver(config);
43
73
  default:
44
74
  throw new Error(`Unsupported storage driver: ${config.driver}`);
45
75
  }
46
76
  }
47
77
  /**
48
- * Create S3 driver
49
- */
50
- static createS3Driver(config) {
51
- return new S3StorageDriver(config);
52
- }
53
- /**
54
- * Create S3 presigned driver
55
- */
56
- static createS3PresignedDriver(config) {
57
- return new S3PresignedStorageDriver(config);
58
- }
59
- /**
60
- * Create GCS driver
61
- */
62
- static createGCSDriver(config) {
63
- return new GCSStorageDriver(config);
64
- }
65
- /**
66
- * Create GCS presigned driver
78
+ * Creates a fingerprint of a string for cache key comparison.
79
+ * Uses triple hash approach (length + two FNV-1a hashes + checksum) for maximum collision resistance.
80
+ *
81
+ * The triple hash approach with length and checksum significantly reduces collision probability:
82
+ * - Single 32-bit hash: ~77k items for 50% collision probability
83
+ * - This approach: effectively ~128+ bits of entropy, negligible collision probability
84
+ *
85
+ * For credentials, we also include a prefix checksum to detect similar keys early.
67
86
  */
68
- static createGCSPresignedDriver(config) {
69
- return new GCSPresignedStorageDriver(config);
70
- }
71
- /**
72
- * Create OCI driver
73
- */
74
- static createOCIDriver(config) {
75
- return new OCIStorageDriver(config);
76
- }
77
- /**
78
- * Create OCI presigned driver
79
- */
80
- static createOCIPresignedDriver(config) {
81
- return new OCIPresignedStorageDriver(config);
87
+ static secureHash(str) {
88
+ if (!str)
89
+ return '0:0:0:0';
90
+ const length = str.length;
91
+ // First hash with standard FNV-1a offset basis
92
+ const FNV_OFFSET_BASIS_1 = 2166136261;
93
+ const FNV_PRIME = 16777619;
94
+ let hash1 = FNV_OFFSET_BASIS_1;
95
+ for (let i = 0; i < str.length; i++) {
96
+ hash1 ^= str.charCodeAt(i);
97
+ hash1 = Math.imul(hash1, FNV_PRIME);
98
+ }
99
+ // Second hash with different seed (XOR first hash into offset basis)
100
+ // This creates a completely different hash even for similar strings
101
+ const FNV_OFFSET_BASIS_2 = 0x811c9dc5 ^ (hash1 >>> 0);
102
+ let hash2 = FNV_OFFSET_BASIS_2;
103
+ for (let i = str.length - 1; i >= 0; i--) { // Reverse direction for different bit mixing
104
+ hash2 ^= str.charCodeAt(i);
105
+ hash2 = Math.imul(hash2, FNV_PRIME);
106
+ }
107
+ // Third component: simple additive checksum of character codes
108
+ // Provides additional collision resistance with minimal computation
109
+ let checksum = 0;
110
+ for (let i = 0; i < str.length; i++) {
111
+ checksum = (checksum + str.charCodeAt(i) * (i + 1)) >>> 0;
112
+ }
113
+ // Return length:hash1:hash2:checksum format - collision requires matching all four
114
+ return `${length}:${(hash1 >>> 0).toString(16)}:${(hash2 >>> 0).toString(16)}:${(checksum >>> 0).toString(16)}`;
82
115
  }
83
116
  /**
84
- * Generate unique key for driver caching
117
+ * Generates a unique cache key for a configuration.
118
+ * Includes all properties that affect driver behavior.
85
119
  */
86
120
  static getDriverKey(config) {
87
- return `${config.driver}_${config.bucketName || 'local'}_${config.localPath || 'default'}`;
121
+ const keyParts = [
122
+ config.driver,
123
+ config.bucketName || 'local',
124
+ config.localPath || 'default',
125
+ config.bucketPath || '',
126
+ (config.presignedUrlExpiry || 600).toString(),
127
+ (config.maxFileSize || 5368709120).toString(),
128
+ config.awsRegion || '',
129
+ this.secureHash(config.awsAccessKey || ''),
130
+ this.secureHash(config.awsSecretKey || ''),
131
+ config.gcsProjectId || '',
132
+ this.secureHash(config.gcsCredentials || ''),
133
+ config.azureAccountName || '',
134
+ config.azureContainerName || '',
135
+ this.secureHash(config.azureConnectionString || ''),
136
+ this.secureHash(config.azureAccountKey || ''),
137
+ ];
138
+ return keyParts.join('_');
88
139
  }
89
140
  /**
90
- * Clear cached drivers
141
+ * Clears all cached drivers.
142
+ * Useful in tests or when you've rotated credentials.
91
143
  */
92
144
  static clearCache() {
93
145
  this.drivers.clear();
94
146
  }
95
147
  /**
96
- * Get cached driver count
148
+ * Returns the number of cached drivers.
97
149
  */
98
- static getCachedDriverCount() {
150
+ static getCacheSize() {
99
151
  return this.drivers.size;
100
152
  }
101
153
  /**
102
- * Get available drivers
154
+ * Removes a specific driver from the cache.
155
+ * Useful when credentials have changed for a specific configuration.
156
+ */
157
+ static removeFromCache(config) {
158
+ const driverKey = this.getDriverKey(config);
159
+ return this.drivers.delete(driverKey);
160
+ }
161
+ /**
162
+ * Returns a list of all supported driver types.
103
163
  */
104
164
  static getAvailableDrivers() {
105
165
  return [
@@ -108,8 +168,8 @@ export class StorageDriverFactory {
108
168
  's3-presigned',
109
169
  'gcs',
110
170
  'gcs-presigned',
111
- 'oci',
112
- 'oci-presigned'
171
+ 'azure',
172
+ 'azure-presigned'
113
173
  ];
114
174
  }
115
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"driver.factory.js","sourceRoot":"","sources":["../../src/factory/driver.factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.factory.js","sourceRoot":"","sources":["../../src/factory/driver.factory.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,29 +1,30 @@
1
- import { StorageManager } from './storage-manager.js';
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
+ * // Initialize (reads from environment variables)
11
+ * const storage = new StorageManager();
12
+ *
13
+ * // Upload a file
14
+ * const result = await storage.uploadFile(req.file);
15
+ *
16
+ * // Generate presigned URL for client-side upload
17
+ * const url = await storage.generateUploadUrl('photo.jpg', 'image/jpeg', 12345);
18
+ */
2
19
  export { StorageManager } from './storage-manager.js';
3
20
  export { StorageDriverFactory } from './factory/driver.factory.js';
4
- export type { StorageDriver, FileUploadResult, PresignedUrlResult, StorageConfig, FileInput, SingleFileInput, MultipleFilesInput, IStorageDriver, StorageRequest, ValidationResult, EnvironmentConfig } from './types/storage.types.js';
5
- export { loadAndValidateConfig, validateStorageConfig } from './utils/config.utils.js';
6
- export { generateUniqueFileName, sanitizeFileName, createMonthBasedPath, ensureDirectoryExists, formatFileSize, validateFileSize, validateFileType, createLocalFileUrl, getFileExtension, isImageFile, isDocumentFile } from './utils/file.utils.js';
21
+ export type { StorageDriver, FileUploadResult, DeleteResult, PresignedUrlResult, StorageConfig, StorageOptions, StorageCredentials, FileValidationOptions, UploadOptions, FileMetadata, FileInput, SingleFileInput, MultipleFilesInput, IStorageDriver, ValidationResult, EnvironmentConfig, BlobValidationOptions, BlobValidationResult, ListFilesResult, FileInfo, Logger, RateLimitOptions } from './types/storage.types.js';
22
+ export { loadAndValidateConfig, validateStorageConfig, initializeDotenv, resetDotenvInitialization } from './utils/config.utils.js';
23
+ export { generateUniqueFileName, sanitizeFileName, validateFileName, createMonthBasedPath, ensureDirectoryExists, formatFileSize, validateFileSize, validateFileType, getFileExtension, isImageFile, isDocumentFile, withRetry, sleep, withConcurrencyLimit } from './utils/file.utils.js';
24
+ export type { RetryOptions, ConcurrencyOptions } from './utils/file.utils.js';
7
25
  export { BaseStorageDriver } from './drivers/base.driver.js';
8
26
  export { LocalStorageDriver } from './drivers/local.driver.js';
9
27
  export { S3StorageDriver, S3PresignedStorageDriver } from './drivers/s3.driver.js';
10
28
  export { GCSStorageDriver, GCSPresignedStorageDriver } from './drivers/gcs.driver.js';
11
- export { OCIStorageDriver, OCIPresignedStorageDriver } from './drivers/oci.driver.js';
12
- /**
13
- * Get or create default storage manager instance
14
- */
15
- export declare function getStorageManager(): StorageManager;
16
- /**
17
- * Initialize default storage manager with custom config
18
- */
19
- export declare function initializeStorageManager(config?: any): StorageManager;
20
- /**
21
- * Convenience functions for quick usage
22
- */
23
- export declare function uploadFile(file: Express.Multer.File): Promise<import("./types/storage.types.js").FileUploadResult>;
24
- export declare function uploadFiles(files: Express.Multer.File[]): Promise<import("./types/storage.types.js").FileUploadResult[]>;
25
- export declare function generateUploadUrl(fileName: string): Promise<import("./types/storage.types.js").PresignedUrlResult>;
26
- export declare function generateViewUrl(fileName: string): Promise<import("./types/storage.types.js").PresignedUrlResult>;
27
- export declare function deleteFile(fileName: string): Promise<boolean>;
28
- export declare function deleteFiles(fileNames: string[]): Promise<boolean[]>;
29
+ export { AzureStorageDriver, AzurePresignedStorageDriver } from './drivers/azure.driver.js';
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAKtF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,cAAc,CAGrE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,gEAEzD;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,kEAE7D;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,kEAEvD;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,kEAErD;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,oBAEhD;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,sBAEpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,MAAM,EACN,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpI,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,SAAS,EACT,KAAK,EACL,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,53 +1,33 @@
1
- // Main exports
2
- import { StorageManager } from './storage-manager.js';
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
+ * // Initialize (reads from environment variables)
11
+ * const storage = new StorageManager();
12
+ *
13
+ * // Upload a file
14
+ * const result = await storage.uploadFile(req.file);
15
+ *
16
+ * // Generate presigned URL for client-side upload
17
+ * const url = await storage.generateUploadUrl('photo.jpg', 'image/jpeg', 12345);
18
+ */
19
+ // Main class
3
20
  export { StorageManager } from './storage-manager.js';
21
+ // Factory
4
22
  export { StorageDriverFactory } from './factory/driver.factory.js';
5
- // Utility exports
6
- export { loadAndValidateConfig, validateStorageConfig } from './utils/config.utils.js';
7
- export { generateUniqueFileName, sanitizeFileName, createMonthBasedPath, ensureDirectoryExists, formatFileSize, validateFileSize, validateFileType, createLocalFileUrl, getFileExtension, isImageFile, isDocumentFile } from './utils/file.utils.js';
8
- // Driver exports
23
+ // Configuration utilities
24
+ export { loadAndValidateConfig, validateStorageConfig, initializeDotenv, resetDotenvInitialization } from './utils/config.utils.js';
25
+ // File utilities
26
+ export { generateUniqueFileName, sanitizeFileName, validateFileName, createMonthBasedPath, ensureDirectoryExists, formatFileSize, validateFileSize, validateFileType, getFileExtension, isImageFile, isDocumentFile, withRetry, sleep, withConcurrencyLimit } from './utils/file.utils.js';
27
+ // Driver classes (for custom implementations or direct use)
9
28
  export { BaseStorageDriver } from './drivers/base.driver.js';
10
29
  export { LocalStorageDriver } from './drivers/local.driver.js';
11
30
  export { S3StorageDriver, S3PresignedStorageDriver } from './drivers/s3.driver.js';
12
31
  export { GCSStorageDriver, GCSPresignedStorageDriver } from './drivers/gcs.driver.js';
13
- export { OCIStorageDriver, OCIPresignedStorageDriver } from './drivers/oci.driver.js';
14
- // Default instance
15
- let defaultStorageManager = null;
16
- /**
17
- * Get or create default storage manager instance
18
- */
19
- export function getStorageManager() {
20
- if (!defaultStorageManager) {
21
- defaultStorageManager = new StorageManager();
22
- }
23
- return defaultStorageManager;
24
- }
25
- /**
26
- * Initialize default storage manager with custom config
27
- */
28
- export function initializeStorageManager(config) {
29
- defaultStorageManager = StorageManager.initialize(config);
30
- return defaultStorageManager;
31
- }
32
- /**
33
- * Convenience functions for quick usage
34
- */
35
- export async function uploadFile(file) {
36
- return getStorageManager().uploadFile(file);
37
- }
38
- export async function uploadFiles(files) {
39
- return getStorageManager().uploadFiles(files);
40
- }
41
- export async function generateUploadUrl(fileName) {
42
- return getStorageManager().generateUploadUrl(fileName);
43
- }
44
- export async function generateViewUrl(fileName) {
45
- return getStorageManager().generateViewUrl(fileName);
46
- }
47
- export async function deleteFile(fileName) {
48
- return getStorageManager().deleteFile(fileName);
49
- }
50
- export async function deleteFiles(fileNames) {
51
- return getStorageManager().deleteFiles(fileNames);
52
- }
32
+ export { AzureStorageDriver, AzurePresignedStorageDriver } from './drivers/azure.driver.js';
53
33
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAiBnE,kBAAkB;AAClB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,iBAAiB;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,mBAAmB;AACnB,IAAI,qBAAqB,GAA0B,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAY;IACnD,qBAAqB,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAyB;IACxD,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAA4B;IAC5D,OAAO,iBAAiB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,OAAO,iBAAiB,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,OAAO,iBAAiB,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAmB;IACnD,OAAO,iBAAiB,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,UAAU;AACV,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AA4BnE,0BAA0B;AAC1B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpI,iBAAiB;AACjB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,SAAS,EACT,KAAK,EACL,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAG/B,4DAA4D;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}