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.
Files changed (177) hide show
  1. package/README.md +366 -34
  2. package/dist/cjs/config/index.d.ts +10 -0
  3. package/dist/cjs/config/index.d.ts.map +1 -0
  4. package/dist/cjs/config/index.js +19 -0
  5. package/dist/cjs/config/index.js.map +1 -0
  6. package/dist/cjs/drivers/azure.driver.d.ts +73 -0
  7. package/dist/cjs/drivers/azure.driver.d.ts.map +1 -0
  8. package/dist/cjs/drivers/azure.driver.js +390 -0
  9. package/dist/cjs/drivers/azure.driver.js.map +1 -0
  10. package/dist/cjs/drivers/base.driver.d.ts +136 -0
  11. package/dist/cjs/drivers/base.driver.d.ts.map +1 -0
  12. package/dist/cjs/drivers/base.driver.js +357 -0
  13. package/dist/cjs/drivers/base.driver.js.map +1 -0
  14. package/dist/{drivers → cjs/drivers}/gcs.driver.d.ts +20 -38
  15. package/dist/cjs/drivers/gcs.driver.d.ts.map +1 -0
  16. package/dist/cjs/drivers/gcs.driver.js +343 -0
  17. package/dist/cjs/drivers/gcs.driver.js.map +1 -0
  18. package/dist/cjs/drivers/index.d.ts +15 -0
  19. package/dist/cjs/drivers/index.d.ts.map +1 -0
  20. package/dist/cjs/drivers/index.js +26 -0
  21. package/dist/cjs/drivers/index.js.map +1 -0
  22. package/dist/cjs/drivers/local.driver.d.ts +86 -0
  23. package/dist/cjs/drivers/local.driver.d.ts.map +1 -0
  24. package/dist/cjs/drivers/local.driver.js +556 -0
  25. package/dist/cjs/drivers/local.driver.js.map +1 -0
  26. package/dist/{drivers → cjs/drivers}/s3.driver.d.ts +19 -39
  27. package/dist/cjs/drivers/s3.driver.d.ts.map +1 -0
  28. package/dist/cjs/drivers/s3.driver.js +400 -0
  29. package/dist/cjs/drivers/s3.driver.js.map +1 -0
  30. package/dist/cjs/factory/driver.factory.d.ts +43 -0
  31. package/dist/cjs/factory/driver.factory.d.ts.map +1 -0
  32. package/dist/cjs/factory/driver.factory.js +101 -0
  33. package/dist/cjs/factory/driver.factory.js.map +1 -0
  34. package/dist/cjs/index.d.ts +26 -0
  35. package/dist/cjs/index.d.ts.map +1 -0
  36. package/dist/cjs/index.js +31 -0
  37. package/dist/cjs/index.js.map +1 -0
  38. package/dist/cjs/package.json +1 -0
  39. package/dist/cjs/storage-manager.d.ts +210 -0
  40. package/dist/cjs/storage-manager.d.ts.map +1 -0
  41. package/dist/cjs/storage-manager.js +649 -0
  42. package/dist/cjs/storage-manager.js.map +1 -0
  43. package/dist/cjs/types/storage.types.d.ts +438 -0
  44. package/dist/cjs/types/storage.types.d.ts.map +1 -0
  45. package/dist/cjs/types/storage.types.js +3 -0
  46. package/dist/cjs/types/storage.types.js.map +1 -0
  47. package/dist/cjs/utils/config.utils.d.ts.map +1 -0
  48. package/dist/cjs/utils/config.utils.js +213 -0
  49. package/dist/cjs/utils/config.utils.js.map +1 -0
  50. package/dist/{utils → cjs/utils}/file.utils.d.ts +62 -8
  51. package/dist/cjs/utils/file.utils.d.ts.map +1 -0
  52. package/dist/cjs/utils/file.utils.js +464 -0
  53. package/dist/cjs/utils/file.utils.js.map +1 -0
  54. package/dist/cjs/utils/index.d.ts +12 -0
  55. package/dist/cjs/utils/index.d.ts.map +1 -0
  56. package/dist/cjs/utils/index.js +36 -0
  57. package/dist/cjs/utils/index.js.map +1 -0
  58. package/dist/cjs/utils/rate-limiter.d.ts +40 -0
  59. package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
  60. package/dist/cjs/utils/rate-limiter.js +87 -0
  61. package/dist/cjs/utils/rate-limiter.js.map +1 -0
  62. package/dist/esm/config/index.d.ts +10 -0
  63. package/dist/esm/config/index.d.ts.map +1 -0
  64. package/dist/esm/config/index.js +10 -0
  65. package/dist/esm/config/index.js.map +1 -0
  66. package/dist/esm/drivers/azure.driver.d.ts +73 -0
  67. package/dist/esm/drivers/azure.driver.d.ts.map +1 -0
  68. package/dist/esm/drivers/azure.driver.js +353 -0
  69. package/dist/esm/drivers/azure.driver.js.map +1 -0
  70. package/dist/esm/drivers/base.driver.d.ts +136 -0
  71. package/dist/esm/drivers/base.driver.d.ts.map +1 -0
  72. package/dist/esm/drivers/base.driver.js +350 -0
  73. package/dist/esm/drivers/base.driver.js.map +1 -0
  74. package/dist/esm/drivers/gcs.driver.d.ts +68 -0
  75. package/dist/esm/drivers/gcs.driver.d.ts.map +1 -0
  76. package/dist/esm/drivers/gcs.driver.js +306 -0
  77. package/dist/esm/drivers/gcs.driver.js.map +1 -0
  78. package/dist/esm/drivers/index.d.ts +15 -0
  79. package/dist/esm/drivers/index.d.ts.map +1 -0
  80. package/dist/esm/drivers/index.js +15 -0
  81. package/dist/esm/drivers/index.js.map +1 -0
  82. package/dist/esm/drivers/local.driver.d.ts +86 -0
  83. package/dist/esm/drivers/local.driver.d.ts.map +1 -0
  84. package/dist/esm/drivers/local.driver.js +549 -0
  85. package/dist/esm/drivers/local.driver.js.map +1 -0
  86. package/dist/esm/drivers/s3.driver.d.ts +69 -0
  87. package/dist/esm/drivers/s3.driver.d.ts.map +1 -0
  88. package/dist/esm/drivers/s3.driver.js +363 -0
  89. package/dist/esm/drivers/s3.driver.js.map +1 -0
  90. package/dist/esm/factory/driver.factory.d.ts +43 -0
  91. package/dist/esm/factory/driver.factory.d.ts.map +1 -0
  92. package/dist/esm/factory/driver.factory.js +92 -0
  93. package/dist/esm/factory/driver.factory.js.map +1 -0
  94. package/dist/esm/index.d.ts +26 -0
  95. package/dist/esm/index.d.ts.map +1 -0
  96. package/dist/esm/index.js +26 -0
  97. package/dist/esm/index.js.map +1 -0
  98. package/dist/esm/package.json +1 -0
  99. package/dist/esm/storage-manager.d.ts +210 -0
  100. package/dist/esm/storage-manager.d.ts.map +1 -0
  101. package/dist/esm/storage-manager.js +645 -0
  102. package/dist/esm/storage-manager.js.map +1 -0
  103. package/dist/esm/types/storage.types.d.ts +438 -0
  104. package/dist/esm/types/storage.types.d.ts.map +1 -0
  105. package/dist/esm/types/storage.types.js.map +1 -0
  106. package/dist/esm/utils/config.utils.d.ts +45 -0
  107. package/dist/esm/utils/config.utils.d.ts.map +1 -0
  108. package/dist/esm/utils/config.utils.js.map +1 -0
  109. package/dist/esm/utils/file.utils.d.ts +196 -0
  110. package/dist/esm/utils/file.utils.d.ts.map +1 -0
  111. package/dist/esm/utils/file.utils.js +439 -0
  112. package/dist/esm/utils/file.utils.js.map +1 -0
  113. package/dist/esm/utils/index.d.ts +12 -0
  114. package/dist/esm/utils/index.d.ts.map +1 -0
  115. package/dist/esm/utils/index.js +11 -0
  116. package/dist/esm/utils/index.js.map +1 -0
  117. package/dist/esm/utils/rate-limiter.d.ts +40 -0
  118. package/dist/esm/utils/rate-limiter.d.ts.map +1 -0
  119. package/dist/esm/utils/rate-limiter.js +82 -0
  120. package/dist/esm/utils/rate-limiter.js.map +1 -0
  121. package/package.json +90 -52
  122. package/src/config/index.ts +17 -0
  123. package/src/drivers/azure.driver.ts +434 -0
  124. package/src/drivers/base.driver.ts +436 -0
  125. package/src/drivers/gcs.driver.ts +366 -0
  126. package/src/drivers/index.ts +15 -0
  127. package/src/drivers/local.driver.ts +626 -0
  128. package/src/drivers/s3.driver.ts +459 -0
  129. package/src/factory/driver.factory.ts +101 -0
  130. package/src/index.ts +72 -0
  131. package/src/storage-manager.ts +801 -0
  132. package/src/types/storage.types.ts +561 -0
  133. package/src/utils/config.utils.ts +229 -0
  134. package/src/utils/file.utils.ts +536 -0
  135. package/src/utils/index.ts +35 -0
  136. package/src/utils/rate-limiter.ts +94 -0
  137. package/dist/drivers/azure.driver.d.ts +0 -88
  138. package/dist/drivers/azure.driver.d.ts.map +0 -1
  139. package/dist/drivers/azure.driver.js +0 -391
  140. package/dist/drivers/azure.driver.js.map +0 -1
  141. package/dist/drivers/base.driver.d.ts +0 -170
  142. package/dist/drivers/base.driver.d.ts.map +0 -1
  143. package/dist/drivers/base.driver.js +0 -347
  144. package/dist/drivers/base.driver.js.map +0 -1
  145. package/dist/drivers/gcs.driver.d.ts.map +0 -1
  146. package/dist/drivers/gcs.driver.js +0 -354
  147. package/dist/drivers/gcs.driver.js.map +0 -1
  148. package/dist/drivers/local.driver.d.ts +0 -107
  149. package/dist/drivers/local.driver.d.ts.map +0 -1
  150. package/dist/drivers/local.driver.js +0 -621
  151. package/dist/drivers/local.driver.js.map +0 -1
  152. package/dist/drivers/s3.driver.d.ts.map +0 -1
  153. package/dist/drivers/s3.driver.js +0 -387
  154. package/dist/drivers/s3.driver.js.map +0 -1
  155. package/dist/factory/driver.factory.d.ts +0 -62
  156. package/dist/factory/driver.factory.d.ts.map +0 -1
  157. package/dist/factory/driver.factory.js +0 -177
  158. package/dist/factory/driver.factory.js.map +0 -1
  159. package/dist/index.d.ts +0 -30
  160. package/dist/index.d.ts.map +0 -1
  161. package/dist/index.js +0 -33
  162. package/dist/index.js.map +0 -1
  163. package/dist/storage-manager.d.ts +0 -228
  164. package/dist/storage-manager.d.ts.map +0 -1
  165. package/dist/storage-manager.js +0 -715
  166. package/dist/storage-manager.js.map +0 -1
  167. package/dist/types/storage.types.d.ts +0 -295
  168. package/dist/types/storage.types.d.ts.map +0 -1
  169. package/dist/types/storage.types.js.map +0 -1
  170. package/dist/utils/config.utils.d.ts.map +0 -1
  171. package/dist/utils/config.utils.js.map +0 -1
  172. package/dist/utils/file.utils.d.ts.map +0 -1
  173. package/dist/utils/file.utils.js +0 -278
  174. package/dist/utils/file.utils.js.map +0 -1
  175. /package/dist/{utils → cjs/utils}/config.utils.d.ts +0 -0
  176. /package/dist/{types → esm/types}/storage.types.js +0 -0
  177. /package/dist/{utils → esm/utils}/config.utils.js +0 -0
