@internxt/cli 1.6.9 → 1.6.10

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 (36) hide show
  1. package/README.md +28 -28
  2. package/dist/commands/list.d.ts +2 -0
  3. package/dist/commands/move-file.d.ts +2 -0
  4. package/dist/commands/trash-list.d.ts +1 -2
  5. package/dist/commands/trash-restore-file.d.ts +2 -0
  6. package/dist/commands/upload-file.d.ts +2 -2
  7. package/dist/services/database/database.service.d.ts +6 -0
  8. package/dist/services/database/database.service.js +27 -0
  9. package/dist/services/database/drive-item/drive-item.repository.d.ts +2 -1
  10. package/dist/services/database/drive-item/drive-item.repository.js +10 -5
  11. package/dist/services/drive/drive-file.service.js +4 -6
  12. package/dist/services/drive/drive-folder.service.d.ts +9 -5
  13. package/dist/services/drive/drive-folder.service.js +44 -29
  14. package/dist/services/drive/drive-item.service.d.ts +1 -0
  15. package/dist/services/drive/drive-item.service.js +24 -14
  16. package/dist/services/drive/trash.service.d.ts +5 -4
  17. package/dist/services/drive/trash.service.js +21 -22
  18. package/dist/services/webdav/webdav-folder.service.d.ts +4 -0
  19. package/dist/services/webdav/webdav-folder.service.js +14 -1
  20. package/dist/types/config.types.d.ts +1 -0
  21. package/dist/types/drive.types.d.ts +1 -0
  22. package/dist/utils/cli.utils.js +2 -8
  23. package/dist/utils/drive.utils.d.ts +1 -0
  24. package/dist/utils/drive.utils.js +9 -1
  25. package/dist/utils/errors.utils.d.ts +27 -0
  26. package/dist/utils/errors.utils.js +98 -3
  27. package/dist/utils/pagination.utils.d.ts +7 -0
  28. package/dist/utils/pagination.utils.js +20 -0
  29. package/dist/utils/webdav.utils.js +30 -17
  30. package/dist/webdav/handlers/MKCOL.handler.js +7 -1
  31. package/dist/webdav/handlers/PUT.handler.js +1 -1
  32. package/dist/webdav/index.js +3 -2
  33. package/dist/webdav/middewares/auth.middleware.js +3 -2
  34. package/dist/webdav/middewares/errors.middleware.js +7 -13
  35. package/oclif.manifest.json +1 -1
  36. package/package.json +18 -13
package/README.md CHANGED
@@ -52,7 +52,7 @@ $ npm install -g @internxt/cli
52
52
  $ internxt COMMAND
53
53
  running command...
54
54
  $ internxt (--version)
55
- @internxt/cli/1.6.9 linux-x64 node-v22.23.2
55
+ @internxt/cli/1.6.10 linux-x64 node-v24.21.0
56
56
  $ internxt --help [COMMAND]
57
57
  USAGE
58
58
  $ internxt COMMAND
@@ -139,7 +139,7 @@ EXAMPLES
139
139
  $ internxt add-cert
140
140
  ```
141
141
 
142
- _See code: [src/commands/add-cert.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/add-cert.ts)_
142
+ _See code: [src/commands/add-cert.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/add-cert.ts)_
143
143
 
144
144
  ## `internxt add cert`
145
145
 
@@ -197,7 +197,7 @@ EXAMPLES
197
197
  $ internxt autocomplete --refresh-cache
198
198
  ```
199
199
 
200
- _See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v4.0.0/src/commands/autocomplete/index.ts)_
200
+ _See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v4.0.2/src/commands/autocomplete/index.ts)_
201
201
 
202
202
  ## `internxt config`
203
203
 
@@ -226,7 +226,7 @@ EXAMPLES
226
226
  $ internxt config
