From 262eedda732f6a5ec4028588ef62e022708e0e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jim=C3=A9nez=20Rivera?= Date: Fri, 15 May 2026 11:55:10 +0200 Subject: [PATCH 1/4] Cleanup, eslint and prettier --- .github/workflows/checks.yml | 6 + .github/workflows/publish-npm.yml | 2 +- .github/workflows/tests.yml | 2 +- README.md | 7 +- env.d.ts | 16 +- eslint.config.mjs | 2 + knip.json | 3 +- package.json | 13 +- src/api/ExchangeReport.ts | 133 ------ src/api/index.ts | 1 - src/index.ts | 21 +- src/lib/models/ShardMeta.ts | 9 - src/lib/models/index.ts | 1 - src/services/api.ts | 178 +------- tests/lib/core/download/downloadV2.test.ts | 2 +- tests/lib/core/fixtures.ts | 6 - tests/lib/core/upload/upload.test.ts | 10 +- tests/lib/{error.unit.ts => error.test.ts} | 2 - tests/mocks/bridge.mock.ts | 58 --- tests/mocks/farmer.mock.ts | 128 ------ tests/mocks/index.ts | 4 - tests/mocks/logger.mock.ts | 7 - tests/mocks/shardMeta.mock.ts | 14 - tests/services/api.test.ts | 80 +--- yarn.lock | 460 +-------------------- 25 files changed, 57 insertions(+), 1108 deletions(-) delete mode 100644 src/api/ExchangeReport.ts delete mode 100644 src/lib/models/ShardMeta.ts delete mode 100644 src/lib/models/index.ts rename tests/lib/{error.unit.ts => error.test.ts} (97%) delete mode 100644 tests/mocks/bridge.mock.ts delete mode 100644 tests/mocks/farmer.mock.ts delete mode 100644 tests/mocks/index.ts delete mode 100644 tests/mocks/logger.mock.ts delete mode 100644 tests/mocks/shardMeta.mock.ts diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 56a7a5f8..b12664eb 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -24,3 +24,9 @@ jobs: - name: Run Typescript compiler run: yarn type-check + + - name: Run Prettier + run: yarn format + + - name: Run Eslint + run: yarn lint diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 0b3d53c2..8053af60 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -28,4 +28,4 @@ jobs: echo "registry=https://registry.npmjs.org/" > .npmrc echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc - - run: npm publish --scope=@internxt --access public \ No newline at end of file + - run: npm publish --scope=@internxt --access public diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f55f4ab2..21fc26e8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: unit-tests: strategy: matrix: - os: ["ubuntu-latest", "windows-latest"] + os: ['ubuntu-latest', 'windows-latest'] runs-on: ${{ matrix.os }} steps: - name: Set core.autocrlf to false diff --git a/README.md b/README.md index f97705ac..2c96bbe1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,18 @@ # inxt-js + API and CLI for the Internxt network ## Usage + Soon ## How the project is structurared + +``` /src /cli /lib /models /core - /services \ No newline at end of file + /services +``` diff --git a/env.d.ts b/env.d.ts index cec419b9..df03d6c7 100644 --- a/env.d.ts +++ b/env.d.ts @@ -1,9 +1,9 @@ declare namespace NodeJS { - interface ProcessEnv { - BRIDGE_PASS: string; - BRIDGE_USER: string; - BRIDGE_URL: string | undefined; - BUCKET_ID: string; - MNEMONIC:string; - } -} \ No newline at end of file + interface ProcessEnv { + BRIDGE_PASS: string; + BRIDGE_USER: string; + BRIDGE_URL: string | undefined; + BUCKET_ID: string; + MNEMONIC: string; + } +} diff --git a/eslint.config.mjs b/eslint.config.mjs index fa207d00..0bfc2748 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -8,7 +8,9 @@ export default [ { rules: { '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-require-imports': 'off', 'no-console': 'off', + 'no-undef': 'off', }, }, ]; diff --git a/knip.json b/knip.json index 0a06ee9d..049ac3d2 100644 --- a/knip.json +++ b/knip.json @@ -1,7 +1,6 @@ { "entry": ["src/cli/*.ts"], - "project": ["src/**/*.ts"], - "ignoreDependencies": ["express", "@types/express"], + "project": ["src/**/*.ts", "tests/**/*.ts"], "rules": { "enumMembers": "off" } diff --git a/package.json b/package.json index b988ea11..d0894f3b 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,15 @@ "scripts": { "clean": "rimraf dist build coverage", "build": "yarn clean && tsc -p tsconfig.build.json", - "type-check": "tsc", "test": "vitest run --coverage", "test:watch": "vitest watch", - "lint": "eslint ./src", - "lint:fix": "yarn run lint --fix", "cli": "ts-node --files src/cli/index.ts", - "format": "prettier --write src/**/*.{js,jsx,tsx,ts} tests/**/*.{js,jsx,tsx,ts}", + "========== Code style ==========": "", + "type-check": "tsc", + "lint": "eslint src tests", + "lint:fix": "yarn run lint --fix", + "format": "prettier . --check", + "format:fix": "prettier . --write", "find-deadcode": "knip", "prepare": "husky" }, @@ -27,13 +29,11 @@ "@internxt/eslint-config-internxt": "^2.1.0", "@internxt/prettier-config": "^2.0.1", "@types/async": "=3.2.9", - "@types/express": "^5.0.6", "@types/node": "^25.6.0", "@vitest/coverage-istanbul": "^4.1.5", "commander": "^14.0.3", "dotenv": "^17.4.2", "eslint": "^10.3.0", - "express": "^5.2.1", "husky": "^9.1.7", "knip": "^6.13.1", "lint-staged": "^17.0.2", @@ -44,7 +44,6 @@ "vitest": "^4.1.5" }, "dependencies": { - "@internxt/lib": "1.4.2", "@internxt/sdk": "1.16.2", "async": "^3.2.6", "axios": "^1.16.0", diff --git a/src/api/ExchangeReport.ts b/src/api/ExchangeReport.ts deleted file mode 100644 index c52d9b0b..00000000 --- a/src/api/ExchangeReport.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { request } from '../services/request'; -import { EnvironmentConfig, Shard } from '.'; -import { AxiosResponse } from 'axios'; - -export interface ExchangeReportParams { - dataHash: string | null; - reporterId: string; - farmerId: string | null; - clientId: string; - exchangeStart: Date; - exchangeEnd: Date | null; - exchangeResultCode: number; - exchangeResultMessage: string; -} - -export class ExchangeReport { - static INXT_REPORT_SUCCESS = 1000; - static INXT_REPORT_FAILURE = 1100; - - static INXT_REPORT_SHARD_UPLOADED = 'SHARD_UPLOADED'; - static INXT_REPORT_UPLOAD_ERROR = 'TRANSFER_FAILED'; - - static INXT_REPORT_SHARD_DOWNLOADED = 'SHARD_DOWNLOADED'; - static INXT_REPORT_MIRROR_FAILED = 'MIRROR_FAILED'; - static INXT_REPORT_TRANSFER_FAILED = 'TRANSFER_FAILED'; - static INXT_REPORT_MIRROR_SUCCESS = 'MIRROR_SUCCESS'; - static INXT_REPORT_DOWNLOAD_ERROR = 'DOWNLOAD_ERROR'; - static INXT_REPORT_SHARD_EXISTS = 'SHARD_EXISTS'; - static INXT_REPORT_FAILED_INTEGRITY = 'FAILED_INTEGRITY'; - static INXT_REPORT_READ_FAILED = 'READ_FAILED'; - - config: EnvironmentConfig; - params: ExchangeReportParams; - - constructor(config: EnvironmentConfig) { - this.config = config; - this.params = { - dataHash: null, - reporterId: config.bridgeUser, - farmerId: null, - clientId: config.bridgeUser, - exchangeStart: new Date(), - exchangeEnd: null, - exchangeResultCode: 1000, - exchangeResultMessage: '', - }; - } - - expectedResultCode(): number { - switch (this.params.exchangeResultMessage) { - case ExchangeReport.INXT_REPORT_SHARD_DOWNLOADED: - case ExchangeReport.INXT_REPORT_SHARD_UPLOADED: - case ExchangeReport.INXT_REPORT_MIRROR_SUCCESS: - case ExchangeReport.INXT_REPORT_SHARD_EXISTS: - return ExchangeReport.INXT_REPORT_SUCCESS; - case ExchangeReport.INXT_REPORT_FAILED_INTEGRITY: - case ExchangeReport.INXT_REPORT_DOWNLOAD_ERROR: - case ExchangeReport.INXT_REPORT_TRANSFER_FAILED: - case ExchangeReport.INXT_REPORT_MIRROR_FAILED: - case ExchangeReport.INXT_REPORT_READ_FAILED: - return ExchangeReport.INXT_REPORT_FAILURE; - default: - return 0; - } - } - - validate() { - const expectedResultCode = this.expectedResultCode(); - - if ( - !this.params.dataHash || - !this.params.farmerId || - expectedResultCode === 0 || - expectedResultCode !== this.params.exchangeResultCode - ) { - return false; - } - - return true; - } - - sendReport(): Promise> { - if (this.params.exchangeEnd == null) { - this.params.exchangeEnd = new Date(); - } - - if (!this.validate()) { - return Promise.reject(Error('Not valid report to send')); - } - - return request(this.config, 'POST', `${this.config.bridgeUrl}/reports/exchanges`, { data: this.params }, false); - } - - DownloadOk() { - this.params.exchangeResultCode = ExchangeReport.INXT_REPORT_SUCCESS; - this.params.exchangeResultMessage = ExchangeReport.INXT_REPORT_SHARD_DOWNLOADED; - } - - DownloadError() { - this.params.exchangeResultCode = ExchangeReport.INXT_REPORT_FAILURE; - this.params.exchangeResultMessage = ExchangeReport.INXT_REPORT_DOWNLOAD_ERROR; - } - - UploadOk() { - this.params.exchangeResultCode = ExchangeReport.INXT_REPORT_SUCCESS; - this.params.exchangeResultMessage = ExchangeReport.INXT_REPORT_SHARD_UPLOADED; - } - - UploadError() { - this.params.exchangeResultCode = ExchangeReport.INXT_REPORT_FAILURE; - this.params.exchangeResultMessage = ExchangeReport.INXT_REPORT_UPLOAD_ERROR; - } - - static build(config: EnvironmentConfig, mirror: Shard) { - const report = new ExchangeReport(config); - - report.params.exchangeStart = new Date(); - report.params.farmerId = mirror.farmer.nodeID; - report.params.dataHash = mirror.hash; - - return report; - } - - error() { - this.DownloadError(); - this.sendReport().catch(() => {}); - } - - success() { - this.DownloadOk(); - this.sendReport().catch(() => {}); - } -} diff --git a/src/api/index.ts b/src/api/index.ts index b741fedb..4ccce879 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -2,7 +2,6 @@ export * from './ActionState'; export * from './Abortable'; export * from './Bucket'; export * from './EnvironmentConfig'; -export * from './ExchangeReport'; export * from './FileObject'; export * from './fileinfo'; export * from './Shard'; diff --git a/src/index.ts b/src/index.ts index 8f7e66ea..7ddf7271 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -import { request } from '@internxt/lib'; import { UploadStrategyFunction, UploadOptions, @@ -11,7 +10,7 @@ import { Events, } from './lib/core'; -import { EncryptFilename, GenerateFileKey } from './lib/utils/crypto'; +import { EncryptFilename } from './lib/utils/crypto'; // TODO: Remove this import { BUCKET_ID_NOT_PROVIDED, ENCRYPTION_KEY_NOT_PROVIDED } from './api/constants'; @@ -19,7 +18,6 @@ import { ActionState, ActionTypes, Bucket, EnvironmentConfig } from './api'; import { FileInfo, GetFileInfo } from './api/fileinfo'; import { Bridge, CreateFileTokenResponse, GetDownloadLinksResponse } from './services/api'; -import { HashStream } from './lib/utils/streams'; import { downloadFileV2 } from './lib/core/download/downloadV2'; import { FileVersionOneError } from '@internxt/sdk/dist/network/download'; import { upload as uploadFileV2 } from './lib/core/upload/uploadV2'; @@ -32,16 +30,9 @@ type ListFilesCallback = (err: Error | null, result: any) => void; type DeleteFileCallback = (err: Error | null, result: any) => void; -const utils = { - generateFileKey: GenerateFileKey, - Hasher: HashStream, -}; - export class Environment { config: EnvironmentConfig; - static utils = utils; - constructor(config: EnvironmentConfig) { this.config = config; } @@ -86,9 +77,6 @@ export class Environment { .start() .then((bucket) => { return bucket.id; - }) - .catch((err) => { - throw new Error(request.extractMessageFromError(err)); }); } @@ -114,12 +102,7 @@ export class Environment { * @param cb Callback that will receive the response after deletion */ deleteBucket(bucketId: string): Promise { - return new Bridge(this.config) - .deleteBucket(bucketId) - .start() - .catch((err) => { - throw new Error(request.extractMessageFromError(err)); - }); + return new Bridge(this.config).deleteBucket(bucketId).start(); } /** diff --git a/src/lib/models/ShardMeta.ts b/src/lib/models/ShardMeta.ts deleted file mode 100644 index 215d9cfd..00000000 --- a/src/lib/models/ShardMeta.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface ShardMeta { - hash: string; - size: number; - index: number; - parity: boolean; - challenges?: Buffer[]; - challenges_as_str: string[]; - tree: string[]; -} diff --git a/src/lib/models/index.ts b/src/lib/models/index.ts deleted file mode 100644 index 53c84dbb..00000000 --- a/src/lib/models/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ShardMeta'; diff --git a/src/services/api.ts b/src/services/api.ts index c92918ff..7886efc9 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -1,20 +1,5 @@ -import { AxiosRequestConfig, AxiosResponse } from 'axios'; -import { EnvironmentConfig, ExchangeReport, Shard } from '../api'; +import { EnvironmentConfig } from '../api'; import { INXTRequest, Methods } from '../lib'; -import { ShardMeta } from '../lib/models'; - -export interface CreateEntryFromFrameBody { - frame: string; - filename: string; - index: string; - hmac: { - type: string; - value: string; - }; - erasure?: { - type: string; - }; -} export interface CreateFileTokenResponse { bucket: string; @@ -28,188 +13,51 @@ export interface CreateFileTokenResponse { } export type GetDownloadLinksResponse = { fileId: string; link: string; index: string }[]; -function emptyINXTRequest(config: EnvironmentConfig): INXTRequest { - return new INXTRequest(config, Methods.Get, '', {}, false); -} - -class InxtApi { - protected config: EnvironmentConfig; - protected url: string; - - constructor(config: EnvironmentConfig) { - this.config = config; - this.url = config.bridgeUrl ?? ''; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getBucketById(bucketId: string, params?: AxiosRequestConfig): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getFileById(bucketId: string, fileId: string, params?: AxiosRequestConfig): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - createFrame(params?: AxiosRequestConfig): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - createEntryFromFrame(bucketId: string, body: CreateEntryFromFrameBody, params?: AxiosRequestConfig): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - addShardToFrame(frameId: string, body: ShardMeta, params?: AxiosRequestConfig): INXTRequest { - return emptyINXTRequest(this.config); - } - - sendUploadExchangeReport(exchangeReport: ExchangeReport): Promise> { - return exchangeReport.sendReport(); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - sendShardToNode(shard: Shard, shardContent: Buffer): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - createFileToken(bucketId: string, fileId: string, operation: 'PUSH' | 'PULL'): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - renameFile(bucketId: string, fileId: string, newName: string): INXTRequest { - return emptyINXTRequest(this.config); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - createBucket(bucketName: string): INXTRequest { - return emptyINXTRequest(this.config); - } -} - -// tslint:disable-next-line: max-classes-per-file class EmptyBridgeUrlError extends Error { constructor() { super('Empty bridge url'); } } -// tslint:disable-next-line: max-classes-per-file -export class Bridge extends InxtApi { +export class Bridge { + protected config: EnvironmentConfig; + protected url: string; + constructor(config: EnvironmentConfig) { - if (config.bridgeUrl === '') { + if (!config.bridgeUrl) { throw new EmptyBridgeUrlError(); } - super(config); - } - - getBucketById(bucketId: string, params?: AxiosRequestConfig): INXTRequest { - const targetUrl = `${this.url}/buckets/${bucketId}`; - const defParams: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/octet-stream', - }, - }; - - const finalParams = { ...defParams, ...params }; - - return new INXTRequest(this.config, Methods.Get, targetUrl, finalParams, false); - } - - getFileById(bucketId: string, fileId: string, params?: AxiosRequestConfig): INXTRequest { - const targetUrl = `${this.url}/buckets/${bucketId}/file-ids/${fileId}`; - const defParams: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/octet-stream', - }, - }; - - const finalParams = { ...defParams, ...params }; - - return new INXTRequest(this.config, Methods.Get, targetUrl, finalParams, false); - } - - createFrame(params?: AxiosRequestConfig): INXTRequest { - const targetUrl = `${this.url}/frames`; - const defParams: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/octet-stream', - }, - }; - const finalParams = { ...defParams, ...params }; - - return new INXTRequest(this.config, Methods.Post, targetUrl, finalParams, false); - } - - createEntryFromFrame(bucketId: string, body: CreateEntryFromFrameBody, params?: AxiosRequestConfig): INXTRequest { - const targetUrl = `${this.url}/buckets/${bucketId}/files`; - const defParams: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/json', - }, - data: body, - }; - - const finalParams = { ...defParams, ...params }; - - return new INXTRequest(this.config, Methods.Post, targetUrl, finalParams, false); - } - - addShardToFrame(frameId: string, body: ShardMeta, params?: AxiosRequestConfig): INXTRequest { - const targetUrl = `${this.url}/frames/${frameId}`; - const defParams: AxiosRequestConfig = { - headers: { - 'Content-Type': 'application/json', - }, - data: { ...body, challenges: body.challenges_as_str }, - }; - - const finalParams = { ...defParams, ...params }; - - return new INXTRequest(this.config, Methods.Put, targetUrl, finalParams, false); - } - - sendUploadExchangeReport(exchangeReport: ExchangeReport): Promise> { - return exchangeReport.sendReport(); - } - - sendShardToNode(shard: Shard, shardContent: Buffer): INXTRequest { - const targetUrl = `http://${shard.farmer.address}:${shard.farmer.port}/shards/${shard.hash}?token=${shard.token}`; - - return new INXTRequest(this.config, Methods.Post, targetUrl, { data: shardContent }, true); + this.config = config; + this.url = config.bridgeUrl; } createFileToken(bucketId: string, fileId: string, operation: 'PUSH' | 'PULL'): INXTRequest { - const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/tokens`; + const targetUrl = `${this.url}/buckets/${bucketId}/tokens`; return new INXTRequest(this.config, Methods.Post, targetUrl, { data: { operation, file: fileId } }, false); } renameFile(bucketId: string, fileId: string, newName: string): INXTRequest { - const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/files/${fileId}`; + const targetUrl = `${this.url}/buckets/${bucketId}/files/${fileId}`; return new INXTRequest(this.config, Methods.Patch, targetUrl, { data: { name: newName } }); } createBucket(bucketName: string) { - const targetUrl = `${this.config.bridgeUrl}/buckets`; + const targetUrl = `${this.url}/buckets`; return new INXTRequest(this.config, Methods.Post, targetUrl, { data: { name: bucketName } }); } deleteBucket(bucketId: string) { - const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}`; + const targetUrl = `${this.url}/buckets/${bucketId}`; return new INXTRequest(this.config, Methods.Delete, targetUrl, {}); } getDownloadLinks(bucketId: string, fileIds: string[]) { - const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/bulk-files?fileIds=${fileIds.join(',')}`; + const targetUrl = `${this.url}/buckets/${bucketId}/bulk-files?fileIds=${fileIds.join(',')}`; return new INXTRequest(this.config, Methods.Get, targetUrl, {}); } diff --git a/tests/lib/core/download/downloadV2.test.ts b/tests/lib/core/download/downloadV2.test.ts index f04b301c..e9375d71 100644 --- a/tests/lib/core/download/downloadV2.test.ts +++ b/tests/lib/core/download/downloadV2.test.ts @@ -14,7 +14,7 @@ describe('downloadFileV2()', () => { describe('Should handle errors properly', () => { it('Should throw if the mnemonic is invalid', async () => { try { - const [promise, outStream] = downloadFileV2( + const [, outStream] = downloadFileV2( fileId, bucketId, invalidMnemonic, diff --git a/tests/lib/core/fixtures.ts b/tests/lib/core/fixtures.ts index c4fb504c..571367e6 100644 --- a/tests/lib/core/fixtures.ts +++ b/tests/lib/core/fixtures.ts @@ -1,9 +1,3 @@ -import { generateMnemonic } from 'bip39'; - -export function getValidMnemonic(): string { - return generateMnemonic(); -} - export function getInvalidMnemonic(): string { return ''; } diff --git a/tests/lib/core/upload/upload.test.ts b/tests/lib/core/upload/upload.test.ts index 3c0ad3b3..3e0865c5 100644 --- a/tests/lib/core/upload/upload.test.ts +++ b/tests/lib/core/upload/upload.test.ts @@ -3,14 +3,7 @@ import { fail } from 'node:assert'; import { Readable } from 'stream'; import { UploadInvalidMnemonicError } from '@internxt/sdk/dist/network/errors'; import { upload } from '../../../../src/lib/core/upload/uploadV2'; -import { - getBridgeUrl, - getBucketId, - getFileBytes, - getInvalidMnemonic, - getNetworkCredentials, - getValidMnemonic, -} from '../fixtures'; +import { getBridgeUrl, getBucketId, getFileBytes, getInvalidMnemonic, getNetworkCredentials } from '../fixtures'; const creds = getNetworkCredentials(); const bucketId = getBucketId(); @@ -18,7 +11,6 @@ const bridgeUrl = getBridgeUrl(); const abortSignal = new AbortController().signal; const fileContent = 'some text that i have in the file'; const fileBytes = getFileBytes(fileContent); -const validMnemonic = getValidMnemonic(); const invalidMnemonic = getInvalidMnemonic(); describe('upload()', () => { diff --git a/tests/lib/error.unit.ts b/tests/lib/error.test.ts similarity index 97% rename from tests/lib/error.unit.ts rename to tests/lib/error.test.ts index 81beaa3c..76eac541 100644 --- a/tests/lib/error.unit.ts +++ b/tests/lib/error.test.ts @@ -1,5 +1,3 @@ -import { expect } from 'chai'; - import { wrap } from '../../src/lib/utils/error'; describe('# Utils error tests', () => { diff --git a/tests/mocks/bridge.mock.ts b/tests/mocks/bridge.mock.ts deleted file mode 100644 index 32946728..00000000 --- a/tests/mocks/bridge.mock.ts +++ /dev/null @@ -1,58 +0,0 @@ -import express from 'express'; -import { Server } from 'http'; -import { CreateEntryFromFrameBody } from '../../src/services/api'; - -let app: express.Application; -let server: Server; -const testServerPort = 54321; - -function startServer(cb: () => void) { - app = express(); - server = app.listen(testServerPort, () => { - cb(); - }); - - app.get('/buckets/:bucketId', (req, res) => { - res.status(200).send({ id: req.params.bucketId }); - }); - - app.get('/buckets/:bucketId/file-ids/:fileId', (req, res) => { - if (!req.params.fileId || !req.params.bucketId) { - return res.status(400).send({ error: 'Not provided required params' }); - } - res.status(200).send({ id: req.params.fileId }); - }); - - app.post('/frames', (req, res) => { - res.status(200).send({ id: 'id', user: 'fake@user.com' }); - }); - - app.post('/buckets/:bucketId/files', (req, res) => { - try { - const body: CreateEntryFromFrameBody = req.body; - const { frame, hmac } = body; - const { value, type } = hmac; - res.status(200).send({ id: 'id' }); - } catch (err) { - console.log('err', err); - res.status(400).send({ error: err }); - } - }); -} - -function closeServer(cb: () => void) { - server.close(() => { - cb(); - }); -} - -type CloseServerFunction = () => Promise; - -const startApp = () => new Promise((r) => startServer(() => r(null))); -const closeApp = () => new Promise((r) => closeServer(() => r(null))); - -export async function spawnBridge(): Promise { - await startApp(); - - return closeApp; -} diff --git a/tests/mocks/farmer.mock.ts b/tests/mocks/farmer.mock.ts deleted file mode 100644 index f3201f0d..00000000 --- a/tests/mocks/farmer.mock.ts +++ /dev/null @@ -1,128 +0,0 @@ -import express from 'express'; -import { Server } from 'http'; - -import { createHash, Hash } from 'crypto'; -import { Transform, TransformCallback, TransformOptions } from 'stream'; - -export class HashStream extends Transform { - hasher: Hash; - finalHash: Buffer; - - constructor(opts?: TransformOptions) { - super(opts); - this.hasher = createHash('sha256'); - this.finalHash = Buffer.alloc(0); - } - - _transform(chunk: Buffer, enc: BufferEncoding, cb: TransformCallback) { - this.hasher.update(chunk); - cb(null, chunk); - } - - _flush(cb: (err: Error | null) => void) { - return this.hasher.end(cb); - } - - readHash() { - if (!this.finalHash.length) { - this.finalHash = this.hasher.read(); - } - - return this.finalHash; - } - - getFileHash() { - if (!this.finalHash.length) { - this.readHash(); - } - - return createHash('ripemd160').update(this.finalHash).digest(); - } - - getFsKey() { - if (!this.finalHash.length) { - this.readHash(); - } - - const fileHash = this.getFileHash(); - - return createHash('ripemd160').update(fileHash).digest(); - } -} - -let app: express.Application; -let server: Server; -const testServerPort = 54321; - -export function getContractNegotiated(hash = '', token = '') { - return { - operation: 'PUSH', - farmer: { - userAgent: '', - lastSeen: 0, - nodeID: '', - protocol: '', - address: 'localhost', - port: testServerPort, - }, - hash, - token, - }; -} - -type EndpointHandler = (req: express.Request, res: express.Response) => void; - -function startServer(cb: () => void, customGet?: EndpointHandler) { - app = express(); - server = app.listen(testServerPort, () => { - cb(); - }); - - app.get( - '/shards/:shardHash', - customGet - ? customGet - : (req, res) => { - res.status(200).send(); - }, - ); - - app.post('/shards/:hash', (req, res) => { - const hasher = new HashStream(); - - req - .pipe(hasher) - .on('data', () => {}) - .on('error', (err) => { - console.error('ERROR HASING SHARD', err); - - res.status(500).send({ err }); - }) - .on('end', () => { - const fileHash = hasher.getFileHash().toString('hex'); - - if (req.params.hash !== fileHash) { - return res.status(400).send({ error: 'Calculated hash does not match the expected result' }); - } - - return res.status(200).send({ result: 'Consignment completed' }); - }); - }); -} - -function closeServer(cb: () => void) { - server.close(() => { - cb(); - }); -} - -type CloseServerFunction = () => Promise; - -const startApp = (customGet?: EndpointHandler) => new Promise((r) => startServer(() => r(null), customGet)); -const closeApp = () => new Promise((r) => closeServer(() => r(null))); - -export async function spawnFarmer(customGet?: EndpointHandler): Promise { - await startApp(customGet); - - return closeApp; -} diff --git a/tests/mocks/index.ts b/tests/mocks/index.ts deleted file mode 100644 index bfd39fa5..00000000 --- a/tests/mocks/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './shardMeta.mock'; -export * from './logger.mock'; -export * from './farmer.mock'; -export * from './bridge.mock'; diff --git a/tests/mocks/logger.mock.ts b/tests/mocks/logger.mock.ts deleted file mode 100644 index 1925146a..00000000 --- a/tests/mocks/logger.mock.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { logger } from '../../src/lib/utils/logger'; - -export function getSilentLogger() { - logger.silent = true; - - return logger; -} diff --git a/tests/mocks/shardMeta.mock.ts b/tests/mocks/shardMeta.mock.ts deleted file mode 100644 index f63b40e9..00000000 --- a/tests/mocks/shardMeta.mock.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ShardMeta } from '../../src/lib/models'; - -const shardMeta: ShardMeta = { - challenges_as_str: [], - hash: '', - index: 0, - parity: false, - size: 0, - tree: [], -}; - -export function generateShardMeta(): ShardMeta { - return shardMeta; -} diff --git a/tests/services/api.test.ts b/tests/services/api.test.ts index 8b8d46a2..e8dd384c 100644 --- a/tests/services/api.test.ts +++ b/tests/services/api.test.ts @@ -1,86 +1,18 @@ -import { generateShardMeta } from '../mocks'; import { Bridge } from '../../src/services/api'; -import { Methods } from '../../src/lib'; -import { AppDetails } from '@internxt/sdk/dist/shared'; - -const bridgeUrl = 'https://api.internxt.com'; -const bridgePass = 'bridgePass'; -const bridgeUser = 'fake@user.com'; -const appDetails: AppDetails = { clientName: 'clientName', clientVersion: '1.0.0' }; -const bridge = new Bridge({ bridgePass, bridgeUser, bridgeUrl, appDetails }); describe('services/api.ts', () => { describe('Bridge', () => { describe('# constructor()', () => { it('Should throw if bridge url is empty', () => { expect(() => { - new Bridge({ bridgeUser: 'fake@user.com', bridgePass: 'fakePass', bridgeUrl: '', appDetails }); + new Bridge({ + bridgeUser: 'fake@user.com', + bridgePass: 'fakePass', + bridgeUrl: '', + appDetails: { clientName: 'clientName', clientVersion: '1.0.0' }, + }); }).to.throw('Empty bridge url'); }); }); - - describe('# getBucketById()', () => { - it('Should GET /buckets/:bucketId', () => { - const bucketId = 'fakeBucketId'; - const expectedUrl = bridgeUrl + '/buckets/' + bucketId; - const request = bridge.getBucketById(bucketId); - - expect(request.targetUrl).to.equal(expectedUrl); - }); - }); - - describe('# getFileById()', () => { - it('Should GET /buckets/:bucketId/file-ids/:fileId', () => { - const bucketId = 'fakeBucketId'; - const fileId = 'fakeFileId'; - const expectedUrl = bridgeUrl + '/buckets/' + bucketId + '/file-ids/' + fileId; - - const request = bridge.getFileById(bucketId, fileId); - - expect(request.targetUrl).to.equal(expectedUrl); - expect(request.method).to.equal(Methods.Get); - }); - }); - - describe('# createFrame()', () => { - it('Should POST /frames', () => { - const expectedUrl = bridgeUrl + '/frames'; - const request = bridge.createFrame(); - - expect(request.targetUrl).to.equal(expectedUrl); - expect(request.method).to.equal(Methods.Post); - }); - }); - - describe('# createEntryFromFrame()', () => { - it('Should POST /buckets/:bucketId/files', () => { - const bucketId = 'bucketId'; - const path = `buckets/${bucketId}/files`; - const expectedUrl = bridgeUrl + '/' + path; - - const request = bridge.createEntryFromFrame(bucketId, { - filename: '', - frame: '', - hmac: { type: 'sha512', value: 'meloinvento' }, - index: '0', - }); - - expect(request.targetUrl).to.equal(expectedUrl); - expect(request.method).to.equal(Methods.Post); - }); - }); - - describe('# addShardToFrame()', () => { - it('Should PUT /frames/:frameId', () => { - const frameId = 'frameId'; - const path = `frames/${frameId}`; - const expectedUrl = bridgeUrl + '/' + path; - - const request = bridge.addShardToFrame(frameId, generateShardMeta()); - - expect(request.targetUrl).to.equal(expectedUrl); - expect(request.method).to.equal(Methods.Put); - }); - }); }); }); diff --git a/yarn.lock b/yarn.lock index f35dc06e..2e96ebeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -285,11 +285,6 @@ eslint-config-prettier "^10.1.8" typescript-eslint "^8.57.1" -"@internxt/lib@1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@internxt/lib/-/lib-1.4.2.tgz#fd178ff4e71381509648e469ec8b574082cd6eb2" - integrity sha512-3eYwSSl3NMwCyq+W8QkOrV0V0tCAcDfzmo8JH6BwU+rd4fMmJvriOnbFu9cKLJmXLk4GhCDEL5cr8rpFt4cAZQ== - "@internxt/prettier-config@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@internxt/prettier-config/-/prettier-config-2.0.1.tgz#a25e7a16f62a990aed2bd1804e04140cc8c33e77" @@ -713,14 +708,6 @@ resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.9.tgz#70c43999e0c3dd2100e7007b10e55a890d79670d" integrity sha512-5Jx7ifieGrZq5qtKfZfQ/7o43eC7rkAURHEZYa4DUwydToHLgMdIpMseNmYvf+BdgIDCARo+LxlBz9LDAXAwNg== -"@types/body-parser@*": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" - integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - "@types/chai@^5.2.2": version "5.2.3" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" @@ -729,13 +716,6 @@ "@types/deep-eql" "*" assertion-error "^2.0.1" -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - "@types/deep-eql@*": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" @@ -756,42 +736,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== -"@types/express-serve-static-core@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz#1a77faffee9572d39124933259be2523837d7eaa" - integrity sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" - integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "^2" - -"@types/http-errors@*": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" - integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/node@*": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" - integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== - dependencies: - undici-types "~7.18.0" - "@types/node@^25.6.0": version "25.6.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-25.6.0.tgz#4e09bad9b469871f2d0f68140198cbd714f4edca" @@ -799,31 +748,6 @@ dependencies: undici-types "~7.19.0" -"@types/qs@*": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" - integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/send@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" - integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== - dependencies: - "@types/node" "*" - -"@types/serve-static@^2": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" - integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/triple-beam@^1.3.2": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" @@ -1001,14 +925,6 @@ convert-source-map "^2.0.0" tinyrainbow "^3.1.0" -accepts@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" - integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== - dependencies: - mime-types "^3.0.0" - negotiator "^1.0.0" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1099,21 +1015,6 @@ bip39@^3.1.0: dependencies: "@noble/hashes" "^1.2.0" -body-parser@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.2.tgz#1a32cdb966beaf68de50a9dfbe5b58f83cb8890c" - integrity sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA== - dependencies: - bytes "^3.1.2" - content-type "^1.0.5" - debug "^4.4.3" - http-errors "^2.0.0" - iconv-lite "^0.7.0" - on-finished "^2.4.1" - qs "^6.14.1" - raw-body "^3.0.1" - type-is "^2.0.1" - brace-expansion@^5.0.2: version "5.0.4" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" @@ -1139,11 +1040,6 @@ browserslist@^4.24.0: node-releases "^2.0.27" update-browserslist-db "^1.2.0" -bytes@^3.1.2, bytes@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" @@ -1152,14 +1048,6 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -call-bound@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - caniuse-lite@^1.0.30001759: version "1.0.30001779" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz#75e4941d406928ba00c8d7a3ddda0b2cb90d7474" @@ -1224,31 +1112,11 @@ commander@^14.0.3: resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== -content-disposition@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" - integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== - -content-type@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" - integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== - -cookie@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -1263,7 +1131,7 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.4.0, debug@^4.4.3: +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -1280,11 +1148,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - detect-libc@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" @@ -1309,11 +1172,6 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - electron-to-chromium@^1.5.263: version "1.5.313" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" @@ -1329,11 +1187,6 @@ enabled@2.0.x: resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -encodeurl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - environment@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" @@ -1376,11 +1229,6 @@ escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -1487,11 +1335,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - eventemitter3@^5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" @@ -1502,40 +1345,6 @@ expect-type@^1.3.0: resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== -express@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" - integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== - dependencies: - accepts "^2.0.0" - body-parser "^2.2.1" - content-disposition "^1.0.0" - content-type "^1.0.5" - cookie "^0.7.1" - cookie-signature "^1.2.1" - debug "^4.4.0" - depd "^2.0.0" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - finalhandler "^2.1.0" - fresh "^2.0.0" - http-errors "^2.0.0" - merge-descriptors "^2.0.0" - mime-types "^3.0.0" - on-finished "^2.4.1" - once "^1.4.0" - parseurl "^1.3.3" - proxy-addr "^2.0.7" - qs "^6.14.0" - range-parser "^1.2.1" - router "^2.2.0" - send "^1.1.0" - serve-static "^2.2.0" - statuses "^2.0.1" - type-is "^2.0.1" - vary "^1.1.2" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1575,18 +1384,6 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" -finalhandler@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" - integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== - dependencies: - debug "^4.4.0" - encodeurl "^2.0.0" - escape-html "^1.0.3" - on-finished "^2.4.1" - parseurl "^1.3.3" - statuses "^2.0.1" - find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -1636,16 +1433,6 @@ formatly@^0.3.0: dependencies: fd-package-json "^2.0.0" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" - integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== - fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -1666,7 +1453,7 @@ get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1, get-east-asian-width@^ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7" integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -1747,29 +1534,11 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" - integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== - dependencies: - depd "~2.0.0" - inherits "~2.0.4" - setprototypeof "~1.2.0" - statuses "~2.0.2" - toidentifier "~1.0.1" - husky@^9.1.7: version "9.1.7" resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== -iconv-lite@^0.7.0, iconv-lite@~0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" - integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -1785,16 +1554,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inherits@^2.0.3, inherits@~2.0.4: +inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -1814,11 +1578,6 @@ is-glob@^4.0.0, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -2098,26 +1857,11 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== -media-typer@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" - integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== - -merge-descriptors@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" - integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-db@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - mime-types@^2.1.12: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -2125,13 +1869,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mime-types@^3.0.0, mime-types@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" - integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== - dependencies: - mime-db "^1.54.0" - mimic-function@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" @@ -2176,40 +1913,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" - integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== - node-releases@^2.0.27: version "2.0.36" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - obug@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== -on-finished@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - one-time@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" @@ -2309,11 +2022,6 @@ package-json-from-dist@^1.0.1: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -parseurl@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -2332,11 +2040,6 @@ path-scurry@^2.0.2: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" - integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== - pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" @@ -2371,14 +2074,6 @@ prettier@^3.8.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.3.tgz#560f2de55bf01b4c0503bc629d5df99b9a1d09b0" integrity sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw== -proxy-addr@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - proxy-from-env@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" @@ -2389,28 +2084,6 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.14.0, qs@^6.14.1: - version "6.15.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" - integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== - dependencies: - side-channel "^1.1.0" - -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" - integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== - dependencies: - bytes "~3.1.2" - http-errors "~2.0.1" - iconv-lite "~0.7.0" - unpipe "~1.0.0" - readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -2470,17 +2143,6 @@ rolldown@1.0.0-rc.15: "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.15" "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.15" -router@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" - integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== - dependencies: - debug "^4.4.0" - depd "^2.0.0" - is-promise "^4.0.0" - parseurl "^1.3.3" - path-to-regexp "^8.0.0" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2491,11 +2153,6 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -2506,38 +2163,6 @@ semver@^7.5.3, semver@^7.7.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== -send@^1.1.0, send@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" - integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== - dependencies: - debug "^4.4.3" - encodeurl "^2.0.0" - escape-html "^1.0.3" - etag "^1.8.1" - fresh "^2.0.0" - http-errors "^2.0.1" - mime-types "^3.0.2" - ms "^2.1.3" - on-finished "^2.4.1" - range-parser "^1.2.1" - statuses "^2.0.2" - -serve-static@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9" - integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== - dependencies: - encodeurl "^2.0.0" - escape-html "^1.0.3" - parseurl "^1.3.3" - send "^1.2.0" - -setprototypeof@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2550,46 +2175,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" @@ -2636,11 +2221,6 @@ stackback@0.0.2: resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - std-env@^4.0.0-rc.1: version "4.0.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.0.0.tgz#ba3dc31c3a46bc5ba21138aa20a6a4ceb5bb9b7e" @@ -2735,11 +2315,6 @@ tinyrainbow@^3.1.0: resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== -toidentifier@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - triple-beam@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" @@ -2781,15 +2356,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-is@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" - integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== - dependencies: - content-type "^1.0.5" - media-typer "^1.1.0" - mime-types "^3.0.0" - typescript-eslint@^8.57.1: version "8.59.2" resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.59.2.tgz#e24b4f7232e20112e40572dba162a829a738ce98" @@ -2810,11 +2376,6 @@ unbash@^3.0.0: resolved "https://registry.yarnpkg.com/unbash/-/unbash-3.0.0.tgz#57efd0217212ee4abcb820372c87b64ad3af687d" integrity sha512-FeFPZ/WFT0mbRCuydiZzpPFlrYN8ZUpphQKoq4EeElVIYjYyGzPMxQR/simUwCOJIyVhpFk4RbtyO7RuMpMnHA== -undici-types@~7.18.0: - version "7.18.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" - integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== - undici-types@~7.19.0: version "7.19.2" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a" @@ -2825,11 +2386,6 @@ undici@^7.25.0: resolved "https://registry.yarnpkg.com/undici/-/undici-7.25.0.tgz#7d72fc429a0421769ca2966fd07cac875c85b781" integrity sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ== -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - update-browserslist-db@^1.2.0: version "1.2.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" @@ -2855,11 +2411,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - "vite@^6.0.0 || ^7.0.0 || ^8.0.0": version "8.0.8" resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.8.tgz#4e26a9bba77c4b27a00b6b10100a7dab48d546a3" @@ -2968,11 +2519,6 @@ wrap-ansi@^9.0.0: string-width "^7.0.0" strip-ansi "^7.1.0" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" From 870a793f80affa31cf3b9719276ffdebe49279a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jim=C3=A9nez=20Rivera?= Date: Fri, 15 May 2026 11:58:11 +0200 Subject: [PATCH 2/4] Update api.ts --- src/services/api.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/services/api.ts b/src/services/api.ts index 7886efc9..506eca66 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -13,51 +13,56 @@ export interface CreateFileTokenResponse { } export type GetDownloadLinksResponse = { fileId: string; link: string; index: string }[]; +class InxtApi { + protected config: EnvironmentConfig; + + constructor(config: EnvironmentConfig) { + this.config = config; + this.config.bridgeUrl = config.bridgeUrl ?? ''; + } +} + class EmptyBridgeUrlError extends Error { constructor() { super('Empty bridge url'); } } -export class Bridge { - protected config: EnvironmentConfig; - protected url: string; - +export class Bridge extends InxtApi { constructor(config: EnvironmentConfig) { if (!config.bridgeUrl) { throw new EmptyBridgeUrlError(); } - this.config = config; - this.url = config.bridgeUrl; + super(config); } createFileToken(bucketId: string, fileId: string, operation: 'PUSH' | 'PULL'): INXTRequest { - const targetUrl = `${this.url}/buckets/${bucketId}/tokens`; + const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/tokens`; return new INXTRequest(this.config, Methods.Post, targetUrl, { data: { operation, file: fileId } }, false); } renameFile(bucketId: string, fileId: string, newName: string): INXTRequest { - const targetUrl = `${this.url}/buckets/${bucketId}/files/${fileId}`; + const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/files/${fileId}`; return new INXTRequest(this.config, Methods.Patch, targetUrl, { data: { name: newName } }); } createBucket(bucketName: string) { - const targetUrl = `${this.url}/buckets`; + const targetUrl = `${this.config.bridgeUrl}/buckets`; return new INXTRequest(this.config, Methods.Post, targetUrl, { data: { name: bucketName } }); } deleteBucket(bucketId: string) { - const targetUrl = `${this.url}/buckets/${bucketId}`; + const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}`; return new INXTRequest(this.config, Methods.Delete, targetUrl, {}); } getDownloadLinks(bucketId: string, fileIds: string[]) { - const targetUrl = `${this.url}/buckets/${bucketId}/bulk-files?fileIds=${fileIds.join(',')}`; + const targetUrl = `${this.config.bridgeUrl}/buckets/${bucketId}/bulk-files?fileIds=${fileIds.join(',')}`; return new INXTRequest(this.config, Methods.Get, targetUrl, {}); } From 06b005dcdd8c5bcc8969090e41532d13d2d35519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jim=C3=A9nez=20Rivera?= Date: Fri, 15 May 2026 11:59:03 +0200 Subject: [PATCH 3/4] Update api.ts --- src/services/api.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/api.ts b/src/services/api.ts index 506eca66..7bb305ce 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -15,10 +15,11 @@ export type GetDownloadLinksResponse = { fileId: string; link: string; index: st class InxtApi { protected config: EnvironmentConfig; + protected url: string; constructor(config: EnvironmentConfig) { this.config = config; - this.config.bridgeUrl = config.bridgeUrl ?? ''; + this.url = config.bridgeUrl ?? ''; } } @@ -30,10 +31,9 @@ class EmptyBridgeUrlError extends Error { export class Bridge extends InxtApi { constructor(config: EnvironmentConfig) { - if (!config.bridgeUrl) { + if (config.bridgeUrl === '') { throw new EmptyBridgeUrlError(); } - super(config); } From 3a7979e3e6425fb23bc41da9f54d16948d5c6bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jim=C3=A9nez=20Rivera?= Date: Fri, 15 May 2026 12:17:06 +0200 Subject: [PATCH 4/4] Update crypto.ts --- src/lib/utils/crypto/crypto.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/lib/utils/crypto/crypto.ts b/src/lib/utils/crypto/crypto.ts index 93313a93..45470f10 100644 --- a/src/lib/utils/crypto/crypto.ts +++ b/src/lib/utils/crypto/crypto.ts @@ -23,12 +23,6 @@ export async function GenerateBucketKey(mnemonic: string, bucketId: string): Pro return GetDeterministicKey(seed, bucketId).toString('hex').slice(0, 64); } -// export async function GenerateFileKey(mnemonic: string, bucketId: string, index: Buffer): Promise { -// const bucketKey = await GenerateBucketKey(mnemonic, bucketId); - -// return GetDeterministicKey(bucketKey.slice(0, 32), index.toString('hex')).slice(0, 32); -// } - export async function EncryptFilename(mnemonic: string, bucketId: string, filename: string): Promise { const bucketKey = await GenerateBucketKey(mnemonic, bucketId);