@internxt/cli 0.1.4
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/.env +11 -0
- package/README.md +297 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +7 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +7 -0
- package/dist/commands/config.d.ts +18 -0
- package/dist/commands/config.js +50 -0
- package/dist/commands/download.d.ts +19 -0
- package/dist/commands/download.js +119 -0
- package/dist/commands/list.d.ts +22 -0
- package/dist/commands/list.js +125 -0
- package/dist/commands/login.d.ts +21 -0
- package/dist/commands/login.js +124 -0
- package/dist/commands/logout.d.ts +9 -0
- package/dist/commands/logout.js +28 -0
- package/dist/commands/logs.d.ts +6 -0
- package/dist/commands/logs.js +12 -0
- package/dist/commands/move.d.ts +18 -0
- package/dist/commands/move.js +109 -0
- package/dist/commands/trash.d.ts +15 -0
- package/dist/commands/trash.js +85 -0
- package/dist/commands/upload.d.ts +15 -0
- package/dist/commands/upload.js +93 -0
- package/dist/commands/webdav.d.ts +12 -0
- package/dist/commands/webdav.js +64 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.js +27 -0
- package/dist/database/migrations/20240402164914-create-files.d.ts +1 -0
- package/dist/database/migrations/20240402164914-create-files.js +55 -0
- package/dist/database/migrations/20240402165418-create-folders.d.ts +1 -0
- package/dist/database/migrations/20240402165418-create-folders.js +37 -0
- package/dist/hooks/prerun/auth_check.d.ts +3 -0
- package/dist/hooks/prerun/auth_check.js +32 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/services/auth.service.d.ts +14 -0
- package/dist/services/auth.service.js +79 -0
- package/dist/services/config.service.d.ts +19 -0
- package/dist/services/config.service.js +79 -0
- package/dist/services/crypto.service.d.ts +22 -0
- package/dist/services/crypto.service.js +126 -0
- package/dist/services/database/drive-database-manager.service.d.ts +18 -0
- package/dist/services/database/drive-database-manager.service.js +76 -0
- package/dist/services/database/drive-file/drive-file.attributes.d.ts +14 -0
- package/dist/services/database/drive-file/drive-file.attributes.js +2 -0
- package/dist/services/database/drive-file/drive-file.domain.d.ts +18 -0
- package/dist/services/database/drive-file/drive-file.domain.js +51 -0
- package/dist/services/database/drive-file/drive-file.model.d.ts +17 -0
- package/dist/services/database/drive-file/drive-file.model.js +82 -0
- package/dist/services/database/drive-file/drive-file.repository.d.ts +11 -0
- package/dist/services/database/drive-file/drive-file.repository.js +40 -0
- package/dist/services/database/drive-folder/drive-folder.attributes.d.ts +9 -0
- package/dist/services/database/drive-folder/drive-folder.attributes.js +2 -0
- package/dist/services/database/drive-folder/drive-folder.domain.d.ts +13 -0
- package/dist/services/database/drive-folder/drive-folder.domain.js +36 -0
- package/dist/services/database/drive-folder/drive-folder.model.d.ts +12 -0
- package/dist/services/database/drive-folder/drive-folder.model.js +56 -0
- package/dist/services/database/drive-folder/drive-folder.repository.d.ts +11 -0
- package/dist/services/database/drive-folder/drive-folder.repository.js +40 -0
- package/dist/services/drive/drive-file.service.d.ts +15 -0
- package/dist/services/drive/drive-file.service.js +51 -0
- package/dist/services/drive/drive-folder.service.d.ts +15 -0
- package/dist/services/drive/drive-folder.service.js +49 -0
- package/dist/services/drive/trash.service.d.ts +5 -0
- package/dist/services/drive/trash.service.js +12 -0
- package/dist/services/keys.service.d.ts +14 -0
- package/dist/services/keys.service.js +110 -0
- package/dist/services/network/download.service.d.ts +7 -0
- package/dist/services/network/download.service.js +33 -0
- package/dist/services/network/network-facade.service.d.ts +21 -0
- package/dist/services/network/network-facade.service.js +128 -0
- package/dist/services/network/upload.service.d.ts +9 -0
- package/dist/services/network/upload.service.js +20 -0
- package/dist/services/realms/drive-files.realm.d.ts +23 -0
- package/dist/services/realms/drive-files.realm.js +76 -0
- package/dist/services/realms/drive-folders.realm.d.ts +20 -0
- package/dist/services/realms/drive-folders.realm.js +68 -0
- package/dist/services/realms/drive-realm-manager.service.d.ts +15 -0
- package/dist/services/realms/drive-realm-manager.service.js +63 -0
- package/dist/services/sdk-manager.service.d.ts +28 -0
- package/dist/services/sdk-manager.service.js +107 -0
- package/dist/services/usage.service.d.ts +6 -0
- package/dist/services/usage.service.js +23 -0
- package/dist/services/validation.service.d.ts +7 -0
- package/dist/services/validation.service.js +21 -0
- package/dist/types/command.types.d.ts +42 -0
- package/dist/types/command.types.js +59 -0
- package/dist/types/config.types.d.ts +13 -0
- package/dist/types/config.types.js +2 -0
- package/dist/types/drive.types.d.ts +14 -0
- package/dist/types/drive.types.js +2 -0
- package/dist/types/keys.types.d.ts +16 -0
- package/dist/types/keys.types.js +31 -0
- package/dist/types/network.types.d.ts +11 -0
- package/dist/types/network.types.js +2 -0
- package/dist/types/webdav.types.d.ts +15 -0
- package/dist/types/webdav.types.js +6 -0
- package/dist/utils/cli.utils.d.ts +32 -0
- package/dist/utils/cli.utils.js +105 -0
- package/dist/utils/crypto.utils.d.ts +6 -0
- package/dist/utils/crypto.utils.js +10 -0
- package/dist/utils/drive.utils.d.ts +6 -0
- package/dist/utils/drive.utils.js +34 -0
- package/dist/utils/errors.utils.d.ts +19 -0
- package/dist/utils/errors.utils.js +50 -0
- package/dist/utils/format.utils.d.ts +6 -0
- package/dist/utils/format.utils.js +30 -0
- package/dist/utils/hash.utils.d.ts +15 -0
- package/dist/utils/hash.utils.js +37 -0
- package/dist/utils/logger.utils.d.ts +3 -0
- package/dist/utils/logger.utils.js +50 -0
- package/dist/utils/network.utils.d.ts +22 -0
- package/dist/utils/network.utils.js +49 -0
- package/dist/utils/pm2.utils.d.ts +10 -0
- package/dist/utils/pm2.utils.js +65 -0
- package/dist/utils/stream.utils.d.ts +7 -0
- package/dist/utils/stream.utils.js +56 -0
- package/dist/utils/webdav.utils.d.ts +7 -0
- package/dist/utils/webdav.utils.js +47 -0
- package/dist/utils/xml.utils.d.ts +8 -0
- package/dist/utils/xml.utils.js +23 -0
- package/dist/webdav/handlers/GET.handler.d.ts +23 -0
- package/dist/webdav/handlers/GET.handler.js +52 -0
- package/dist/webdav/handlers/HEAD.handler.d.ts +5 -0
- package/dist/webdav/handlers/HEAD.handler.js +9 -0
- package/dist/webdav/handlers/OPTIONS.handler.d.ts +5 -0
- package/dist/webdav/handlers/OPTIONS.handler.js +11 -0
- package/dist/webdav/handlers/PROPFIND.handler.d.ts +21 -0
- package/dist/webdav/handlers/PROPFIND.handler.js +234 -0
- package/dist/webdav/handlers/PUT.handler.d.ts +23 -0
- package/dist/webdav/handlers/PUT.handler.js +51 -0
- package/dist/webdav/index.d.ts +1 -0
- package/dist/webdav/index.js +30 -0
- package/dist/webdav/middewares/auth.middleware.d.ts +3 -0
- package/dist/webdav/middewares/auth.middleware.js +27 -0
- package/dist/webdav/middewares/errors.middleware.d.ts +2 -0
- package/dist/webdav/middewares/errors.middleware.js +20 -0
- package/dist/webdav/middewares/request-logger.middleware.d.ts +7 -0
- package/dist/webdav/middewares/request-logger.middleware.js +15 -0
- package/dist/webdav/webdav-server.d.ts +25 -0
- package/dist/webdav/webdav-server.js +98 -0
- package/oclif.manifest.json +593 -0
- package/package.json +122 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CryptoService = void 0;
|
|
27
|
+
const node_crypto_1 = __importStar(require("node:crypto"));
|
|
28
|
+
const keys_service_1 = require("./keys.service");
|
|
29
|
+
const config_service_1 = require("../services/config.service");
|
|
30
|
+
const stream_utils_1 = require("../utils/stream.utils");
|
|
31
|
+
class CryptoService {
|
|
32
|
+
static instance = new CryptoService();
|
|
33
|
+
static cryptoProvider = {
|
|
34
|
+
encryptPasswordHash(password, encryptedSalt) {
|
|
35
|
+
const salt = CryptoService.instance.decryptText(encryptedSalt);
|
|
36
|
+
const hashObj = CryptoService.instance.passToHash({ password, salt });
|
|
37
|
+
return CryptoService.instance.encryptText(hashObj.hash);
|
|
38
|
+
},
|
|
39
|
+
async generateKeys(password) {
|
|
40
|
+
const { privateKeyArmoredEncrypted, publicKeyArmored, revocationCertificate } = await keys_service_1.KeysService.instance.generateNewKeysWithEncrypted(password);
|
|
41
|
+
const keys = {
|
|
42
|
+
privateKeyEncrypted: privateKeyArmoredEncrypted,
|
|
43
|
+
publicKey: publicKeyArmored,
|
|
44
|
+
revocationCertificate: revocationCertificate,
|
|
45
|
+
};
|
|
46
|
+
return keys;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
passToHash = (passObject) => {
|
|
50
|
+
const salt = passObject.salt ? passObject.salt : node_crypto_1.default.randomBytes(128 / 8).toString('hex');
|
|
51
|
+
const hash = node_crypto_1.default
|
|
52
|
+
.pbkdf2Sync(passObject.password, Buffer.from(salt, 'hex'), 10000, 256 / 8, 'sha1')
|
|
53
|
+
.toString('hex');
|
|
54
|
+
const hashedObjetc = {
|
|
55
|
+
salt,
|
|
56
|
+
hash,
|
|
57
|
+
};
|
|
58
|
+
return hashedObjetc;
|
|
59
|
+
};
|
|
60
|
+
encryptText = (textToEncrypt) => {
|
|
61
|
+
const APP_CRYPTO_SECRET = config_service_1.ConfigService.instance.get('APP_CRYPTO_SECRET');
|
|
62
|
+
return this.encryptTextWithKey(textToEncrypt, APP_CRYPTO_SECRET);
|
|
63
|
+
};
|
|
64
|
+
decryptText = (encryptedText) => {
|
|
65
|
+
const APP_CRYPTO_SECRET = config_service_1.ConfigService.instance.get('APP_CRYPTO_SECRET');
|
|
66
|
+
return this.decryptTextWithKey(encryptedText, APP_CRYPTO_SECRET);
|
|
67
|
+
};
|
|
68
|
+
encryptTextWithKey = (textToEncrypt, secret) => {
|
|
69
|
+
const salt = node_crypto_1.default.randomBytes(8);
|
|
70
|
+
const { key, iv } = this.getKeyAndIvFrom(secret, salt);
|
|
71
|
+
const cipher = node_crypto_1.default.createCipheriv('aes-256-cbc', key, iv);
|
|
72
|
+
const encrypted = Buffer.concat([cipher.update(textToEncrypt, 'utf8'), cipher.final()]);
|
|
73
|
+
const openSSLstart = Buffer.from('Salted__');
|
|
74
|
+
return Buffer.concat([openSSLstart, salt, encrypted]).toString('hex');
|
|
75
|
+
};
|
|
76
|
+
decryptTextWithKey = (encryptedText, secret) => {
|
|
77
|
+
const cypherText = Buffer.from(encryptedText, 'hex');
|
|
78
|
+
const salt = cypherText.subarray(8, 16);
|
|
79
|
+
const { key, iv } = this.getKeyAndIvFrom(secret, salt);
|
|
80
|
+
const decipher = node_crypto_1.default.createDecipheriv('aes-256-cbc', key, iv);
|
|
81
|
+
const contentsToDecrypt = cypherText.subarray(16);
|
|
82
|
+
return Buffer.concat([decipher.update(contentsToDecrypt), decipher.final()]).toString('utf8');
|
|
83
|
+
};
|
|
84
|
+
async decryptStream(inputSlices, key, iv) {
|
|
85
|
+
const decipher = (0, node_crypto_1.createDecipheriv)('aes-256-ctr', key, iv);
|
|
86
|
+
const encryptedStream = stream_utils_1.StreamUtils.joinReadableBinaryStreams(inputSlices);
|
|
87
|
+
let keepReading = true;
|
|
88
|
+
const decryptedStream = new ReadableStream({
|
|
89
|
+
async pull(controller) {
|
|
90
|
+
if (!keepReading)
|
|
91
|
+
return;
|
|
92
|
+
const reader = encryptedStream.getReader();
|
|
93
|
+
const status = await reader.read();
|
|
94
|
+
if (status.done) {
|
|
95
|
+
controller.close();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
controller.enqueue(decipher.update(status.value));
|
|
99
|
+
}
|
|
100
|
+
reader.releaseLock();
|
|
101
|
+
},
|
|
102
|
+
cancel() {
|
|
103
|
+
keepReading = false;
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
return decryptedStream;
|
|
107
|
+
}
|
|
108
|
+
async getEncryptionTransform(key, iv) {
|
|
109
|
+
const cipher = (0, node_crypto_1.createCipheriv)('aes-256-ctr', key, iv);
|
|
110
|
+
return cipher;
|
|
111
|
+
}
|
|
112
|
+
getKeyAndIvFrom = (secret, salt) => {
|
|
113
|
+
const TRANSFORM_ROUNDS = 3;
|
|
114
|
+
const password = Buffer.concat([Buffer.from(secret, 'binary'), salt]);
|
|
115
|
+
const md5Hashes = [];
|
|
116
|
+
let digest = password;
|
|
117
|
+
for (let i = 0; i < TRANSFORM_ROUNDS; i++) {
|
|
118
|
+
md5Hashes[i] = node_crypto_1.default.createHash('md5').update(digest).digest();
|
|
119
|
+
digest = Buffer.concat([md5Hashes[i], password]);
|
|
120
|
+
}
|
|
121
|
+
const key = Buffer.concat([md5Hashes[0], md5Hashes[1]]);
|
|
122
|
+
const iv = md5Hashes[2];
|
|
123
|
+
return { key, iv };
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
exports.CryptoService = CryptoService;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DriveFileItem, DriveFolderItem } from '../../types/drive.types';
|
|
2
|
+
import { DriveFileRepository } from './drive-file/drive-file.repository';
|
|
3
|
+
import { DriveFolderRepository } from './drive-folder/drive-folder.repository';
|
|
4
|
+
import { DriveFile } from './drive-file/drive-file.domain';
|
|
5
|
+
import { DriveFolder } from './drive-folder/drive-folder.domain';
|
|
6
|
+
export declare class DriveDatabaseManager {
|
|
7
|
+
private driveFileRepository;
|
|
8
|
+
private driveFolderRepository;
|
|
9
|
+
private static readonly sequelize;
|
|
10
|
+
constructor(driveFileRepository: DriveFileRepository, driveFolderRepository: DriveFolderRepository);
|
|
11
|
+
static readonly init: () => Promise<void>;
|
|
12
|
+
static readonly clean: () => Promise<void>;
|
|
13
|
+
findByRelativePath: (relativePath: string) => Promise<DriveFolder | DriveFile | null>;
|
|
14
|
+
createFolder: (driveFolder: DriveFolderItem) => Promise<DriveFolder>;
|
|
15
|
+
createFile: (driveFile: DriveFileItem) => Promise<DriveFile>;
|
|
16
|
+
buildRelativePathForFile: (fileName: string, parentId: number | null) => Promise<string>;
|
|
17
|
+
buildRelativePathForFolder: (folderName: string, parentId: number | null) => Promise<string>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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.DriveDatabaseManager = void 0;
|
|
7
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
8
|
+
const webdav_utils_1 = require("../../utils/webdav.utils");
|
|
9
|
+
const config_service_1 = require("../config.service");
|
|
10
|
+
const drive_file_repository_1 = require("./drive-file/drive-file.repository");
|
|
11
|
+
const drive_folder_repository_1 = require("./drive-folder/drive-folder.repository");
|
|
12
|
+
const drive_file_model_1 = __importDefault(require("./drive-file/drive-file.model"));
|
|
13
|
+
const drive_folder_model_1 = __importDefault(require("./drive-folder/drive-folder.model"));
|
|
14
|
+
class DriveDatabaseManager {
|
|
15
|
+
driveFileRepository;
|
|
16
|
+
driveFolderRepository;
|
|
17
|
+
static sequelize = new sequelize_typescript_1.Sequelize({
|
|
18
|
+
dialect: 'sqlite',
|
|
19
|
+
storage: config_service_1.ConfigService.DRIVE_SQLITE_FILE,
|
|
20
|
+
models: [drive_file_model_1.default, drive_folder_model_1.default],
|
|
21
|
+
});
|
|
22
|
+
constructor(driveFileRepository, driveFolderRepository) {
|
|
23
|
+
this.driveFileRepository = driveFileRepository;
|
|
24
|
+
this.driveFolderRepository = driveFolderRepository;
|
|
25
|
+
}
|
|
26
|
+
static init = async () => {
|
|
27
|
+
await DriveDatabaseManager.sequelize.sync();
|
|
28
|
+
};
|
|
29
|
+
static clean = async () => {
|
|
30
|
+
await drive_file_repository_1.DriveFileRepository.clean();
|
|
31
|
+
await drive_folder_repository_1.DriveFolderRepository.clean();
|
|
32
|
+
};
|
|
33
|
+
findByRelativePath = async (relativePath) => {
|
|
34
|
+
const driveFile = await this.driveFileRepository.findByRelativePath(relativePath);
|
|
35
|
+
if (driveFile)
|
|
36
|
+
return driveFile;
|
|
37
|
+
let folderRelativePath = relativePath;
|
|
38
|
+
if (!relativePath.endsWith('/'))
|
|
39
|
+
folderRelativePath = relativePath.concat('/');
|
|
40
|
+
const driveFolder = await this.driveFolderRepository.findByRelativePath(folderRelativePath);
|
|
41
|
+
if (driveFolder)
|
|
42
|
+
return driveFolder;
|
|
43
|
+
return null;
|
|
44
|
+
};
|
|
45
|
+
createFolder = async (driveFolder) => {
|
|
46
|
+
const relativePath = await this.buildRelativePathForFolder(driveFolder.name, driveFolder.parentId ?? null);
|
|
47
|
+
const existingObject = await this.driveFolderRepository.findById(driveFolder.id);
|
|
48
|
+
if (existingObject)
|
|
49
|
+
await this.driveFolderRepository.deleteById(existingObject.id);
|
|
50
|
+
return await this.driveFolderRepository.createFolder(driveFolder, relativePath);
|
|
51
|
+
};
|
|
52
|
+
createFile = async (driveFile) => {
|
|
53
|
+
const relativePath = await this.buildRelativePathForFile(driveFile.type ? `${driveFile.name}.${driveFile.type}` : driveFile.name, driveFile.folderId);
|
|
54
|
+
const existingObject = await this.driveFileRepository.findById(driveFile.id);
|
|
55
|
+
if (existingObject)
|
|
56
|
+
await this.driveFileRepository.deleteById(existingObject.id);
|
|
57
|
+
return await this.driveFileRepository.createFile(driveFile, relativePath);
|
|
58
|
+
};
|
|
59
|
+
buildRelativePathForFile = async (fileName, parentId) => {
|
|
60
|
+
const parentFolder = await this.driveFolderRepository.findById(parentId ?? -1);
|
|
61
|
+
if (!parentFolder) {
|
|
62
|
+
return webdav_utils_1.WebDavUtils.joinURL('/', fileName);
|
|
63
|
+
}
|
|
64
|
+
const parentPath = await this.buildRelativePathForFile(parentFolder.name, parentFolder.parentId);
|
|
65
|
+
return webdav_utils_1.WebDavUtils.joinURL(parentPath, fileName);
|
|
66
|
+
};
|
|
67
|
+
buildRelativePathForFolder = async (folderName, parentId) => {
|
|
68
|
+
const parentFolder = await this.driveFolderRepository.findById(parentId ?? -1);
|
|
69
|
+
if (!parentFolder) {
|
|
70
|
+
return webdav_utils_1.WebDavUtils.joinURL('/', folderName, '/');
|
|
71
|
+
}
|
|
72
|
+
const parentPath = await this.buildRelativePathForFolder(parentFolder.name, parentFolder.parentId);
|
|
73
|
+
return webdav_utils_1.WebDavUtils.joinURL(parentPath, folderName, '/');
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
exports.DriveDatabaseManager = DriveDatabaseManager;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface DriveFileAttributes {
|
|
2
|
+
id: number;
|
|
3
|
+
name: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
uuid: string;
|
|
6
|
+
fileId: string;
|
|
7
|
+
folderId: number;
|
|
8
|
+
bucket: string;
|
|
9
|
+
relativePath: string;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
size: number;
|
|
13
|
+
status: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DriveFileAttributes } from './drive-file.attributes';
|
|
2
|
+
export declare class DriveFile implements DriveFileAttributes {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
uuid: string;
|
|
7
|
+
fileId: string;
|
|
8
|
+
folderId: number;
|
|
9
|
+
bucket: string;
|
|
10
|
+
relativePath: string;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
updatedAt: Date;
|
|
13
|
+
size: number;
|
|
14
|
+
status: string;
|
|
15
|
+
constructor({ id, name, type, uuid, fileId, folderId, bucket, relativePath, createdAt, updatedAt, size, status, }: DriveFileAttributes);
|
|
16
|
+
static build(file: DriveFileAttributes): DriveFile;
|
|
17
|
+
toJSON(): DriveFileAttributes;
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveFile = void 0;
|
|
4
|
+
class DriveFile {
|
|
5
|
+
id;
|
|
6
|
+
name;
|
|
7
|
+
type;
|
|
8
|
+
uuid;
|
|
9
|
+
fileId;
|
|
10
|
+
folderId;
|
|
11
|
+
bucket;
|
|
12
|
+
relativePath;
|
|
13
|
+
createdAt;
|
|
14
|
+
updatedAt;
|
|
15
|
+
size;
|
|
16
|
+
status;
|
|
17
|
+
constructor({ id, name, type, uuid, fileId, folderId, bucket, relativePath, createdAt, updatedAt, size, status, }) {
|
|
18
|
+
this.id = id;
|
|
19
|
+
this.name = name;
|
|
20
|
+
this.type = type;
|
|
21
|
+
this.uuid = uuid;
|
|
22
|
+
this.fileId = fileId;
|
|
23
|
+
this.folderId = folderId;
|
|
24
|
+
this.bucket = bucket;
|
|
25
|
+
this.relativePath = relativePath;
|
|
26
|
+
this.createdAt = createdAt;
|
|
27
|
+
this.updatedAt = updatedAt;
|
|
28
|
+
this.size = size;
|
|
29
|
+
this.status = status;
|
|
30
|
+
}
|
|
31
|
+
static build(file) {
|
|
32
|
+
return new DriveFile(file);
|
|
33
|
+
}
|
|
34
|
+
toJSON() {
|
|
35
|
+
return {
|
|
36
|
+
id: this.id,
|
|
37
|
+
name: this.name,
|
|
38
|
+
type: this.type,
|
|
39
|
+
uuid: this.uuid,
|
|
40
|
+
fileId: this.fileId,
|
|
41
|
+
folderId: this.folderId,
|
|
42
|
+
bucket: this.bucket,
|
|
43
|
+
relativePath: this.relativePath,
|
|
44
|
+
createdAt: this.createdAt,
|
|
45
|
+
updatedAt: this.updatedAt,
|
|
46
|
+
size: this.size,
|
|
47
|
+
status: this.status,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.DriveFile = DriveFile;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Model } from 'sequelize-typescript';
|
|
2
|
+
import { DriveFileAttributes } from './drive-file.attributes';
|
|
3
|
+
export declare class DriveFileModel extends Model implements DriveFileAttributes {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
uuid: string;
|
|
8
|
+
fileId: string;
|
|
9
|
+
folderId: number;
|
|
10
|
+
bucket: string;
|
|
11
|
+
relativePath: string;
|
|
12
|
+
size: number;
|
|
13
|
+
status: string;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
}
|
|
17
|
+
export default DriveFileModel;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DriveFileModel = void 0;
|
|
13
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
14
|
+
const types_1 = require("@internxt/sdk/dist/drive/storage/types");
|
|
15
|
+
let DriveFileModel = class DriveFileModel extends sequelize_typescript_1.Model {
|
|
16
|
+
};
|
|
17
|
+
exports.DriveFileModel = DriveFileModel;
|
|
18
|
+
__decorate([
|
|
19
|
+
sequelize_typescript_1.PrimaryKey,
|
|
20
|
+
sequelize_typescript_1.AutoIncrement,
|
|
21
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.INTEGER),
|
|
22
|
+
__metadata("design:type", Number)
|
|
23
|
+
], DriveFileModel.prototype, "id", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
sequelize_typescript_1.Index,
|
|
26
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.STRING),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], DriveFileModel.prototype, "name", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
sequelize_typescript_1.AllowNull,
|
|
31
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.STRING(24)),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], DriveFileModel.prototype, "type", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
sequelize_typescript_1.Unique,
|
|
36
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.UUIDV4),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], DriveFileModel.prototype, "uuid", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.STRING(24)),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], DriveFileModel.prototype, "fileId", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.INTEGER),
|
|
45
|
+
__metadata("design:type", Number)
|
|
46
|
+
], DriveFileModel.prototype, "folderId", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.STRING(24)),
|
|
49
|
+
__metadata("design:type", String)
|
|
50
|
+
], DriveFileModel.prototype, "bucket", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.TEXT),
|
|
53
|
+
__metadata("design:type", String)
|
|
54
|
+
], DriveFileModel.prototype, "relativePath", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.BIGINT),
|
|
57
|
+
__metadata("design:type", Number)
|
|
58
|
+
], DriveFileModel.prototype, "size", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, sequelize_typescript_1.Column)({
|
|
61
|
+
type: sequelize_typescript_1.DataType.ENUM,
|
|
62
|
+
values: Object.values(types_1.FileStatus),
|
|
63
|
+
defaultValue: types_1.FileStatus.EXISTS,
|
|
64
|
+
allowNull: false,
|
|
65
|
+
}),
|
|
66
|
+
__metadata("design:type", String)
|
|
67
|
+
], DriveFileModel.prototype, "status", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.DATE),
|
|
70
|
+
__metadata("design:type", Date)
|
|
71
|
+
], DriveFileModel.prototype, "createdAt", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.DATE),
|
|
74
|
+
__metadata("design:type", Date)
|
|
75
|
+
], DriveFileModel.prototype, "updatedAt", void 0);
|
|
76
|
+
exports.DriveFileModel = DriveFileModel = __decorate([
|
|
77
|
+
(0, sequelize_typescript_1.Table)({
|
|
78
|
+
underscored: true,
|
|
79
|
+
tableName: 'files',
|
|
80
|
+
})
|
|
81
|
+
], DriveFileModel);
|
|
82
|
+
exports.default = DriveFileModel;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DriveFileItem } from '../../../types/drive.types';
|
|
2
|
+
import { DriveFileModel } from './drive-file.model';
|
|
3
|
+
import { DriveFile } from './drive-file.domain';
|
|
4
|
+
export declare class DriveFileRepository {
|
|
5
|
+
findByRelativePath: (relativePath: DriveFile['relativePath']) => Promise<DriveFile | null>;
|
|
6
|
+
findById: (id: DriveFile['id']) => Promise<DriveFile | null>;
|
|
7
|
+
deleteById: (id: DriveFile['id']) => Promise<number>;
|
|
8
|
+
createFile: (driveFileItem: DriveFileItem, relativePath: string) => Promise<DriveFile>;
|
|
9
|
+
toDomain: (model: DriveFileModel) => DriveFile;
|
|
10
|
+
static readonly clean: () => Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveFileRepository = void 0;
|
|
4
|
+
const drive_file_model_1 = require("./drive-file.model");
|
|
5
|
+
const drive_file_domain_1 = require("./drive-file.domain");
|
|
6
|
+
class DriveFileRepository {
|
|
7
|
+
findByRelativePath = async (relativePath) => {
|
|
8
|
+
const file = await drive_file_model_1.DriveFileModel.findOne({
|
|
9
|
+
where: {
|
|
10
|
+
relativePath,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return file ? this.toDomain(file) : null;
|
|
14
|
+
};
|
|
15
|
+
findById = async (id) => {
|
|
16
|
+
const file = await drive_file_model_1.DriveFileModel.findByPk(id);
|
|
17
|
+
return file ? this.toDomain(file) : null;
|
|
18
|
+
};
|
|
19
|
+
deleteById = (id) => {
|
|
20
|
+
return drive_file_model_1.DriveFileModel.destroy({ where: { id } });
|
|
21
|
+
};
|
|
22
|
+
createFile = async (driveFileItem, relativePath) => {
|
|
23
|
+
const driveFile = drive_file_domain_1.DriveFile.build({
|
|
24
|
+
...driveFileItem,
|
|
25
|
+
relativePath,
|
|
26
|
+
});
|
|
27
|
+
const newFile = await drive_file_model_1.DriveFileModel.create({ ...driveFile.toJSON() });
|
|
28
|
+
return this.toDomain(newFile);
|
|
29
|
+
};
|
|
30
|
+
toDomain = (model) => {
|
|
31
|
+
const driveFile = drive_file_domain_1.DriveFile.build({
|
|
32
|
+
...model.toJSON(),
|
|
33
|
+
});
|
|
34
|
+
return driveFile;
|
|
35
|
+
};
|
|
36
|
+
static clean = () => {
|
|
37
|
+
return drive_file_model_1.DriveFileModel.truncate();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
exports.DriveFileRepository = DriveFileRepository;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DriveFolderAttributes } from './drive-folder.attributes';
|
|
2
|
+
export declare class DriveFolder implements DriveFolderAttributes {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
uuid: string;
|
|
6
|
+
relativePath: string;
|
|
7
|
+
parentId: number | null;
|
|
8
|
+
createdAt: Date;
|
|
9
|
+
updatedAt: Date;
|
|
10
|
+
constructor({ id, name, uuid, relativePath, parentId, createdAt, updatedAt }: DriveFolderAttributes);
|
|
11
|
+
static build(folder: DriveFolderAttributes): DriveFolder;
|
|
12
|
+
toJSON(): DriveFolderAttributes;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveFolder = void 0;
|
|
4
|
+
class DriveFolder {
|
|
5
|
+
id;
|
|
6
|
+
name;
|
|
7
|
+
uuid;
|
|
8
|
+
relativePath;
|
|
9
|
+
parentId;
|
|
10
|
+
createdAt;
|
|
11
|
+
updatedAt;
|
|
12
|
+
constructor({ id, name, uuid, relativePath, parentId, createdAt, updatedAt }) {
|
|
13
|
+
this.id = id;
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.uuid = uuid;
|
|
16
|
+
this.relativePath = relativePath;
|
|
17
|
+
this.parentId = parentId;
|
|
18
|
+
this.createdAt = createdAt;
|
|
19
|
+
this.updatedAt = updatedAt;
|
|
20
|
+
}
|
|
21
|
+
static build(folder) {
|
|
22
|
+
return new DriveFolder(folder);
|
|
23
|
+
}
|
|
24
|
+
toJSON() {
|
|
25
|
+
return {
|
|
26
|
+
id: this.id,
|
|
27
|
+
name: this.name,
|
|
28
|
+
uuid: this.uuid,
|
|
29
|
+
relativePath: this.relativePath,
|
|
30
|
+
parentId: this.parentId,
|
|
31
|
+
createdAt: this.createdAt,
|
|
32
|
+
updatedAt: this.updatedAt,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.DriveFolder = DriveFolder;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Model } from 'sequelize-typescript';
|
|
2
|
+
import { DriveFolderAttributes } from './drive-folder.attributes';
|
|
3
|
+
export declare class DriveFolderModel extends Model implements DriveFolderAttributes {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
uuid: string;
|
|
7
|
+
relativePath: string;
|
|
8
|
+
parentId: number | null;
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
updatedAt: Date;
|
|
11
|
+
}
|
|
12
|
+
export default DriveFolderModel;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DriveFolderModel = void 0;
|
|
13
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
14
|
+
let DriveFolderModel = class DriveFolderModel extends sequelize_typescript_1.Model {
|
|
15
|
+
};
|
|
16
|
+
exports.DriveFolderModel = DriveFolderModel;
|
|
17
|
+
__decorate([
|
|
18
|
+
sequelize_typescript_1.PrimaryKey,
|
|
19
|
+
sequelize_typescript_1.AutoIncrement,
|
|
20
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.INTEGER),
|
|
21
|
+
__metadata("design:type", Number)
|
|
22
|
+
], DriveFolderModel.prototype, "id", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
sequelize_typescript_1.Index,
|
|
25
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.STRING),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], DriveFolderModel.prototype, "name", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
sequelize_typescript_1.Unique,
|
|
30
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.UUIDV4),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], DriveFolderModel.prototype, "uuid", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.TEXT),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], DriveFolderModel.prototype, "relativePath", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
sequelize_typescript_1.AllowNull,
|
|
39
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.INTEGER),
|
|
40
|
+
__metadata("design:type", Object)
|
|
41
|
+
], DriveFolderModel.prototype, "parentId", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.DATE),
|
|
44
|
+
__metadata("design:type", Date)
|
|
45
|
+
], DriveFolderModel.prototype, "createdAt", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.DATE),
|
|
48
|
+
__metadata("design:type", Date)
|
|
49
|
+
], DriveFolderModel.prototype, "updatedAt", void 0);
|
|
50
|
+
exports.DriveFolderModel = DriveFolderModel = __decorate([
|
|
51
|
+
(0, sequelize_typescript_1.Table)({
|
|
52
|
+
underscored: true,
|
|
53
|
+
tableName: 'folders',
|
|
54
|
+
})
|
|
55
|
+
], DriveFolderModel);
|
|
56
|
+
exports.default = DriveFolderModel;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DriveFolderItem } from '../../../types/drive.types';
|
|
2
|
+
import { DriveFolder } from './drive-folder.domain';
|
|
3
|
+
import { DriveFolderModel } from './drive-folder.model';
|
|
4
|
+
export declare class DriveFolderRepository {
|
|
5
|
+
findByRelativePath: (relativePath: DriveFolder['relativePath']) => Promise<DriveFolder | null>;
|
|
6
|
+
findById: (id: DriveFolder['id']) => Promise<DriveFolder | null>;
|
|
7
|
+
deleteById: (id: DriveFolder['id']) => Promise<number>;
|
|
8
|
+
createFolder: (driveFolderItem: DriveFolderItem, relativePath: string) => Promise<DriveFolder>;
|
|
9
|
+
toDomain: (model: DriveFolderModel) => DriveFolder;
|
|
10
|
+
static readonly clean: () => Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveFolderRepository = void 0;
|
|
4
|
+
const drive_folder_domain_1 = require("./drive-folder.domain");
|
|
5
|
+
const drive_folder_model_1 = require("./drive-folder.model");
|
|
6
|
+
class DriveFolderRepository {
|
|
7
|
+
findByRelativePath = async (relativePath) => {
|
|
8
|
+
const folder = await drive_folder_model_1.DriveFolderModel.findOne({
|
|
9
|
+
where: {
|
|
10
|
+
relativePath,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return folder ? this.toDomain(folder) : null;
|
|
14
|
+
};
|
|
15
|
+
findById = async (id) => {
|
|
16
|
+
const folder = await drive_folder_model_1.DriveFolderModel.findByPk(id);
|
|
17
|
+
return folder ? this.toDomain(folder) : null;
|
|
18
|
+
};
|
|
19
|
+
deleteById = (id) => {
|
|
20
|
+
return drive_folder_model_1.DriveFolderModel.destroy({ where: { id } });
|
|
21
|
+
};
|
|
22
|
+
createFolder = async (driveFolderItem, relativePath) => {
|
|
23
|
+
const driveFolder = drive_folder_domain_1.DriveFolder.build({
|
|
24
|
+
...driveFolderItem,
|
|
25
|
+
relativePath,
|
|
26
|
+
});
|
|
27
|
+
const newFolder = await drive_folder_model_1.DriveFolderModel.create({ ...driveFolder.toJSON() });
|
|
28
|
+
return this.toDomain(newFolder);
|
|
29
|
+
};
|
|
30
|
+
toDomain = (model) => {
|
|
31
|
+
const driveFolder = drive_folder_domain_1.DriveFolder.build({
|
|
32
|
+
...model.toJSON(),
|
|
33
|
+
});
|
|
34
|
+
return driveFolder;
|
|
35
|
+
};
|
|
36
|
+
static clean = () => {
|
|
37
|
+
return drive_folder_model_1.DriveFolderModel.truncate();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
exports.DriveFolderRepository = DriveFolderRepository;
|