227
227
  ```
228
228
 
229
- _See code: [src/commands/config.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/config.ts)_
229
+ _See code: [src/commands/config.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/config.ts)_
230
230
 
231
231
  ## `internxt create-folder`
232
232
 
@@ -260,7 +260,7 @@ EXAMPLES
260
260
  $ internxt create-folder
261
261
  ```
262
262
 
263
- _See code: [src/commands/create-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/create-folder.ts)_
263
+ _See code: [src/commands/create-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/create-folder.ts)_
264
264
 
265
265
  ## `internxt create folder`
266
266
 
@@ -324,7 +324,7 @@ EXAMPLES
324
324
  $ internxt delete-permanently-file
325
325
  ```
326
326
 
327
- _See code: [src/commands/delete-permanently-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/delete-permanently-file.ts)_
327
+ _See code: [src/commands/delete-permanently-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/delete-permanently-file.ts)_
328
328
 
329
329
  ## `internxt delete-permanently-folder`
330
330
 
@@ -356,7 +356,7 @@ EXAMPLES
356
356
  $ internxt delete-permanently-folder
357
357
  ```
358
358
 
359
- _See code: [src/commands/delete-permanently-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/delete-permanently-folder.ts)_
359
+ _See code: [src/commands/delete-permanently-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/delete-permanently-folder.ts)_
360
360
 
361
361
  ## `internxt delete permanently file`
362
362
 
@@ -451,7 +451,7 @@ EXAMPLES
451
451
  $ internxt download-file
452
452
  ```
453
453
 
454
- _See code: [src/commands/download-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/download-file.ts)_
454
+ _See code: [src/commands/download-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/download-file.ts)_
455
455
 
456
456
  ## `internxt download file`
457
457
 
@@ -514,7 +514,7 @@ EXAMPLES
514
514
  $ internxt list
515
515
  ```
516
516
 
517
- _See code: [src/commands/list.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/list.ts)_
517
+ _See code: [src/commands/list.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/list.ts)_
518
518
 
519
519
  ## `internxt login`
520
520
 
@@ -545,7 +545,7 @@ EXAMPLES
545
545
  $ internxt login
546
546
  ```
547
547
 
548
- _See code: [src/commands/login.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/login.ts)_
548
+ _See code: [src/commands/login.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/login.ts)_
549
549
 
550
550
  ## `internxt login-legacy`
551
551
 
@@ -579,7 +579,7 @@ EXAMPLES
579
579
  $ internxt login-legacy
580
580
  ```
581
581
 
582
- _See code: [src/commands/login-legacy.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/login-legacy.ts)_
582
+ _See code: [src/commands/login-legacy.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/login-legacy.ts)_
583
583
 
584
584
  ## `internxt logout`
585
585
 
@@ -605,7 +605,7 @@ EXAMPLES
605
605
  $ internxt logout
606
606
  ```
607
607
 
608
- _See code: [src/commands/logout.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/logout.ts)_
608
+ _See code: [src/commands/logout.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/logout.ts)_
609
609
 
610
610
  ## `internxt logs`
611
611
 
@@ -631,7 +631,7 @@ EXAMPLES
631
631
  $ internxt logs
632
632
  ```
633
633
 
634
- _See code: [src/commands/logs.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/logs.ts)_
634
+ _See code: [src/commands/logs.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/logs.ts)_
635
635
 
636
636
  ## `internxt move-file`
637
637
 
@@ -665,7 +665,7 @@ EXAMPLES
665
665
  $ internxt move-file
666
666
  ```
667
667
 
668
- _See code: [src/commands/move-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/move-file.ts)_
668
+ _See code: [src/commands/move-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/move-file.ts)_
669
669
 
670
670
  ## `internxt move-folder`
671
671
 
@@ -699,7 +699,7 @@ EXAMPLES
699
699
  $ internxt move-folder
700
700
  ```
701
701
 
702
- _See code: [src/commands/move-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/move-folder.ts)_
702
+ _See code: [src/commands/move-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/move-folder.ts)_
703
703
 
704
704
  ## `internxt move file`
