@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.
- package/README.md +28 -28
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/move-file.d.ts +2 -0
- package/dist/commands/trash-list.d.ts +1 -2
- package/dist/commands/trash-restore-file.d.ts +2 -0
- package/dist/commands/upload-file.d.ts +2 -2
- package/dist/services/database/database.service.d.ts +6 -0
- package/dist/services/database/database.service.js +27 -0
- package/dist/services/database/drive-item/drive-item.repository.d.ts +2 -1
- package/dist/services/database/drive-item/drive-item.repository.js +10 -5
- package/dist/services/drive/drive-file.service.js +4 -6
- package/dist/services/drive/drive-folder.service.d.ts +9 -5
- package/dist/services/drive/drive-folder.service.js +44 -29
- package/dist/services/drive/drive-item.service.d.ts +1 -0
- package/dist/services/drive/drive-item.service.js +24 -14
- package/dist/services/drive/trash.service.d.ts +5 -4
- package/dist/services/drive/trash.service.js +21 -22
- package/dist/services/webdav/webdav-folder.service.d.ts +4 -0
- package/dist/services/webdav/webdav-folder.service.js +14 -1
- package/dist/types/config.types.d.ts +1 -0
- package/dist/types/drive.types.d.ts +1 -0
- package/dist/utils/cli.utils.js +2 -8
- package/dist/utils/drive.utils.d.ts +1 -0
- package/dist/utils/drive.utils.js +9 -1
- package/dist/utils/errors.utils.d.ts +27 -0
- package/dist/utils/errors.utils.js +98 -3
- package/dist/utils/pagination.utils.d.ts +7 -0
- package/dist/utils/pagination.utils.js +20 -0
- package/dist/utils/webdav.utils.js +30 -17
- package/dist/webdav/handlers/MKCOL.handler.js +7 -1
- package/dist/webdav/handlers/PUT.handler.js +1 -1
- package/dist/webdav/index.js +3 -2
- package/dist/webdav/middewares/auth.middleware.js +3 -2
- package/dist/webdav/middewares/errors.middleware.js +7 -13
- package/oclif.manifest.json +1 -1
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
package/dist/commands/list.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
78
|
-
|
|
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
|
-
|
|
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
|
|
85
|
-
if (
|
|
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
|
|
94
|
-
if (
|
|
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 {
|
|
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<
|
|
55
|
-
getFolderSubfiles: (folderUuid: string) => Promise<
|
|
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
|
|
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 =
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
54
|
+
getFolderSubfiles = (folderUuid) => {
|
|
62
55
|
const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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>;
|