@internxt/cli 1.6.2 → 1.6.3
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 +410 -71
- package/dist/commands/add-cert.d.ts +1 -1
- package/dist/commands/add-cert.js +1 -1
- package/dist/commands/config.d.ts +7 -1
- package/dist/commands/config.js +36 -5
- package/dist/commands/create-folder.d.ts +2 -1
- package/dist/commands/create-folder.js +10 -7
- package/dist/commands/delete-permanently-file.d.ts +1 -0
- package/dist/commands/delete-permanently-folder.d.ts +1 -0
- package/dist/commands/download-file.d.ts +1 -0
- package/dist/commands/download-file.js +4 -2
- package/dist/commands/list.d.ts +1 -0
- package/dist/commands/list.js +2 -4
- package/dist/commands/login-legacy.d.ts +1 -0
- package/dist/commands/move-file.d.ts +1 -1
- package/dist/commands/move-file.js +7 -21
- package/dist/commands/move-folder.d.ts +1 -1
- package/dist/commands/move-folder.js +7 -21
- package/dist/commands/rename-file.d.ts +1 -0
- package/dist/commands/rename-folder.d.ts +1 -0
- package/dist/commands/trash-clear.d.ts +1 -0
- package/dist/commands/trash-file.d.ts +1 -0
- package/dist/commands/trash-folder.d.ts +1 -0
- package/dist/commands/trash-restore-file.d.ts +1 -1
- package/dist/commands/trash-restore-file.js +7 -21
- package/dist/commands/trash-restore-folder.d.ts +1 -1
- package/dist/commands/trash-restore-folder.js +7 -21
- package/dist/commands/upload-file.d.ts +4 -5
- package/dist/commands/upload-file.js +32 -21
- package/dist/commands/upload-folder.d.ts +1 -0
- package/dist/commands/upload-folder.js +11 -6
- package/dist/commands/webdav-config.d.ts +19 -1
- package/dist/commands/webdav-config.js +81 -3
- package/dist/commands/webdav.d.ts +1 -1
- package/dist/commands/webdav.js +10 -5
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/workspaces-list.d.ts +20 -0
- package/dist/commands/workspaces-list.js +67 -0
- package/dist/commands/workspaces-unset.d.ts +23 -0
- package/dist/commands/workspaces-unset.js +45 -0
- package/dist/commands/workspaces-use.d.ts +27 -0
- package/dist/commands/workspaces-use.js +113 -0
- package/dist/constants/configs.d.ts +2 -1
- package/dist/constants/configs.js +4 -3
- package/dist/hooks/prerun/auth_check.js +13 -4
- package/dist/services/auth.service.d.ts +5 -2
- package/dist/services/auth.service.js +69 -12
- package/dist/services/config.service.d.ts +1 -1
- package/dist/services/config.service.js +12 -4
- package/dist/services/crypto.service.d.ts +5 -0
- package/dist/services/crypto.service.js +43 -0
- package/dist/services/database/database.service.d.ts +9 -0
- package/dist/services/database/database.service.js +39 -0
- package/dist/services/database/drive-file/drive-file.attributes.d.ts +3 -6
- package/dist/services/database/drive-file/drive-file.domain.d.ts +3 -6
- package/dist/services/database/drive-file/drive-file.domain.js +1 -12
- package/dist/services/database/drive-file/drive-file.model.d.ts +15 -0
- package/dist/services/database/drive-file/drive-file.model.js +67 -0
- package/dist/services/database/drive-file/drive-file.repository.d.ts +11 -0
- package/dist/services/database/drive-file/drive-file.repository.js +63 -0
- package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +3 -4
- package/dist/services/database/drive-folder/drive-folder.domain.d.ts +4 -5
- package/dist/services/database/drive-folder/drive-folder.domain.js +11 -15
- package/dist/services/database/drive-folder/drive-folder.model.d.ts +11 -0
- package/dist/services/database/drive-folder/drive-folder.model.js +51 -0
- package/dist/services/database/drive-folder/drive-folder.repository.d.ts +13 -0
- package/dist/services/database/drive-folder/drive-folder.repository.js +99 -0
- package/dist/services/drive/drive-file.service.d.ts +2 -0
- package/dist/services/drive/drive-file.service.js +71 -15
- package/dist/services/drive/drive-folder.service.d.ts +6 -1
- package/dist/services/drive/drive-folder.service.js +157 -31
- package/dist/services/drive/trash.service.d.ts +3 -0
- package/dist/services/drive/trash.service.js +52 -16
- package/dist/services/drive/workspace.service.d.ts +7 -0
- package/dist/services/drive/workspace.service.js +30 -0
- package/dist/services/keys.service.d.ts +7 -0
- package/dist/services/keys.service.js +55 -0
- package/dist/services/local-filesystem/local-filesystem.service.d.ts +2 -2
- package/dist/services/local-filesystem/local-filesystem.service.js +4 -4
- package/dist/services/network/download.service.d.ts +2 -2
- package/dist/services/network/download.service.js +2 -2
- package/dist/services/network/network-facade.service.d.ts +3 -7
- package/dist/services/network/network-facade.service.js +9 -11
- package/dist/services/network/upload/upload-facade.service.d.ts +1 -1
- package/dist/services/network/upload/upload-facade.service.js +14 -7
- package/dist/services/network/upload/upload-file.service.d.ts +3 -3
- package/dist/services/network/upload/upload-file.service.js +33 -23
- package/dist/services/network/upload/upload-folder.service.d.ts +2 -2
- package/dist/services/network/upload/upload-folder.service.js +15 -10
- package/dist/services/network/upload/upload.types.d.ts +11 -0
- package/dist/services/sdk-manager.service.d.ts +9 -7
- package/dist/services/sdk-manager.service.js +27 -13
- package/dist/services/thumbnail.service.d.ts +19 -1
- package/dist/services/thumbnail.service.js +29 -2
- package/dist/services/universal-link.service.d.ts +3 -1
- package/dist/services/universal-link.service.js +15 -3
- package/dist/services/usage.service.d.ts +1 -2
- package/dist/services/usage.service.js +1 -1
- package/dist/services/validation.service.js +14 -4
- package/dist/{webdav/services → services/webdav}/webdav-folder.service.d.ts +1 -7
- package/dist/{webdav/services → services/webdav}/webdav-folder.service.js +6 -10
- package/dist/types/command.types.d.ts +44 -1
- package/dist/types/command.types.js +29 -1
- package/dist/types/config.types.d.ts +1 -0
- package/dist/types/drive.types.d.ts +7 -6
- package/dist/types/network.types.d.ts +6 -0
- package/dist/utils/async.utils.d.ts +2 -1
- package/dist/utils/async.utils.js +13 -2
- package/dist/utils/cli.utils.d.ts +20 -15
- package/dist/utils/cli.utils.js +48 -18
- package/dist/utils/crypto.utils.d.ts +3 -1
- package/dist/utils/crypto.utils.js +15 -2
- package/dist/utils/database.utils.d.ts +11 -0
- package/dist/utils/database.utils.js +26 -0
- package/dist/utils/drive.utils.js +7 -10
- package/dist/utils/errors.utils.d.ts +4 -4
- package/dist/utils/errors.utils.js +16 -19
- package/dist/utils/format.utils.d.ts +1 -0
- package/dist/utils/format.utils.js +3 -0
- package/dist/utils/inquirer.utils.js +10 -1
- package/dist/utils/path.utils.d.ts +7 -0
- package/dist/utils/path.utils.js +18 -0
- package/dist/utils/thumbnail.utils.d.ts +6 -20
- package/dist/utils/thumbnail.utils.js +16 -41
- package/dist/utils/webdav.utils.d.ts +4 -20
- package/dist/utils/webdav.utils.js +12 -14
- package/dist/webdav/handlers/DELETE.handler.d.ts +0 -9
- package/dist/webdav/handlers/DELETE.handler.js +18 -16
- package/dist/webdav/handlers/GET.handler.d.ts +0 -13
- package/dist/webdav/handlers/GET.handler.js +6 -11
- package/dist/webdav/handlers/HEAD.handler.d.ts +0 -5
- package/dist/webdav/handlers/HEAD.handler.js +11 -23
- package/dist/webdav/handlers/MKCOL.handler.d.ts +0 -7
- package/dist/webdav/handlers/MKCOL.handler.js +5 -12
- package/dist/webdav/handlers/MOVE.handler.d.ts +0 -9
- package/dist/webdav/handlers/MOVE.handler.js +10 -16
- package/dist/webdav/handlers/PROPFIND.handler.d.ts +0 -7
- package/dist/webdav/handlers/PROPFIND.handler.js +7 -19
- package/dist/webdav/handlers/PUT.handler.d.ts +0 -15
- package/dist/webdav/handlers/PUT.handler.js +24 -26
- package/dist/webdav/index.js +6 -8
- package/dist/webdav/middewares/auth.middleware.d.ts +1 -2
- package/dist/webdav/middewares/auth.middleware.js +5 -4
- package/dist/webdav/middewares/errors.middleware.js +2 -2
- package/dist/webdav/middewares/webdav-auth.middleware.d.ts +3 -0
- package/dist/webdav/middewares/webdav-auth.middleware.js +44 -0
- package/dist/webdav/webdav-server.d.ts +3 -16
- package/dist/webdav/webdav-server.js +29 -87
- package/oclif.manifest.json +429 -6
- package/package.json +25 -20
|
@@ -0,0 +1,67 @@
|
|
|
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.DriveFileModel = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let DriveFileModel = class DriveFileModel {
|
|
15
|
+
};
|
|
16
|
+
exports.DriveFileModel = DriveFileModel;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, typeorm_1.PrimaryColumn)({ nullable: false, type: 'varchar' }),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], DriveFileModel.prototype, "uuid", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], DriveFileModel.prototype, "name", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.Column)({ nullable: true, type: 'varchar' }),
|
|
27
|
+
__metadata("design:type", Object)
|
|
28
|
+
], DriveFileModel.prototype, "type", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.Column)({ nullable: true, type: 'varchar' }),
|
|
31
|
+
__metadata("design:type", Object)
|
|
32
|
+
], DriveFileModel.prototype, "fileId", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], DriveFileModel.prototype, "folderUuid", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], DriveFileModel.prototype, "bucket", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
43
|
+
__metadata("design:type", Date)
|
|
44
|
+
], DriveFileModel.prototype, "createdAt", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
47
|
+
__metadata("design:type", Date)
|
|
48
|
+
], DriveFileModel.prototype, "updatedAt", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'bigint' }),
|
|
51
|
+
__metadata("design:type", Number)
|
|
52
|
+
], DriveFileModel.prototype, "size", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
55
|
+
__metadata("design:type", String)
|
|
56
|
+
], DriveFileModel.prototype, "status", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
59
|
+
__metadata("design:type", Date)
|
|
60
|
+
], DriveFileModel.prototype, "creationTime", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
63
|
+
__metadata("design:type", Date)
|
|
64
|
+
], DriveFileModel.prototype, "modificationTime", void 0);
|
|
65
|
+
exports.DriveFileModel = DriveFileModel = __decorate([
|
|
66
|
+
(0, typeorm_1.Entity)('drive_file')
|
|
67
|
+
], DriveFileModel);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DriveFile } from './drive-file.domain';
|
|
2
|
+
import { DriveFileModel } from './drive-file.model';
|
|
3
|
+
export declare class FileRepository {
|
|
4
|
+
static readonly instance: FileRepository;
|
|
5
|
+
private readonly fileRepository;
|
|
6
|
+
createOrUpdate: (files: DriveFileModel[]) => Promise<DriveFile[] | undefined>;
|
|
7
|
+
updateByUuid: (uuid: string, update: Partial<DriveFileModel>) => Promise<import("typeorm").UpdateResult | undefined>;
|
|
8
|
+
delete: (uuids: string[]) => Promise<import("typeorm").DeleteResult | undefined>;
|
|
9
|
+
deleteByParentUuid: (parentUuid: string) => Promise<import("typeorm").DeleteResult | undefined>;
|
|
10
|
+
getByParentUuidNameAndType: (parentUuid: string, name: string, type: string | null) => Promise<DriveFile | undefined>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileRepository = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const database_utils_1 = require("../../../utils/database.utils");
|
|
6
|
+
const errors_utils_1 = require("../../../utils/errors.utils");
|
|
7
|
+
const database_service_1 = require("../database.service");
|
|
8
|
+
const drive_file_domain_1 = require("./drive-file.domain");
|
|
9
|
+
const drive_file_model_1 = require("./drive-file.model");
|
|
10
|
+
class FileRepository {
|
|
11
|
+
static instance = new FileRepository();
|
|
12
|
+
fileRepository = database_service_1.DatabaseService.instance.dataSource.getRepository(drive_file_model_1.DriveFileModel);
|
|
13
|
+
createOrUpdate = async (files) => {
|
|
14
|
+
try {
|
|
15
|
+
for (let i = 0; i < files.length; i += database_utils_1.DatabaseUtils.CREATE_BATCH_SIZE) {
|
|
16
|
+
const chunk = files.slice(i, i + database_utils_1.DatabaseUtils.CREATE_BATCH_SIZE);
|
|
17
|
+
await this.fileRepository.upsert(chunk, { conflictPaths: ['uuid'] });
|
|
18
|
+
}
|
|
19
|
+
return files.map((file) => drive_file_domain_1.DriveFile.build(file));
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
errors_utils_1.ErrorUtils.report(error, { createOrUpdate: files });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
updateByUuid = async (uuid, update) => {
|
|
26
|
+
try {
|
|
27
|
+
return await this.fileRepository.update({ uuid }, update);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
errors_utils_1.ErrorUtils.report(error, { updateByUuid: uuid });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
delete = async (uuids) => {
|
|
34
|
+
try {
|
|
35
|
+
return await this.fileRepository.delete(uuids);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
errors_utils_1.ErrorUtils.report(error, { delete: uuids });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
deleteByParentUuid = async (parentUuid) => {
|
|
42
|
+
try {
|
|
43
|
+
return await this.fileRepository.delete({ folderUuid: parentUuid });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
errors_utils_1.ErrorUtils.report(error, { deleteByParentUuid: parentUuid });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
getByParentUuidNameAndType = async (parentUuid, name, type) => {
|
|
50
|
+
try {
|
|
51
|
+
const typeCondition = type ?? (0, typeorm_1.IsNull)();
|
|
52
|
+
const file = await this.fileRepository.findOneBy({ folderUuid: parentUuid, name, type: typeCondition });
|
|
53
|
+
if (!file) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
return drive_file_domain_1.DriveFile.build(file);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
errors_utils_1.ErrorUtils.report(error, { getByParentuuidAndName: { parentUuid, name, type } });
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
exports.FileRepository = FileRepository;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export interface DriveFolderAttributes {
|
|
2
|
-
id: number;
|
|
3
|
-
name: string;
|
|
4
2
|
uuid: string;
|
|
3
|
+
name: string;
|
|
5
4
|
status: 'EXISTS' | 'TRASHED';
|
|
6
|
-
relativePath: string;
|
|
7
|
-
parentId: number | null;
|
|
8
5
|
parentUuid: string | null;
|
|
9
6
|
createdAt: Date;
|
|
10
7
|
updatedAt: Date;
|
|
8
|
+
creationTime: Date;
|
|
9
|
+
modificationTime: Date;
|
|
11
10
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { DriveFolderItem } from '../../../types/drive.types';
|
|
2
2
|
import { DriveFolderAttributes } from './drive-folder.attributes';
|
|
3
3
|
export declare class DriveFolder implements DriveFolderAttributes {
|
|
4
|
-
id: number;
|
|
5
4
|
name: string;
|
|
6
5
|
uuid: string;
|
|
7
|
-
relativePath: string;
|
|
8
|
-
parentId: number | null;
|
|
9
6
|
parentUuid: string | null;
|
|
7
|
+
status: DriveFolderAttributes['status'];
|
|
10
8
|
createdAt: Date;
|
|
11
9
|
updatedAt: Date;
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
creationTime: Date;
|
|
11
|
+
modificationTime: Date;
|
|
12
|
+
constructor({ name, uuid, parentUuid, createdAt, updatedAt, status, creationTime, modificationTime, }: DriveFolderAttributes);
|
|
14
13
|
static build(folder: DriveFolderAttributes): DriveFolder;
|
|
15
14
|
toJSON(): DriveFolderAttributes;
|
|
16
15
|
toItem(): DriveFolderItem;
|
|
@@ -2,54 +2,50 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DriveFolder = void 0;
|
|
4
4
|
class DriveFolder {
|
|
5
|
-
id;
|
|
6
5
|
name;
|
|
7
6
|
uuid;
|
|
8
|
-
relativePath;
|
|
9
|
-
parentId;
|
|
10
7
|
parentUuid;
|
|
8
|
+
status;
|
|
11
9
|
createdAt;
|
|
12
10
|
updatedAt;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
creationTime;
|
|
12
|
+
modificationTime;
|
|
13
|
+
constructor({ name, uuid, parentUuid, createdAt, updatedAt, status, creationTime, modificationTime, }) {
|
|
16
14
|
this.name = name;
|
|
17
15
|
this.uuid = uuid;
|
|
18
|
-
this.relativePath = relativePath;
|
|
19
|
-
this.parentId = parentId;
|
|
20
16
|
this.parentUuid = parentUuid;
|
|
17
|
+
this.status = status;
|
|
21
18
|
this.createdAt = createdAt;
|
|
22
19
|
this.updatedAt = updatedAt;
|
|
23
|
-
this.
|
|
20
|
+
this.creationTime = creationTime;
|
|
21
|
+
this.modificationTime = modificationTime;
|
|
24
22
|
}
|
|
25
23
|
static build(folder) {
|
|
26
24
|
return new DriveFolder(folder);
|
|
27
25
|
}
|
|
28
26
|
toJSON() {
|
|
29
27
|
return {
|
|
30
|
-
id: this.id,
|
|
31
28
|
name: this.name,
|
|
32
29
|
uuid: this.uuid,
|
|
33
30
|
status: this.status,
|
|
34
|
-
relativePath: this.relativePath,
|
|
35
|
-
parentId: this.parentId,
|
|
36
31
|
parentUuid: this.parentUuid,
|
|
37
32
|
createdAt: this.createdAt,
|
|
38
33
|
updatedAt: this.updatedAt,
|
|
34
|
+
creationTime: this.creationTime,
|
|
35
|
+
modificationTime: this.modificationTime,
|
|
39
36
|
};
|
|
40
37
|
}
|
|
41
38
|
toItem() {
|
|
42
39
|
return {
|
|
43
40
|
itemType: 'folder',
|
|
44
|
-
id: this.id,
|
|
45
41
|
name: this.name,
|
|
46
42
|
uuid: this.uuid,
|
|
47
43
|
status: this.status,
|
|
48
|
-
parentId: this.parentId,
|
|
49
44
|
parentUuid: this.parentUuid,
|
|
50
45
|
createdAt: this.createdAt,
|
|
51
46
|
updatedAt: this.updatedAt,
|
|
52
|
-
|
|
47
|
+
creationTime: this.creationTime,
|
|
48
|
+
modificationTime: this.modificationTime,
|
|
53
49
|
bucket: null,
|
|
54
50
|
};
|
|
55
51
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DriveFolderAttributes } from './drive-folder.attributes';
|
|
2
|
+
export declare class DriveFolderModel implements DriveFolderAttributes {
|
|
3
|
+
uuid: string;
|
|
4
|
+
name: string;
|
|
5
|
+
status: 'EXISTS' | 'TRASHED';
|
|
6
|
+
parentUuid: string | null;
|
|
7
|
+
createdAt: Date;
|
|
8
|
+
updatedAt: Date;
|
|
9
|
+
creationTime: Date;
|
|
10
|
+
modificationTime: Date;
|
|
11
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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.DriveFolderModel = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let DriveFolderModel = class DriveFolderModel {
|
|
15
|
+
};
|
|
16
|
+
exports.DriveFolderModel = DriveFolderModel;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, typeorm_1.PrimaryColumn)({ nullable: false, type: 'varchar' }),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], DriveFolderModel.prototype, "uuid", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], DriveFolderModel.prototype, "name", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], DriveFolderModel.prototype, "status", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.Column)({ nullable: true, type: 'varchar' }),
|
|
31
|
+
__metadata("design:type", Object)
|
|
32
|
+
], DriveFolderModel.prototype, "parentUuid", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
35
|
+
__metadata("design:type", Date)
|
|
36
|
+
], DriveFolderModel.prototype, "createdAt", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
39
|
+
__metadata("design:type", Date)
|
|
40
|
+
], DriveFolderModel.prototype, "updatedAt", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
43
|
+
__metadata("design:type", Date)
|
|
44
|
+
], DriveFolderModel.prototype, "creationTime", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, typeorm_1.Column)({ nullable: false, type: 'varchar' }),
|
|
47
|
+
__metadata("design:type", Date)
|
|
48
|
+
], DriveFolderModel.prototype, "modificationTime", void 0);
|
|
49
|
+
exports.DriveFolderModel = DriveFolderModel = __decorate([
|
|
50
|
+
(0, typeorm_1.Entity)('drive_folder')
|
|
51
|
+
], DriveFolderModel);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DriveFolder } from './drive-folder.domain';
|
|
2
|
+
import { DriveFolderModel } from './drive-folder.model';
|
|
3
|
+
export declare class FolderRepository {
|
|
4
|
+
static readonly instance: FolderRepository;
|
|
5
|
+
private readonly folderRepository;
|
|
6
|
+
getByUuid: (uuid: string) => Promise<DriveFolder | undefined>;
|
|
7
|
+
getAllByParentUuid: (parentUuid?: string) => Promise<DriveFolder[] | undefined>;
|
|
8
|
+
getByParentUuidAndName: (parentUuid: string, name: string) => Promise<DriveFolder | undefined>;
|
|
9
|
+
getByPath: (path: string, parentUuid: string) => Promise<DriveFolder | undefined>;
|
|
10
|
+
createOrUpdate: (files: DriveFolderModel[]) => Promise<DriveFolder[] | undefined>;
|
|
11
|
+
updateByUuid: (uuid: string, update: Partial<DriveFolderModel>) => Promise<import("typeorm").UpdateResult | undefined>;
|
|
12
|
+
delete: (uuids: string[]) => Promise<import("typeorm").DeleteResult | undefined>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FolderRepository = void 0;
|
|
4
|
+
const errors_utils_1 = require("../../../utils/errors.utils");
|
|
5
|
+
const database_service_1 = require("../database.service");
|
|
6
|
+
const drive_folder_domain_1 = require("./drive-folder.domain");
|
|
7
|
+
const drive_folder_model_1 = require("./drive-folder.model");
|
|
8
|
+
const database_utils_1 = require("../../../utils/database.utils");
|
|
9
|
+
class FolderRepository {
|
|
10
|
+
static instance = new FolderRepository();
|
|
11
|
+
folderRepository = database_service_1.DatabaseService.instance.dataSource.getRepository(drive_folder_model_1.DriveFolderModel);
|
|
12
|
+
getByUuid = async (uuid) => {
|
|
13
|
+
try {
|
|
14
|
+
const folder = await this.folderRepository.findOneBy({ uuid });
|
|
15
|
+
if (!folder) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
return drive_folder_domain_1.DriveFolder.build(folder);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
errors_utils_1.ErrorUtils.report(error, { getByUuid: uuid });
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
getAllByParentUuid = async (parentUuid) => {
|
|
25
|
+
try {
|
|
26
|
+
const folders = await this.folderRepository.findBy({ parentUuid });
|
|
27
|
+
if (!folders) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
return folders.map((folder) => drive_folder_domain_1.DriveFolder.build(folder));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
errors_utils_1.ErrorUtils.report(error, { getAllByParentUuid: parentUuid });
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
getByParentUuidAndName = async (parentUuid, name) => {
|
|
37
|
+
try {
|
|
38
|
+
const folder = await this.folderRepository.findOneBy({ parentUuid, name });
|
|
39
|
+
if (!folder) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
return drive_folder_domain_1.DriveFolder.build(folder);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
errors_utils_1.ErrorUtils.report(error, { getByParentuuidAndName: { parentUuid, name } });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
getByPath = async (path, parentUuid) => {
|
|
49
|
+
try {
|
|
50
|
+
const onFound = async (uuid) => {
|
|
51
|
+
const folder = await this.folderRepository.findOneBy({ uuid });
|
|
52
|
+
if (!folder) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
return drive_folder_domain_1.DriveFolder.build(folder);
|
|
56
|
+
};
|
|
57
|
+
return database_utils_1.DatabaseUtils.getFolderByPathGeneric({
|
|
58
|
+
path,
|
|
59
|
+
parentUuid,
|
|
60
|
+
onFound,
|
|
61
|
+
getByParentAndName: this.getByParentUuidAndName.bind(this),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
errors_utils_1.ErrorUtils.report(error, { getByPath: path });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
createOrUpdate = async (files) => {
|
|
69
|
+
if (files.length === 0)
|
|
70
|
+
return;
|
|
71
|
+
try {
|
|
72
|
+
for (let i = 0; i < files.length; i += database_utils_1.DatabaseUtils.CREATE_BATCH_SIZE) {
|
|
73
|
+
const chunk = files.slice(i, i + database_utils_1.DatabaseUtils.CREATE_BATCH_SIZE);
|
|
74
|
+
await this.folderRepository.upsert(chunk, { conflictPaths: ['uuid'] });
|
|
75
|
+
}
|
|
76
|
+
return files.map((file) => drive_folder_domain_1.DriveFolder.build(file));
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
errors_utils_1.ErrorUtils.report(error, { createOrUpdate: files });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
updateByUuid = async (uuid, update) => {
|
|
83
|
+
try {
|
|
84
|
+
return await this.folderRepository.update({ uuid }, update);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
errors_utils_1.ErrorUtils.report(error, { updateByUuid: uuid });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
delete = async (uuids) => {
|
|
91
|
+
try {
|
|
92
|
+
return await this.folderRepository.delete(uuids);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
errors_utils_1.ErrorUtils.report(error, { delete: uuids });
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
exports.FolderRepository = FolderRepository;
|
|
@@ -3,12 +3,14 @@ import { DriveFileItem } from '../../types/drive.types';
|
|
|
3
3
|
export declare class DriveFileService {
|
|
4
4
|
static readonly instance: DriveFileService;
|
|
5
5
|
createFile: (payload: StorageTypes.FileEntryByUuid) => Promise<DriveFileItem>;
|
|
6
|
+
private createDriveFileEntry;
|
|
6
7
|
getFileMetadata: (uuid: string) => Promise<DriveFileItem>;
|
|
7
8
|
moveFile: (uuid: string, payload: StorageTypes.MoveFileUuidPayload) => Promise<StorageTypes.FileMeta>;
|
|
8
9
|
renameFile: (fileUuid: string, payload: {
|
|
9
10
|
plainName?: string;
|
|
10
11
|
type?: string | null;
|
|
11
12
|
}) => Promise<void>;
|
|
13
|
+
getByParentUuidAndName: (parentUuid: string, name: string, type: string | null) => Promise<DriveFileItem>;
|
|
12
14
|
getFileMetadataByPath: (path: string) => Promise<DriveFileItem>;
|
|
13
15
|
createThumbnail: (payload: StorageTypes.CreateThumbnailEntryPayload) => Promise<StorageTypes.Thumbnail>;
|
|
14
16
|
}
|
|
@@ -1,49 +1,105 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DriveFileService = void 0;
|
|
4
|
+
const drive_1 = require("@internxt/sdk/dist/drive");
|
|
4
5
|
const sdk_manager_service_1 = require("../sdk-manager.service");
|
|
5
6
|
const drive_utils_1 = require("../../utils/drive.utils");
|
|
7
|
+
const auth_service_1 = require("../auth.service");
|
|
8
|
+
const drive_file_repository_1 = require("../database/drive-file/drive-file.repository");
|
|
9
|
+
const drive_folder_service_1 = require("./drive-folder.service");
|
|
10
|
+
const errors_utils_1 = require("../../utils/errors.utils");
|
|
11
|
+
const path_utils_1 = require("../../utils/path.utils");
|
|
12
|
+
const logger_utils_1 = require("../../utils/logger.utils");
|
|
13
|
+
const types_1 = require("@internxt/sdk/dist/drive/storage/types");
|
|
6
14
|
class DriveFileService {
|
|
7
15
|
static instance = new DriveFileService();
|
|
8
16
|
createFile = async (payload) => {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
return {
|
|
17
|
+
const driveFile = await this.createDriveFileEntry(payload);
|
|
18
|
+
const driveFileItem = {
|
|
12
19
|
itemType: 'file',
|
|
13
20
|
name: payload.plainName,
|
|
14
|
-
id: driveFile.id,
|
|
15
21
|
uuid: driveFile.uuid,
|
|
16
22
|
size: driveFile.size,
|
|
17
23
|
bucket: driveFile.bucket,
|
|
18
24
|
createdAt: new Date(driveFile.createdAt),
|
|
19
25
|
updatedAt: new Date(driveFile.updatedAt),
|
|
20
|
-
fileId: driveFile.fileId,
|
|
21
|
-
type: driveFile.type,
|
|
26
|
+
fileId: driveFile.fileId ?? null,
|
|
27
|
+
type: driveFile.type ?? null,
|
|
22
28
|
status: driveFile.status,
|
|
23
|
-
folderId: driveFile.folderId,
|
|
24
29
|
folderUuid: driveFile.folderUuid,
|
|
25
30
|
creationTime: new Date(driveFile.creationTime ?? driveFile.createdAt),
|
|
26
31
|
modificationTime: new Date(driveFile.modificationTime ?? driveFile.updatedAt),
|
|
27
32
|
};
|
|
33
|
+
await drive_file_repository_1.FileRepository.instance.createOrUpdate([driveFileItem]);
|
|
34
|
+
return driveFileItem;
|
|
35
|
+
};
|
|
36
|
+
createDriveFileEntry = async (payload) => {
|
|
37
|
+
const currentWorkspace = await auth_service_1.AuthService.instance.getCurrentWorkspace();
|
|
38
|
+
if (currentWorkspace) {
|
|
39
|
+
const workspaceClient = sdk_manager_service_1.SdkManager.instance.getWorkspaces();
|
|
40
|
+
return workspaceClient.createFileEntry({
|
|
41
|
+
name: payload.plainName,
|
|
42
|
+
plainName: payload.plainName,
|
|
43
|
+
bucket: payload.bucket,
|
|
44
|
+
fileId: payload.fileId ?? '',
|
|
45
|
+
encryptVersion: drive_1.StorageTypes.EncryptionVersion.Aes03,
|
|
46
|
+
folderUuid: payload.folderUuid,
|
|
47
|
+
size: payload.size,
|
|
48
|
+
type: payload.type ?? '',
|
|
49
|
+
modificationTime: payload.modificationTime ?? new Date().toISOString(),
|
|
50
|
+
date: payload.date ?? new Date().toISOString(),
|
|
51
|
+
}, currentWorkspace.workspaceCredentials.id);
|
|
52
|
+
}
|
|
53
|
+
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
54
|
+
return storageClient.createFileEntryByUuid(payload);
|
|
28
55
|
};
|
|
29
56
|
getFileMetadata = async (uuid) => {
|
|
30
57
|
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
31
58
|
const [getFileMetadata] = storageClient.getFile(uuid);
|
|
32
59
|
const fileMetadata = await getFileMetadata;
|
|
33
|
-
|
|
60
|
+
if (fileMetadata?.status !== types_1.FileStatus.EXISTS) {
|
|
61
|
+
throw new errors_utils_1.NotFoundError(`File with uuid ${uuid} not found`);
|
|
62
|
+
}
|
|
63
|
+
const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
|
|
64
|
+
await drive_file_repository_1.FileRepository.instance.createOrUpdate([driveFileItem]);
|
|
65
|
+
return driveFileItem;
|
|
34
66
|
};
|
|
35
|
-
moveFile = (uuid, payload) => {
|
|
67
|
+
moveFile = async (uuid, payload) => {
|
|
36
68
|
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
37
|
-
|
|
69
|
+
const fileMeta = await storageClient.moveFileByUuid(uuid, payload);
|
|
70
|
+
const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(fileMeta);
|
|
71
|
+
await drive_file_repository_1.FileRepository.instance.createOrUpdate([driveFileItem]);
|
|
72
|
+
return fileMeta;
|
|
38
73
|
};
|
|
39
|
-
renameFile = (fileUuid, payload) => {
|
|
74
|
+
renameFile = async (fileUuid, payload) => {
|
|
40
75
|
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
41
|
-
|
|
76
|
+
await storageClient.updateFileMetaByUUID(fileUuid, payload);
|
|
77
|
+
await drive_file_repository_1.FileRepository.instance.updateByUuid(fileUuid, { name: payload.plainName, type: payload.type });
|
|
78
|
+
};
|
|
79
|
+
getByParentUuidAndName = async (parentUuid, name, type) => {
|
|
80
|
+
const subFiles = await drive_folder_service_1.DriveFolderService.instance.getFolderSubfiles(parentUuid);
|
|
81
|
+
const fileMeta = subFiles.find((file) => (file.plainName === name || file.name === name) && (file.type ?? null) === type);
|
|
82
|
+
if (fileMeta?.status !== types_1.FileStatus.EXISTS) {
|
|
83
|
+
throw new errors_utils_1.NotFoundError('File not found');
|
|
84
|
+
}
|
|
85
|
+
return drive_utils_1.DriveUtils.driveFileMetaToItem(fileMeta);
|
|
42
86
|
};
|
|
43
87
|
getFileMetadataByPath = async (path) => {
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
88
|
+
const { fileName, fileType, folderPath } = path_utils_1.PathUtils.getPathFileData(path);
|
|
89
|
+
const parentFolder = await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(folderPath);
|
|
90
|
+
const localFileDB = await drive_file_repository_1.FileRepository.instance.getByParentUuidNameAndType(parentFolder.uuid, fileName, fileType);
|
|
91
|
+
if (localFileDB) {
|
|
92
|
+
try {
|
|
93
|
+
const file = await this.getFileMetadata(localFileDB.uuid);
|
|
94
|
+
if (file) {
|
|
95
|
+
return file;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
logger_utils_1.logger.error('File not found when getting file by path on local DB', { path });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return this.getByParentUuidAndName(parentFolder.uuid, fileName, fileType);
|
|
47
103
|
};
|
|
48
104
|
createThumbnail = (payload) => {
|
|
49
105
|
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FetchPaginatedFile, FetchPaginatedFolder } from '@internxt/sdk/dist/drive/storage/types';
|
|
1
2
|
import { StorageTypes } from '@internxt/sdk/dist/drive';
|
|
2
3
|
import { DriveFolderItem } from '../../types/drive.types';
|
|
3
4
|
import { RequestCanceler } from '@internxt/sdk/dist/shared/http/types';
|
|
@@ -47,13 +48,17 @@ export declare class DriveFolderService {
|
|
|
47
48
|
status: "EXISTS" | "TRASHED" | "DELETED";
|
|
48
49
|
}[];
|
|
49
50
|
}>;
|
|
51
|
+
getFolderSubfolders: (folderUuid: string) => Promise<FetchPaginatedFolder[]>;
|
|
52
|
+
getFolderSubfiles: (folderUuid: string) => Promise<FetchPaginatedFile[]>;
|
|
50
53
|
private readonly getAllSubfolders;
|
|
51
54
|
private readonly getAllSubfiles;
|
|
52
55
|
moveFolder: (uuid: string, payload: StorageTypes.MoveFolderUuidPayload) => Promise<StorageTypes.FolderMeta>;
|
|
53
|
-
createFolder(payload: StorageTypes.CreateFolderByUuidPayload)
|
|
56
|
+
createFolder: (payload: StorageTypes.CreateFolderByUuidPayload) => Promise<[Promise<StorageTypes.CreateFolderResponse>, RequestCanceler]>;
|
|
54
57
|
renameFolder: (payload: {
|
|
55
58
|
folderUuid: string;
|
|
56
59
|
name: string;
|
|
57
60
|
}) => Promise<void>;
|
|
61
|
+
getByParentUuidAndName: (parentUuid: string, name: string) => Promise<DriveFolderItem>;
|
|
62
|
+
getByPath: (path: string, parentUuid: string) => Promise<DriveFolderItem>;
|
|
58
63
|
getFolderMetadataByPath: (path: string) => Promise<DriveFolderItem>;
|
|
59
64
|
}
|