705
705
 
@@ -796,7 +796,7 @@ EXAMPLES
796
796
  $ internxt rename-file
797
797
  ```
798
798
 
799
- _See code: [src/commands/rename-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/rename-file.ts)_
799
+ _See code: [src/commands/rename-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/rename-file.ts)_
800
800
 
801
801
  ## `internxt rename-folder`
802
802
 
@@ -829,7 +829,7 @@ EXAMPLES
829
829
  $ internxt rename-folder
830
830
  ```
831
831
 
832
- _See code: [src/commands/rename-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/rename-folder.ts)_
832
+ _See code: [src/commands/rename-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/rename-folder.ts)_
833
833
 
834
834
  ## `internxt rename file`
835
835
 
@@ -923,7 +923,7 @@ EXAMPLES
923
923
  $ internxt trash-clear
924
924
  ```
925
925
 
926
- _See code: [src/commands/trash-clear.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-clear.ts)_
926
+ _See code: [src/commands/trash-clear.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-clear.ts)_
927
927
 
928
928
  ## `internxt trash-file`
929
929
 
@@ -955,7 +955,7 @@ EXAMPLES
955
955
  $ internxt trash-file
956
956
  ```
957
957
 
958
- _See code: [src/commands/trash-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-file.ts)_
958
+ _See code: [src/commands/trash-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-file.ts)_
959
959
 
960
960
  ## `internxt trash-folder`
961
961
 
@@ -987,7 +987,7 @@ EXAMPLES
987
987
  $ internxt trash-folder
988
988
  ```
989
989
 
990
- _See code: [src/commands/trash-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-folder.ts)_
990
+ _See code: [src/commands/trash-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-folder.ts)_
991
991
 
992
992
  ## `internxt trash-list`
993
993
 
@@ -1019,7 +1019,7 @@ EXAMPLES
1019
1019
  $ internxt trash-list
1020
1020
  ```
1021
1021
 
1022
- _See code: [src/commands/trash-list.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-list.ts)_
1022
+ _See code: [src/commands/trash-list.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-list.ts)_
1023
1023
 
1024
1024
  ## `internxt trash-restore-file`
1025
1025
 
@@ -1052,7 +1052,7 @@ EXAMPLES
1052
1052
  $ internxt trash-restore-file
1053
1053
  ```
1054
1054
 
1055
- _See code: [src/commands/trash-restore-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-restore-file.ts)_
1055
+ _See code: [src/commands/trash-restore-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-restore-file.ts)_
1056
1056
 
1057
1057
  ## `internxt trash-restore-folder`
1058
1058
 
@@ -1085,7 +1085,7 @@ EXAMPLES
1085
1085
  $ internxt trash-restore-folder
1086
1086
  ```
1087
1087
 
1088
- _See code: [src/commands/trash-restore-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/trash-restore-folder.ts)_
1088
+ _See code: [src/commands/trash-restore-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/trash-restore-folder.ts)_
1089
1089
 
1090
1090
  ## `internxt trash clear`
1091
1091
 
@@ -1302,7 +1302,7 @@ EXAMPLES
1302
1302
  $ internxt upload-file
1303
1303
  ```
1304
1304
 
1305
- _See code: [src/commands/upload-file.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/upload-file.ts)_
1305
+ _See code: [src/commands/upload-file.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/upload-file.ts)_
1306
1306
 
1307
1307
  ## `internxt upload-folder`
1308
1308
 
@@ -1335,7 +1335,7 @@ EXAMPLES
1335
1335
  $ internxt upload-folder
1336
1336
  ```
1337
1337
 
1338
- _See code: [src/commands/upload-folder.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/upload-folder.ts)_
1338
+ _See code: [src/commands/upload-folder.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/upload-folder.ts)_
1339
1339
 
1340
1340
  ## `internxt upload file`
1341
1341
 
@@ -1431,7 +1431,7 @@ EXAMPLES
1431
1431
  $ internxt webdav status
