@internxt/cli 1.5.5 → 1.5.7

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 (59) hide show
  1. package/README.md +34 -31
  2. package/dist/commands/create-folder.js +2 -0
  3. package/dist/commands/download-file.d.ts +1 -1
  4. package/dist/commands/download-file.js +7 -1
  5. package/dist/commands/list.d.ts +40 -2
  6. package/dist/commands/login.d.ts +1 -0
  7. package/dist/commands/login.js +58 -8
  8. package/dist/commands/move-file.d.ts +19 -1
  9. package/dist/commands/move-file.js +1 -1
  10. package/dist/commands/move-folder.js +3 -1
  11. package/dist/commands/rename-file.d.ts +1 -0
  12. package/dist/commands/rename-file.js +11 -4
  13. package/dist/commands/trash-file.js +1 -1
  14. package/dist/commands/trash-folder.js +1 -1
  15. package/dist/commands/trash-list.d.ts +40 -2
  16. package/dist/commands/trash-restore-file.d.ts +19 -1
  17. package/dist/commands/trash-restore-file.js +1 -1
  18. package/dist/commands/trash-restore-folder.js +3 -1
  19. package/dist/commands/upload-file.d.ts +17 -1
  20. package/dist/commands/upload-file.js +16 -11
  21. package/dist/commands/webdav-config.d.ts +1 -0
  22. package/dist/commands/webdav-config.js +9 -0
  23. package/dist/commands/webdav.js +2 -2
  24. package/dist/commands/whoami.js +14 -8
  25. package/dist/hooks/prerun/auth_check.js +2 -5
  26. package/dist/services/auth.service.d.ts +2 -1
  27. package/dist/services/auth.service.js +31 -37
  28. package/dist/services/config.service.d.ts +1 -1
  29. package/dist/services/config.service.js +4 -7
  30. package/dist/services/database/drive-file/drive-file.attributes.d.ts +3 -1
  31. package/dist/services/database/drive-file/drive-file.domain.d.ts +4 -2
  32. package/dist/services/database/drive-file/drive-file.domain.js +9 -2
  33. package/dist/services/drive/drive-file.service.d.ts +1 -1
  34. package/dist/services/drive/drive-file.service.js +5 -4
  35. package/dist/services/drive/drive-folder.service.d.ts +41 -4
  36. package/dist/services/drive/drive-folder.service.js +2 -2
  37. package/dist/services/drive/trash.service.d.ts +40 -2
  38. package/dist/services/keys.service.d.ts +0 -3
  39. package/dist/services/keys.service.js +0 -59
  40. package/dist/services/sdk-manager.service.d.ts +1 -3
  41. package/dist/services/sdk-manager.service.js +5 -15
  42. package/dist/services/thumbnail.service.js +59 -15
  43. package/dist/services/validation.service.js +2 -2
  44. package/dist/types/command.types.d.ts +27 -3
  45. package/dist/types/drive.types.d.ts +5 -4
  46. package/dist/types/keys.types.d.ts +0 -12
  47. package/dist/types/keys.types.js +0 -29
  48. package/dist/utils/drive.utils.js +4 -3
  49. package/dist/utils/network.utils.d.ts +4 -3
  50. package/dist/utils/network.utils.js +8 -8
  51. package/dist/webdav/handlers/DELETE.handler.js +1 -1
  52. package/dist/webdav/handlers/MOVE.handler.js +9 -7
  53. package/dist/webdav/handlers/PROPFIND.handler.js +8 -5
  54. package/dist/webdav/handlers/PUT.handler.js +5 -6
  55. package/dist/webdav/index.js +2 -5
  56. package/dist/webdav/middewares/auth.middleware.js +3 -10
  57. package/dist/webdav/webdav-server.js +3 -3
  58. package/oclif.manifest.json +27 -3
  59. package/package.json +20 -17
