ceph-link 1.0.0 → 1.2.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 (138) hide show
  1. package/README.md +26 -11
  2. package/dist/app.controller.d.ts +7 -0
  3. package/dist/app.controller.d.ts.map +1 -0
  4. package/dist/app.controller.js +34 -0
  5. package/dist/app.controller.js.map +1 -0
  6. package/dist/app.module.d.ts +3 -0
  7. package/dist/app.module.d.ts.map +1 -0
  8. package/dist/app.module.js +29 -0
  9. package/dist/app.module.js.map +1 -0
  10. package/dist/app.service.d.ts +4 -0
  11. package/dist/app.service.d.ts.map +1 -0
  12. package/dist/app.service.js +20 -0
  13. package/dist/app.service.js.map +1 -0
  14. package/dist/ceph-s3-sdk.d.ts +15 -0
  15. package/dist/ceph-s3-sdk.d.ts.map +1 -0
  16. package/dist/ceph-s3-sdk.js +27 -0
  17. package/dist/ceph-s3-sdk.js.map +1 -0
  18. package/dist/ceph-s3-sdk.module.d.ts +10 -0
  19. package/dist/ceph-s3-sdk.module.d.ts.map +1 -0
  20. package/dist/ceph-s3-sdk.module.js +72 -0
  21. package/dist/ceph-s3-sdk.module.js.map +1 -0
  22. package/dist/cephcore-sdk.d.ts +44 -0
  23. package/dist/cephcore-sdk.d.ts.map +1 -0
  24. package/dist/cephcore-sdk.js +98 -0
  25. package/dist/cephcore-sdk.js.map +1 -0
  26. package/dist/config/ceph-s3-config.service.d.ts +7 -0
  27. package/dist/config/ceph-s3-config.service.d.ts.map +1 -0
  28. package/dist/config/ceph-s3-config.service.js +42 -0
  29. package/dist/config/ceph-s3-config.service.js.map +1 -0
  30. package/dist/core/types.d.ts +22 -0
  31. package/dist/core/types.d.ts.map +1 -0
  32. package/dist/core/types.js +3 -0
  33. package/dist/core/types.js.map +1 -0
  34. package/dist/dto/bucket.dto.d.ts +9 -0
  35. package/dist/dto/bucket.dto.d.ts.map +1 -0
  36. package/dist/dto/bucket.dto.js +40 -0
  37. package/dist/dto/bucket.dto.js.map +1 -0
  38. package/dist/dto/object.dto.d.ts +14 -0
  39. package/dist/dto/object.dto.d.ts.map +1 -0
  40. package/dist/dto/object.dto.js +65 -0
  41. package/dist/dto/object.dto.js.map +1 -0
  42. package/dist/exceptions/ceph-exceptions.d.ts +28 -0
  43. package/dist/exceptions/ceph-exceptions.d.ts.map +1 -0
  44. package/dist/exceptions/ceph-exceptions.js +56 -0
  45. package/dist/exceptions/ceph-exceptions.js.map +1 -0
  46. package/dist/helpers/download-helper.d.ts +32 -0
  47. package/dist/helpers/download-helper.d.ts.map +1 -0
  48. package/dist/helpers/download-helper.js +218 -0
  49. package/dist/helpers/download-helper.js.map +1 -0
  50. package/dist/helpers/search-helper.d.ts +57 -0
  51. package/dist/helpers/search-helper.d.ts.map +1 -0
  52. package/dist/helpers/search-helper.js +279 -0
  53. package/dist/helpers/search-helper.js.map +1 -0
  54. package/dist/helpers/upload-helper.d.ts +37 -0
  55. package/dist/helpers/upload-helper.d.ts.map +1 -0
  56. package/dist/helpers/upload-helper.js +204 -0
  57. package/dist/helpers/upload-helper.js.map +1 -0
  58. package/dist/index.d.ts +26 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +65 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/interfaces/bucket.interface.d.ts +26 -0
  63. package/dist/interfaces/bucket.interface.d.ts.map +1 -0
  64. package/dist/interfaces/bucket.interface.js +3 -0
  65. package/dist/interfaces/bucket.interface.js.map +1 -0
  66. package/dist/interfaces/ceph-s3-options.interface.d.ts +39 -0
  67. package/dist/interfaces/ceph-s3-options.interface.d.ts.map +1 -0
  68. package/dist/interfaces/ceph-s3-options.interface.js +3 -0
  69. package/dist/interfaces/ceph-s3-options.interface.js.map +1 -0
  70. package/dist/interfaces/config.interface.d.ts +25 -0
  71. package/dist/interfaces/config.interface.d.ts.map +1 -0
  72. package/dist/interfaces/config.interface.js +3 -0
  73. package/dist/interfaces/config.interface.js.map +1 -0
  74. package/dist/interfaces/file.interface.d.ts +54 -0
  75. package/dist/interfaces/file.interface.d.ts.map +1 -0
  76. package/dist/interfaces/file.interface.js +3 -0
  77. package/dist/interfaces/file.interface.js.map +1 -0
  78. package/dist/interfaces/folder.interface.d.ts +31 -0
  79. package/dist/interfaces/folder.interface.d.ts.map +1 -0
  80. package/dist/interfaces/folder.interface.js +3 -0
  81. package/dist/interfaces/folder.interface.js.map +1 -0
  82. package/dist/main.d.ts +2 -0
  83. package/dist/main.d.ts.map +1 -0
  84. package/dist/main.js +10 -0
  85. package/dist/main.js.map +1 -0
  86. package/dist/managers/bucket-manager.d.ts +36 -0
  87. package/dist/managers/bucket-manager.d.ts.map +1 -0
  88. package/dist/managers/bucket-manager.js +195 -0
  89. package/dist/managers/bucket-manager.js.map +1 -0
  90. package/dist/managers/file-manager.d.ts +35 -0
  91. package/dist/managers/file-manager.d.ts.map +1 -0
  92. package/dist/managers/file-manager.js +238 -0
  93. package/dist/managers/file-manager.js.map +1 -0
  94. package/dist/managers/folder-manager.d.ts +31 -0
  95. package/dist/managers/folder-manager.d.ts.map +1 -0
  96. package/dist/managers/folder-manager.js +231 -0
  97. package/dist/managers/folder-manager.js.map +1 -0
  98. package/dist/services/bucket.service.d.ts +16 -0
  99. package/dist/services/bucket.service.d.ts.map +1 -0
  100. package/dist/services/bucket.service.js +176 -0
  101. package/dist/services/bucket.service.js.map +1 -0
  102. package/dist/services/ceph-s3.service.d.ts +14 -0
  103. package/dist/services/ceph-s3.service.d.ts.map +1 -0
  104. package/dist/services/ceph-s3.service.js +71 -0
  105. package/dist/services/ceph-s3.service.js.map +1 -0
  106. package/dist/services/file.service.d.ts +19 -0
  107. package/dist/services/file.service.d.ts.map +1 -0
  108. package/dist/services/file.service.js +85 -0
  109. package/dist/services/file.service.js.map +1 -0
  110. package/dist/services/folder.service.d.ts +21 -0
  111. package/dist/services/folder.service.d.ts.map +1 -0
  112. package/dist/services/folder.service.js +181 -0
  113. package/dist/services/folder.service.js.map +1 -0
  114. package/dist/services/object.service.d.ts +24 -0
  115. package/dist/services/object.service.d.ts.map +1 -0
  116. package/dist/services/object.service.js +231 -0
  117. package/dist/services/object.service.js.map +1 -0
  118. package/dist/services/storage.service.d.ts +36 -0
  119. package/dist/services/storage.service.d.ts.map +1 -0
  120. package/dist/services/storage.service.js +165 -0
  121. package/dist/services/storage.service.js.map +1 -0
  122. package/dist/utils/error.utils.d.ts +41 -0
  123. package/dist/utils/error.utils.d.ts.map +1 -0
  124. package/dist/utils/error.utils.js +111 -0
  125. package/dist/utils/error.utils.js.map +1 -0
  126. package/dist/utils/mime-helper.d.ts +10 -0
  127. package/dist/utils/mime-helper.d.ts.map +1 -0
  128. package/dist/utils/mime-helper.js +87 -0
  129. package/dist/utils/mime-helper.js.map +1 -0
  130. package/dist/utils/path-helper.d.ts +12 -0
  131. package/dist/utils/path-helper.d.ts.map +1 -0
  132. package/dist/utils/path-helper.js +46 -0
  133. package/dist/utils/path-helper.js.map +1 -0
  134. package/dist/utils/validators.d.ts +37 -0
  135. package/dist/utils/validators.d.ts.map +1 -0
  136. package/dist/utils/validators.js +218 -0
  137. package/dist/utils/validators.js.map +1 -0
  138. package/package.json +7 -7