1432
1432
  ```
1433
1433
 
1434
- _See code: [src/commands/webdav.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/webdav.ts)_
1434
+ _See code: [src/commands/webdav.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/webdav.ts)_
1435
1435
 
1436
1436
  ## `internxt webdav-config`
1437
1437
 
@@ -1470,7 +1470,7 @@ EXAMPLES
1470
1470
  $ internxt webdav-config
1471
1471
  ```
1472
1472
 
1473
- _See code: [src/commands/webdav-config.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/webdav-config.ts)_
1473
+ _See code: [src/commands/webdav-config.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/webdav-config.ts)_
1474
1474
 
1475
1475
  ## `internxt whoami`
1476
1476
 
@@ -1496,7 +1496,7 @@ EXAMPLES
1496
1496
  $ internxt whoami
1497
1497
  ```
1498
1498
 
1499
- _See code: [src/commands/whoami.ts](https://github.com/internxt/cli/blob/v1.6.9/src/commands/whoami.ts)_
1499
+ _See code: [src/commands/whoami.ts](https://github.com/internxt/cli/blob/v1.6.10/src/commands/whoami.ts)_
1500
1500
  <!-- commandsstop -->
1501
1501
 
1502
1502
  # Current Limitations
@@ -55,6 +55,8 @@ export default class List extends Command {
55
55
  plainName: string;
56
56
  status: "EXISTS" | "TRASHED" | "DELETED";
57
57
  isFavorite?: boolean;
58
+ thumbnails?: import("@internxt/sdk/dist/schema").components["schemas"]["ThumbnailDto"][];
59
+ sharings?: import("@internxt/sdk/dist/schema").components["schemas"]["FileSharingDto"][];
58
60
  }[];
59
61
  };
60
62
  }>;
@@ -33,6 +33,8 @@ export default class MoveFile extends Command {
33
33
  plainName: string;
34
34
  status: "EXISTS" | "TRASHED" | "DELETED";
35
35
  isFavorite?: boolean;
36
+ thumbnails?: import("@internxt/sdk/dist/schema").components["schemas"]["ThumbnailDto"][];
37
+ sharings?: import("@internxt/sdk/dist/schema").components["schemas"]["FileSharingDto"][];
36
38
  };
37
39
  }>;
38
40
  catch: (error: Error) => Promise<never>;
@@ -33,7 +33,6 @@ export default class TrashList extends Command {
33
33
  status: "EXISTS" | "TRASHED" | "DELETED";
34
34
  removed: boolean;
35
35
  deleted: boolean;
36
- isFavorite?: boolean;
37
36
  }[];
38
37
  files: {
39
38
  id: number;
@@ -53,7 +52,7 @@ export default class TrashList extends Command {
53
52
  updatedAt: string;
54
53
  plainName: string;
55
54
  status: "EXISTS" | "TRASHED" | "DELETED";
56
- isFavorite?: boolean;
55
+ sharings?: import("@internxt/sdk/dist/schema").components["schemas"]["FileSharingDto"][];
57
56
  }[];
58
57
  };
59
58
  }>;
@@ -33,6 +33,8 @@ export default class TrashRestoreFile extends Command {
33
33
  plainName: string;
34
34
  status: "EXISTS" | "TRASHED" | "DELETED";
35
35
  isFavorite?: boolean;
36
+ thumbnails?: import("@internxt/sdk/dist/schema").components["schemas"]["ThumbnailDto"][];
37
+ sharings?: import("@internxt/sdk/dist/schema").components["schemas"]["FileSharingDto"][];
36
38
  };
37
39
  }>;
38
40
  catch: (error: Error) => Promise<never>;
@@ -17,11 +17,11 @@ export default class UploadFile extends Command {
17
17
  message: string;
18
18
  file: {
19
19
  plainName: string;
20
+ uuid: string;
20
21
  name: string;
21
- status: "EXISTS" | "TRASHED" | "DELETED";
22
22
  bucket: string;
23
- uuid: string;
24
23
  folderUuid: string;
24
+ status: "EXISTS" | "TRASHED" | "DELETED";
25
25
  itemType: "file";
26
26
  size: number;
27
27
  createdAt: Date;
@@ -1,9 +1,15 @@
1
1
  import { DataSource } from 'typeorm';
2
+ type DatabasePragmas = {
3
+ pragma: (source: string) => unknown;
4
+ };
2
5
  export declare class DatabaseService {
3
6
  static readonly instance: DatabaseService;
4
7
  dataSource: DataSource;
8
+ static readonly configureJournal: (db: DatabasePragmas) => void;
9
+ private static readonly getJournalMode;
5
10
  initialize: () => Promise<DataSource> | undefined;
6
11
  destroy: () => Promise<void>;
7
12
  clear: () => Promise<void>;
8
13
  drop: () => Promise<void>;
9
14
  }
15
+ export {};
@@ -5,6 +5,7 @@ const typeorm_1 = require("typeorm");
5
5
  const drive_item_model_1 = require("./drive-item/drive-item.model");
6
6
  const configs_1 = require("../../constants/configs");
7
7
  const config_service_1 = require("../config.service");
8
+ const logger_utils_1 = require("../../utils/logger.utils");
8
9
  class DatabaseService {
9
10
  static instance = new DatabaseService();
10
11
  dataSource = new typeorm_1.DataSource(config_service_1.ConfigService.instance.get('NODE_ENV', false) === 'test'
@@ -21,7 +22,33 @@ class DatabaseService {
21
22
  logging: false,
22
23
  synchronize: true,
23
24
  entities: [drive_item_model_1.DriveItemModel],
25
+ prepareDatabase: (db) => DatabaseService.configureJournal(db),
24
26
  });
27
+ static configureJournal = (db) => {
28
+ const mode = DatabaseService.getJournalMode();
29
+ try {
30
+ const result = db.pragma(`journal_mode = ${mode}`);
31
+ const activeMode = result?.[0]?.journal_mode;
32
+ if (activeMode?.toUpperCase() !== mode) {
33
+ logger_utils_1.logger.warn(`Could not set SQLite journal mode to ${mode}, using ${activeMode ?? 'unknown'} instead`);
34
+ return;
35
+ }
36
+ if (mode === 'WAL')
37
+ db.pragma('journal_size_limit = 16777216');
38
+ }
39
+ catch (error) {
40
+ logger_utils_1.logger.warn(`Could not set SQLite journal mode to ${mode}: ${error.message}`);
41
+ }
42
+ };
43
+ static getJournalMode = () => {
44
+ const value = config_service_1.ConfigService.instance.get('INXT_SQLITE_JOURNAL_MODE', false).toUpperCase();
45
+ if (value === 'DELETE')
46
+ return 'DELETE';
47
+ if (value && value !== 'WAL') {
48
+ logger_utils_1.logger.warn(`Unknown INXT_SQLITE_JOURNAL_MODE "${value}", expected WAL or DELETE. Using WAL`);
49
+ }
50
+ return 'WAL';
51
+ };
25
52
  initialize = () => {
26
53
  if (!this.dataSource.isInitialized) {
27
54
  return this.dataSource.initialize();
@@ -1,5 +1,6 @@
1
1
  import { DriveItemBD } from './drive-item.domain';
2
2
  import { DriveItemModel } from './drive-item.model';
3
+ import { DriveItemAttributes } from './drive-item.attributes';
3
4
  export declare class DriveItemRepository {
4
5
  static readonly instance: DriveItemRepository;
5
6
  private readonly repository;
@@ -7,6 +8,6 @@ export declare class DriveItemRepository {
7
8
  updateByUuid: (uuid: string, update: Partial<DriveItemModel>) => Promise<import("typeorm").UpdateResult | undefined>;
8
9
  delete: (uuids: string[]) => Promise<import("typeorm").DeleteResult | undefined>;
9
10
  getByUuid: (uuid: string) => Promise<DriveItemBD | undefined>;
10
- getByPath: (path: string) => Promise<DriveItemBD | undefined>;
11
+ getByPath: (path: string, type?: DriveItemAttributes["type"]) => Promise<DriveItemBD | undefined>;
11
12
  getAll: () => Promise<DriveItemBD[]>;
12
13
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DriveItemRepository = void 0;
4
+ const typeorm_1 = require("typeorm");
4
5
  const errors_utils_1 = require("../../../utils/errors.utils");
5
6
  const database_service_1 = require("../database.service");
6
7
  const drive_item_domain_1 = require("./drive-item.domain");
@@ -72,16 +73,20 @@ class DriveItemRepository {
72
73
  errors_utils_1.ErrorUtils.report(error, { getByUuid: uuid });
73
74
  }
74
75
  };
75
- getByPath = async (path) => {
76
+ getByPath = async (path, type) => {
76
77
  try {
77
- const item = await this.repository.findOneBy({ path });
78
- if (!item) {
78
+ const variant = path.endsWith('/') ? path.slice(0, -1) : `${path}/`;
79
+ const paths = variant.length > 0 ? [path, variant] : [path];
80
+ const candidates = await this.repository.findBy(type ? { path: (0, typeorm_1.In)(paths), type } : { path: (0, typeorm_1.In)(paths) });
81
+ if (candidates.length === 0) {
79
82
  return;
80
83
  }
81
- return new drive_item_domain_1.DriveItemBD(item);
84
+ const rank = (item) => (item.path === path ? 0 : 2) + (item.type === 'file' ? 0 : 1);
85
+ const [best] = candidates.sort((a, b) => rank(a) - rank(b));
86
+ return new drive_item_domain_1.DriveItemBD(best);
82
87
  }
83
88
  catch (error) {
84
- errors_utils_1.ErrorUtils.report(error, { getByPath: path });
89
+ errors_utils_1.ErrorUtils.report(error, { getByPath: path, type });
85
90
  }
86
91
  };
87
92
  getAll = async () => {
@@ -81,20 +81,18 @@ class DriveFileService {
81
81
  getFileMetadata = async (uuid) => {
82
82
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
83
83
  const [getFileMetadata] = storageClient.getFile(uuid);
84
- const fileMetadata = await getFileMetadata;
85
- if (fileMetadata?.status !== types_1.FileStatus.EXISTS) {
84
+ const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(await getFileMetadata);
85
+ if (driveFileItem.status !== types_1.FileStatus.EXISTS) {
86
86
  throw new errors_utils_1.NotFoundError(`File with uuid ${uuid} not found`);
87
87
  }
88
- const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
89
88
  return driveFileItem;
90
89
  };
91
90
  getFileMetadataByPath = async (path) => {
92
91
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
93
- const fileMetadata = await storageClient.getFileByPath(path);
94
- if (fileMetadata?.status !== types_1.FileStatus.EXISTS) {
92
+ const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(await storageClient.getFileByPath(path));
93
+ if (driveFileItem.status !== types_1.FileStatus.EXISTS) {
95
94
  throw new errors_utils_1.NotFoundError(`File with path ${path} not found`);
96
95
  }
97
- const driveFileItem = drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
98
96
  return driveFileItem;
99
97
  };
100
98
  moveFile = async (uuid, payload) => {
@@ -1,7 +1,9 @@
1
- import { FetchPaginatedFile, FetchPaginatedFolder } from '@internxt/sdk/dist/drive/storage/types';
1
+ import { FetchFolderFilesCursorResponse, FetchFolderFoldersCursorResponse } from '@internxt/sdk/dist/drive/storage/types';
2
2
  import { StorageTypes } from '@internxt/sdk/dist/drive';
3
3
  import { DriveFolderItem } from '../../types/drive.types';
4
4
  import { RequestCanceler } from '@internxt/sdk/dist/shared/http/types';
5
+ type FolderContentFolder = FetchFolderFoldersCursorResponse['folders'][number];
6
+ type FolderContentFile = FetchFolderFilesCursorResponse['files'][number];
5
7
  export declare class DriveFolderService {
6
8
  static readonly instance: DriveFolderService;
7
9
  getFolderMetaByUuid: (uuid: string) => Promise<DriveFolderItem>;
@@ -49,16 +51,18 @@ export declare class DriveFolderService {
49
51
  plainName: string;
50
52
  status: "EXISTS" | "TRASHED" | "DELETED";
51
53
  isFavorite?: boolean;
54
+ thumbnails?: import("@internxt/sdk/dist/schema").components["schemas"]["ThumbnailDto"][];
55
+ sharings?: import("@internxt/sdk/dist/schema").components["schemas"]["FileSharingDto"][];
52
56
  }[];
53
57
  }>;
54
- getFolderSubfolders: (folderUuid: string) => Promise<FetchPaginatedFolder[]>;
55
- getFolderSubfiles: (folderUuid: string) => Promise<FetchPaginatedFile[]>;
56
- private readonly getAllSubfolders;
57
- private readonly getAllSubfiles;
58
+ getFolderSubfolders: (folderUuid: string) => Promise<FolderContentFolder[]>;
59
+ getFolderSubfiles: (folderUuid: string) => Promise<FolderContentFile[]>;
58
60
  moveFolder: (uuid: string, payload: StorageTypes.MoveFolderUuidPayload) => Promise<StorageTypes.FolderMeta>;
59
61
  createFolder: (payload: StorageTypes.CreateFolderByUuidPayload) => Promise<[Promise<StorageTypes.CreateFolderResponse>, RequestCanceler]>;
62
+ findExistentFolder: (parentFolderUuid: string, plainName: string) => Promise<DriveFolderItem | undefined>;
60
63
  renameFolder: (payload: {
61
64
  folderUuid: string;
62
65
  name: string;
63
66
  }) => Promise<void>;
64
67
  }
68
+ export {};
@@ -5,13 +5,14 @@ const types_1 = require("@internxt/sdk/dist/drive/storage/types");
5
5
  const sdk_manager_service_1 = require("../sdk-manager.service");
6
6
  const drive_utils_1 = require("../../utils/drive.utils");
7
7
  const errors_utils_1 = require("../../utils/errors.utils");
8
+ const pagination_utils_1 = require("../../utils/pagination.utils");
8
9
  class DriveFolderService {
9
10
  static instance = new DriveFolderService();
10
11
  getFolderMetaByUuid = async (uuid) => {
11
12
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
12
13
  const folderMeta = await storageClient.getFolderMeta(uuid);
13
14
  const folderItem = drive_utils_1.DriveUtils.driveFolderMetaToItem(folderMeta);
14
- if (folderItem?.status !== types_1.FileStatus.EXISTS) {
15
+ if (folderItem.status !== types_1.FileStatus.EXISTS) {
15
16
  throw new errors_utils_1.NotFoundError(`Folder with uuid ${uuid} not found`);
16
17
  }
17
18
  return folderItem;
@@ -38,37 +39,29 @@ class DriveFolderService {
38
39
  ]);
39
40
  return { folders, files };
40
41
  };
41
- getFolderSubfolders = async (folderUuid) => {
42
- const folders = await this.getAllSubfolders(folderUuid, 0);
43
- return folders;
44
- };
45
- getFolderSubfiles = async (folderUuid) => {
46
- const files = await this.getAllSubfiles(folderUuid, 0);
47
- return files;
48
- };
49
- getAllSubfolders = async (folderUuid, offset) => {
42
+ getFolderSubfolders = (folderUuid) => {
50
43
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
51
- const [personalFolderContentPromise] = storageClient.getFolderFoldersByUuid(folderUuid, offset, 50, 'plainName', 'ASC');
52
- let folders = (await personalFolderContentPromise).folders;
53
- folders = folders.filter((folder) => folder.status === types_1.FileStatus.EXISTS);
54
- if (folders.length > 0) {
55
- return folders.concat(await this.getAllSubfolders(folderUuid, offset + folders.length));
56
- }
57
- else {
58
- return folders;
59
- }
44
+ return pagination_utils_1.PaginationUtils.fetchAllPages(async (cursor) => {
45
+ const [promise] = storageClient.getFolderFoldersByUuidWithCursor(folderUuid, {
46
+ limit: pagination_utils_1.PaginationUtils.MAX_PAGE_SIZE,
47
+ order: 'ASC',
48
+ cursor,
49
+ });
50
+ const { folders, nextCursor } = await promise;
51
+ return { items: folders, nextCursor };
52
+ });
60
53
  };
61
- getAllSubfiles = async (folderUuid, offset) => {
54
+ getFolderSubfiles = (folderUuid) => {
62
55
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
63
- const [folderContentPromise] = storageClient.getFolderFilesByUuid(folderUuid, offset, 50, 'plainName', 'ASC');
64
- let files = (await folderContentPromise).files;
65
- files = files.filter((file) => file.status === types_1.FileStatus.EXISTS);
66
- if (files.length > 0) {
67
- return files.concat(await this.getAllSubfiles(folderUuid, offset + files.length));
68
- }
69
- else {
70
- return files;
71
- }
56
+ return pagination_utils_1.PaginationUtils.fetchAllPages(async (cursor) => {
57
+ const [promise] = storageClient.getFolderFilesByUuidWithCursor(folderUuid, {
58
+ limit: pagination_utils_1.PaginationUtils.MAX_PAGE_SIZE,
59
+ order: 'ASC',
60
+ cursor,
61
+ });
62
+ const { files, nextCursor } = await promise;
63
+ return { items: files, nextCursor };
64
+ });
72
65
  };
73
66
  moveFolder = async (uuid, payload) => {
74
67
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
@@ -79,6 +72,28 @@ class DriveFolderService {
79
72
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
80
73
  return storageClient.createFolderByUuid(payload);
81
74
  };
75
+ findExistentFolder = async (parentFolderUuid, plainName) => {
76
+ const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
77
+ const { existentFolders } = await storageClient.checkDuplicatedFolders({
78
+ folderUuid: parentFolderUuid,
79
+ folderNamesList: [plainName],
80
+ });
81
+ const existentFolder = existentFolders[0];
82
+ if (!existentFolder)
83
+ return undefined;
84
+ return {
85
+ itemType: 'folder',
86
+ uuid: existentFolder.uuid,
87
+ bucket: existentFolder.bucket,
88
+ status: existentFolder.deleted ? types_1.FileStatus.TRASHED : types_1.FileStatus.EXISTS,
89
+ name: existentFolder.plainName ?? existentFolder.plain_name ?? existentFolder.name,
90
+ parentUuid: existentFolder.parentUuid,
91
+ createdAt: new Date(existentFolder.createdAt),
92
+ updatedAt: new Date(existentFolder.updatedAt),
93
+ creationTime: new Date(existentFolder.createdAt),
94
+ modificationTime: new Date(existentFolder.updatedAt),
95
+ };
96
+ };
82
97
  renameFolder = async (payload) => {
83
98
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
84
99
  await storageClient.updateFolderNameWithUUID(payload);
@@ -1,6 +1,7 @@
1
1
  import { DriveFileItem, DriveFolderItem } from '../../types/drive.types';
2
2
  export declare class DriveItemService {
3
3
  static readonly instance: DriveItemService;
4
+ private readonly dropCacheIfGone;
4
5
  private readonly tryGetFileByUuid;
5
6
  private readonly tryGetFolderByUuid;
6
7
  getFileByPath: (path: string) => Promise<DriveFileItem>;