Skip to content

Commit 350730b

Browse files
authored
Merge pull request #175 from internxt/feat/release-1.5.0
[_]: feat/release-1.5.0
2 parents 5b70e05 + ba56df3 commit 350730b

21 files changed

Lines changed: 230 additions & 893 deletions

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"migrate:undo": "sequelize db:migrate:undo",
2121
"publish:npm": "npm run build && npm publish --scope=@internxt --registry=https://registry.npmjs.org/ --access public",
2222
"publish:github": "npm run build && npm publish --scope=@internxt --registry=https://npm.pkg.github.com",
23-
"postinstall": "node ./scripts/skip-in-ci.js || node ./bin/run.js webdav restart"
23+
"postinstall": "node ./scripts/restart-webdav.js"
2424
},
2525
"homepage": "https://github.com/internxt/cli",
2626
"license": "MIT",

scripts/restart-webdav.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const { exec } = require('child_process');
2+
3+
async function runCommand() {
4+
await new Promise((resolve, reject) => {
5+
exec('node ./bin/run.js webdav restart', (error, stdout, stderr) => {
6+
if (error) {
7+
reject(error);
8+
}
9+
resolve(stdout || stderr);
10+
});
11+
});
12+
}
13+
14+
runCommand().finally(() => {
15+
process.exit(0);
16+
});

scripts/skip-in-ci.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/commands/download-file.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { NetworkFacade } from '../services/network/network-facade.service';
55
import { AuthService } from '../services/auth.service';
66
import { CryptoService } from '../services/crypto.service';
77
import { DownloadService } from '../services/network/download.service';
8-
import { UploadService } from '../services/network/upload.service';
98
import { SdkManager } from '../services/sdk-manager.service';
109
import { createWriteStream } from 'node:fs';
1110
import { UserSettings } from '@internxt/sdk/dist/shared/types/userSettings';
@@ -16,6 +15,8 @@ import { StreamUtils } from '../utils/stream.utils';
1615
import { ErrorUtils } from '../utils/errors.utils';
1716
import { NotValidDirectoryError, NotValidFileUuidError } from '../types/command.types';
1817
import { ValidationService } from '../services/validation.service';
18+
import { Environment } from '@internxt/inxt-js';
19+
import { ConfigService } from '../services/config.service';
1920

2021
export default class DownloadFile extends Command {
2122
static readonly args = {};
@@ -198,9 +199,15 @@ export default class DownloadFile extends Command {
198199
user: user.bridgeUser,
199200
pass: user.userId,
200201
});
202+
const environment = new Environment({
203+
bridgeUser: user.bridgeUser,
204+
bridgePass: user.userId,
205+
bridgeUrl: ConfigService.instance.get('NETWORK_URL'),
206+
encryptionKey: user.mnemonic,
207+
});
201208
const networkFacade = new NetworkFacade(
202209
networkModule,
203-
UploadService.instance,
210+
environment,
204211
DownloadService.instance,
205212
CryptoService.instance,
206213
);

src/commands/upload-file.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { CLIUtils } from '../utils/cli.utils';
88
import { ConfigService } from '../services/config.service';
99
import path from 'node:path';
1010
import { DriveFileService } from '../services/drive/drive-file.service';
11-
import { UploadService } from '../services/network/upload.service';
1211
import { CryptoService } from '../services/crypto.service';
1312
import { DownloadService } from '../services/network/download.service';
1413
import { ErrorUtils } from '../utils/errors.utils';
@@ -19,6 +18,7 @@ import { ThumbnailService } from '../services/thumbnail.service';
1918
import { BufferStream } from '../utils/stream.utils';
2019
import { isFileThumbnailable } from '../utils/thumbnail.utils';
2120
import { Readable } from 'node:stream';
21+
import { Environment } from '@internxt/inxt-js';
2222

2323
export default class UploadFile extends Command {
2424
static readonly args = {};
@@ -72,9 +72,15 @@ export default class UploadFile extends Command {
7272
user: user.bridgeUser,
7373
pass: user.userId,
7474
});
75+
const environment = new Environment({
76+
bridgeUser: user.bridgeUser,
77+
bridgePass: user.userId,
78+
bridgeUrl: ConfigService.instance.get('NETWORK_URL'),
79+
encryptionKey: user.mnemonic,
80+
});
7581
const networkFacade = new NetworkFacade(
7682
networkModule,
77-
UploadService.instance,
83+
environment,
7884
DownloadService.instance,
7985
CryptoService.instance,
8086
);
@@ -99,32 +105,35 @@ export default class UploadFile extends Command {
99105
}
100106

