@internxt/cli 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +410 -71
  2. package/dist/commands/add-cert.d.ts +1 -1
  3. package/dist/commands/add-cert.js +1 -1
  4. package/dist/commands/config.d.ts +7 -1
  5. package/dist/commands/config.js +36 -5
  6. package/dist/commands/create-folder.d.ts +2 -1
  7. package/dist/commands/create-folder.js +10 -7
  8. package/dist/commands/delete-permanently-file.d.ts +1 -0
  9. package/dist/commands/delete-permanently-folder.d.ts +1 -0
  10. package/dist/commands/download-file.d.ts +1 -0
  11. package/dist/commands/download-file.js +4 -2
  12. package/dist/commands/list.d.ts +1 -0
  13. package/dist/commands/list.js +2 -4
  14. package/dist/commands/login-legacy.d.ts +1 -0
  15. package/dist/commands/move-file.d.ts +1 -1
  16. package/dist/commands/move-file.js +7 -21
  17. package/dist/commands/move-folder.d.ts +1 -1
  18. package/dist/commands/move-folder.js +7 -21
  19. package/dist/commands/rename-file.d.ts +1 -0
  20. package/dist/commands/rename-folder.d.ts +1 -0
  21. package/dist/commands/trash-clear.d.ts +1 -0
  22. package/dist/commands/trash-file.d.ts +1 -0
  23. package/dist/commands/trash-folder.d.ts +1 -0
  24. package/dist/commands/trash-restore-file.d.ts +1 -1
  25. package/dist/commands/trash-restore-file.js +7 -21
  26. package/dist/commands/trash-restore-folder.d.ts +1 -1
  27. package/dist/commands/trash-restore-folder.js +7 -21
  28. package/dist/commands/upload-file.d.ts +4 -5
  29. package/dist/commands/upload-file.js +32 -21
  30. package/dist/commands/upload-folder.d.ts +1 -0
  31. package/dist/commands/upload-folder.js +11 -6
  32. package/dist/commands/webdav-config.d.ts +19 -1
  33. package/dist/commands/webdav-config.js +81 -3
  34. package/dist/commands/webdav.d.ts +1 -1
  35. package/dist/commands/webdav.js +10 -5
  36. package/dist/commands/whoami.js +2 -1
  37. package/dist/commands/workspaces-list.d.ts +20 -0
  38. package/dist/commands/workspaces-list.js +67 -0
  39. package/dist/commands/workspaces-unset.d.ts +23 -0
  40. package/dist/commands/workspaces-unset.js +45 -0
  41. package/dist/commands/workspaces-use.d.ts +27 -0
  42. package/dist/commands/workspaces-use.js +113 -0
  43. package/dist/constants/configs.d.ts +2 -1
  44. package/dist/constants/configs.js +4 -3
  45. package/dist/hooks/prerun/auth_check.js +13 -4
  46. package/dist/services/auth.service.d.ts +5 -2
  47. package/dist/services/auth.service.js +69 -12
  48. package/dist/services/config.service.d.ts +1 -1
  49. package/dist/services/config.service.js +12 -4
  50. package/dist/services/crypto.service.d.ts +5 -0
  51. package/dist/services/crypto.service.js +43 -0
  52. package/dist/services/database/database.service.d.ts +9 -0
  53. package/dist/services/database/database.service.js +39 -0
  54. package/dist/services/database/drive-file/drive-file.attributes.d.ts +3 -6
  55. package/dist/services/database/drive-file/drive-file.domain.d.ts +3 -6
  56. package/dist/services/database/drive-file/drive-file.domain.js +1 -12
  57. package/dist/services/database/drive-file/drive-file.model.d.ts +15 -0
  58. package/dist/services/database/drive-file/drive-file.model.js +67 -0
  59. package/dist/services/database/drive-file/drive-file.repository.d.ts +11 -0
  60. package/dist/services/database/drive-file/drive-file.repository.js +63 -0
  61. package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +3 -4
  62. package/dist/services/database/drive-folder/drive-folder.domain.d.ts +4 -5
  63. package/dist/services/database/drive-folder/drive-folder.domain.js +11 -15
  64. package/dist/services/database/drive-folder/drive-folder.model.d.ts +11 -0
  65. package/dist/services/database/drive-folder/drive-folder.model.js +51 -0
  66. package/dist/services/database/drive-folder/drive-folder.repository.d.ts +13 -0
  67. package/dist/services/database/drive-folder/drive-folder.repository.js +99 -0
  68. package/dist/services/drive/drive-file.service.d.ts +2 -0
  69. package/dist/services/drive/drive-file.service.js +71 -15
  70. package/dist/services/drive/drive-folder.service.d.ts +6 -1
  71. package/dist/services/drive/drive-folder.service.js +157 -31
  72. package/dist/services/drive/trash.service.d.ts +3 -0
  73. package/dist/services/drive/trash.service.js +52 -16
  74. package/dist/services/drive/workspace.service.d.ts +7 -0
  75. package/dist/services/drive/workspace.service.js +30 -0
  76. package/dist/services/keys.service.d.ts +7 -0
  77. package/dist/services/keys.service.js +55 -0
  78. package/dist/services/local-filesystem/local-filesystem.service.d.ts +2 -2
  79. package/dist/services/local-filesystem/local-filesystem.service.js +4 -4
  80. package/dist/services/network/download.service.d.ts +2 -2
  81. package/dist/services/network/download.service.js +2 -2
  82. package/dist/services/network/network-facade.service.d.ts +3 -7
  83. package/dist/services/network/network-facade.service.js +9 -11
  84. package/dist/services/network/upload/upload-facade.service.d.ts +1 -1
  85. package/dist/services/network/upload/upload-facade.service.js +14 -7
  86. package/dist/services/network/upload/upload-file.service.d.ts +3 -3
  87. package/dist/services/network/upload/upload-file.service.js +33 -23
  88. package/dist/services/network/upload/upload-folder.service.d.ts +2 -2
  89. package/dist/services/network/upload/upload-folder.service.js +15 -10
  90. package/dist/services/network/upload/upload.types.d.ts +11 -0
  91. package/dist/services/sdk-manager.service.d.ts +9 -7
  92. package/dist/services/sdk-manager.service.js +27 -13
  93. package/dist/services/thumbnail.service.d.ts +19 -1
  94. package/dist/services/thumbnail.service.js +29 -2
  95. package/dist/services/universal-link.service.d.ts +3 -1
  96. package/dist/services/universal-link.service.js +15 -3
  97. package/dist/services/usage.service.d.ts +1 -2
  98. package/dist/services/usage.service.js +1 -1
  99. package/dist/services/validation.service.js +14 -4
  100. package/dist/{webdav/services → services/webdav}/webdav-folder.service.d.ts +1 -7
  101. package/dist/{webdav/services → services/webdav}/webdav-folder.service.js +6 -10
  102. package/dist/types/command.types.d.ts +44 -1
  103. package/dist/types/command.types.js +29 -1
  104. package/dist/types/config.types.d.ts +1 -0
  105. package/dist/types/drive.types.d.ts +7 -6
  106. package/dist/types/network.types.d.ts +6 -0
  107. package/dist/utils/async.utils.d.ts +2 -1
  108. package/dist/utils/async.utils.js +13 -2
  109. package/dist/utils/cli.utils.d.ts +20 -15
  110. package/dist/utils/cli.utils.js +48 -18
  111. package/dist/utils/crypto.utils.d.ts +3 -1
  112. package/dist/utils/crypto.utils.js +15 -2
  113. package/dist/utils/database.utils.d.ts +11 -0
  114. package/dist/utils/database.utils.js +26 -0
  115. package/dist/utils/drive.utils.js +7 -10
  116. package/dist/utils/errors.utils.d.ts +4 -4
  117. package/dist/utils/errors.utils.js +16 -19
  118. package/dist/utils/format.utils.d.ts +1 -0
  119. package/dist/utils/format.utils.js +3 -0
  120. package/dist/utils/inquirer.utils.js +10 -1
  121. package/dist/utils/path.utils.d.ts +7 -0
  122. package/dist/utils/path.utils.js +18 -0
  123. package/dist/utils/thumbnail.utils.d.ts +6 -20
  124. package/dist/utils/thumbnail.utils.js +16 -41
  125. package/dist/utils/webdav.utils.d.ts +4 -20
  126. package/dist/utils/webdav.utils.js +12 -14
  127. package/dist/webdav/handlers/DELETE.handler.d.ts +0 -9
  128. package/dist/webdav/handlers/DELETE.handler.js +18 -16
  129. package/dist/webdav/handlers/GET.handler.d.ts +0 -13
  130. package/dist/webdav/handlers/GET.handler.js +6 -11
  131. package/dist/webdav/handlers/HEAD.handler.d.ts +0 -5
  132. package/dist/webdav/handlers/HEAD.handler.js +11 -23
  133. package/dist/webdav/handlers/MKCOL.handler.d.ts +0 -7
  134. package/dist/webdav/handlers/MKCOL.handler.js +5 -12
  135. package/dist/webdav/handlers/MOVE.handler.d.ts +0 -9
  136. package/dist/webdav/handlers/MOVE.handler.js +10 -16
  137. package/dist/webdav/handlers/PROPFIND.handler.d.ts +0 -7
  138. package/dist/webdav/handlers/PROPFIND.handler.js +7 -19
  139. package/dist/webdav/handlers/PUT.handler.d.ts +0 -15
  140. package/dist/webdav/handlers/PUT.handler.js +24 -26
  141. package/dist/webdav/index.js +6 -8
  142. package/dist/webdav/middewares/auth.middleware.d.ts +1 -2
  143. package/dist/webdav/middewares/auth.middleware.js +5 -4
  144. package/dist/webdav/middewares/errors.middleware.js +2 -2
  145. package/dist/webdav/middewares/webdav-auth.middleware.d.ts +3 -0
  146. package/dist/webdav/middewares/webdav-auth.middleware.js +44 -0
  147. package/dist/webdav/webdav-server.d.ts +3 -16
  148. package/dist/webdav/webdav-server.js +29 -87
  149. package/oclif.manifest.json +429 -6
  150. package/package.json +25 -20