package/dist/index.js ADDED
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.CephS3SDKModule = exports.CephS3ConfigService = exports.Validators = exports.MimeHelper = exports.PathHelper = exports.SearchHelper = exports.DownloadHelper = exports.UploadHelper = exports.FolderManager = exports.FileManager = exports.BucketManager = exports.StorageService = exports.FileService = exports.FolderService = exports.ObjectService = exports.BucketService = exports.CephS3Service = exports.CephCoreSDK = void 0;
18
+ // Main SDK Export
19
+ var cephcore_sdk_1 = require("./cephcore-sdk");
20
+ Object.defineProperty(exports, "CephCoreSDK", { enumerable: true, get: function () { return cephcore_sdk_1.CephCoreSDK; } });
21
+ // Core Services
22
+ var ceph_s3_service_1 = require("./services/ceph-s3.service");
23
+ Object.defineProperty(exports, "CephS3Service", { enumerable: true, get: function () { return ceph_s3_service_1.CephS3Service; } });
24
+ var bucket_service_1 = require("./services/bucket.service");
25
+ Object.defineProperty(exports, "BucketService", { enumerable: true, get: function () { return bucket_service_1.BucketService; } });
26
+ var object_service_1 = require("./services/object.service");
27
+ Object.defineProperty(exports, "ObjectService", { enumerable: true, get: function () { return object_service_1.ObjectService; } });
28
+ var folder_service_1 = require("./services/folder.service");
29
+ Object.defineProperty(exports, "FolderService", { enumerable: true, get: function () { return folder_service_1.FolderService; } });
30
+ var file_service_1 = require("./services/file.service");
31
+ Object.defineProperty(exports, "FileService", { enumerable: true, get: function () { return file_service_1.FileService; } });
32
+ var storage_service_1 = require("./services/storage.service");
33
+ Object.defineProperty(exports, "StorageService", { enumerable: true, get: function () { return storage_service_1.StorageService; } });
34
+ // Managers
35
+ var bucket_manager_1 = require("./managers/bucket-manager");
36
+ Object.defineProperty(exports, "BucketManager", { enumerable: true, get: function () { return bucket_manager_1.BucketManager; } });
37
+ var file_manager_1 = require("./managers/file-manager");
38
+ Object.defineProperty(exports, "FileManager", { enumerable: true, get: function () { return file_manager_1.FileManager; } });
39
+ var folder_manager_1 = require("./managers/folder-manager");
40
+ Object.defineProperty(exports, "FolderManager", { enumerable: true, get: function () { return folder_manager_1.FolderManager; } });
41
+ // Helpers
42
+ var upload_helper_1 = require("./helpers/upload-helper");
43
+ Object.defineProperty(exports, "UploadHelper", { enumerable: true, get: function () { return upload_helper_1.UploadHelper; } });
44
+ var download_helper_1 = require("./helpers/download-helper");
45
+ Object.defineProperty(exports, "DownloadHelper", { enumerable: true, get: function () { return download_helper_1.DownloadHelper; } });
46
+ var search_helper_1 = require("./helpers/search-helper");
47
+ Object.defineProperty(exports, "SearchHelper", { enumerable: true, get: function () { return search_helper_1.SearchHelper; } });
48
+ // Utilities
49
+ var path_helper_1 = require("./utils/path-helper");
50
+ Object.defineProperty(exports, "PathHelper", { enumerable: true, get: function () { return path_helper_1.PathHelper; } });
51
+ var mime_helper_1 = require("./utils/mime-helper");
52
+ Object.defineProperty(exports, "MimeHelper", { enumerable: true, get: function () { return mime_helper_1.MimeHelper; } });
53
+ var validators_1 = require("./utils/validators");
54
+ Object.defineProperty(exports, "Validators", { enumerable: true, get: function () { return validators_1.Validators; } });
55
+ // Exceptions
56
+ __exportStar(require("./exceptions/ceph-exceptions"), exports);
57
+ // Configuration
58
+ var ceph_s3_config_service_1 = require("./config/ceph-s3-config.service");
59
+ Object.defineProperty(exports, "CephS3ConfigService", { enumerable: true, get: function () { return ceph_s3_config_service_1.CephS3ConfigService; } });
60
+ // NestJS Module
61
+ var ceph_s3_sdk_module_1 = require("./ceph-s3-sdk.module");
62
+ Object.defineProperty(exports, "CephS3SDKModule", { enumerable: true, get: function () { return ceph_s3_sdk_module_1.CephS3SDKModule; } });
63
+ // Default export for convenience
64
+ // export default CephCoreSDK;
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kBAAkB;AAClB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAEpB,gBAAgB;AAChB,8DAA2D;AAAlD,gHAAA,aAAa,OAAA;AACtB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AAEvB,WAAW;AACX,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AAEtB,UAAU;AACV,yDAAuD;AAA9C,6GAAA,YAAY,OAAA;AACrB,6DAA2D;AAAlD,iHAAA,cAAc,OAAA;AACvB,yDAAuD;AAA9C,6GAAA,YAAY,OAAA;AAErB,YAAY;AACZ,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;AACnB,iDAAgD;AAAvC,wGAAA,UAAU,OAAA;AAyCnB,aAAa;AACb,+DAA6C;AAE7C,gBAAgB;AAChB,0EAAsE;AAA7D,6HAAA,mBAAmB,OAAA;AAE5B,gBAAgB;AAChB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,iCAAiC;AACjC,8BAA8B"}
@@ -0,0 +1,26 @@
1
+ import { BucketName, Timestamp, FileSize } from '../core/types';
2
+ import { CephFile } from './file.interface';
3
+ export interface CephBucket {
4
+ name: BucketName;
5
+ creationDate: Timestamp;
6
+ region: string;
7
+ totalFiles: number;
8
+ totalSize: FileSize;
9
+ isEmpty: boolean;
10
+ }
11
+ export interface BucketStats {
12
+ name: BucketName;
13
+ fileCount: number;
14
+ folderCount: number;
15
+ totalSize: FileSize;
16
+ lastModified: Timestamp;
17
+ oldestFile?: CephFile;
18
+ newestFile?: CephFile;
19
+ largestFile?: CephFile;
20
+ }
21
+ export interface BucketCreateOptions {
22
+ region?: string;
23
+ acl?: string;
24
+ versioning?: boolean;
25
+ }
26
+ //# sourceMappingURL=bucket.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bucket.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=bucket.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket.interface.js","sourceRoot":"","sources":["../../src/interfaces/bucket.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ export interface CephS3Options {
2
+ endpoint: string;
3
+ accessKeyId: string;
4
+ secretAccessKey: string;
5
+ region?: string;
6
+ sslEnabled?: boolean;
7
+ pathStyle?: boolean;
8
+ signatureVersion?: string;
9
+ rejectUnauthorized?: boolean;
10
+ proxy?: string;
11
+ }
12
+ export interface S3Object {
13
+ key: string;
14
+ size: number;
15
+ lastModified: Date;
16
+ etag: string;
17
+ storageClass: string;
18
+ }
19
+ export interface S3Bucket {
20
+ name: string;
21
+ creationDate: Date;
22
+ }
23
+ export interface UploadOptions {
24
+ contentType?: string;
25
+ metadata?: Record<string, string>;
26
+ serverSideEncryption?: string;
27
+ acl?: string;
28
+ }
29
+ export interface ListObjectsOptions {
30
+ prefix?: string;
31
+ delimiter?: string;
32
+ maxKeys?: number;
33
+ continuationToken?: string;
34
+ }
35
+ export interface PresignedUrlOptions {
36
+ expiresIn?: number;
37
+ responseHeaders?: Record<string, string>;
38
+ }
39
+ //# sourceMappingURL=ceph-s3-options.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ceph-s3-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/ceph-s3-options.interface.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ceph-s3-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ceph-s3-options.interface.js","sourceRoot":"","sources":["../../src/interfaces/ceph-s3-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { CephCredentials } from '../core/types';
2
+ export interface CephCoreConfig {
3
+ endpoint: string;
4
+ credentials: CephCredentials;
5
+ region?: string;
6
+ ssl?: boolean;
7
+ pathStyle?: boolean;
8
+ timeout?: number;
9
+ retries?: number;
10
+ debug?: boolean;
11
+ proxy?: string;
12
+ }
13
+ export interface CephCoreOptions {
14
+ endpoint: string;
15
+ accessKeyId: string;
16
+ secretAccessKey: string;
17
+ region?: string;
18
+ sslEnabled?: boolean;
19
+ pathStyle?: boolean;
20
+ timeout?: number;
21
+ retries?: number;
22
+ debug?: boolean;
23
+ proxy?: string;
24
+ }
25
+ //# sourceMappingURL=config.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/config.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,eAAe,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=config.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.interface.js","sourceRoot":"","sources":["../../src/interfaces/config.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { FileSize, Timestamp, ETag, ContentType, FilePath } from '../core/types';
2
+ export interface UploadProgress {
3
+ loaded: number;
4
+ total: number;
5
+ percentage: number;
6
+ }
7
+ export interface DownloadProgress {
8
+ loaded: number;
9
+ total: number;
10
+ percentage: number;
11
+ }
12
+ export interface CephFile {
13
+ key: FilePath;
14
+ name: string;
15
+ size: FileSize;
16
+ lastModified: Timestamp;
17
+ etag: ETag;
18
+ contentType: ContentType;
19
+ isFolder: boolean;
20
+ metadata?: Record<string, string>;
21
+ url?: string;
22
+ storageClass?: string;
23
+ }
24
+ export interface FileUploadOptions {
25
+ contentType?: ContentType;
26
+ metadata?: Record<string, string>;
27
+ acl?: string;
28
+ serverSideEncryption?: string;
29
+ onProgress?: (progress: UploadProgress) => void;
30
+ overwrite?: boolean;
31
+ }
32
+ export interface FileDownloadOptions {
33
+ onProgress?: (progress: DownloadProgress) => void;
34
+ range?: {
35
+ start?: number;
36
+ end?: number;
37
+ };
38
+ responseHeaders?: Record<string, string>;
39
+ }
40
+ export interface FileSearchOptions {
41
+ prefix?: string;
42
+ extension?: string;
43
+ minSize?: FileSize;
44
+ maxSize?: FileSize;
45
+ modifiedAfter?: Timestamp;
46
+ modifiedBefore?: Timestamp;
47
+ recursive?: boolean;
48
+ }
49
+ export interface FileCopyOptions {
50
+ preserveMetadata?: boolean;
51
+ newMetadata?: Record<string, string>;
52
+ newContentType?: ContentType;
53
+ }
54
+ //# sourceMappingURL=file.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/file.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,SAAS,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,WAAW,CAAC;CAC9B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=file.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.interface.js","sourceRoot":"","sources":["../../src/interfaces/file.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { CephFile } from './file.interface';
2
+ import { FolderPath, FileSize } from '../core/types';
3
+ export interface CephFolder {
4
+ path: FolderPath;
5
+ name: string;
6
+ files: CephFile[];
7
+ subfolders: CephFolder[];
8
+ totalFiles: number;
9
+ totalSize: FileSize;
10
+ isEmpty: boolean;
11
+ }
12
+ export interface FolderContents {
13
+ files: CephFile[];
14
+ folders: string[];
15
+ totalFiles: number;
16
+ totalFolders: number;
17
+ totalSize: FileSize;
18
+ }
19
+ export interface FolderCreateOptions {
20
+ recursive?: boolean;
21
+ metadata?: Record<string, string>;
22
+ }
23
+ export interface FolderListOptions {
24
+ recursive?: boolean;
25
+ includeFiles?: boolean;
26
+ includeSubfolders?: boolean;
27
+ maxItems?: number;
28
+ sortBy?: 'name' | 'size' | 'modified';
29
+ sortOrder?: 'asc' | 'desc';
30
+ }
31
+ //# sourceMappingURL=folder.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/folder.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACtC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=folder.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder.interface.js","sourceRoot":"","sources":["../../src/interfaces/folder.interface.ts"],"names":[],"mappings":""}
package/dist/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@nestjs/core");
4
+ const app_module_1 = require("./app.module");
5
+ async function bootstrap() {
6
+ const app = await core_1.NestFactory.create(app_module_1.AppModule);
7
+ await app.listen(process.env.PORT ?? 3000);
8
+ }
9
+ bootstrap();
10
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAChD,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAC7C,CAAC;AACD,SAAS,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { BucketService } from '../services/bucket.service';
2
+ import { FileManager } from './file-manager';
3
+ import { FolderManager } from './folder-manager';
4
+ import { CephBucket, BucketStats, BucketCreateOptions } from '../interfaces/bucket.interface';
5
+ import { BucketName, FileSize } from '../core/types';
6
+ export declare class BucketManager {
7
+ private readonly bucketService;
8
+ private readonly fileManager;
9
+ private readonly folderManager;
10
+ constructor(bucketService: BucketService, fileManager: FileManager, folderManager: FolderManager);
11
+ createBucket(bucketName: BucketName, options?: BucketCreateOptions): Promise<CephBucket>;
12
+ deleteBucket(bucketName: BucketName, force?: boolean): Promise<void>;
13
+ listBuckets(): Promise<CephBucket[]>;
14
+ getBucketInfo(bucketName: BucketName): Promise<CephBucket>;
15
+ bucketExists(bucketName: BucketName): Promise<boolean>;
16
+ private getBucketRegion;
17
+ getBucketStats(bucketName: BucketName): Promise<BucketStats>;
18
+ getBucketSizeByCategory(bucketName: BucketName): Promise<{
19
+ images: FileSize;
20
+ videos: FileSize;
21
+ documents: FileSize;
22
+ audio: FileSize;
23
+ other: FileSize;
24
+ }>;
25
+ private getFileCategory;
26
+ syncBuckets(sourceBucket: BucketName, destBucket: BucketName, onProgress?: (current: number, total: number) => void): Promise<void>;
27
+ findDuplicateFiles(bucketName: BucketName): Promise<Array<{
28
+ etag: string;
29
+ files: Array<{
30
+ path: string;
31
+ size: FileSize;
32
+ }>;
33
+ }>>;
34
+ cleanupOldFiles(bucketName: BucketName, olderThanDays: number, dryRun?: boolean): Promise<string[]>;
35
+ }
36
+ //# sourceMappingURL=bucket-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-manager.d.ts","sourceRoot":"","sources":["../../src/managers/bucket-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE9F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa;IAKzC,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAKhB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3E,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAwBpC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA0B1D,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;YAI9C,eAAe;IAUvB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA6B5D,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;QAC7D,MAAM,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,QAAQ,CAAC;QACjB,SAAS,EAAE,QAAQ,CAAC;QACpB,KAAK,EAAE,QAAQ,CAAC;QAChB,KAAK,EAAE,QAAQ,CAAC;KACjB,CAAC;IAmBF,OAAO,CAAC,eAAe;IAiBjB,WAAW,CACf,YAAY,EAAE,UAAU,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACpD,OAAO,CAAC,IAAI,CAAC;IAoBV,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9D,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,QAAQ,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC,CAAC;IAkBG,eAAe,CACnB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,OAAc,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC;CAgBrB"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BucketManager = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const bucket_service_1 = require("../services/bucket.service");
15
+ const file_manager_1 = require("./file-manager");
16
+ const folder_manager_1 = require("./folder-manager");
17
+ const ceph_exceptions_1 = require("../exceptions/ceph-exceptions");
18
+ let BucketManager = class BucketManager {
19
+ constructor(bucketService, fileManager, folderManager) {
20
+ this.bucketService = bucketService;
21
+ this.fileManager = fileManager;
22
+ this.folderManager = folderManager;
23
+ }
24
+ // ================== BUCKET OPERATIONS ==================
25
+ async createBucket(bucketName, options) {
26
+ await this.bucketService.createBucket(bucketName, options?.region);
27
+ return this.getBucketInfo(bucketName);
28
+ }
29
+ async deleteBucket(bucketName, force = false) {
30
+ const exists = await this.bucketExists(bucketName);
31
+ if (!exists) {
32
+ throw new ceph_exceptions_1.BucketNotFoundError(bucketName);
33
+ }
34
+ await this.bucketService.deleteBucket(bucketName, force);
35
+ }
36
+ async listBuckets() {
37
+ const buckets = await this.bucketService.listBuckets();
38
+ const enhancedBuckets = [];
39
+ for (const bucket of buckets) {
40
+ try {
41
+ const bucketInfo = await this.getBucketInfo(bucket.name);
42
+ enhancedBuckets.push(bucketInfo);
43
+ }
44
+ catch (error) {
45
+ // If we can't get info for a bucket, include basic info
46
+ enhancedBuckets.push({
47
+ name: bucket.name,
48
+ creationDate: bucket.creationDate,
49
+ region: 'unknown',
50
+ totalFiles: 0,
51
+ totalSize: 0,
52
+ isEmpty: true,
53
+ });
54
+ }
55
+ }
56
+ return enhancedBuckets;
57
+ }
58
+ async getBucketInfo(bucketName) {
59
+ const exists = await this.bucketExists(bucketName);
60
+ if (!exists) {
61
+ throw new ceph_exceptions_1.BucketNotFoundError(bucketName);
62
+ }
63
+ const buckets = await this.bucketService.listBuckets();
64
+ const bucketData = buckets.find(b => b.name === bucketName);
65
+ if (!bucketData) {
66
+ throw new ceph_exceptions_1.BucketNotFoundError(bucketName);
67
+ }
68
+ // Get folder contents to calculate stats
69
+ const contents = await this.folderManager.getFolderContents(bucketName);
70
+ return {
71
+ name: bucketName,
72
+ creationDate: bucketData.creationDate,
73
+ region: await this.getBucketRegion(bucketName),
74
+ totalFiles: contents.totalFiles,
75
+ totalSize: contents.totalSize,
76
+ isEmpty: contents.totalFiles === 0,
77
+ };
78
+ }
79
+ async bucketExists(bucketName) {
80
+ return this.bucketService.bucketExists(bucketName);
81
+ }
82
+ async getBucketRegion(bucketName) {
83
+ try {
84
+ return await this.bucketService.getBucketLocation(bucketName);
85
+ }
86
+ catch (error) {
87
+ return 'unknown';
88
+ }
89
+ }
90
+ // ================== BUCKET STATISTICS ==================
91
+ async getBucketStats(bucketName) {
92
+ const exists = await this.bucketExists(bucketName);
93
+ if (!exists) {
94
+ throw new ceph_exceptions_1.BucketNotFoundError(bucketName);
95
+ }
96
+ const allFiles = await this.folderManager.getAllFiles(bucketName);
97
+ const allFolders = await this.folderManager.getAllFolders(bucketName);
98
+ const totalSize = allFiles.reduce((sum, file) => sum + file.size, 0);
99
+ // Find oldest, newest, and largest files
100
+ const sortedByDate = [...allFiles].sort((a, b) => a.lastModified.getTime() - b.lastModified.getTime());
101
+ const sortedBySize = [...allFiles].sort((a, b) => b.size - a.size);
102
+ const bucketData = await this.getBucketInfo(bucketName);
103
+ return {
104
+ name: bucketName,
105
+ fileCount: allFiles.length,
106
+ folderCount: allFolders.length,
107
+ totalSize,
108
+ lastModified: sortedByDate.length > 0 ? sortedByDate[sortedByDate.length - 1].lastModified : bucketData.creationDate,
109
+ oldestFile: sortedByDate.length > 0 ? sortedByDate[0] : undefined,
110
+ newestFile: sortedByDate.length > 0 ? sortedByDate[sortedByDate.length - 1] : undefined,
111
+ largestFile: sortedBySize.length > 0 ? sortedBySize[0] : undefined,
112
+ };
113
+ }
114
+ async getBucketSizeByCategory(bucketName) {
115
+ const allFiles = await this.folderManager.getAllFiles(bucketName);
116
+ const sizes = {
117
+ images: 0,
118
+ videos: 0,
119
+ documents: 0,
120
+ audio: 0,
121
+ other: 0,
122
+ };
123
+ for (const file of allFiles) {
124
+ const category = this.getFileCategory(file.name);
125
+ sizes[category] += file.size;
126
+ }
127
+ return sizes;
128
+ }
129
+ getFileCategory(filename) {
130
+ const extension = filename.split('.').pop()?.toLowerCase() || '';
131
+ const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp', 'ico'];
132
+ const videoExts = ['mp4', 'avi', 'mov', 'wmv', 'webm', 'flv', 'mkv'];
133
+ const documentExts = ['pdf', 'doc', 'docx', 'txt', 'md', 'rtf', 'odt'];
134
+ const audioExts = ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a'];
135
+ if (imageExts.includes(extension))
136
+ return 'images';
137
+ if (videoExts.includes(extension))
138
+ return 'videos';
139
+ if (documentExts.includes(extension))
140
+ return 'documents';
141
+ if (audioExts.includes(extension))
142
+ return 'audio';
143
+ return 'other';
144
+ }
145
+ // ================== BUCKET UTILITIES ==================
146
+ async syncBuckets(sourceBucket, destBucket, onProgress) {
147
+ const sourceFiles = await this.folderManager.getAllFiles(sourceBucket);
148
+ for (let i = 0; i < sourceFiles.length; i++) {
149
+ const file = sourceFiles[i];
150
+ // Check if file exists in destination
151
+ const destExists = await this.fileManager.fileExists(destBucket, file.key);
152
+ if (!destExists) {
153
+ // Copy file
154
+ await this.fileManager.copyFile(sourceBucket, file.key, destBucket, file.key);
155
+ }
156
+ if (onProgress) {
157
+ onProgress(i + 1, sourceFiles.length);
158
+ }
159
+ }
160
+ }
161
+ async findDuplicateFiles(bucketName) {
162
+ const allFiles = await this.folderManager.getAllFiles(bucketName);
163
+ const duplicateMap = new Map();
164
+ for (const file of allFiles) {
165
+ if (!duplicateMap.has(file.etag)) {
166
+ duplicateMap.set(file.etag, []);
167
+ }
168
+ duplicateMap.get(file.etag).push({ path: file.key, size: file.size });
169
+ }
170
+ const duplicates = Array.from(duplicateMap.entries())
171
+ .filter(([etag, files]) => files.length > 1)
172
+ .map(([etag, files]) => ({ etag, files }));
173
+ return duplicates;
174
+ }
175
+ async cleanupOldFiles(bucketName, olderThanDays, dryRun = true) {
176
+ const cutoffDate = new Date();
177
+ cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);
178
+ const oldFiles = await this.fileManager.searchFiles(bucketName, {
179
+ modifiedBefore: cutoffDate,
180
+ });
181
+ const filePaths = oldFiles.map(file => file.key);
182
+ if (!dryRun && filePaths.length > 0) {
183
+ await this.fileManager.deleteMultipleFiles(bucketName, filePaths);
184
+ }
185
+ return filePaths;
186
+ }
187
+ };
188
+ exports.BucketManager = BucketManager;
189
+ exports.BucketManager = BucketManager = __decorate([
190
+ (0, common_1.Injectable)(),
191
+ __metadata("design:paramtypes", [bucket_service_1.BucketService,
192
+ file_manager_1.FileManager,
193
+ folder_manager_1.FolderManager])
194
+ ], BucketManager);
195
+ //# sourceMappingURL=bucket-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket-manager.js","sourceRoot":"","sources":["../../src/managers/bucket-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { ObjectService } from '../services/object.service';
2
+ import { CephFile, FileUploadOptions, FileDownloadOptions, FileSearchOptions, FileCopyOptions } from '../interfaces/file.interface';
3
+ import { BucketName, FilePath } from '../core/types';
4
+ export declare class FileManager {
5
+ private readonly objectService;
6
+ constructor(objectService: ObjectService);
7
+ uploadFile(bucket: BucketName, filePath: FilePath, content: Buffer | string | Uint8Array, options?: FileUploadOptions): Promise<CephFile>;
8
+ uploadFileFromPath(bucket: BucketName, localFilePath: string, remoteFilePath?: FilePath, options?: FileUploadOptions): Promise<CephFile>;
9
+ uploadMultipleFiles(bucket: BucketName, files: Array<{
10
+ path: FilePath;
11
+ content: Buffer | string;
12
+ options?: FileUploadOptions;
13
+ }>, onProgress?: (completed: number, total: number) => void): Promise<CephFile[]>;
14
+ downloadFile(bucket: BucketName, filePath: FilePath, options?: FileDownloadOptions): Promise<Buffer>;
15
+ downloadFileAsText(bucket: BucketName, filePath: FilePath, encoding?: BufferEncoding): Promise<string>;
16
+ downloadFileAsJson<T = any>(bucket: BucketName, filePath: FilePath): Promise<T>;
17
+ downloadFileToPath(bucket: BucketName, remoteFilePath: FilePath, localFilePath: string, options?: FileDownloadOptions): Promise<void>;
18
+ getFileInfo(bucket: BucketName, filePath: FilePath): Promise<CephFile>;
19
+ fileExists(bucket: BucketName, filePath: FilePath): Promise<boolean>;
20
+ getFileSize(bucket: BucketName, filePath: FilePath): Promise<number>;
21
+ getFileUrl(bucket: BucketName, filePath: FilePath, expiresIn?: number): Promise<string>;
22
+ copyFile(sourceBucket: BucketName, sourceFile: FilePath, destBucket: BucketName, destFile: FilePath, options?: FileCopyOptions): Promise<CephFile>;
23
+ moveFile(sourceBucket: BucketName, sourceFile: FilePath, destBucket: BucketName, destFile: FilePath, options?: FileCopyOptions): Promise<CephFile>;
24
+ renameFile(bucket: BucketName, oldPath: FilePath, newPath: FilePath): Promise<CephFile>;
25
+ deleteFile(bucket: BucketName, filePath: FilePath): Promise<void>;
26
+ deleteMultipleFiles(bucket: BucketName, filePaths: FilePath[]): Promise<void>;
27
+ searchFiles(bucket: BucketName, options?: FileSearchOptions): Promise<CephFile[]>;
28
+ getFilesByExtension(bucket: BucketName, extension: string, folderPath?: string): Promise<CephFile[]>;
29
+ getImageFiles(bucket: BucketName, folderPath?: string): Promise<CephFile[]>;
30
+ getDocumentFiles(bucket: BucketName, folderPath?: string): Promise<CephFile[]>;
31
+ getVideoFiles(bucket: BucketName, folderPath?: string): Promise<CephFile[]>;
32
+ getRecentFiles(bucket: BucketName, days?: number, folderPath?: string): Promise<CephFile[]>;
33
+ getLargeFiles(bucket: BucketName, minSizeMB?: number, folderPath?: string): Promise<CephFile[]>;
34
+ }
35
+ //# sourceMappingURL=file-manager.d.ts.map