@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.
Files changed (150) hide show
  1. package/README.md +410 -71
  2. package/dist/commands/add-cert.d.ts +1 -1
  3. package/dist/commands/add-cert.js +1 -1
  4. package/dist/commands/config.d.ts +7 -1
  5. package/dist/commands/config.js +36 -5
  6. package/dist/commands/create-folder.d.ts +2 -1
  7. package/dist/commands/create-folder.js +10 -7
  8. package/dist/commands/delete-permanently-file.d.ts +1 -0
  9. package/dist/commands/delete-permanently-folder.d.ts +1 -0
  10. package/dist/commands/download-file.d.ts +1 -0
  11. package/dist/commands/download-file.js +4 -2
  12. package/dist/commands/list.d.ts +1 -0
  13. package/dist/commands/list.js +2 -4
  14. package/dist/commands/login-legacy.d.ts +1 -0
  15. package/dist/commands/move-file.d.ts +1 -1
  16. package/dist/commands/move-file.js +7 -21
  17. package/dist/commands/move-folder.d.ts +1 -1
  18. package/dist/commands/move-folder.js +7 -21
  19. package/dist/commands/rename-file.d.ts +1 -0
  20. package/dist/commands/rename-folder.d.ts +1 -0
  21. package/dist/commands/trash-clear.d.ts +1 -0
  22. package/dist/commands/trash-file.d.ts +1 -0
  23. package/dist/commands/trash-folder.d.ts +1 -0
  24. package/dist/commands/trash-restore-file.d.ts +1 -1
  25. package/dist/commands/trash-restore-file.js +7 -21
  26. package/dist/commands/trash-restore-folder.d.ts +1 -1
  27. package/dist/commands/trash-restore-folder.js +7 -21
  28. package/dist/commands/upload-file.d.ts +4 -5
  29. package/dist/commands/upload-file.js +32 -21
  30. package/dist/commands/upload-folder.d.ts +1 -0
  31. package/dist/commands/upload-folder.js +11 -6
  32. package/dist/commands/webdav-config.d.ts +19 -1
  33. package/dist/commands/webdav-config.js +81 -3
  34. package/dist/commands/webdav.d.ts +1 -1
  35. package/dist/commands/webdav.js +10 -5
  36. package/dist/commands/whoami.js +2 -1
  37. package/dist/commands/workspaces-list.d.ts +20 -0
  38. package/dist/commands/workspaces-list.js +67 -0
  39. package/dist/commands/workspaces-unset.d.ts +23 -0
  40. package/dist/commands/workspaces-unset.js +45 -0
  41. package/dist/commands/workspaces-use.d.ts +27 -0
  42. package/dist/commands/workspaces-use.js +113 -0
  43. package/dist/constants/configs.d.ts +2 -1
  44. package/dist/constants/configs.js +4 -3
  45. package/dist/hooks/prerun/auth_check.js +13 -4
  46. package/dist/services/auth.service.d.ts +5 -2
  47. package/dist/services/auth.service.js +69 -12
  48. package/dist/services/config.service.d.ts +1 -1
  49. package/dist/services/config.service.js +12 -4
  50. package/dist/services/crypto.service.d.ts +5 -0
  51. package/dist/services/crypto.service.js +43 -0
  52. package/dist/services/database/database.service.d.ts +9 -0
  53. package/dist/services/database/database.service.js +39 -0
  54. package/dist/services/database/drive-file/drive-file.attributes.d.ts +3 -6
  55. package/dist/services/database/drive-file/drive-file.domain.d.ts +3 -6
  56. package/dist/services/database/drive-file/drive-file.domain.js +1 -12
  57. package/dist/services/database/drive-file/drive-file.model.d.ts +15 -0
  58. package/dist/services/database/drive-file/drive-file.model.js +67 -0
  59. package/dist/services/database/drive-file/drive-file.repository.d.ts +11 -0
  60. package/dist/services/database/drive-file/drive-file.repository.js +63 -0
  61. package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +3 -4
  62. package/dist/services/database/drive-folder/drive-folder.domain.d.ts +4 -5
  63. package/dist/services/database/drive-folder/drive-folder.domain.js +11 -15
  64. package/dist/services/database/drive-folder/drive-folder.model.d.ts +11 -0
  65. package/dist/services/database/drive-folder/drive-folder.model.js +51 -0
  66. package/dist/services/database/drive-folder/drive-folder.repository.d.ts +13 -0
  67. package/dist/services/database/drive-folder/drive-folder.repository.js +99 -0
  68. package/dist/services/drive/drive-file.service.d.ts +2 -0
  69. package/dist/services/drive/drive-file.service.js +71 -15
  70. package/dist/services/drive/drive-folder.service.d.ts +6 -1
  71. package/dist/services/drive/drive-folder.service.js +157 -31
  72. package/dist/services/drive/trash.service.d.ts +3 -0
  73. package/dist/services/drive/trash.service.js +52 -16
  74. package/dist/services/drive/workspace.service.d.ts +7 -0
  75. package/dist/services/drive/workspace.service.js +30 -0
  76. package/dist/services/keys.service.d.ts +7 -0
  77. package/dist/services/keys.service.js +55 -0
  78. package/dist/services/local-filesystem/local-filesystem.service.d.ts +2 -2
  79. package/dist/services/local-filesystem/local-filesystem.service.js +4 -4
  80. package/dist/services/network/download.service.d.ts +2 -2
  81. package/dist/services/network/download.service.js +2 -2
  82. package/dist/services/network/network-facade.service.d.ts +3 -7
  83. package/dist/services/network/network-facade.service.js +9 -11
  84. package/dist/services/network/upload/upload-facade.service.d.ts +1 -1
  85. package/dist/services/network/upload/upload-facade.service.js +14 -7
  86. package/dist/services/network/upload/upload-file.service.d.ts +3 -3
  87. package/dist/services/network/upload/upload-file.service.js +33 -23
  88. package/dist/services/network/upload/upload-folder.service.d.ts +2 -2
  89. package/dist/services/network/upload/upload-folder.service.js +15 -10
  90. package/dist/services/network/upload/upload.types.d.ts +11 -0
  91. package/dist/services/sdk-manager.service.d.ts +9 -7
  92. package/dist/services/sdk-manager.service.js +27 -13
  93. package/dist/services/thumbnail.service.d.ts +19 -1
  94. package/dist/services/thumbnail.service.js +29 -2
  95. package/dist/services/universal-link.service.d.ts +3 -1
  96. package/dist/services/universal-link.service.js +15 -3
  97. package/dist/services/usage.service.d.ts +1 -2
  98. package/dist/services/usage.service.js +1 -1
  99. package/dist/services/validation.service.js +14 -4
  100. package/dist/{webdav/services → services/webdav}/webdav-folder.service.d.ts +1 -7
  101. package/dist/{webdav/services → services/webdav}/webdav-folder.service.js +6 -10
  102. package/dist/types/command.types.d.ts +44 -1
  103. package/dist/types/command.types.js +29 -1
  104. package/dist/types/config.types.d.ts +1 -0
  105. package/dist/types/drive.types.d.ts +7 -6
  106. package/dist/types/network.types.d.ts +6 -0
  107. package/dist/utils/async.utils.d.ts +2 -1
  108. package/dist/utils/async.utils.js +13 -2
  109. package/dist/utils/cli.utils.d.ts +20 -15
  110. package/dist/utils/cli.utils.js +48 -18
  111. package/dist/utils/crypto.utils.d.ts +3 -1
  112. package/dist/utils/crypto.utils.js +15 -2
  113. package/dist/utils/database.utils.d.ts +11 -0
  114. package/dist/utils/database.utils.js +26 -0
  115. package/dist/utils/drive.utils.js +7 -10
  116. package/dist/utils/errors.utils.d.ts +4 -4
  117. package/dist/utils/errors.utils.js +16 -19
  118. package/dist/utils/format.utils.d.ts +1 -0
  119. package/dist/utils/format.utils.js +3 -0
  120. package/dist/utils/inquirer.utils.js +10 -1
  121. package/dist/utils/path.utils.d.ts +7 -0
  122. package/dist/utils/path.utils.js +18 -0
  123. package/dist/utils/thumbnail.utils.d.ts +6 -20
  124. package/dist/utils/thumbnail.utils.js +16 -41
  125. package/dist/utils/webdav.utils.d.ts +4 -20
  126. package/dist/utils/webdav.utils.js +12 -14
  127. package/dist/webdav/handlers/DELETE.handler.d.ts +0 -9
  128. package/dist/webdav/handlers/DELETE.handler.js +18 -16
  129. package/dist/webdav/handlers/GET.handler.d.ts +0 -13
  130. package/dist/webdav/handlers/GET.handler.js +6 -11
  131. package/dist/webdav/handlers/HEAD.handler.d.ts +0 -5
  132. package/dist/webdav/handlers/HEAD.handler.js +11 -23
  133. package/dist/webdav/handlers/MKCOL.handler.d.ts +0 -7
  134. package/dist/webdav/handlers/MKCOL.handler.js +5 -12
  135. package/dist/webdav/handlers/MOVE.handler.d.ts +0 -9
  136. package/dist/webdav/handlers/MOVE.handler.js +10 -16
  137. package/dist/webdav/handlers/PROPFIND.handler.d.ts +0 -7
  138. package/dist/webdav/handlers/PROPFIND.handler.js +7 -19
  139. package/dist/webdav/handlers/PUT.handler.d.ts +0 -15
  140. package/dist/webdav/handlers/PUT.handler.js +24 -26
  141. package/dist/webdav/index.js +6 -8
  142. package/dist/webdav/middewares/auth.middleware.d.ts +1 -2
  143. package/dist/webdav/middewares/auth.middleware.js +5 -4
  144. package/dist/webdav/middewares/errors.middleware.js +2 -2
  145. package/dist/webdav/middewares/webdav-auth.middleware.d.ts +3 -0
  146. package/dist/webdav/middewares/webdav-auth.middleware.js +44 -0
  147. package/dist/webdav/webdav-server.d.ts +3 -16
  148. package/dist/webdav/webdav-server.js +29 -87
  149. package/oclif.manifest.json +429 -6
  150. 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
- status: DriveFolderAttributes['status'];
13
- constructor({ id, name, uuid, relativePath, parentId, parentUuid, createdAt, updatedAt, status, }: DriveFolderAttributes);
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
- status;
14
- constructor({ id, name, uuid, relativePath, parentId, parentUuid, createdAt, updatedAt, status, }) {
15
- this.id = id;
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.status = status;
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
- encryptedName: '',
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 storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
10
- const driveFile = await storageClient.createFileEntryByUuid(payload);
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
- return drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
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
- return storageClient.moveFileByUuid(uuid, payload);
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
- return storageClient.updateFileMetaByUUID(fileUuid, payload);
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 storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
45
- const fileMetadata = await storageClient.getFileByPath(encodeURIComponent(path));
46
- return drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
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): [Promise<StorageTypes.CreateFolderResponse>, RequestCanceler];
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
  }