101107
const progressCallback = (progress: number) => {
102-
progressBar.update(progress * 0.99);
108+
progressBar.update(progress * 100 * 0.99);
103109
};
104110

105-
const [uploadPromise, abortable] = await UploadService.instance.uploadFileStream(
106-
fileStream,
107-
user.bucket,
108-
user.mnemonic,
109-
stats.size,
110-
networkFacade,
111-
progressCallback,
112-
);
113-
114-
process.on('SIGINT', () => {
115-
abortable.abort('SIGINT received');
116-
process.exit(1);
111+
const fileId = await new Promise((resolve: (fileId: string) => void, reject) => {
112+
const state = networkFacade.uploadFile(
113+
fileStream,
114+
stats.size,
115+
user.bucket,
116+
(err: Error | null, res: string | null) => {
117+
if (err) {
118+
return reject(err);
119+
}
120+
resolve(res as string);
121+
},
122+
progressCallback,
123+
);
124+
process.on('SIGINT', () => {
125+
state.stop();
126+
process.exit(1);
127+
});
117128
});
118129

119-
const uploadResult = await uploadPromise;
120-
121130
// 3. Create the file in Drive
122131
const createdDriveFile = await DriveFileService.instance.createFile({
123132
plain_name: fileInfo.name,
124133
type: fileType,
125134
size: stats.size,
126135
folder_id: destinationFolderUuid,
127-
id: uploadResult.fileId,
136+
id: fileId,
128137
bucket: user.bucket,
129138
encrypt_version: EncryptionVersion.Aes03,
130139
name: '',
@@ -139,7 +148,6 @@ export default class UploadFile extends Command {
139148
thumbnailBuffer,
140149
fileType,
141150
user.bucket,
142-
user.mnemonic,
143151
createdDriveFile.id,
144152
networkFacade,
145153
);

src/commands/webdav.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export default class Webdav extends Command {
4949
}
5050

5151
case 'status': {
52+
await AuthService.instance.getAuthDetails();
5253
message = await this.webDAVStatus();
5354
break;
5455
}

src/services/crypto.service.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { CryptoProvider } from '@internxt/sdk';
22
import { Keys, Password } from '@internxt/sdk/dist/auth';
33
import { createCipheriv, createDecipheriv, createHash, Decipher, pbkdf2Sync, randomBytes } from 'node:crypto';
4-
import { Readable, Transform } from 'node:stream';
54
import { KeysService } from './keys.service';
65
import { ConfigService } from '../services/config.service';
76
import { StreamUtils } from '../utils/stream.utils';
@@ -116,20 +115,6 @@ export class CryptoService {
116115
return Buffer.concat([decipher.update(contentsToDecrypt), decipher.final()]).toString('utf8');
117116
};
118117

119-
public encryptStreamInParts = (
120-
readable: Readable,
121-
cipher: Transform,
122-
size: number,
123-
parts: number,
124-
): Transform => {
125-
// We include a marginChunkSize because if we split the chunk directly, there will always be one more chunk left, this will cause a mismatch with the urls provided
126-
const marginChunkSize = 1024;
127-
const chunkSize = size / parts + marginChunkSize;
128-
const readableChunks = StreamUtils.streamReadableIntoChunks(readable, chunkSize);
129-
130-
return readableChunks.pipe(cipher);
131-
};
132-
133118
public decryptStream = (
134119
inputSlices: ReadableStream<Uint8Array>[],
135120
key: Buffer,
@@ -180,11 +165,6 @@ export class CryptoService {
180165
return decryptedStream;
181166
};
182167

183-
public getEncryptionTransform = (key: Buffer, iv: Buffer): Transform => {
184-
const cipher = createCipheriv('aes-256-ctr', key, iv);
185-
return cipher;
186-
};
187-
188168
/**
189169
* Generates the key and the iv by transforming a secret and a salt.
190170
* It will generate the same key and iv if the same secret and salt is used.

0 commit comments

Comments
 (0)