@@ -15,7 +15,16 @@ class InquirerUtils {
15
15
  const confirmation = await (0, prompts_1.confirm)({ message, default: options.confirm?.default || false });
16
16
  return confirmation ? 'y' : 'n';
17
17
  }
18
- case 'input': {
18
+ case 'list':
19
+ if (!options.choices)
20
+ throw new Error('Missing choices');
21
+ return (0, prompts_1.select)({
22
+ message,
23
+ choices: options.choices.values,
24
+ default: options.choices.values[options.choices.default ?? 0],
25
+ });
26
+ case 'input':
27
+ default: {
19
28
  return (0, prompts_1.input)({ message });
20
29
  }
21
30
  }
@@ -0,0 +1,7 @@
1
+ export declare class PathUtils {
2
+ static getPathFileData(filePath: string): {
3
+ folderPath: string;
4
+ fileName: string;
5
+ fileType: string | null;
6
+ };
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PathUtils = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ class PathUtils {
9
+ static getPathFileData(filePath) {
10
+ const folderPath = node_path_1.default.dirname(filePath);
11
+ const fileExt = node_path_1.default.extname(filePath);
12
+ const fileName = node_path_1.default.basename(filePath, fileExt);
13
+ const fileExtWithoutDot = fileExt.replace('.', '').trim();
14
+ const fileType = fileExtWithoutDot.length > 0 ? fileExtWithoutDot : null;
15
+ return { folderPath, fileName, fileType };
16
+ }
17
+ }
18
+ exports.PathUtils = PathUtils;
@@ -1,26 +1,12 @@
1
- import { Readable } from 'node:stream';
2
- import { NetworkFacade } from '../services/network/network-facade.service';
3
- import { BufferStream } from './stream.utils';
4
1
  export declare const ThumbnailConfig: {
5
2
  readonly MaxWidth: 300;
6
3
  readonly MaxHeight: 300;
7
4
  readonly Quality: 100;
8
5
  readonly Type: "png";
9
6
  };
10
- export declare const isFileThumbnailable: (fileType: string) => boolean;
11
- export declare const isPDFThumbnailable: (fileType: string) => boolean;
12
- export declare const isImageThumbnailable: (fileType: string) => boolean;
13
- export declare const tryUploadThumbnail: ({ bufferStream, fileType, userBucket, fileUuid, networkFacade, }: {
14
- bufferStream?: BufferStream;
15
- fileType: string;
16
- userBucket: string;
17
- fileUuid: string;
18
- networkFacade: NetworkFacade;
19
- }) => Promise<void>;
20
- export declare const createFileStreamWithBuffer: ({ path, fileType, }: {
21
- path: string;
22
- fileType: string;
23
- }) => {
24
- bufferStream?: BufferStream;
25
- fileStream: Readable;
26
- };
7
+ export declare class ThumbnailUtils {
8
+ static readonly MAX_IMAGE_THUMBNAILABLE_SIZE_IN_MB: number;
9
+ static readonly isFileThumbnailable: (fileType: string) => boolean;
10
+ static readonly isPDFThumbnailable: (fileType: string) => boolean;
11
+ static readonly isImageThumbnailable: (fileType: string, size: number) => boolean;
12
+ }
@@ -1,10 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFileStreamWithBuffer = exports.tryUploadThumbnail = exports.isImageThumbnailable = exports.isPDFThumbnailable = exports.isFileThumbnailable = exports.ThumbnailConfig = void 0;
4
- const thumbnail_service_1 = require("../services/thumbnail.service");
5
- const errors_utils_1 = require("./errors.utils");
6
- const stream_utils_1 = require("./stream.utils");
7
- const node_fs_1 = require("node:fs");
3
+ exports.ThumbnailUtils = exports.ThumbnailConfig = void 0;
8
4
  exports.ThumbnailConfig = {
9
5
  MaxWidth: 300,
10
6
  MaxHeight: 300,
@@ -34,39 +30,18 @@ const thumbnailableImageExtension = new Set([
34
30
  ]);
35
31
  const thumbnailablePdfExtension = new Set(pdfExtensions['pdf']);
36
32
  const thumbnailableExtension = new Set(thumbnailableImageExtension);
37
- const isFileThumbnailable = (fileType) => {
38
- return fileType.trim().length > 0 && thumbnailableExtension.has(fileType.trim().toLowerCase());
39
- };
40
- exports.isFileThumbnailable = isFileThumbnailable;
41
- const isPDFThumbnailable = (fileType) => {
42
- return fileType.trim().length > 0 && thumbnailablePdfExtension.has(fileType.trim().toLowerCase());
43
- };
44
- exports.isPDFThumbnailable = isPDFThumbnailable;
45
- const isImageThumbnailable = (fileType) => {
46
- return fileType.trim().length > 0 && thumbnailableImageExtension.has(fileType.trim().toLowerCase());
47
- };
48
- exports.isImageThumbnailable = isImageThumbnailable;
49
- const tryUploadThumbnail = async ({ bufferStream, fileType, userBucket, fileUuid, networkFacade, }) => {
50
- try {
51
- const thumbnailBuffer = bufferStream?.getBuffer();
52
- if (thumbnailBuffer) {
53
- await thumbnail_service_1.ThumbnailService.instance.uploadThumbnail(thumbnailBuffer, fileType, userBucket, fileUuid, networkFacade);
54
- }
55
- }
56
- catch (error) {
57
- errors_utils_1.ErrorUtils.report(error);
58
- }
59
- };
60
- exports.tryUploadThumbnail = tryUploadThumbnail;
61
- const createFileStreamWithBuffer = ({ path, fileType, }) => {
62
- const readable = (0, node_fs_1.createReadStream)(path);
63
- if ((0, exports.isFileThumbnailable)(fileType)) {
64
- const bufferStream = new stream_utils_1.BufferStream();
65
- return {
66
- bufferStream,
67
- fileStream: readable.pipe(bufferStream),
68
- };
69
- }
70
- return { fileStream: readable };
71
- };
72
- exports.createFileStreamWithBuffer = createFileStreamWithBuffer;
33
+ class ThumbnailUtils {
34
+ static MAX_IMAGE_THUMBNAILABLE_SIZE_IN_MB = 500 * 1024 * 1024;
35
+ static isFileThumbnailable = (fileType) => {
36
+ return fileType.trim().length > 0 && thumbnailableExtension.has(fileType.trim().toLowerCase());
37
+ };
38
+ static isPDFThumbnailable = (fileType) => {
39
+ return fileType.trim().length > 0 && thumbnailablePdfExtension.has(fileType.trim().toLowerCase());
40
+ };
41
+ static isImageThumbnailable = (fileType, size) => {
42
+ if (size > ThumbnailUtils.MAX_IMAGE_THUMBNAILABLE_SIZE_IN_MB)
43
+ return false;
44
+ return fileType.trim().length > 0 && thumbnailableImageExtension.has(fileType.trim().toLowerCase());
45
+ };
46
+ }
47
+ exports.ThumbnailUtils = ThumbnailUtils;
@@ -1,6 +1,4 @@
1
1
  import { WebDavRequestedResource } from '../types/webdav.types';
2
- import { DriveFolderService } from '../services/drive/drive-folder.service';
3
- import { DriveFileService } from '../services/drive/drive-file.service';
4
2
  import { DriveFileItem, DriveFolderItem, DriveItem } from '../types/drive.types';
5
3
  export declare class WebDavUtils {
6
4
  static joinURL(...pathComponents: string[]): string;
@@ -8,22 +6,8 @@ export declare class WebDavUtils {
8
6
  static decodeUrl(requestUrl: string, decodeUri?: boolean): string;
9
7
  static normalizeFolderPath(path: string): string;
10
8
  static getRequestedResource(requestUrl: string, decodeUri?: boolean): Promise<WebDavRequestedResource>;
11
- static tryGetFileOrFolderMetadata({ url, driveFileService, driveFolderService, }: {
12
- url: string;
13
- driveFolderService: DriveFolderService;
14
- driveFileService: DriveFileService;
15
- }): Promise<DriveItem | undefined>;
16
- static getDriveFileFromResource({ url, driveFileService, }: {
17
- url: string;
18
- driveFileService: DriveFileService;
19
- }): Promise<DriveFileItem | undefined>;
20
- static getDriveFolderFromResource({ url, driveFolderService, }: {
21
- url: string;
22
- driveFolderService: DriveFolderService;
23
- }): Promise<DriveFolderItem | undefined>;
24
- static getDriveItemFromResource({ resource, driveFolderService, driveFileService, }: {
25
- resource: WebDavRequestedResource;
26
- driveFolderService: DriveFolderService;
27
- driveFileService: DriveFileService;
28
- }): Promise<DriveItem | undefined>;
9
+ static tryGetFileOrFolderMetadata(url: string): Promise<DriveItem | undefined>;
10
+ static getDriveFileFromResource(url: string): Promise<DriveFileItem | undefined>;
11
+ static getDriveFolderFromResource(url: string): Promise<DriveFolderItem | undefined>;
12
+ static getDriveItemFromResource(resource: WebDavRequestedResource): Promise<DriveItem | undefined>;
29
13
  }
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WebDavUtils = void 0;
7
7
  const node_path_1 = __importDefault(require("node:path"));
8
+ const drive_folder_service_1 = require("../services/drive/drive-folder.service");
9
+ const drive_file_service_1 = require("../services/drive/drive-file.service");
8
10
  const logger_utils_1 = require("./logger.utils");
9
11
  class WebDavUtils {
10
12
  static joinURL(...pathComponents) {
@@ -44,43 +46,39 @@ class WebDavUtils {
44
46
  parentPath,
45
47
  };
46
48
  }
47
- static async tryGetFileOrFolderMetadata({ url, driveFileService, driveFolderService, }) {
49
+ static async tryGetFileOrFolderMetadata(url) {
48
50
  try {
49
- return await driveFileService.getFileMetadataByPath(url);
51
+ return await drive_file_service_1.DriveFileService.instance.getFileMetadataByPath(url);
50
52
  }
51
53
  catch {
52
- return await driveFolderService.getFolderMetadataByPath(url);
54
+ return await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(url);
53
55
  }
54
56
  }
55
- static async getDriveFileFromResource({ url, driveFileService, }) {
57
+ static async getDriveFileFromResource(url) {
56
58
  try {
57
- return await driveFileService.getFileMetadataByPath(url);
59
+ return await drive_file_service_1.DriveFileService.instance.getFileMetadataByPath(url);
58
60
  }
59
61
  catch (err) {
60
62
  logger_utils_1.webdavLogger.error('Exception while getting the file metadata by path', err);
61
63
  }
62
64
  }
63
- static async getDriveFolderFromResource({ url, driveFolderService, }) {
65
+ static async getDriveFolderFromResource(url) {
64
66
  try {
65
- return await driveFolderService.getFolderMetadataByPath(url);
67
+ return await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(url);
66
68
  }
67
69
  catch (err) {
68
70
  logger_utils_1.webdavLogger.error('Exception while getting the folder metadata by path', err);
69
71
  }
70
72
  }
71
- static async getDriveItemFromResource({ resource, driveFolderService, driveFileService, }) {
73
+ static async getDriveItemFromResource(resource) {
72
74
  let item = undefined;
73
75
  const isFolder = resource.url.endsWith('/');
74
76
  try {
75
77
  if (isFolder) {
76
- item = await driveFolderService.getFolderMetadataByPath(resource.url);
78
+ item = await drive_folder_service_1.DriveFolderService.instance.getFolderMetadataByPath(resource.url);
77
79
  }
78
80
  else {
79
- item = await this.tryGetFileOrFolderMetadata({
80
- url: resource.url,
81
- driveFileService,
82
- driveFolderService,
83
- });
81
+ item = await this.tryGetFileOrFolderMetadata(resource.url);
84
82
  }
85
83
  }
86
84
  catch {
@@ -1,14 +1,5 @@
1
1
  import { Request, Response } from 'express';
2
2
  import { WebDavMethodHandler } from '../../types/webdav.types';
3
- import { TrashService } from '../../services/drive/trash.service';
4
- import { DriveFileService } from '../../services/drive/drive-file.service';
5
- import { DriveFolderService } from '../../services/drive/drive-folder.service';
6
3
  export declare class DELETERequestHandler implements WebDavMethodHandler {
7
- private readonly dependencies;
8
- constructor(dependencies: {
9
- trashService: TrashService;
10
- driveFileService: DriveFileService;
11
- driveFolderService: DriveFolderService;
12
- });
13
4
  handle: (req: Request, res: Response) => Promise<void>;
14
5
  }
@@ -2,32 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DELETERequestHandler = void 0;
4
4
  const webdav_utils_1 = require("../../utils/webdav.utils");
5
+ const trash_service_1 = require("../../services/drive/trash.service");
5
6
  const logger_utils_1 = require("../../utils/logger.utils");
6
7
  const errors_utils_1 = require("../../utils/errors.utils");
8
+ const config_service_1 = require("../../services/config.service");
9
+ const format_utils_1 = require("../../utils/format.utils");
7
10
  class DELETERequestHandler {
8
- dependencies;
9
- constructor(dependencies) {
10
- this.dependencies = dependencies;
11
- }
12
11
  handle = async (req, res) => {
13
- const { driveFileService, driveFolderService, trashService } = this.dependencies;
14
12
  const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
15
13
  logger_utils_1.webdavLogger.info(`[DELETE] Request received for item at ${resource.url}`);
16
- const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource({
17
- resource,
18
- driveFolderService,
19
- driveFileService: driveFileService,
20
- });
14
+ const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
21
15
  if (!driveItem) {
22
16
  throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
23
17
  }
24
- logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] Trashing ${driveItem.itemType}`);
25
- await trashService.trashItems({
26
- items: [{ type: driveItem.itemType, uuid: driveItem.uuid }],
27
- });
18
+ const type = format_utils_1.FormatUtils.capitalizeFirstLetter(driveItem.itemType);
19
+ const configs = await config_service_1.ConfigService.instance.readWebdavConfig();
20
+ if (configs.deleteFilesPermanently) {
21
+ logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] Deleting permanently ${driveItem.itemType}`);
22
+ await trash_service_1.TrashService.instance.deleteItemPermanently(driveItem.itemType, driveItem.uuid);
23
+ logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} deleted permanently successfully`);
24
+ }
25
+ else {
26
+ logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] Trashing ${driveItem.itemType}`);
27
+ await trash_service_1.TrashService.instance.trashItems({
28
+ items: [{ type: driveItem.itemType, uuid: driveItem.uuid }],
29
+ });
30
+ logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} trashed successfully`);
31
+ }
28
32
  res.status(204).send();
29
- const type = driveItem.itemType.charAt(0).toUpperCase() + driveItem.itemType.substring(1);
30
- logger_utils_1.webdavLogger.info(`[DELETE] [${driveItem.uuid}] ${type} trashed successfully`);
31
33
  };
32
34
  }
33
35
  exports.DELETERequestHandler = DELETERequestHandler;
@@ -1,18 +1,5 @@
1
1
  import { WebDavMethodHandler } from '../../types/webdav.types';
2
2
  import { Request, Response } from 'express';
3
- import { DriveFileService } from '../../services/drive/drive-file.service';
4
- import { NetworkFacade } from '../../services/network/network-facade.service';
5
- import { DownloadService } from '../../services/network/download.service';
6
- import { CryptoService } from '../../services/crypto.service';
7
- import { AuthService } from '../../services/auth.service';
8
3
  export declare class GETRequestHandler implements WebDavMethodHandler {
9
- private readonly dependencies;
10
- constructor(dependencies: {
11
- driveFileService: DriveFileService;
12
- downloadService: DownloadService;
13
- cryptoService: CryptoService;
14
- authService: AuthService;
15
- networkFacade: NetworkFacade;
16
- });
17
4
  handle: (req: Request, res: Response) => Promise<void>;
18
5
  }
@@ -2,28 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GETRequestHandler = void 0;
4
4
  const webdav_utils_1 = require("../../utils/webdav.utils");
5
+ const auth_service_1 = require("../../services/auth.service");
5
6
  const errors_utils_1 = require("../../utils/errors.utils");
6
7
  const logger_utils_1 = require("../../utils/logger.utils");
7
8
  const network_utils_1 = require("../../utils/network.utils");
8
9
  const command_types_1 = require("../../types/command.types");
10
+ const cli_utils_1 = require("../../utils/cli.utils");
9
11
  class GETRequestHandler {
10
- dependencies;
11
- constructor(dependencies) {
12
- this.dependencies = dependencies;
13
- }
14
12
  handle = async (req, res) => {
15
- const { driveFileService, authService, networkFacade } = this.dependencies;
16
13
  const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
17
14
  logger_utils_1.webdavLogger.info(`[GET] Request received item at ${resource.url}`);
18
- const driveFile = await webdav_utils_1.WebDavUtils.getDriveFileFromResource({
19
- url: resource.url,
20
- driveFileService,
21
- });
15
+ const driveFile = await webdav_utils_1.WebDavUtils.getDriveFileFromResource(resource.url);
22
16
  if (!driveFile) {
23
17
  throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}, if trying to access a folder use PROPFIND instead.`);
24
18
  }
25
19
  logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Found Drive File`);
26
- const { user } = await authService.getAuthDetails();
20
+ const { user } = await auth_service_1.AuthService.instance.getAuthDetails();
27
21
  logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Network ready for download`);
28
22
  res.header('Content-Type', 'application/octet-stream');
29
23
  const fileSize = driveFile.size ?? 0;
@@ -50,7 +44,8 @@ class GETRequestHandler {
50
44
  if (!driveFile.fileId) {
51
45
  throw new command_types_1.NotValidFileIdError();
52
46
  }
53
- const [executeDownload] = await networkFacade.downloadToStream(driveFile.bucket, user.mnemonic, driveFile.fileId, contentLength, writable, rangeOptions);
47
+ const { networkFacade, bucket, mnemonic } = await cli_utils_1.CLIUtils.prepareNetwork(user);
48
+ const [executeDownload] = await networkFacade.downloadToStream(bucket, mnemonic, driveFile.fileId, contentLength, writable, rangeOptions);
54
49
  logger_utils_1.webdavLogger.info(`[GET] [${driveFile.uuid}] Download prepared, executing...`);
55
50
  res.status(200);
56
51
  await executeDownload;
@@ -1,10 +1,5 @@
1
1
  import { Request, Response } from 'express';
2
2
  import { WebDavMethodHandler } from '../../types/webdav.types';
3
- import { DriveFileService } from '../../services/drive/drive-file.service';
4
3
  export declare class HEADRequestHandler implements WebDavMethodHandler {
5
- private readonly dependencies;
6
- constructor(dependencies: {
7
- driveFileService: DriveFileService;
8
- });
9
4
  handle: (req: Request, res: Response) => Promise<void>;
10
5
  }
@@ -6,41 +6,29 @@ const logger_utils_1 = require("../../utils/logger.utils");
6
6
  const network_utils_1 = require("../../utils/network.utils");
7
7
  const errors_utils_1 = require("../../utils/errors.utils");
8
8
  class HEADRequestHandler {
9
- dependencies;
10
- constructor(dependencies) {
11
- this.dependencies = dependencies;
12
- }
13
9
  handle = async (req, res) => {
14
- const { driveFileService } = this.dependencies;
15
10
  const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
16
- logger_utils_1.webdavLogger.info(`[HEAD] Request received for file at ${resource.url}`);
17
- try {
18
- const driveFile = await webdav_utils_1.WebDavUtils.getDriveFileFromResource({
19
- url: resource.url,
20
- driveFileService,
21
- });
22
- if (!driveFile) {
23
- throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
24
- }
25
- logger_utils_1.webdavLogger.info(`[HEAD] [${driveFile.uuid}] Found Drive File`);
11
+ logger_utils_1.webdavLogger.info(`[HEAD] Request received for item at ${resource.url}`);
12
+ const driveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
13
+ if (!driveItem) {
14
+ throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
15
+ }
16
+ logger_utils_1.webdavLogger.info(`[HEAD] [${driveItem.uuid}] Found Drive item`);
17
+ if (driveItem.itemType === 'file') {
26
18
  const range = req.headers['range'];
27
19
  const rangeOptions = network_utils_1.NetworkUtils.parseRangeHeader({
28
20
  range,
29
- totalFileSize: driveFile.size,
21
+ totalFileSize: driveItem.size,
30
22
  });
31
- let contentLength = driveFile.size;
23
+ let contentLength = driveItem.size;
32
24
  if (rangeOptions) {
33
- logger_utils_1.webdavLogger.info(`[HEAD] [${driveFile.uuid}] Range request received:`, { rangeOptions });
25
+ logger_utils_1.webdavLogger.info(`[HEAD] [${driveItem.uuid}] Range request received:`, { rangeOptions });
34
26
  contentLength = rangeOptions.rangeSize;
35
27
  }
36
28
  res.header('Content-Type', 'application/octet-stream');
37
29
  res.header('Content-length', contentLength.toString());
38
- res.status(200).send();
39
- }
40
- catch {
41
- res.header('Content-Type', 'application/octet-stream');
42
- res.status(200).send();
43
30
  }
31
+ res.status(200).send();
44
32
  };
45
33
  }
46
34
  exports.HEADRequestHandler = HEADRequestHandler;
@@ -1,12 +1,5 @@
1
1
  import { WebDavMethodHandler } from '../../types/webdav.types';
2
2
  import { Request, Response } from 'express';
3
- import { DriveFolderService } from '../../services/drive/drive-folder.service';
4
- import { WebDavFolderService } from '../services/webdav-folder.service';
5
3
  export declare class MKCOLRequestHandler implements WebDavMethodHandler {
6
- private readonly dependencies;
7
- constructor(dependencies: {
8
- driveFolderService: DriveFolderService;
9
- webDavFolderService: WebDavFolderService;
10
- });
11
4
  handle: (req: Request, res: Response) => Promise<void>;
12
5
  }
@@ -4,28 +4,21 @@ exports.MKCOLRequestHandler = void 0;
4
4
  const webdav_utils_1 = require("../../utils/webdav.utils");
5
5
  const logger_utils_1 = require("../../utils/logger.utils");
6
6
  const xml_utils_1 = require("../../utils/xml.utils");
7
+ const webdav_folder_service_1 = require("../../services/webdav/webdav-folder.service");
7
8
  const errors_utils_1 = require("../../utils/errors.utils");
8
9
  class MKCOLRequestHandler {
9
- dependencies;
10
- constructor(dependencies) {
11
- this.dependencies = dependencies;
12
- }
13
10
  handle = async (req, res) => {
14
- const { driveFolderService, webDavFolderService } = this.dependencies;
15
11
  const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
16
12
  logger_utils_1.webdavLogger.info(`[MKCOL] Request received for folder at ${resource.url}`);
17
- const parentDriveFolderItem = (await webDavFolderService.getDriveFolderItemFromPath(resource.parentPath)) ??
18
- (await webDavFolderService.createParentPathOrThrow(resource.parentPath));
19
- const driveFolderItem = await webdav_utils_1.WebDavUtils.getDriveFolderFromResource({
20
- url: resource.url,
21
- driveFolderService,
22
- });
13
+ const parentDriveFolderItem = (await webdav_folder_service_1.WebDavFolderService.instance.getDriveFolderItemFromPath(resource.parentPath)) ??
14
+ (await webdav_folder_service_1.WebDavFolderService.instance.createParentPathOrThrow(resource.parentPath));
15
+ const driveFolderItem = await webdav_utils_1.WebDavUtils.getDriveFolderFromResource(resource.url);
23
16
  const folderAlreadyExists = !!driveFolderItem;
24
17
  if (folderAlreadyExists) {
25
18
  logger_utils_1.webdavLogger.info(`[MKCOL] ❌ Folder '${resource.url}' already exists`);
26
19
  throw new errors_utils_1.MethodNotAllowed('Folder already exists');
27
20
  }
28
- const newFolder = await webDavFolderService.createFolder({
21
+ const newFolder = await webdav_folder_service_1.WebDavFolderService.instance.createFolder({
29
22
  folderName: resource.path.base,
30
23
  parentFolderUuid: parentDriveFolderItem.uuid,
31
24
  });
@@ -1,14 +1,5 @@
1
1
  import { Request, Response } from 'express';
2
- import { DriveFileService } from '../../services/drive/drive-file.service';
3
- import { DriveFolderService } from '../../services/drive/drive-folder.service';
4
2
  import { WebDavMethodHandler } from '../../types/webdav.types';
5
- import { WebDavFolderService } from '../services/webdav-folder.service';
6
3
  export declare class MOVERequestHandler implements WebDavMethodHandler {
7
- private readonly dependencies;
8
- constructor(dependencies: {
9
- driveFolderService: DriveFolderService;
10
- driveFileService: DriveFileService;
11
- webDavFolderService: WebDavFolderService;
12
- });
13
4
  handle: (req: Request, res: Response) => Promise<void>;
14
5
  }
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MOVERequestHandler = void 0;
4
+ const drive_file_service_1 = require("../../services/drive/drive-file.service");
5
+ const drive_folder_service_1 = require("../../services/drive/drive-folder.service");
4
6
  const errors_utils_1 = require("../../utils/errors.utils");
5
7
  const logger_utils_1 = require("../../utils/logger.utils");
6
8
  const webdav_utils_1 = require("../../utils/webdav.utils");
9
+ const webdav_folder_service_1 = require("../../services/webdav/webdav-folder.service");
7
10
  class MOVERequestHandler {
8
- dependencies;
9
- constructor(dependencies) {
10
- this.dependencies = dependencies;
11
- }
12
11
  handle = async (req, res) => {
13
- const { driveFolderService, driveFileService, webDavFolderService } = this.dependencies;
14
12
  const resource = await webdav_utils_1.WebDavUtils.getRequestedResource(req.url);
15
13
  logger_utils_1.webdavLogger.info(`[MOVE] Request received for item at ${resource.url}`);
16
14
  const destinationUrl = req.header('destination');
@@ -20,11 +18,7 @@ class MOVERequestHandler {
20
18
  const destinationPath = webdav_utils_1.WebDavUtils.removeHostFromURL(destinationUrl);
21
19
  const destinationResource = await webdav_utils_1.WebDavUtils.getRequestedResource(destinationPath);
22
20
  logger_utils_1.webdavLogger.info('[MOVE] Destination resource found', { destinationResource });
23
- const originalDriveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource({
24
- resource,
25
- driveFolderService,
26
- driveFileService,
27
- });
21
+ const originalDriveItem = await webdav_utils_1.WebDavUtils.getDriveItemFromResource(resource);
28
22
  if (!originalDriveItem) {
29
23
  throw new errors_utils_1.NotFoundError(`Resource not found on Internxt Drive at ${resource.url}`);
30
24
  }
@@ -33,7 +27,7 @@ class MOVERequestHandler {
33
27
  with UUID ${originalDriveItem.uuid} to ${destinationResource.name}`);
34
28
  if (originalDriveItem.itemType === 'folder') {
35
29
  const folder = originalDriveItem;
36
- await driveFolderService.renameFolder({
30
+ await drive_folder_service_1.DriveFolderService.instance.renameFolder({
37
31
  folderUuid: folder.uuid,
38
32
  name: destinationResource.name,
39
33
  });
@@ -42,7 +36,7 @@ class MOVERequestHandler {
42
36
  const file = originalDriveItem;
43
37
  const plainName = destinationResource.path.name;
44
38
  const fileType = destinationResource.path.ext.replace('.', '');
45
- await driveFileService.renameFile(file.uuid, {
39
+ await drive_file_service_1.DriveFileService.instance.renameFile(file.uuid, {
46
40
  plainName: plainName,
47
41
  type: fileType,
48
42
  });
@@ -50,11 +44,11 @@ class MOVERequestHandler {
50
44
  }
51
45
  else {
52
46
  logger_utils_1.webdavLogger.info(`[MOVE] Moving ${originalDriveItem.itemType} with UUID ${originalDriveItem.uuid} to ${destinationPath}`);
53
- const destinationFolderItem = (await webDavFolderService.getDriveFolderItemFromPath(destinationResource.parentPath)) ??
54
- (await webDavFolderService.createParentPathOrThrow(destinationResource.parentPath));
47
+ const destinationFolderItem = (await webdav_folder_service_1.WebDavFolderService.instance.getDriveFolderItemFromPath(destinationResource.parentPath)) ??
48
+ (await webdav_folder_service_1.WebDavFolderService.instance.createParentPathOrThrow(destinationResource.parentPath));
55
49
  if (originalDriveItem.itemType === 'folder') {
56
50
  const folder = originalDriveItem;
57
- await driveFolderService.moveFolder(folder.uuid, {
51
+ await drive_folder_service_1.DriveFolderService.instance.moveFolder(folder.uuid, {
58
52
  destinationFolder: destinationFolderItem.uuid,
59
53
  name: destinationResource.name,
60
54
  });
@@ -63,7 +57,7 @@ class MOVERequestHandler {
63
57
  const file = originalDriveItem;
64
58
  const plainName = destinationResource.path.name;
65
59
  const fileType = destinationResource.path.ext.replace('.', '');
66
- await driveFileService.moveFile(file.uuid, {
60
+ await drive_file_service_1.DriveFileService.instance.moveFile(file.uuid, {
67
61
  destinationFolder: destinationFolderItem.uuid,
68
62
  name: plainName,
69
63
  type: fileType,
@@ -1,13 +1,6 @@
1
1
  import { WebDavMethodHandler } from '../../types/webdav.types';
2
- import { DriveFolderService } from '../../services/drive/drive-folder.service';
3
- import { DriveFileService } from '../../services/drive/drive-file.service';
4
2
  import { Request, Response } from 'express';
5
3
  export declare class PROPFINDRequestHandler implements WebDavMethodHandler {
6
- private readonly dependencies;
7
- constructor(dependencies: {
8
- driveFolderService: DriveFolderService;
9
- driveFileService: DriveFileService;
10
- });
11
4
  handle: (req: Request, res: Response) => Promise<void>;
12
5
  private readonly getFileMetaXML;
13
6
  private readonly getFolderContentXML;