@@ -13,7 +13,25 @@ export default class TrashRestoreFile extends Command {
13
13
  run: () => Promise<{
14
14
  success: boolean;
15
15
  message: string;
16
- file: import("@internxt/sdk/dist/drive/storage/types").FileMeta;
16
+ file: {
17
+ id: number;
18
+ uuid: string;
19
+ fileId: string;
20
+ name: string;
21
+ type: string;
22
+ size: string;
23
+ bucket: string;
24
+ folderId: number;
25
+ folderUuid: string;
26
+ encryptVersion: string;
27
+ userId: number;
28
+ creationTime: string;
29
+ modificationTime: string;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ plainName: string;
33
+ status: "EXISTS" | "TRASHED" | "DELETED";
34
+ };
17
35
  }>;
18
36
  catch: (error: Error) => Promise<never>;
19
37
  private getFileUuid;
@@ -37,7 +37,7 @@ class TrashRestoreFile extends core_1.Command {
37
37
  if (destinationFolderUuid.trim().length === 0) {
38
38
  destinationFolderUuid = userCredentials.user.rootFolderId;
39
39
  }
40
- const file = await drive_file_service_1.DriveFileService.instance.moveFile({ fileUuid, destinationFolderUuid });
40
+ const file = await drive_file_service_1.DriveFileService.instance.moveFile(fileUuid, { destinationFolder: destinationFolderUuid });
41
41
  const message = `File restored successfully to: ${destinationFolderUuid}`;
42
42
  cli_utils_1.CLIUtils.success(this.log.bind(this), message);
43
43
  return { success: true, message, file };
@@ -37,7 +37,9 @@ class TrashRestoreFolder extends core_1.Command {
37
37
  if (destinationFolderUuid.trim().length === 0) {
38
38
  destinationFolderUuid = userCredentials.user.rootFolderId;
39
39
  }
40
- const folder = await drive_folder_service_1.DriveFolderService.instance.moveFolder({ folderUuid, destinationFolderUuid });
40
+ const folder = await drive_folder_service_1.DriveFolderService.instance.moveFolder(folderUuid, {
41
+ destinationFolder: destinationFolderUuid,
42
+ });
41
43
  const message = `Folder restored successfully to: ${destinationFolderUuid}`;
42
44
  cli_utils_1.CLIUtils.success(this.log.bind(this), message);
43
45
  return { success: true, message, folder };
@@ -13,7 +13,23 @@ export default class UploadFile extends Command {
13
13
  run: () => Promise<{
14
14
  success: boolean;
15
15
  message: string;
16
- file: import("../types/drive.types").DriveFileItem;
16
+ file: {
17
+ plainName: string;
18
+ name: string;
19
+ id: number;
20
+ bucket: string;
21
+ uuid: string;
22
+ folderUuid: string;
23
+ folderId: number;
24
+ status: "EXISTS" | "TRASHED" | "DELETED";
25
+ fileId: string;
26
+ size: number;
27
+ createdAt: Date;
28
+ updatedAt: Date;
29
+ creationTime: Date;
30
+ modificationTime: Date;
31
+ type?: string | null;
32
+ };
17
33
  }>;
18
34
  catch: (error: Error) => Promise<never>;
19
35
  private getDestinationFolderUuid;
@@ -46,9 +46,7 @@ class UploadFile extends core_1.Command {
46
46
  run = async () => {
47
47
  const { flags } = await this.parse(UploadFile);
48
48
  const nonInteractive = flags['non-interactive'];
49
- const userCredentials = await config_service_1.ConfigService.instance.readUser();
50
- if (!userCredentials)
51
- throw new command_types_1.MissingCredentialsError();
49
+ const { user } = await auth_service_1.AuthService.instance.getAuthDetails();
52
50
  const filePath = await this.getFilePath(flags['file'], nonInteractive);
53
51
  const stats = await (0, promises_1.stat)(filePath);
54
52
  if (!stats.size) {
@@ -58,10 +56,9 @@ class UploadFile extends core_1.Command {
58
56
  const fileType = fileInfo.ext.replaceAll('.', '');
59
57
  let destinationFolderUuid = await this.getDestinationFolderUuid(flags['destination'], nonInteractive);
60
58
  if (destinationFolderUuid.trim().length === 0) {
61
- destinationFolderUuid = userCredentials.user.rootFolderId;
59
+ destinationFolderUuid = user.rootFolderId;
62
60
  }
63
61
  cli_utils_1.CLIUtils.doing('Preparing Network', flags['json']);
64
- const { user } = await auth_service_1.AuthService.instance.getAuthDetails();
65
62
  const networkModule = sdk_manager_service_1.SdkManager.instance.getNetwork({
66
63
  user: user.bridgeUser,
67
64
  pass: user.userId,
@@ -105,14 +102,15 @@ class UploadFile extends core_1.Command {
105
102
  });
106
103
  });
107
104
  const createdDriveFile = await drive_file_service_1.DriveFileService.instance.createFile({
108
- plain_name: fileInfo.name,
105
+ plainName: fileInfo.name,
109
106
  type: fileType,
110
107
  size: stats.size,
111
- folder_id: destinationFolderUuid,
112
- id: fileId,
108
+ folderUuid: destinationFolderUuid,
109
+ fileId: fileId,
113
110
  bucket: user.bucket,
114
- encrypt_version: types_1.EncryptionVersion.Aes03,
115
- name: '',
111
+ encryptVersion: types_1.EncryptionVersion.Aes03,
112
+ creationTime: stats.birthtime?.toISOString(),
113
+ modificationTime: stats.mtime?.toISOString(),
116
114
  });
117
115
  try {
118
116
  if (isThumbnailable && bufferStream) {
@@ -131,7 +129,14 @@ class UploadFile extends core_1.Command {
131
129
  this.log('\n');
132
130
  const message = `File uploaded in ${uploadTime}ms, view it at ${config_service_1.ConfigService.instance.get('DRIVE_WEB_URL')}/file/${createdDriveFile.uuid}`;
133
131
  cli_utils_1.CLIUtils.success(this.log.bind(this), message);
134
- return { success: true, message, file: createdDriveFile };
132
+ return {
133
+ success: true,
134
+ message,
135
+ file: {
136
+ ...createdDriveFile,
137
+ plainName: fileInfo.name,
138
+ },
139
+ };
135
140
  };
136
141
  catch = async (error) => {
137
142
  const { flags } = await this.parse(UploadFile);
@@ -5,6 +5,7 @@ export default class WebDAVConfig extends Command {
5
5
  static readonly aliases: never[];
6
6
  static readonly examples: string[];
7
7
  static readonly flags: {
8
+ host: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
9
  port: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
10
  https: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
11
  http: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
@@ -11,6 +11,11 @@ class WebDAVConfig extends core_1.Command {
11
11
  static aliases = [];
12
12
  static examples = ['<%= config.bin %> <%= command.id %>'];
13
13
  static flags = {
14
+ host: core_1.Flags.string({
15
+ char: 'l',
16
+ description: 'The listening host for the WebDAV server.',
17
+ required: false,
18
+ }),
14
19
  port: core_1.Flags.string({
15
20
  char: 'p',
16
21
  description: 'The new port for the WebDAV server.',
@@ -39,6 +44,10 @@ class WebDAVConfig extends core_1.Command {
39
44
  run = async () => {
40
45
  const { flags } = await this.parse(WebDAVConfig);
41
46
  const webdavConfig = await config_service_1.ConfigService.instance.readWebdavConfig();
47
+ const host = flags['host'];
48
+ if (host) {
49
+ webdavConfig['host'] = host;
50
+ }
42
51
  const port = flags['port'];
43
52
  if (port) {
44
53
  if (validation_service_1.ValidationService.instance.validateTCPIntegerPort(port)) {
@@ -75,10 +75,10 @@ class Webdav extends core_1.Command {
75
75
  const { status } = await pm2_utils_1.PM2Utils.webdavServerStatus();
76
76
  const webdavConfigs = await config_service_1.ConfigService.instance.readWebdavConfig();
77
77
  if (status === 'online') {
78
- const message = `Internxt WebDav server started successfully at ${webdavConfigs.protocol}://${config_service_1.ConfigService.WEBDAV_LOCAL_URL}:${webdavConfigs.port}`;
78
+ const message = 'Internxt WebDav server started successfully at ' +
79
+ `${webdavConfigs.protocol}://${webdavConfigs.host}:${webdavConfigs.port}`;
79
80
  cli_utils_1.CLIUtils.log(this.log.bind(this), `\nWebDav server status: ${core_1.ux.colorize('green', 'online')}\n`);
80
81
  cli_utils_1.CLIUtils.success(this.log.bind(this), message);
81
- cli_utils_1.CLIUtils.log(this.log.bind(this), `\n[If the above URL is not working, the WebDAV server can be accessed directly via your localhost IP at: ${webdavConfigs.protocol}://127.0.0.1:${webdavConfigs.port} ]\n`);
82
82
  return message;
83
83
  }
84
84
  else {
@@ -4,6 +4,7 @@ const core_1 = require("@oclif/core");
4
4
  const cli_utils_1 = require("../utils/cli.utils");
5
5
  const config_service_1 = require("../services/config.service");
6
6
  const validation_service_1 = require("../services/validation.service");
7
+ const auth_service_1 = require("../services/auth.service");
7
8
  class Whoami extends core_1.Command {
8
9
  static args = {};
9
10
  static description = 'Display the current user logged into the Internxt CLI.';
@@ -20,13 +21,20 @@ class Whoami extends core_1.Command {
20
21
  }
21
22
  else {
22
23
  const validCreds = this.checkUserAndTokens(userCredentials);
23
- if (!validCreds) {
24
+ if (!validCreds.valid) {
24
25
  const message = 'Your session has expired. You have been logged out. Please log in again.';
25
26
  await config_service_1.ConfigService.instance.clearUser();
26
27
  cli_utils_1.CLIUtils.error(this.log.bind(this), message);
27
28
  return { success: false, message };
28
29
  }
29
30
  else {
31
+ if (validCreds.refreshRequired) {
32
+ try {
33
+ await auth_service_1.AuthService.instance.refreshUserToken(userCredentials);
34
+ }
35
+ catch {
36
+ }
37
+ }
30
38
  const message = `You are logged in as: ${userCredentials.user.email}.`;
31
39
  cli_utils_1.CLIUtils.success(this.log.bind(this), message);
32
40
  return { success: true, message, login: userCredentials };
@@ -45,15 +53,13 @@ class Whoami extends core_1.Command {
45
53
  this.exit(1);
46
54
  };
47
55
  checkUserAndTokens = (loginCreds) => {
48
- if (!(loginCreds?.newToken && loginCreds?.token && loginCreds?.user?.mnemonic)) {
49
- return false;
56
+ if (!(loginCreds?.token && loginCreds?.user?.mnemonic)) {
57
+ return { valid: false, refreshRequired: false };
50
58
  }
51
- const oldTokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.token);
52
- const newTokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.newToken);
59
+ const tokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.token);
53
60
  const goodMnemonic = validation_service_1.ValidationService.instance.validateMnemonic(loginCreds.user.mnemonic);
54
- const goodToken = oldTokenDetails.isValid && !oldTokenDetails.expiration.expired;
55
- const goodNewToken = newTokenDetails.isValid && !newTokenDetails.expiration.expired;
56
- return goodToken && goodNewToken && goodMnemonic;
61
+ const goodToken = tokenDetails.isValid && !tokenDetails.expiration.expired;
62
+ return { valid: goodToken && goodMnemonic, refreshRequired: tokenDetails.expiration.refreshRequired };
57
63
  };
58
64
  }
59
65
  exports.default = Whoami;
@@ -19,11 +19,8 @@ const hook = async function (opts) {
19
19
  if (!CommandsToSkip.map((command) => command.name).includes(Command.name)) {
20
20
  cli_utils_1.CLIUtils.doing('Checking credentials', jsonFlag);
21
21
  try {
22
- const { token, newToken } = await auth_service_1.AuthService.instance.getAuthDetails();
23
- sdk_manager_service_1.SdkManager.init({
24
- token,
25
- newToken,
26
- });
22
+ const { token } = await auth_service_1.AuthService.instance.getAuthDetails();
23
+ sdk_manager_service_1.SdkManager.init({ token });
27
24
  cli_utils_1.CLIUtils.done(jsonFlag);
28
25
  cli_utils_1.CLIUtils.clearPreviousLine(jsonFlag);
29
26
  }
@@ -4,6 +4,7 @@ export declare class AuthService {
4
4
  doLogin: (email: string, password: string, twoFactorCode?: string) => Promise<LoginCredentials>;
5
5
  is2FANeeded: (email: string) => Promise<boolean>;
6
6
  getAuthDetails: () => Promise<LoginCredentials>;
7
- refreshUserTokens: (oldCreds: LoginCredentials) => Promise<LoginCredentials>;
7
+ refreshUserDetails: (oldCreds: LoginCredentials) => Promise<LoginCredentials>;
8
+ refreshUserToken: (oldCreds: LoginCredentials) => Promise<LoginCredentials>;
8
9
  logout: () => Promise<void>;
9
10
  }
@@ -2,7 +2,6 @@
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 keys_service_1 = require("./keys.service");
6
5
  const crypto_service_1 = require("./crypto.service");
7
6
  const config_service_1 = require("./config.service");
8
7
  const command_types_1 = require("../types/command.types");
@@ -16,26 +15,16 @@ class AuthService {
16
15
  password: password,
17
16
  tfaCode: twoFactorCode,
18
17
  };
19
- const data = await authClient.login(loginDetails, crypto_service_1.CryptoService.cryptoProvider);
20
- const { user, token, newToken } = data;
21
- const { privateKey, publicKey } = user;
22
- const plainPrivateKeyInBase64 = privateKey
23
- ? Buffer.from(keys_service_1.KeysService.instance.decryptPrivateKey(privateKey, password)).toString('base64')
24
- : '';
25
- if (privateKey) {
26
- await keys_service_1.KeysService.instance.assertPrivateKeyIsValid(privateKey, password);
27
- await keys_service_1.KeysService.instance.assertValidateKeys(Buffer.from(plainPrivateKeyInBase64, 'base64').toString(), Buffer.from(publicKey, 'base64').toString());
28
- }
18
+ const data = await authClient.loginAccess(loginDetails, crypto_service_1.CryptoService.cryptoProvider);
19
+ const { user, newToken } = data;
29
20
  const clearMnemonic = crypto_service_1.CryptoService.instance.decryptTextWithKey(user.mnemonic, password);
30
21
  const clearUser = {
31
22
  ...user,
32
23
  mnemonic: clearMnemonic,
33
- privateKey: plainPrivateKeyInBase64,
34
24
  };
35
25
  return {
36
26
  user: clearUser,
37
- token: token,
38
- newToken: newToken,
27
+ token: newToken,
39
28
  lastLoggedInAt: new Date().toISOString(),
40
29
  lastTokenRefreshAt: new Date().toISOString(),
41
30
  };
@@ -49,58 +38,63 @@ class AuthService {
49
38
  };
50
39
  getAuthDetails = async () => {
51
40
  let loginCreds = await config_service_1.ConfigService.instance.readUser();
52
- if (!loginCreds?.newToken || !loginCreds?.token || !loginCreds?.user?.mnemonic) {
41
+ if (!loginCreds?.token || !loginCreds?.user?.mnemonic) {
53
42
  throw new command_types_1.MissingCredentialsError();
54
43
  }
55
- const oldTokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.token);
56
- const newTokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.newToken);
44
+ const tokenDetails = validation_service_1.ValidationService.instance.validateTokenAndCheckExpiration(loginCreds.token);
57
45
  const isValidMnemonic = validation_service_1.ValidationService.instance.validateMnemonic(loginCreds.user.mnemonic);
58
- if (!oldTokenDetails.isValid || !newTokenDetails.isValid || !isValidMnemonic) {
46
+ if (!tokenDetails.isValid || !isValidMnemonic) {
59
47
  throw new command_types_1.InvalidCredentialsError();
60
48
  }
61
- if (oldTokenDetails.expiration.expired || newTokenDetails.expiration.expired) {
49
+ if (tokenDetails.expiration.expired) {
62
50
  throw new command_types_1.ExpiredCredentialsError();
63
51
  }
64
- const refreshOldToken = !oldTokenDetails.expiration.expired && oldTokenDetails.expiration.refreshRequired;
65
- const refreshNewToken = !newTokenDetails.expiration.expired && newTokenDetails.expiration.refreshRequired;
66
- if (refreshOldToken || refreshNewToken) {
67
- loginCreds = await this.refreshUserTokens(loginCreds);
52
+ const refreshToken = tokenDetails.expiration.refreshRequired;
53
+ if (refreshToken) {
54
+ loginCreds = await this.refreshUserToken(loginCreds);
68
55
  }
69
56
  return loginCreds;
70
57
  };
71
- refreshUserTokens = async (oldCreds) => {
72
- sdk_manager_service_1.SdkManager.init({
73
- token: oldCreds.token,
74
- newToken: oldCreds.newToken,
75
- });
58
+ refreshUserDetails = async (oldCreds) => {
59
+ sdk_manager_service_1.SdkManager.init({ token: oldCreds.token });
76
60
  const usersClient = sdk_manager_service_1.SdkManager.instance.getUsers();
77
61
  const newCreds = await usersClient.getUserData({ userUuid: oldCreds.user.uuid });
78
62
  const loginCreds = {
79
63
  user: {
80
64
  ...newCreds.user,
81
65
  mnemonic: oldCreds.user.mnemonic,
82
- privateKey: oldCreds.user.privateKey,
66
+ createdAt: new Date(newCreds.user.createdAt).toISOString(),
83
67
  },
84
- token: newCreds.oldToken,
85
- newToken: newCreds.newToken,
68
+ token: newCreds.newToken,
86
69
  lastLoggedInAt: oldCreds.lastLoggedInAt,
87
70
  lastTokenRefreshAt: new Date().toISOString(),
88
71
  };
89
- sdk_manager_service_1.SdkManager.init({
90
- token: newCreds.oldToken,
91
- newToken: newCreds.newToken,
92
- });
72
+ sdk_manager_service_1.SdkManager.init({ token: newCreds.newToken });
93
73
  await config_service_1.ConfigService.instance.saveUser(loginCreds);
94
74
  return loginCreds;
95
75
  };
76
+ refreshUserToken = async (oldCreds) => {
77
+ sdk_manager_service_1.SdkManager.init({ token: oldCreds.token });
78
+ const usersClient = sdk_manager_service_1.SdkManager.instance.getUsers();
79
+ const newCreds = await usersClient.refreshUser();
80
+ sdk_manager_service_1.SdkManager.init({ token: newCreds.newToken });
81
+ const newLoginCreds = {
82
+ ...oldCreds,
83
+ token: newCreds.newToken,
84
+ lastLoggedInAt: oldCreds.lastLoggedInAt,
85
+ lastTokenRefreshAt: new Date().toISOString(),
86
+ };
87
+ await config_service_1.ConfigService.instance.saveUser(newLoginCreds);
88
+ return newLoginCreds;
89
+ };
96
90
  logout = async () => {
97
91
  try {
98
92
  const user = await config_service_1.ConfigService.instance.readUser();
99
- if (!user || !user.newToken) {
93
+ if (!user || !user.token) {
100
94
  return;
101
95
  }
102
96
  const authClient = sdk_manager_service_1.SdkManager.instance.getAuth();
103
- return authClient.logout(user.newToken);
97
+ return authClient.logout(user.token);
104
98
  }
105
99
  catch {
106
100
  }
@@ -8,7 +8,7 @@ export declare class ConfigService {
8
8
  static readonly DRIVE_SQLITE_FILE: string;
9
9
  static readonly WEBDAV_SSL_CERTS_DIR: string;
10
10
  static readonly WEBDAV_CONFIGS_FILE: string;
11
- static readonly WEBDAV_LOCAL_URL = "webdav.local.internxt.com";
11
+ static readonly WEBDAV_DEFAULT_HOST = "127.0.0.1";
12
12
  static readonly WEBDAV_DEFAULT_PORT = "3005";
13
13
  static readonly WEBDAV_DEFAULT_PROTOCOL = "https";
14
14
  static readonly WEBDAV_DEFAULT_TIMEOUT = 0;
@@ -16,7 +16,7 @@ class ConfigService {
16
16
  static DRIVE_SQLITE_FILE = node_path_1.default.join(this.INTERNXT_CLI_DATA_DIR, 'internxt-cli-drive.sqlite');
17
17
  static WEBDAV_SSL_CERTS_DIR = node_path_1.default.join(this.INTERNXT_CLI_DATA_DIR, 'certs');
18
18
  static WEBDAV_CONFIGS_FILE = node_path_1.default.join(this.INTERNXT_CLI_DATA_DIR, 'config.webdav.inxt');
19
- static WEBDAV_LOCAL_URL = 'webdav.local.internxt.com';
19
+ static WEBDAV_DEFAULT_HOST = '127.0.0.1';
20
20
  static WEBDAV_DEFAULT_PORT = '3005';
21
21
  static WEBDAV_DEFAULT_PROTOCOL = 'https';
22
22
  static WEBDAV_DEFAULT_TIMEOUT = 0;
@@ -43,12 +43,7 @@ class ConfigService {
43
43
  try {
44
44
  const encryptedCredentials = await promises_1.default.readFile(ConfigService.CREDENTIALS_FILE, 'utf8');
45
45
  const credentialsString = crypto_service_1.CryptoService.instance.decryptText(encryptedCredentials);
46
- const loginCredentials = JSON.parse(credentialsString, (key, value) => {
47
- if (typeof value === 'string' && key === 'createdAt') {
48
- return new Date(value);
49
- }
50
- return value;
51
- });
46
+ const loginCredentials = JSON.parse(credentialsString);
52
47
  return loginCredentials;
53
48
  }
54
49
  catch {
@@ -65,6 +60,7 @@ class ConfigService {
65
60
  const configsData = await promises_1.default.readFile(ConfigService.WEBDAV_CONFIGS_FILE, 'utf8');
66
61
  const configs = JSON.parse(configsData);
67
62
  return {
63
+ host: configs?.host ?? ConfigService.WEBDAV_DEFAULT_HOST,
68
64
  port: configs?.port ?? ConfigService.WEBDAV_DEFAULT_PORT,
69
65
  protocol: configs?.protocol ?? ConfigService.WEBDAV_DEFAULT_PROTOCOL,
70
66
  timeoutMinutes: configs?.timeoutMinutes ?? ConfigService.WEBDAV_DEFAULT_TIMEOUT,
@@ -72,6 +68,7 @@ class ConfigService {
72
68
  }
73
69
  catch {
74
70
  return {
71
+ host: ConfigService.WEBDAV_DEFAULT_HOST,
75
72
  port: ConfigService.WEBDAV_DEFAULT_PORT,
76
73
  protocol: ConfigService.WEBDAV_DEFAULT_PROTOCOL,
77
74
  timeoutMinutes: ConfigService.WEBDAV_DEFAULT_TIMEOUT,
@@ -11,5 +11,7 @@ export interface DriveFileAttributes {
11
11
  createdAt: Date;
12
12
  updatedAt: Date;
13
13
  size: number;
14
- status: string;
14
+ status: 'EXISTS' | 'TRASHED' | 'DELETED';
15
+ creationTime: Date;
16
+ modificationTime: Date;
15
17
  }
@@ -13,8 +13,10 @@ export declare class DriveFile implements DriveFileAttributes {
13
13
  createdAt: Date;
14
14
  updatedAt: Date;
15
15
  size: number;
16
- status: string;
17
- constructor({ id, name, type, uuid, fileId, folderId, folderUuid, bucket, relativePath, createdAt, updatedAt, size, status, }: DriveFileAttributes);
16
+ status: 'EXISTS' | 'TRASHED' | 'DELETED';
17
+ creationTime: Date;
18
+ modificationTime: Date;
19
+ constructor({ id, name, type, uuid, fileId, folderId, folderUuid, bucket, relativePath, createdAt, updatedAt, size, status, creationTime, modificationTime, }: DriveFileAttributes);
18
20
  static build(file: DriveFileAttributes): DriveFile;
19
21
  toJSON(): DriveFileAttributes;
20
22
  toItem(): DriveFileItem;
@@ -15,7 +15,9 @@ class DriveFile {
15
15
  updatedAt;
16
16
  size;
17
17
  status;
18
- constructor({ id, name, type, uuid, fileId, folderId, folderUuid, bucket, relativePath, createdAt, updatedAt, size, status, }) {
18
+ creationTime;
19
+ modificationTime;
20
+ constructor({ id, name, type, uuid, fileId, folderId, folderUuid, bucket, relativePath, createdAt, updatedAt, size, status, creationTime, modificationTime, }) {
19
21
  this.id = id;
20
22
  this.name = name;
21
23
  this.type = type;
@@ -29,6 +31,8 @@ class DriveFile {
29
31
  this.updatedAt = updatedAt;
30
32
  this.size = size;
31
33
  this.status = status;
34
+ this.creationTime = creationTime;
35
+ this.modificationTime = modificationTime;
32
36
  }
33
37
  static build(file) {
34
38
  return new DriveFile(file);
@@ -48,6 +52,8 @@ class DriveFile {
48
52
  updatedAt: this.updatedAt,
49
53
  size: this.size,
50
54
  status: this.status,
55
+ creationTime: this.creationTime,
56
+ modificationTime: this.modificationTime,
51
57
  };
52
58
  }
53
59
  toItem() {
@@ -64,7 +70,8 @@ class DriveFile {
64
70
  updatedAt: this.updatedAt,
65
71
  size: this.size,
66
72
  status: this.status,
67
- encryptedName: '',
73
+ creationTime: this.creationTime,
74
+ modificationTime: this.modificationTime,
68
75
  };
69
76
  }
70
77
  }
@@ -4,7 +4,7 @@ export declare class DriveFileService {
4
4
  static readonly instance: DriveFileService;
5
5
  createFile: (payload: StorageTypes.FileEntryByUuid) => Promise<DriveFileItem>;
6
6
  getFileMetadata: (uuid: string) => Promise<DriveFileItem>;
7
- moveFile: (payload: StorageTypes.MoveFileUuidPayload) => Promise<StorageTypes.FileMeta>;
7
+ moveFile: (uuid: string, payload: StorageTypes.MoveFileUuidPayload) => Promise<StorageTypes.FileMeta>;
8
8
  renameFile: (fileUuid: string, payload: {
9
9
  plainName?: string;
10
10
  type?: string | null;
@@ -9,8 +9,7 @@ class DriveFileService {
9
9
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
10
10
  const driveFile = await storageClient.createFileEntryByUuid(payload);
11
11
  return {
12
- name: payload.plain_name,
13
- encryptedName: driveFile.name,
12
+ name: payload.plainName,
14
13
  id: driveFile.id,
15
14
  uuid: driveFile.uuid,
16
15
  size: driveFile.size,
@@ -22,6 +21,8 @@ class DriveFileService {
22
21
  status: driveFile.status,
23
22
  folderId: driveFile.folderId,
24
23
  folderUuid: driveFile.folderUuid,
24
+ creationTime: new Date(driveFile.creationTime ?? driveFile.createdAt),
25
+ modificationTime: new Date(driveFile.modificationTime ?? driveFile.updatedAt),
25
26
  };
26
27
  };
27
28
  getFileMetadata = async (uuid) => {
@@ -30,9 +31,9 @@ class DriveFileService {
30
31
  const fileMetadata = await getFileMetadata;
31
32
  return drive_utils_1.DriveUtils.driveFileMetaToItem(fileMetadata);
32
33
  };
33
- moveFile = (payload) => {
34
+ moveFile = (uuid, payload) => {
34
35
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
35
- return storageClient.moveFileByUuid(payload);
36
+ return storageClient.moveFileByUuid(uuid, payload);
36
37
  };
37
38
  renameFile = (fileUuid, payload) => {
38
39
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
@@ -1,4 +1,3 @@
1
- import { FetchPaginatedFile, FetchPaginatedFolder } from '@internxt/sdk/dist/drive/storage/types';
2
1
  import { StorageTypes } from '@internxt/sdk/dist/drive';
3
2
  import { DriveFolderItem } from '../../types/drive.types';
4
3
  import { RequestCanceler } from '@internxt/sdk/dist/shared/http/types';
@@ -7,12 +6,50 @@ export declare class DriveFolderService {
7
6
  getFolderMetaByUuid: (uuid: string) => Promise<DriveFolderItem>;
8
7
  getFolderMetaById: (id: number) => Promise<DriveFolderItem>;
9
8
  getFolderContent: (folderUuid: string) => Promise<{
10
- folders: FetchPaginatedFolder[];
11
- files: FetchPaginatedFile[];
9
+ folders: {
10
+ type: string;
11
+ id: number;
12
+ parentId: number;
13
+ parentUuid: string;
14
+ name: string;
15
+ parent: import("@internxt/sdk/dist/schema").components["schemas"]["Folder"];
16
+ bucket: string;
17
+ userId: number;
18
+ encryptVersion: string;
19
+ createdAt: string;
20
+ updatedAt: string;
21
+ uuid: string;
22
+ plainName: string;
23
+ size: number;
24
+ creationTime: string;
25
+ modificationTime: string;
26
+ status: "EXISTS" | "TRASHED" | "DELETED";
27
+ removed: boolean;
28
+ deleted: boolean;
29
+ }[];
30
+ files: {
31
+ id: number;
32
+ uuid: string;
33
+ fileId: string;
34
+ name: string;
35
+ type: string;
36
+ size: string;
37
+ bucket: string;
38
+ folderId: number;
39
+ folderUuid: string;
40
+ encryptVersion: string;
41
+ userId: number;
42
+ creationTime: string;
43
+ modificationTime: string;
44
+ createdAt: string;
45
+ updatedAt: string;
46
+ plainName: string;
47
+ status: "EXISTS" | "TRASHED" | "DELETED";
48
+ }[];
12
49
  }>;
13
50
  private readonly getAllSubfolders;
14
51
  private readonly getAllSubfiles;
15
- moveFolder: (payload: StorageTypes.MoveFolderUuidPayload) => Promise<StorageTypes.FolderMeta>;
52
+ moveFolder: (uuid: string, payload: StorageTypes.MoveFolderUuidPayload) => Promise<StorageTypes.FolderMeta>;
16
53
  createFolder(payload: StorageTypes.CreateFolderByUuidPayload): [Promise<StorageTypes.CreateFolderResponse>, RequestCanceler];
17
54
  renameFolder: (payload: {
18
55
  folderUuid: string;
@@ -41,9 +41,9 @@ class DriveFolderService {
41
41
  return files;
42
42
  }
43
43
  };
44
- moveFolder = (payload) => {
44
+ moveFolder = (uuid, payload) => {
45
45
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();
46
- return storageClient.moveFolderByUuid(payload);
46
+ return storageClient.moveFolderByUuid(uuid, payload);
47
47
  };
48
48
  createFolder(payload) {
49
49
  const storageClient = sdk_manager_service_1.SdkManager.instance.getStorage();