package/dist/index.d.ts DELETED
@@ -1,30 +0,0 @@
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
- export { StorageManager } from './storage-manager.js';
20
- export { StorageDriverFactory } from './factory/driver.factory.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';
25
- export { BaseStorageDriver } from './drivers/base.driver.js';
26
- export { LocalStorageDriver } from './drivers/local.driver.js';
27
- export { S3StorageDriver, S3PresignedStorageDriver } from './drivers/s3.driver.js';
28
- export { GCSStorageDriver, GCSPresignedStorageDriver } from './drivers/gcs.driver.js';
29
- export { AzureStorageDriver, AzurePresignedStorageDriver } from './drivers/azure.driver.js';
30
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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 DELETED
@@ -1,33 +0,0 @@
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
20
- export { StorageManager } from './storage-manager.js';
21
- // Factory
22
- export { StorageDriverFactory } from './factory/driver.factory.js';
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)
28
- export { BaseStorageDriver } from './drivers/base.driver.js';
29
- export { LocalStorageDriver } from './drivers/local.driver.js';
30
- export { S3StorageDriver, S3PresignedStorageDriver } from './drivers/s3.driver.js';
31
- export { GCSStorageDriver, GCSPresignedStorageDriver } from './drivers/gcs.driver.js';
32
- export { AzureStorageDriver, AzurePresignedStorageDriver } from './drivers/azure.driver.js';
33
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
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"}
@@ -1,228 +0,0 @@
1
- import { FileUploadResult, DeleteResult, PresignedUrlResult, FileInput, StorageConfig, StorageOptions, FileValidationOptions, StorageDriver, BlobValidationOptions, BlobValidationResult, ListFilesResult, UploadOptions, FileMetadata } from './types/storage.types.js';
2
- export declare class StorageManager {
3
- private driver;
4
- private config;
5
- private logger;
6
- private rateLimiter;
7
- constructor(options?: StorageOptions);
8
- /**
9
- * Builds the final configuration by merging environment variables with any
10
- * options you passed in. Your explicit options always win over env vars.
11
- */
12
- private buildConfig;
13
- /**
14
- * Uploads a single file to your configured storage.
15
- *
16
- * This is the method you'll use most often. It handles everything:
17
- * validation, unique naming, and the actual upload.
18
- *
19
- * @param file - The file from Multer (req.file)
20
- * @param validation - Optional rules like max size and allowed types
21
- * @param uploadOptions - Optional metadata, cache headers, etc.
22
- *
23
- * @example
24
- * // Simple upload
25
- * const result = await storage.uploadFile(req.file);
26
- *
27
- * // With validation (reject files over 5MB or wrong type)
28
- * const result = await storage.uploadFile(req.file, {
29
- * maxSize: 5 * 1024 * 1024,
30
- * allowedMimeTypes: ['image/jpeg', 'image/png']
31
- * });
32
- *
33
- * // With custom metadata
34
- * const result = await storage.uploadFile(req.file, undefined, {
35
- * metadata: { uploadedBy: 'user123' },
36
- * cacheControl: 'max-age=31536000'
37
- * });
38
- */
39
- uploadFile(file: Express.Multer.File, validation?: FileValidationOptions, uploadOptions?: UploadOptions): Promise<FileUploadResult>;
40
- /**
41
- * Uploads multiple files at once.
42
- *
43
- * Files are processed in parallel (up to 10 at a time) for speed,
44
- * but each file gets its own result — so one failure doesn't stop the others.
45
- */
46
- uploadFiles(files: Express.Multer.File[], validation?: FileValidationOptions, uploadOptions?: UploadOptions): Promise<FileUploadResult[]>;
47
- /**
48
- * Smart upload that handles both single files and arrays.
49
- * Pass in what you have and it figures out the rest.
50
- */
51
- upload(input: FileInput, validation?: FileValidationOptions, uploadOptions?: UploadOptions): Promise<FileUploadResult | FileUploadResult[]>;
52
- /**
53
- * Creates a presigned URL that lets clients upload directly to cloud storage.
54
- *
55
- * This is powerful for large files — the upload goes straight to S3/GCS/Azure
56
- * without passing through your server, saving bandwidth and processing time.
57
- *
58
- * The URL is time-limited and (for S3/GCS) locked to specific file constraints.
59
- *
60
- * Rate limiting: If you configured `rateLimit` in StorageOptions, this method
61
- * will reject requests that exceed the limit with an error.
62
- *
63
- * @param fileName - What the user wants to call their file
64
- * @param contentType - The MIME type (e.g., 'image/jpeg')
65
- * @param fileSize - Exact size in bytes (enforced by S3/GCS, advisory for Azure)
66
- * @param folder - Where to put the file (overrides your default BUCKET_PATH)
67
- *
68
- * @example
69
- * const result = await storage.generateUploadUrl('photo.jpg', 'image/jpeg', 12345);
70
- * // Give result.uploadUrl to your frontend
71
- * // Save result.reference — you'll need it to view or delete the file later
72
- */
73
- generateUploadUrl(fileName: string, contentType?: string, fileSize?: number, folder?: string): Promise<PresignedUrlResult>;
74
- /**
75
- * Combines folder and filename into a full path.
76
- * Handles edge cases like leading/trailing slashes.
77
- */
78
- private buildFilePath;
79
- /**
80
- * Checks folder paths for security issues.
81
- * Blocks path traversal attempts and other sneaky tricks.
82
- */
83
- private validateFolderPath;
84
- /**
85
- * Checks if a string looks like a valid MIME type.
86
- */
87
- private isValidMimeType;
88
- /**
89
- * Converts bytes to a human-readable string like "5.2 MB".
90
- */
91
- private formatBytes;
92
- /**
93
- * Creates a presigned URL for viewing/downloading an existing file.
94
- *
95
- * Rate limiting: If configured, this counts toward the presigned URL rate limit.
96
- *
97
- * @param reference - The full path you got from generateUploadUrl
98
- */
99
- generateViewUrl(reference: string): Promise<PresignedUrlResult>;
100
- /**
101
- * Verifies that a presigned upload actually happened and the file is valid.
102
- *
103
- * For Azure, this is essential — Azure doesn't enforce file constraints at
104
- * the URL level, so we check the actual blob properties here.
105
- *
106
- * For S3/GCS, this confirms the file exists and optionally validates it.
107
- *
108
- * @param reference - The file path from generateUploadUrl
109
- * @param options - Expected content type and size to validate against
110
- *
111
- * @example
112
- * // After the client uploads, verify everything looks right
113
- * const result = await storage.validateAndConfirmUpload(reference, {
114
- * expectedContentType: 'image/jpeg',
115
- * expectedFileSize: 12345
116
- * });
117
- */
118
- validateAndConfirmUpload(reference: string, options?: BlobValidationOptions): Promise<BlobValidationResult>;
119
- /**
120
- * Returns true if you're using Azure presigned mode.
121
- *
122
- * This is your hint that you MUST call validateAndConfirmUpload()
123
- * after presigned uploads — Azure doesn't enforce constraints otherwise.
124
- */
125
- requiresPostUploadValidation(): boolean;
126
- /**
127
- * Creates presigned upload URLs for multiple files at once.
128
- * Great for batch uploads or when letting users select multiple files.
129
- *
130
- * @param files - Array of filenames (strings) or file metadata objects
131
- * @param folder - Optional folder to put all files in
132
- */
133
- generateUploadUrls(files: (string | FileMetadata)[], folder?: string): Promise<PresignedUrlResult[]>;
134
- /**
135
- * Creates presigned view URLs for multiple files at once.
136
- * Useful when displaying a gallery or list of downloadable files.
137
- */
138
- generateViewUrls(references: string[]): Promise<PresignedUrlResult[]>;
139
- /**
140
- * Deletes a single file from storage.
141
- *
142
- * @param reference - The full path from uploadFile result or generateUploadUrl
143
- * @returns true if deleted, false if not found
144
- */
145
- deleteFile(reference: string): Promise<boolean>;
146
- /**
147
- * Deletes multiple files at once.
148
- * Returns detailed results so you know exactly what succeeded and what failed.
149
- */
150
- deleteFiles(references: string[]): Promise<DeleteResult[]>;
151
- /**
152
- * Lists files in your storage with optional filtering and pagination.
153
- *
154
- * @param prefix - Only show files starting with this path (e.g., 'uploads/2026/')
155
- * @param maxResults - How many files to return per page (default: 1000)
156
- * @param continuationToken - Pass the nextToken from a previous response to get the next page
157
- *
158
- * @example
159
- * // Get all files
160
- * const result = await storage.listFiles();
161
- *
162
- * // Get files in a specific folder
163
- * const result = await storage.listFiles('users/123/');
164
- *
165
- * // Paginate through large results
166
- * let result = await storage.listFiles(undefined, 100);
167
- * while (result.nextToken) {
168
- * result = await storage.listFiles(undefined, 100, result.nextToken);
169
- * }
170
- */
171
- listFiles(prefix?: string, maxResults?: number, continuationToken?: string): Promise<ListFilesResult>;
172
- /**
173
- * Returns a copy of the current configuration.
174
- *
175
- * WARNING: This includes sensitive credentials like AWS keys, Azure connection strings, etc.
176
- * Use getSafeConfig() instead if you're logging or exposing this to users.
177
- */
178
- getConfig(): StorageConfig;
179
- /**
180
- * Returns a copy of the configuration with sensitive values masked.
181
- * Safe for logging, debugging, or displaying to users.
182
- *
183
- * Masked fields: awsAccessKey, awsSecretKey, azureConnectionString,
184
- * azureAccountKey, gcsCredentials
185
- */
186
- getSafeConfig(): StorageConfig;
187
- /**
188
- * Returns which storage driver is currently active.
189
- */
190
- getDriverType(): StorageDriver;
191
- /**
192
- * Returns true if the driver operates in presigned mode.
193
- *
194
- * In presigned mode, upload() returns URLs instead of uploading directly.
195
- * All cloud drivers can generate presigned URLs via generateUploadUrl()
196
- * regardless of this setting.
197
- */
198
- isPresignedUploadMode(): boolean;
199
- /**
200
- * Returns rate limit status information.
201
- * Returns null if rate limiting is not configured.
202
- *
203
- * @example
204
- * const status = storage.getRateLimitStatus();
205
- * if (status && status.remainingRequests === 0) {
206
- * console.log(`Rate limited. Resets in ${status.resetTimeMs}ms`);
207
- * }
208
- */
209
- getRateLimitStatus(): {
210
- remainingRequests: number;
211
- resetTimeMs: number;
212
- } | null;
213
- /**
214
- * Returns all available storage drivers.
215
- */
216
- static getAvailableDrivers(): StorageDriver[];
217
- /**
218
- * Clears the internal driver cache.
219
- * Useful in tests or when you've changed credentials.
220
- */
221
- static clearCache(): void;
222
- /**
223
- * Validates a file against the provided rules.
224
- * Returns an error message if validation fails, null if it passes.
225
- */
226
- private validateFile;
227
- }
228
- //# sourceMappingURL=storage-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../src/storage-manager.ts"],"names":[],"mappings":"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"}