Skip to content

Commit

Permalink
Merge pull request #175 from internxt/feat/release-1.5.0
Browse files Browse the repository at this point in the history
[_]: feat/release-1.5.0
  • Loading branch information
larryrider authored Jan 20, 2025
2 parents 5b70e05 + ba56df3 commit 350730b
Show file tree
Hide file tree
Showing 21 changed files with 230 additions and 893 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"migrate:undo": "sequelize db:migrate:undo",
"publish:npm": "npm run build && npm publish --scope=@internxt --registry=https://registry.npmjs.org/ --access public",
"publish:github": "npm run build && npm publish --scope=@internxt --registry=https://npm.pkg.github.com",
"postinstall": "node ./scripts/skip-in-ci.js || node ./bin/run.js webdav restart"
"postinstall": "node ./scripts/restart-webdav.js"
},
"homepage": "https://github.com/internxt/cli",
"license": "MIT",
Expand Down
16 changes: 16 additions & 0 deletions scripts/restart-webdav.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { exec } = require('child_process');

async function runCommand() {
await new Promise((resolve, reject) => {
exec('node ./bin/run.js webdav restart', (error, stdout, stderr) => {
if (error) {
reject(error);
}
resolve(stdout || stderr);
});
});
}

runCommand().finally(() => {
process.exit(0);
});
5 changes: 0 additions & 5 deletions scripts/skip-in-ci.js

This file was deleted.

11 changes: 9 additions & 2 deletions src/commands/download-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { NetworkFacade } from '../services/network/network-facade.service';
import { AuthService } from '../services/auth.service';
import { CryptoService } from '../services/crypto.service';
import { DownloadService } from '../services/network/download.service';
import { UploadService } from '../services/network/upload.service';
import { SdkManager } from '../services/sdk-manager.service';
import { createWriteStream } from 'node:fs';
import { UserSettings } from '@internxt/sdk/dist/shared/types/userSettings';
Expand All @@ -16,6 +15,8 @@ import { StreamUtils } from '../utils/stream.utils';
import { ErrorUtils } from '../utils/errors.utils';
import { NotValidDirectoryError, NotValidFileUuidError } from '../types/command.types';
import { ValidationService } from '../services/validation.service';
import { Environment } from '@internxt/inxt-js';
import { ConfigService } from '../services/config.service';

export default class DownloadFile extends Command {
static readonly args = {};
Expand Down Expand Up @@ -198,9 +199,15 @@ export default class DownloadFile extends Command {
user: user.bridgeUser,
pass: user.userId,
});
const environment = new Environment({
bridgeUser: user.bridgeUser,
bridgePass: user.userId,
bridgeUrl: ConfigService.instance.get('NETWORK_URL'),
encryptionKey: user.mnemonic,
});
const networkFacade = new NetworkFacade(
networkModule,
UploadService.instance,
environment,
DownloadService.instance,
CryptoService.instance,
);
Expand Down
46 changes: 27 additions & 19 deletions src/commands/upload-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { CLIUtils } from '../utils/cli.utils';
import { ConfigService } from '../services/config.service';
import path from 'node:path';
import { DriveFileService } from '../services/drive/drive-file.service';
import { UploadService } from '../services/network/upload.service';
import { CryptoService } from '../services/crypto.service';
import { DownloadService } from '../services/network/download.service';
import { ErrorUtils } from '../utils/errors.utils';
Expand All @@ -19,6 +18,7 @@ import { ThumbnailService } from '../services/thumbnail.service';
import { BufferStream } from '../utils/stream.utils';
import { isFileThumbnailable } from '../utils/thumbnail.utils';
import { Readable } from 'node:stream';
import { Environment } from '@internxt/inxt-js';

export default class UploadFile extends Command {
static readonly args = {};
Expand Down Expand Up @@ -72,9 +72,15 @@ export default class UploadFile extends Command {
user: user.bridgeUser,
pass: user.userId,
});
const environment = new Environment({
bridgeUser: user.bridgeUser,
bridgePass: user.userId,
bridgeUrl: ConfigService.instance.get('NETWORK_URL'),
encryptionKey: user.mnemonic,
});
const networkFacade = new NetworkFacade(
networkModule,
UploadService.instance,
environment,
DownloadService.instance,
CryptoService.instance,
);
Expand All @@ -99,32 +105,35 @@ export default class UploadFile extends Command {
}

const progressCallback = (progress: number) => {
progressBar.update(progress * 0.99);
progressBar.update(progress * 100 * 0.99);
};

const [uploadPromise, abortable] = await UploadService.instance.uploadFileStream(
fileStream,
user.bucket,
user.mnemonic,
stats.size,
networkFacade,
progressCallback,
);

process.on('SIGINT', () => {
abortable.abort('SIGINT received');
process.exit(1);
const fileId = await new Promise((resolve: (fileId: string) => void, reject) => {
const state = networkFacade.uploadFile(
fileStream,
stats.size,
user.bucket,
(err: Error | null, res: string | null) => {
if (err) {
return reject(err);
}
resolve(res as string);
},
progressCallback,
);
process.on('SIGINT', () => {
state.stop();
process.exit(1);
});
});

const uploadResult = await uploadPromise;

// 3. Create the file in Drive
const createdDriveFile = await DriveFileService.instance.createFile({
plain_name: fileInfo.name,
type: fileType,
size: stats.size,
folder_id: destinationFolderUuid,
id: uploadResult.fileId,
id: fileId,
bucket: user.bucket,
encrypt_version: EncryptionVersion.Aes03,
name: '',
Expand All @@ -139,7 +148,6 @@ export default class UploadFile extends Command {
thumbnailBuffer,
fileType,
user.bucket,
user.mnemonic,
createdDriveFile.id,
networkFacade,
);
Expand Down
1 change: 1 addition & 0 deletions src/commands/webdav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export default class Webdav extends Command {
}

case 'status': {
await AuthService.instance.getAuthDetails();
message = await this.webDAVStatus();
break;
}
Expand Down
20 changes: 0 additions & 20 deletions src/services/crypto.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { CryptoProvider } from '@internxt/sdk';
import { Keys, Password } from '@internxt/sdk/dist/auth';
import { createCipheriv, createDecipheriv, createHash, Decipher, pbkdf2Sync, randomBytes } from 'node:crypto';
import { Readable, Transform } from 'node:stream';
import { KeysService } from './keys.service';
import { ConfigService } from '../services/config.service';
import { StreamUtils } from '../utils/stream.utils';
Expand Down Expand Up @@ -116,20 +115,6 @@ export class CryptoService {
return Buffer.concat([decipher.update(contentsToDecrypt), decipher.final()]).toString('utf8');
};

public encryptStreamInParts = (
readable: Readable,
cipher: Transform,
size: number,
parts: number,
): Transform => {
// 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
const marginChunkSize = 1024;
const chunkSize = size / parts + marginChunkSize;
const readableChunks = StreamUtils.streamReadableIntoChunks(readable, chunkSize);

return readableChunks.pipe(cipher);
};

public decryptStream = (
inputSlices: ReadableStream<Uint8Array>[],
key: Buffer,
Expand Down Expand Up @@ -180,11 +165,6 @@ export class CryptoService {
return decryptedStream;
};

public getEncryptionTransform = (key: Buffer, iv: Buffer): Transform => {
const cipher = createCipheriv('aes-256-ctr', key, iv);
return cipher;
};

/**
* Generates the key and the iv by transforming a secret and a salt.
* It will generate the same key and iv if the same secret and salt is used.
Expand Down
Loading

0 comments on commit 350730b

Please sign in to comment.