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.
- package/README.md +26 -11
- package/dist/app.controller.d.ts +7 -0
- package/dist/app.controller.d.ts.map +1 -0
- package/dist/app.controller.js +34 -0
- package/dist/app.controller.js.map +1 -0
- package/dist/app.module.d.ts +3 -0
- package/dist/app.module.d.ts.map +1 -0
- package/dist/app.module.js +29 -0
- package/dist/app.module.js.map +1 -0
- package/dist/app.service.d.ts +4 -0
- package/dist/app.service.d.ts.map +1 -0
- package/dist/app.service.js +20 -0
- package/dist/app.service.js.map +1 -0
- package/dist/ceph-s3-sdk.d.ts +15 -0
- package/dist/ceph-s3-sdk.d.ts.map +1 -0
- package/dist/ceph-s3-sdk.js +27 -0
- package/dist/ceph-s3-sdk.js.map +1 -0
- package/dist/ceph-s3-sdk.module.d.ts +10 -0
- package/dist/ceph-s3-sdk.module.d.ts.map +1 -0
- package/dist/ceph-s3-sdk.module.js +72 -0
- package/dist/ceph-s3-sdk.module.js.map +1 -0
- package/dist/cephcore-sdk.d.ts +44 -0
- package/dist/cephcore-sdk.d.ts.map +1 -0
- package/dist/cephcore-sdk.js +98 -0
- package/dist/cephcore-sdk.js.map +1 -0
- package/dist/config/ceph-s3-config.service.d.ts +7 -0
- package/dist/config/ceph-s3-config.service.d.ts.map +1 -0
- package/dist/config/ceph-s3-config.service.js +42 -0
- package/dist/config/ceph-s3-config.service.js.map +1 -0
- package/dist/core/types.d.ts +22 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/dto/bucket.dto.d.ts +9 -0
- package/dist/dto/bucket.dto.d.ts.map +1 -0
- package/dist/dto/bucket.dto.js +40 -0
- package/dist/dto/bucket.dto.js.map +1 -0
- package/dist/dto/object.dto.d.ts +14 -0
- package/dist/dto/object.dto.d.ts.map +1 -0
- package/dist/dto/object.dto.js +65 -0
- package/dist/dto/object.dto.js.map +1 -0
- package/dist/exceptions/ceph-exceptions.d.ts +28 -0
- package/dist/exceptions/ceph-exceptions.d.ts.map +1 -0
- package/dist/exceptions/ceph-exceptions.js +56 -0
- package/dist/exceptions/ceph-exceptions.js.map +1 -0
- package/dist/helpers/download-helper.d.ts +32 -0
- package/dist/helpers/download-helper.d.ts.map +1 -0
- package/dist/helpers/download-helper.js +218 -0
- package/dist/helpers/download-helper.js.map +1 -0
- package/dist/helpers/search-helper.d.ts +57 -0
- package/dist/helpers/search-helper.d.ts.map +1 -0
- package/dist/helpers/search-helper.js +279 -0
- package/dist/helpers/search-helper.js.map +1 -0
- package/dist/helpers/upload-helper.d.ts +37 -0
- package/dist/helpers/upload-helper.d.ts.map +1 -0
- package/dist/helpers/upload-helper.js +204 -0
- package/dist/helpers/upload-helper.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/bucket.interface.d.ts +26 -0
- package/dist/interfaces/bucket.interface.d.ts.map +1 -0
- package/dist/interfaces/bucket.interface.js +3 -0
- package/dist/interfaces/bucket.interface.js.map +1 -0
- package/dist/interfaces/ceph-s3-options.interface.d.ts +39 -0
- package/dist/interfaces/ceph-s3-options.interface.d.ts.map +1 -0
- package/dist/interfaces/ceph-s3-options.interface.js +3 -0
- package/dist/interfaces/ceph-s3-options.interface.js.map +1 -0
- package/dist/interfaces/config.interface.d.ts +25 -0
- package/dist/interfaces/config.interface.d.ts.map +1 -0
- package/dist/interfaces/config.interface.js +3 -0
- package/dist/interfaces/config.interface.js.map +1 -0
- package/dist/interfaces/file.interface.d.ts +54 -0
- package/dist/interfaces/file.interface.d.ts.map +1 -0
- package/dist/interfaces/file.interface.js +3 -0
- package/dist/interfaces/file.interface.js.map +1 -0
- package/dist/interfaces/folder.interface.d.ts +31 -0
- package/dist/interfaces/folder.interface.d.ts.map +1 -0
- package/dist/interfaces/folder.interface.js +3 -0
- package/dist/interfaces/folder.interface.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +10 -0
- package/dist/main.js.map +1 -0
- package/dist/managers/bucket-manager.d.ts +36 -0
- package/dist/managers/bucket-manager.d.ts.map +1 -0
- package/dist/managers/bucket-manager.js +195 -0
- package/dist/managers/bucket-manager.js.map +1 -0
- package/dist/managers/file-manager.d.ts +35 -0
- package/dist/managers/file-manager.d.ts.map +1 -0
- package/dist/managers/file-manager.js +238 -0
- package/dist/managers/file-manager.js.map +1 -0
- package/dist/managers/folder-manager.d.ts +31 -0
- package/dist/managers/folder-manager.d.ts.map +1 -0
- package/dist/managers/folder-manager.js +231 -0
- package/dist/managers/folder-manager.js.map +1 -0
- package/dist/services/bucket.service.d.ts +16 -0
- package/dist/services/bucket.service.d.ts.map +1 -0
- package/dist/services/bucket.service.js +176 -0
- package/dist/services/bucket.service.js.map +1 -0
- package/dist/services/ceph-s3.service.d.ts +14 -0
- package/dist/services/ceph-s3.service.d.ts.map +1 -0
- package/dist/services/ceph-s3.service.js +71 -0
- package/dist/services/ceph-s3.service.js.map +1 -0
- package/dist/services/file.service.d.ts +19 -0
- package/dist/services/file.service.d.ts.map +1 -0
- package/dist/services/file.service.js +85 -0
- package/dist/services/file.service.js.map +1 -0
- package/dist/services/folder.service.d.ts +21 -0
- package/dist/services/folder.service.d.ts.map +1 -0
- package/dist/services/folder.service.js +181 -0
- package/dist/services/folder.service.js.map +1 -0
- package/dist/services/object.service.d.ts +24 -0
- package/dist/services/object.service.d.ts.map +1 -0
- package/dist/services/object.service.js +231 -0
- package/dist/services/object.service.js.map +1 -0
- package/dist/services/storage.service.d.ts +36 -0
- package/dist/services/storage.service.d.ts.map +1 -0
- package/dist/services/storage.service.js +165 -0
- package/dist/services/storage.service.js.map +1 -0
- package/dist/utils/error.utils.d.ts +41 -0
- package/dist/utils/error.utils.d.ts.map +1 -0
- package/dist/utils/error.utils.js +111 -0
- package/dist/utils/error.utils.js.map +1 -0
- package/dist/utils/mime-helper.d.ts +10 -0
- package/dist/utils/mime-helper.d.ts.map +1 -0
- package/dist/utils/mime-helper.js +87 -0
- package/dist/utils/mime-helper.js.map +1 -0
- package/dist/utils/path-helper.d.ts +12 -0
- package/dist/utils/path-helper.d.ts.map +1 -0
- package/dist/utils/path-helper.js +46 -0
- package/dist/utils/path-helper.js.map +1 -0
- package/dist/utils/validators.d.ts +37 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +218 -0
- package/dist/utils/validators.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
package/dist/main.js.map
ADDED
|
@@ -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
|