@internxt/cli 1.6.4 → 1.6.5
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 +31 -31
- package/dist/commands/login-legacy.js +2 -0
- package/dist/commands/login.js +2 -0
- package/dist/commands/upload-file.js +15 -26
- package/dist/services/auth.service.js +10 -1
- package/dist/services/cache.service.d.ts +13 -0
- package/dist/services/cache.service.js +36 -0
- package/dist/services/config.service.js +19 -3
- package/dist/services/database/database.service.d.ts +1 -1
- package/dist/services/database/database.service.js +6 -5
- package/dist/services/database/drive-item/drive-item.attributes.d.ts +7 -0
- package/dist/services/database/drive-item/drive-item.domain.d.ts +10 -0
- package/dist/services/database/drive-item/drive-item.domain.js +27 -0
- package/dist/services/database/drive-item/drive-item.model.d.ts +8 -0
- package/dist/services/database/{drive-folder/drive-folder.model.js → drive-item/drive-item.model.js} +11 -23
- package/dist/services/database/drive-item/drive-item.repository.d.ts +12 -0
- package/dist/services/database/drive-item/drive-item.repository.js +88 -0
- package/dist/services/drive/drive-file.service.d.ts +2 -3
- package/dist/services/drive/drive-file.service.js +9 -34
- package/dist/services/drive/drive-folder.service.d.ts +1 -3
- package/dist/services/drive/drive-folder.service.js +9 -87
- package/dist/services/drive/drive-item.service.d.ts +8 -0
- package/dist/services/drive/drive-item.service.js +98 -0
- package/dist/services/network/network-facade.service.d.ts +1 -3
- package/dist/services/network/network-facade.service.js +5 -8
- package/dist/services/network/upload/upload-file.service.js +2 -1
- package/dist/services/thumbnail.service.js +2 -2
- package/dist/services/usage.service.d.ts +2 -0
- package/dist/services/usage.service.js +18 -0
- package/dist/utils/cli.utils.d.ts +3 -2
- package/dist/utils/cli.utils.js +22 -18
- package/dist/utils/format.utils.js +3 -2
- package/dist/utils/upload.utils.d.ts +19 -0
- package/dist/utils/upload.utils.js +40 -0
- package/dist/utils/webdav.utils.d.ts +4 -2
- package/dist/utils/webdav.utils.js +14 -18
- package/dist/utils/xml.utils.js +5 -1
- package/dist/webdav/handlers/DELETE.handler.js +2 -0
- package/dist/webdav/handlers/LOCK.handler.d.ts +5 -0
- package/dist/webdav/handlers/LOCK.handler.js +50 -0
- package/dist/webdav/handlers/MKCOL.handler.js +15 -3
- package/dist/webdav/handlers/MOVE.handler.js +11 -0
- package/dist/webdav/handlers/OPTIONS.handler.js +4 -4
- package/dist/webdav/handlers/PROPFIND.handler.js +30 -9
- package/dist/webdav/handlers/PUT.handler.js +44 -40
- package/dist/webdav/handlers/UNLOCK.handler.d.ts +5 -0
- package/dist/webdav/handlers/UNLOCK.handler.js +12 -0
- package/dist/webdav/middewares/auth.middleware.js +9 -2
- package/dist/webdav/middewares/errors.middleware.js +2 -0
- package/dist/webdav/middewares/request-logger.middleware.js +10 -6
- package/dist/webdav/middewares/webdav-auth.middleware.js +0 -3
- package/dist/webdav/webdav-server.js +4 -0
- package/oclif.manifest.json +1 -1
- package/package.json +47 -46
- package/dist/services/database/drive-file/drive-file.attributes.d.ts +0 -14
- package/dist/services/database/drive-file/drive-file.domain.d.ts +0 -20
- package/dist/services/database/drive-file/drive-file.domain.js +0 -68
- package/dist/services/database/drive-file/drive-file.model.d.ts +0 -15
- package/dist/services/database/drive-file/drive-file.model.js +0 -67
- package/dist/services/database/drive-file/drive-file.repository.d.ts +0 -11
- package/dist/services/database/drive-file/drive-file.repository.js +0 -63
- package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +0 -10
- package/dist/services/database/drive-folder/drive-folder.attributes.js +0 -2
- package/dist/services/database/drive-folder/drive-folder.domain.d.ts +0 -16
- package/dist/services/database/drive-folder/drive-folder.domain.js +0 -53
- package/dist/services/database/drive-folder/drive-folder.model.d.ts +0 -11
- package/dist/services/database/drive-folder/drive-folder.repository.d.ts +0 -13
- package/dist/services/database/drive-folder/drive-folder.repository.js +0 -99
- package/dist/utils/database.utils.d.ts +0 -11
- package/dist/utils/database.utils.js +0 -26
- /package/dist/services/database/{drive-file/drive-file.attributes.js → drive-item/drive-item.attributes.js} +0 -0
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.5 linux-x64 node-v22.22.3
|
|
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.5/src/commands/add-cert.ts)_
|
|
143
143
|
|
|
144
144
|
## `internxt add cert`
|
|
145
145
|
|
|
@@ -191,7 +191,7 @@ EXAMPLES
|
|
|
191
191
|
$ internxt autocomplete --refresh-cache
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
_See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v3.2.
|
|
194
|
+
_See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v3.2.50/src/commands/autocomplete/index.ts)_
|
|
195
195
|
|
|
196
196
|
## `internxt config`
|
|
197
197
|
|
|
@@ -220,7 +220,7 @@ EXAMPLES
|
|
|
220
220
|
$ internxt config
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
-
_See code: [src/commands/config.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
223
|
+
_See code: [src/commands/config.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/config.ts)_
|
|
224
224
|
|
|
225
225
|
## `internxt create-folder`
|
|
226
226
|
|
|
@@ -254,7 +254,7 @@ EXAMPLES
|
|
|
254
254
|
$ internxt create-folder
|
|
255
255
|
```
|
|
256
256
|
|
|
257
|
-
_See code: [src/commands/create-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
257
|
+
_See code: [src/commands/create-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/create-folder.ts)_
|
|
258
258
|
|
|
259
259
|
## `internxt create folder`
|
|
260
260
|
|
|
@@ -318,7 +318,7 @@ EXAMPLES
|
|
|
318
318
|
$ internxt delete-permanently-file
|
|
319
319
|
```
|
|
320
320
|
|
|
321
|
-
_See code: [src/commands/delete-permanently-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
321
|
+
_See code: [src/commands/delete-permanently-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/delete-permanently-file.ts)_
|
|
322
322
|
|
|
323
323
|
## `internxt delete-permanently-folder`
|
|
324
324
|
|
|
@@ -350,7 +350,7 @@ EXAMPLES
|
|
|
350
350
|
$ internxt delete-permanently-folder
|
|
351
351
|
```
|
|
352
352
|
|
|
353
|
-
_See code: [src/commands/delete-permanently-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
353
|
+
_See code: [src/commands/delete-permanently-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/delete-permanently-folder.ts)_
|
|
354
354
|
|
|
355
355
|
## `internxt delete permanently file`
|
|
356
356
|
|
|
@@ -445,7 +445,7 @@ EXAMPLES
|
|
|
445
445
|
$ internxt download-file
|
|
446
446
|
```
|
|
447
447
|
|
|
448
|
-
_See code: [src/commands/download-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
448
|
+
_See code: [src/commands/download-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/download-file.ts)_
|
|
449
449
|
|
|
450
450
|
## `internxt download file`
|
|
451
451
|
|
|
@@ -508,7 +508,7 @@ EXAMPLES
|
|
|
508
508
|
$ internxt list
|
|
509
509
|
```
|
|
510
510
|
|
|
511
|
-
_See code: [src/commands/list.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
511
|
+
_See code: [src/commands/list.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/list.ts)_
|
|
512
512
|
|
|
513
513
|
## `internxt login`
|
|
514
514
|
|
|
@@ -536,7 +536,7 @@ EXAMPLES
|
|
|
536
536
|
$ internxt login
|
|
537
537
|
```
|
|
538
538
|
|
|
539
|
-
_See code: [src/commands/login.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
539
|
+
_See code: [src/commands/login.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/login.ts)_
|
|
540
540
|
|
|
541
541
|
## `internxt login-legacy`
|
|
542
542
|
|
|
@@ -570,7 +570,7 @@ EXAMPLES
|
|
|
570
570
|
$ internxt login-legacy
|
|
571
571
|
```
|
|
572
572
|
|
|
573
|
-
_See code: [src/commands/login-legacy.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
573
|
+
_See code: [src/commands/login-legacy.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/login-legacy.ts)_
|
|
574
574
|
|
|
575
575
|
## `internxt logout`
|
|
576
576
|
|
|
@@ -590,7 +590,7 @@ EXAMPLES
|
|
|
590
590
|
$ internxt logout
|
|
591
591
|
```
|
|
592
592
|
|
|
593
|
-
_See code: [src/commands/logout.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
593
|
+
_See code: [src/commands/logout.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/logout.ts)_
|
|
594
594
|
|
|
595
595
|
## `internxt logs`
|
|
596
596
|
|
|
@@ -610,7 +610,7 @@ EXAMPLES
|
|
|
610
610
|
$ internxt logs
|
|
611
611
|
```
|
|
612
612
|
|
|
613
|
-
_See code: [src/commands/logs.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
613
|
+
_See code: [src/commands/logs.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/logs.ts)_
|
|
614
614
|
|
|
615
615
|
## `internxt move-file`
|
|
616
616
|
|
|
@@ -644,7 +644,7 @@ EXAMPLES
|
|
|
644
644
|
$ internxt move-file
|
|
645
645
|
```
|
|
646
646
|
|
|
647
|
-
_See code: [src/commands/move-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
647
|
+
_See code: [src/commands/move-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/move-file.ts)_
|
|
648
648
|
|
|
649
649
|
## `internxt move-folder`
|
|
650
650
|
|
|
@@ -678,7 +678,7 @@ EXAMPLES
|
|
|
678
678
|
$ internxt move-folder
|
|
679
679
|
```
|
|
680
680
|
|
|
681
|
-
_See code: [src/commands/move-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
681
|
+
_See code: [src/commands/move-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/move-folder.ts)_
|
|
682
682
|
|
|
683
683
|
## `internxt move file`
|
|
684
684
|
|
|
@@ -775,7 +775,7 @@ EXAMPLES
|
|
|
775
775
|
$ internxt rename-file
|
|
776
776
|
```
|
|
777
777
|
|
|
778
|
-
_See code: [src/commands/rename-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
778
|
+
_See code: [src/commands/rename-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/rename-file.ts)_
|
|
779
779
|
|
|
780
780
|
## `internxt rename-folder`
|
|
781
781
|
|
|
@@ -808,7 +808,7 @@ EXAMPLES
|
|
|
808
808
|
$ internxt rename-folder
|
|
809
809
|
```
|
|
810
810
|
|
|
811
|
-
_See code: [src/commands/rename-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
811
|
+
_See code: [src/commands/rename-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/rename-folder.ts)_
|
|
812
812
|
|
|
813
813
|
## `internxt rename file`
|
|
814
814
|
|
|
@@ -902,7 +902,7 @@ EXAMPLES
|
|
|
902
902
|
$ internxt trash-clear
|
|
903
903
|
```
|
|
904
904
|
|
|
905
|
-
_See code: [src/commands/trash-clear.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
905
|
+
_See code: [src/commands/trash-clear.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-clear.ts)_
|
|
906
906
|
|
|
907
907
|
## `internxt trash-file`
|
|
908
908
|
|
|
@@ -934,7 +934,7 @@ EXAMPLES
|
|
|
934
934
|
$ internxt trash-file
|
|
935
935
|
```
|
|
936
936
|
|
|
937
|
-
_See code: [src/commands/trash-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
937
|
+
_See code: [src/commands/trash-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-file.ts)_
|
|
938
938
|
|
|
939
939
|
## `internxt trash-folder`
|
|
940
940
|
|
|
@@ -966,7 +966,7 @@ EXAMPLES
|
|
|
966
966
|
$ internxt trash-folder
|
|
967
967
|
```
|
|
968
968
|
|
|
969
|
-
_See code: [src/commands/trash-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
969
|
+
_See code: [src/commands/trash-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-folder.ts)_
|
|
970
970
|
|
|
971
971
|
## `internxt trash-list`
|
|
972
972
|
|
|
@@ -992,7 +992,7 @@ EXAMPLES
|
|
|
992
992
|
$ internxt trash-list
|
|
993
993
|
```
|
|
994
994
|
|
|
995
|
-
_See code: [src/commands/trash-list.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
995
|
+
_See code: [src/commands/trash-list.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-list.ts)_
|
|
996
996
|
|
|
997
997
|
## `internxt trash-restore-file`
|
|
998
998
|
|
|
@@ -1025,7 +1025,7 @@ EXAMPLES
|
|
|
1025
1025
|
$ internxt trash-restore-file
|
|
1026
1026
|
```
|
|
1027
1027
|
|
|
1028
|
-
_See code: [src/commands/trash-restore-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1028
|
+
_See code: [src/commands/trash-restore-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-restore-file.ts)_
|
|
1029
1029
|
|
|
1030
1030
|
## `internxt trash-restore-folder`
|
|
1031
1031
|
|
|
@@ -1058,7 +1058,7 @@ EXAMPLES
|
|
|
1058
1058
|
$ internxt trash-restore-folder
|
|
1059
1059
|
```
|
|
1060
1060
|
|
|
1061
|
-
_See code: [src/commands/trash-restore-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1061
|
+
_See code: [src/commands/trash-restore-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/trash-restore-folder.ts)_
|
|
1062
1062
|
|
|
1063
1063
|
## `internxt trash clear`
|
|
1064
1064
|
|
|
@@ -1267,7 +1267,7 @@ EXAMPLES
|
|
|
1267
1267
|
$ internxt upload-file
|
|
1268
1268
|
```
|
|
1269
1269
|
|
|
1270
|
-
_See code: [src/commands/upload-file.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1270
|
+
_See code: [src/commands/upload-file.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/upload-file.ts)_
|
|
1271
1271
|
|
|
1272
1272
|
## `internxt upload-folder`
|
|
1273
1273
|
|
|
@@ -1300,7 +1300,7 @@ EXAMPLES
|
|
|
1300
1300
|
$ internxt upload-folder
|
|
1301
1301
|
```
|
|
1302
1302
|
|
|
1303
|
-
_See code: [src/commands/upload-folder.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1303
|
+
_See code: [src/commands/upload-folder.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/upload-folder.ts)_
|
|
1304
1304
|
|
|
1305
1305
|
## `internxt upload file`
|
|
1306
1306
|
|
|
@@ -1388,7 +1388,7 @@ EXAMPLES
|
|
|
1388
1388
|
$ internxt webdav status
|
|
1389
1389
|
```
|
|
1390
1390
|
|
|
1391
|
-
_See code: [src/commands/webdav.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1391
|
+
_See code: [src/commands/webdav.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/webdav.ts)_
|
|
1392
1392
|
|
|
1393
1393
|
## `internxt webdav-config`
|
|
1394
1394
|
|
|
@@ -1427,7 +1427,7 @@ EXAMPLES
|
|
|
1427
1427
|
$ internxt webdav-config
|
|
1428
1428
|
```
|
|
1429
1429
|
|
|
1430
|
-
_See code: [src/commands/webdav-config.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1430
|
+
_See code: [src/commands/webdav-config.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/webdav-config.ts)_
|
|
1431
1431
|
|
|
1432
1432
|
## `internxt whoami`
|
|
1433
1433
|
|
|
@@ -1447,7 +1447,7 @@ EXAMPLES
|
|
|
1447
1447
|
$ internxt whoami
|
|
1448
1448
|
```
|
|
1449
1449
|
|
|
1450
|
-
_See code: [src/commands/whoami.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1450
|
+
_See code: [src/commands/whoami.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/whoami.ts)_
|
|
1451
1451
|
|
|
1452
1452
|
## `internxt workspaces-list`
|
|
1453
1453
|
|
|
@@ -1479,7 +1479,7 @@ EXAMPLES
|
|
|
1479
1479
|
$ internxt workspaces-list
|
|
1480
1480
|
```
|
|
1481
1481
|
|
|
1482
|
-
_See code: [src/commands/workspaces-list.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1482
|
+
_See code: [src/commands/workspaces-list.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/workspaces-list.ts)_
|
|
1483
1483
|
|
|
1484
1484
|
## `internxt workspaces-unset`
|
|
1485
1485
|
|
|
@@ -1509,7 +1509,7 @@ EXAMPLES
|
|
|
1509
1509
|
$ internxt workspaces-unset
|
|
1510
1510
|
```
|
|
1511
1511
|
|
|
1512
|
-
_See code: [src/commands/workspaces-unset.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1512
|
+
_See code: [src/commands/workspaces-unset.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/workspaces-unset.ts)_
|
|
1513
1513
|
|
|
1514
1514
|
## `internxt workspaces-use`
|
|
1515
1515
|
|
|
@@ -1545,7 +1545,7 @@ EXAMPLES
|
|
|
1545
1545
|
$ internxt workspaces-use
|
|
1546
1546
|
```
|
|
1547
1547
|
|
|
1548
|
-
_See code: [src/commands/workspaces-use.ts](https://github.com/internxt/cli/blob/v1.6.
|
|
1548
|
+
_See code: [src/commands/workspaces-use.ts](https://github.com/internxt/cli/blob/v1.6.5/src/commands/workspaces-use.ts)_
|
|
1549
1549
|
|
|
1550
1550
|
## `internxt workspaces list`
|
|
1551
1551
|
|
|
@@ -41,6 +41,7 @@ const validation_service_1 = require("../services/validation.service");
|
|
|
41
41
|
const cli_utils_1 = require("../utils/cli.utils");
|
|
42
42
|
const sdk_manager_service_1 = require("../services/sdk-manager.service");
|
|
43
43
|
const OTPAuth = __importStar(require("otpauth"));
|
|
44
|
+
const cache_service_1 = require("../services/cache.service");
|
|
44
45
|
class LoginLegacy extends core_1.Command {
|
|
45
46
|
static args = {};
|
|
46
47
|
static description = '[Legacy] Logs into an Internxt account using user and password. ' +
|
|
@@ -104,6 +105,7 @@ class LoginLegacy extends core_1.Command {
|
|
|
104
105
|
}
|
|
105
106
|
const loginCredentials = await auth_service_1.AuthService.instance.doLogin(email, password, twoFactorCode);
|
|
106
107
|
sdk_manager_service_1.SdkManager.init({ token: loginCredentials.token });
|
|
108
|
+
cache_service_1.CacheService.instance.clearCaches();
|
|
107
109
|
await config_service_1.ConfigService.instance.saveUser(loginCredentials);
|
|
108
110
|
const message = `Succesfully logged in to: ${loginCredentials.user.email}`;
|
|
109
111
|
cli_utils_1.CLIUtils.success(this.log.bind(this), message);
|
package/dist/commands/login.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const core_1 = require("@oclif/core");
|
|
4
|
+
const cache_service_1 = require("../services/cache.service");
|
|
4
5
|
const config_service_1 = require("../services/config.service");
|
|
5
6
|
const cli_utils_1 = require("../utils/cli.utils");
|
|
6
7
|
const sdk_manager_service_1 = require("../services/sdk-manager.service");
|
|
@@ -37,6 +38,7 @@ class Login extends core_1.Command {
|
|
|
37
38
|
const port = flags['port'];
|
|
38
39
|
const loginCredentials = await universal_link_service_1.UniversalLinkService.instance.loginSSO(flags['json'] ?? false, this.log.bind(this), host, port);
|
|
39
40
|
sdk_manager_service_1.SdkManager.init({ token: loginCredentials.token });
|
|
41
|
+
cache_service_1.CacheService.instance.clearCaches();
|
|
40
42
|
await config_service_1.ConfigService.instance.saveUser(loginCredentials);
|
|
41
43
|
const message = `Succesfully logged in to: ${loginCredentials.user.email}`;
|
|
42
44
|
cli_utils_1.CLIUtils.success(this.log.bind(this), message);
|
|
@@ -13,10 +13,9 @@ const drive_file_service_1 = require("../services/drive/drive-file.service");
|
|
|
13
13
|
const command_types_1 = require("../types/command.types");
|
|
14
14
|
const validation_service_1 = require("../services/validation.service");
|
|
15
15
|
const types_1 = require("@internxt/sdk/dist/drive/storage/types");
|
|
16
|
-
const stream_utils_1 = require("../utils/stream.utils");
|
|
17
|
-
const thumbnail_utils_1 = require("../utils/thumbnail.utils");
|
|
18
16
|
const thumbnail_service_1 = require("../services/thumbnail.service");
|
|
19
17
|
const auth_service_1 = require("../services/auth.service");
|
|
18
|
+
const upload_utils_1 = require("../utils/upload.utils");
|
|
20
19
|
class UploadFile extends core_1.Command {
|
|
21
20
|
static args = {};
|
|
22
21
|
static description = 'Upload a file to Internxt Drive';
|
|
@@ -70,22 +69,18 @@ class UploadFile extends core_1.Command {
|
|
|
70
69
|
}, flags['json']);
|
|
71
70
|
progressBar?.start(100, 0);
|
|
72
71
|
let fileId;
|
|
73
|
-
let
|
|
74
|
-
const isThumbnailable = thumbnail_utils_1.ThumbnailUtils.isFileThumbnailable(fileType);
|
|
72
|
+
let thumbnailStream;
|
|
75
73
|
const fileSize = stats.size ?? 0;
|
|
76
74
|
if (fileSize > 0) {
|
|
77
75
|
const readStream = (0, node_fs_1.createReadStream)(filePath);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
bufferStream = new stream_utils_1.BufferStream();
|
|
81
|
-
fileStream = readStream.pipe(bufferStream);
|
|
82
|
-
}
|
|
76
|
+
const preparedStreams = upload_utils_1.UploadUtils.prepareUploadStreams(readStream, fileType);
|
|
77
|
+
thumbnailStream = preparedStreams.thumbnailStream;
|
|
83
78
|
const progressCallback = (progress) => {
|
|
84
79
|
progressBar?.update(progress * 100 * 0.99);
|
|
85
80
|
};
|
|
86
81
|
const abortable = new AbortController();
|
|
87
82
|
fileId = await networkFacade.uploadFile({
|
|
88
|
-
from: fileStream,
|
|
83
|
+
from: preparedStreams.fileStream,
|
|
89
84
|
size: fileSize,
|
|
90
85
|
bucketId: bucket,
|
|
91
86
|
progressCallback,
|
|
@@ -111,26 +106,20 @@ class UploadFile extends core_1.Command {
|
|
|
111
106
|
});
|
|
112
107
|
timings.driveUpload = driveUploadTimer.stop();
|
|
113
108
|
const thumbnailTimer = cli_utils_1.CLIUtils.timer();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
});
|
|
123
|
-
}
|
|
109
|
+
await thumbnail_service_1.ThumbnailService.instance.tryUploadThumbnail({
|
|
110
|
+
bufferStream: thumbnailStream,
|
|
111
|
+
fileType,
|
|
112
|
+
bucket,
|
|
113
|
+
fileUuid: createdDriveFile.uuid,
|
|
114
|
+
networkFacade,
|
|
115
|
+
size: fileSize,
|
|
116
|
+
});
|
|
124
117
|
timings.thumbnailUpload = thumbnailTimer.stop();
|
|
125
118
|
progressBar?.update(100);
|
|
126
119
|
progressBar?.stop();
|
|
127
|
-
const totalTime =
|
|
128
|
-
const throughputMBps = cli_utils_1.CLIUtils.calculateThroughputMBps(stats.size, timings.networkUpload);
|
|
120
|
+
const { totalTime, timingBreakdown } = upload_utils_1.UploadUtils.getTimings(stats.size, timings);
|
|
129
121
|
if (flags['debug']) {
|
|
130
|
-
cli_utils_1.CLIUtils.log(reporter,
|
|
131
|
-
`Network upload: ${cli_utils_1.CLIUtils.formatDuration(timings.networkUpload)} (${throughputMBps.toFixed(2)} MB/s)\n` +
|
|
132
|
-
`Drive upload: ${cli_utils_1.CLIUtils.formatDuration(timings.driveUpload)}\n` +
|
|
133
|
-
`Thumbnail: ${cli_utils_1.CLIUtils.formatDuration(timings.thumbnailUpload)}\n`);
|
|
122
|
+
cli_utils_1.CLIUtils.log(reporter, timingBreakdown);
|
|
134
123
|
}
|
|
135
124
|
const workspace = await auth_service_1.AuthService.instance.getCurrentWorkspace();
|
|
136
125
|
const workspaceId = workspace?.workspaceData.workspace.id;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AuthService = void 0;
|
|
4
4
|
const sdk_manager_service_1 = require("./sdk-manager.service");
|
|
5
|
+
const cache_service_1 = require("./cache.service");
|
|
5
6
|
const crypto_service_1 = require("./crypto.service");
|
|
6
7
|
const config_service_1 = require("./config.service");
|
|
7
8
|
const command_types_1 = require("../types/command.types");
|
|
@@ -53,9 +54,11 @@ class AuthService {
|
|
|
53
54
|
if (tokenDetails.expiration.expired) {
|
|
54
55
|
throw new command_types_1.ExpiredCredentialsError();
|
|
55
56
|
}
|
|
57
|
+
let credentialsChanged = false;
|
|
56
58
|
if (tokenDetails.expiration.refreshRequired) {
|
|
57
59
|
try {
|
|
58
60
|
loginCreds = await this.refreshUserToken(loginCreds.token, loginCreds.user.mnemonic, loginCreds.user.keys.ecc.privateKey);
|
|
61
|
+
credentialsChanged = true;
|
|
59
62
|
}
|
|
60
63
|
catch (error) {
|
|
61
64
|
await config_service_1.ConfigService.instance.clearUser();
|
|
@@ -63,9 +66,14 @@ class AuthService {
|
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
const workspaceCreds = await this.refreshWorkspaceCredentials(loginCreds);
|
|
69
|
+
if (workspaceCreds !== loginCreds.workspace) {
|
|
70
|
+
credentialsChanged = true;
|
|
71
|
+
}
|
|
66
72
|
loginCreds.workspace = workspaceCreds;
|
|
67
73
|
sdk_manager_service_1.SdkManager.init({ token: loginCreds.token, workspaceToken: workspaceCreds?.workspaceCredentials.token });
|
|
68
|
-
|
|
74
|
+
if (credentialsChanged) {
|
|
75
|
+
await config_service_1.ConfigService.instance.saveUser(loginCreds);
|
|
76
|
+
}
|
|
69
77
|
return loginCreds;
|
|
70
78
|
};
|
|
71
79
|
refreshUserToken = async (oldToken, mnemonic, privateKey) => {
|
|
@@ -135,6 +143,7 @@ class AuthService {
|
|
|
135
143
|
return loginCreds.workspace?.workspaceData?.workspaceUser?.rootFolderId ?? loginCreds.user.rootFolderId;
|
|
136
144
|
};
|
|
137
145
|
logout = async () => {
|
|
146
|
+
cache_service_1.CacheService.instance.clearCaches();
|
|
138
147
|
try {
|
|
139
148
|
const user = await config_service_1.ConfigService.instance.readUser();
|
|
140
149
|
if (!user?.token) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class CacheService {
|
|
2
|
+
static readonly instance: CacheService;
|
|
3
|
+
private readonly store;
|
|
4
|
+
private readonly defaultTtl;
|
|
5
|
+
static readonly FETCH_USAGE_CACHE_KEY = "usage:fetchUsage";
|
|
6
|
+
static readonly FETCH_SPACE_LIMIT_CACHE_KEY = "usage:fetchSpaceLimit";
|
|
7
|
+
static readonly FETCH_LIMITS_CACHE_KEY = "usage:fetchLimits";
|
|
8
|
+
static readonly AUTH_CACHE_KEY = "auth:details";
|
|
9
|
+
static readonly WEBDAV_CONFIG_CACHE_KEY = "webdav:config";
|
|
10
|
+
get: <T>(key: string) => T | null;
|
|
11
|
+
set: <T>(key: string, data: T, ttl?: number) => void;
|
|
12
|
+
clearCaches: () => void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CacheService = void 0;
|
|
4
|
+
const FIFTEEN_MINUTES = 15 * 60 * 1000;
|
|
5
|
+
class CacheService {
|
|
6
|
+
static instance = new CacheService();
|
|
7
|
+
store = new Map();
|
|
8
|
+
defaultTtl = FIFTEEN_MINUTES;
|
|
9
|
+
static FETCH_USAGE_CACHE_KEY = 'usage:fetchUsage';
|
|
10
|
+
static FETCH_SPACE_LIMIT_CACHE_KEY = 'usage:fetchSpaceLimit';
|
|
11
|
+
static FETCH_LIMITS_CACHE_KEY = 'usage:fetchLimits';
|
|
12
|
+
static AUTH_CACHE_KEY = 'auth:details';
|
|
13
|
+
static WEBDAV_CONFIG_CACHE_KEY = 'webdav:config';
|
|
14
|
+
get = (key) => {
|
|
15
|
+
const entry = this.store.get(key);
|
|
16
|
+
if (!entry)
|
|
17
|
+
return null;
|
|
18
|
+
const isExpired = Date.now() - entry.timestamp > entry.ttl;
|
|
19
|
+
if (isExpired) {
|
|
20
|
+
this.store.delete(key);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return entry.data;
|
|
24
|
+
};
|
|
25
|
+
set = (key, data, ttl) => {
|
|
26
|
+
this.store.set(key, {
|
|
27
|
+
data,
|
|
28
|
+
timestamp: Date.now(),
|
|
29
|
+
ttl: ttl ?? this.defaultTtl,
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
clearCaches = () => {
|
|
33
|
+
this.store.clear();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.CacheService = CacheService;
|
|
@@ -8,6 +8,7 @@ const promises_1 = __importDefault(require("node:fs/promises"));
|
|
|
8
8
|
const crypto_service_1 = require("./crypto.service");
|
|
9
9
|
const errors_utils_1 = require("../utils/errors.utils");
|
|
10
10
|
const configs_1 = require("../constants/configs");
|
|
11
|
+
const cache_service_1 = require("./cache.service");
|
|
11
12
|
class ConfigService {
|
|
12
13
|
static instance = new ConfigService();
|
|
13
14
|
get = (key, throwIfNotFound = true) => {
|
|
@@ -17,12 +18,16 @@ class ConfigService {
|
|
|
17
18
|
return value ?? '';
|
|
18
19
|
};
|
|
19
20
|
saveUser = async (loginCredentials) => {
|
|
21
|
+
cache_service_1.CacheService.instance.set(cache_service_1.CacheService.AUTH_CACHE_KEY, loginCredentials);
|
|
20
22
|
await this.ensureInternxtCliDataDirExists();
|
|
21
23
|
const credentialsString = JSON.stringify(loginCredentials);
|
|
22
24
|
const encryptedCredentials = crypto_service_1.CryptoService.instance.encryptText(credentialsString);
|
|
23
|
-
|
|
25
|
+
const tempPath = configs_1.CREDENTIALS_FILE + '.tmp';
|
|
26
|
+
await promises_1.default.writeFile(tempPath, encryptedCredentials, 'utf8');
|
|
27
|
+
await promises_1.default.rename(tempPath, configs_1.CREDENTIALS_FILE);
|
|
24
28
|
};
|
|
25
29
|
clearUser = async () => {
|
|
30
|
+
cache_service_1.CacheService.instance.set(cache_service_1.CacheService.AUTH_CACHE_KEY, undefined);
|
|
26
31
|
try {
|
|
27
32
|
const stat = await promises_1.default.stat(configs_1.CREDENTIALS_FILE);
|
|
28
33
|
if (stat.size === 0)
|
|
@@ -36,6 +41,9 @@ class ConfigService {
|
|
|
36
41
|
}
|
|
37
42
|
};
|
|
38
43
|
readUser = async () => {
|
|
44
|
+
const cached = cache_service_1.CacheService.instance.get(cache_service_1.CacheService.AUTH_CACHE_KEY);
|
|
45
|
+
if (cached)
|
|
46
|
+
return cached;
|
|
39
47
|
try {
|
|
40
48
|
const encryptedCredentials = await promises_1.default.readFile(configs_1.CREDENTIALS_FILE, 'utf8');
|
|
41
49
|
const credentialsString = crypto_service_1.CryptoService.instance.decryptText(encryptedCredentials);
|
|
@@ -47,15 +55,21 @@ class ConfigService {
|
|
|
47
55
|
}
|
|
48
56
|
};
|
|
49
57
|
saveWebdavConfig = async (webdavConfig) => {
|
|
58
|
+
cache_service_1.CacheService.instance.set(cache_service_1.CacheService.WEBDAV_CONFIG_CACHE_KEY, webdavConfig);
|
|
50
59
|
await this.ensureInternxtCliDataDirExists();
|
|
51
60
|
const configs = JSON.stringify(webdavConfig);
|
|
52
|
-
|
|
61
|
+
const tempPath = configs_1.WEBDAV_CONFIGS_FILE + '.tmp';
|
|
62
|
+
await promises_1.default.writeFile(tempPath, configs, 'utf8');
|
|
63
|
+
await promises_1.default.rename(tempPath, configs_1.WEBDAV_CONFIGS_FILE);
|
|
53
64
|
};
|
|
54
65
|
readWebdavConfig = async () => {
|
|
66
|
+
const cached = cache_service_1.CacheService.instance.get(cache_service_1.CacheService.WEBDAV_CONFIG_CACHE_KEY);
|
|
67
|
+
if (cached)
|
|
68
|
+
return cached;
|
|
55
69
|
try {
|
|
56
70
|
const configsData = await promises_1.default.readFile(configs_1.WEBDAV_CONFIGS_FILE, 'utf8');
|
|
57
71
|
const configs = JSON.parse(configsData);
|
|
58
|
-
|
|
72
|
+
const webdavConfig = {
|
|
59
73
|
host: configs?.host ?? configs_1.WEBDAV_DEFAULT_HOST,
|
|
60
74
|
port: configs?.port ?? configs_1.WEBDAV_DEFAULT_PORT,
|
|
61
75
|
protocol: configs?.protocol ?? configs_1.WEBDAV_DEFAULT_PROTOCOL,
|
|
@@ -66,6 +80,8 @@ class ConfigService {
|
|
|
66
80
|
password: configs?.password ?? '',
|
|
67
81
|
deleteFilesPermanently: configs?.deleteFilesPermanently ?? configs_1.WEBDAV_DEFAULT_DELETE_FILES_PERMANENTLY,
|
|
68
82
|
};
|
|
83
|
+
cache_service_1.CacheService.instance.set(cache_service_1.CacheService.WEBDAV_CONFIG_CACHE_KEY, webdavConfig);
|
|
84
|
+
return webdavConfig;
|
|
69
85
|
}
|
|
70
86
|
catch {
|
|
71
87
|
return {
|
|
@@ -2,7 +2,7 @@ import { DataSource } from 'typeorm';
|
|
|
2
2
|
export declare class DatabaseService {
|
|
3
3
|
static readonly instance: DatabaseService;
|
|
4
4
|
dataSource: DataSource;
|
|
5
|
-
initialize: () => Promise<DataSource
|
|
5
|
+
initialize: () => Promise<DataSource> | undefined;
|
|
6
6
|
destroy: () => Promise<void>;
|
|
7
7
|
clear: () => Promise<void>;
|
|
8
8
|
drop: () => Promise<void>;
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DatabaseService = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
|
-
const
|
|
6
|
-
const drive_folder_model_1 = require("./drive-folder/drive-folder.model");
|
|
5
|
+
const drive_item_model_1 = require("./drive-item/drive-item.model");
|
|
7
6
|
const configs_1 = require("../../constants/configs");
|
|
8
7
|
const config_service_1 = require("../config.service");
|
|
9
8
|
class DatabaseService {
|
|
@@ -14,17 +13,19 @@ class DatabaseService {
|
|
|
14
13
|
autoSave: false,
|
|
15
14
|
logging: false,
|
|
16
15
|
synchronize: true,
|
|
17
|
-
entities: [
|
|
16
|
+
entities: [drive_item_model_1.DriveItemModel],
|
|
18
17
|
}
|
|
19
18
|
: {
|
|
20
19
|
type: 'better-sqlite3',
|
|
21
20
|
database: configs_1.DRIVE_SQLITE_FILE,
|
|
22
21
|
logging: false,
|
|
23
22
|
synchronize: true,
|
|
24
|
-
entities: [
|
|
23
|
+
entities: [drive_item_model_1.DriveItemModel],
|
|
25
24
|
});
|
|
26
25
|
initialize = () => {
|
|
27
|
-
|
|
26
|
+
if (!this.dataSource.isInitialized) {
|
|
27
|
+
return this.dataSource.initialize();
|
|
28
|
+
}
|
|
28
29
|
};
|
|
29
30
|
destroy = () => {
|
|
30
31
|
return this.dataSource.destroy();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DriveItemAttributes } from './drive-item.attributes';
|
|
2
|
+
export declare class DriveItemBD implements DriveItemAttributes {
|
|
3
|
+
uuid: string;
|
|
4
|
+
path: string;
|
|
5
|
+
type: 'file' | 'folder';
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
updatedAt: Date;
|
|
8
|
+
constructor({ uuid, path, type, createdAt, updatedAt }: DriveItemAttributes);
|
|
9
|
+
toJSON(): DriveItemAttributes;
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveItemBD = void 0;
|
|
4
|
+
class DriveItemBD {
|
|
5
|
+
uuid;
|
|
6
|
+
path;
|
|
7
|
+
type;
|
|
8
|
+
createdAt;
|
|
9
|
+
updatedAt;
|
|
10
|
+
constructor({ uuid, path, type, createdAt, updatedAt }) {
|
|
11
|
+
this.uuid = uuid;
|
|
12
|
+
this.path = path;
|
|
13
|
+
this.type = type;
|
|
14
|
+
this.createdAt = createdAt;
|
|
15
|
+
this.updatedAt = updatedAt;
|
|
16
|
+
}
|
|
17
|
+
toJSON() {
|
|
18
|
+
return {
|
|
19
|
+
uuid: this.uuid,
|
|
20
|
+
path: this.path,
|
|
21
|
+
type: this.type,
|
|
22
|
+
createdAt: this.createdAt,
|
|
23
|
+
updatedAt: this.updatedAt,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.DriveItemBD = DriveItemBD;
|