From e587b5b8acde15d2d912a0d5bb9cd8c35c988ac6 Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Wed, 18 Sep 2024 17:54:12 +0200 Subject: [PATCH 1/8] feat: reworked algorithm calculation of withdrawal frame validators --- .../execution-provider.service.ts | 13 +++++- src/http/validators/validators.service.ts | 2 +- .../get-validator-withdrawal-timestamp.ts | 40 +++++++++++++++++++ src/jobs/validators/validators.constants.ts | 2 + src/jobs/validators/validators.service.ts | 28 ++++++++++--- .../validators/validators-cache.service.ts | 4 +- src/storage/validators/validators.service.ts | 21 +++++++--- .../calculate-frame-by-validator-balances.ts | 16 +------- src/waiting-time/waiting-time.service.spec.ts | 2 +- src/waiting-time/waiting-time.service.ts | 8 +--- 10 files changed, 99 insertions(+), 37 deletions(-) create mode 100644 src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts diff --git a/src/common/execution-provider/execution-provider.service.ts b/src/common/execution-provider/execution-provider.service.ts index d1e87a2..c9b7980 100644 --- a/src/common/execution-provider/execution-provider.service.ts +++ b/src/common/execution-provider/execution-provider.service.ts @@ -1,10 +1,15 @@ import { SimpleFallbackJsonRpcBatchProvider } from '@lido-nestjs/execution'; import { CHAINS } from '@lido-nestjs/constants'; import { Injectable } from '@nestjs/common'; +import { ethers } from 'ethers'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class ExecutionProviderService { - constructor(protected readonly provider: SimpleFallbackJsonRpcBatchProvider) {} + constructor( + protected readonly provider: SimpleFallbackJsonRpcBatchProvider, + protected readonly configService: ConfigService, + ) {} /** * Returns network name @@ -22,4 +27,10 @@ export class ExecutionProviderService { const { chainId } = await this.provider.getNetwork(); return chainId; } + + public async getLatestWithdrawals(): Promise> { + const provider = new ethers.JsonRpcProvider(this.configService.get('EL_RPC_URLS')[0]); + const block = await provider.send('eth_getBlockByNumber', ['latest', false]); + return block.withdrawals; + } } diff --git a/src/http/validators/validators.service.ts b/src/http/validators/validators.service.ts index 44c7e70..5c2b82f 100644 --- a/src/http/validators/validators.service.ts +++ b/src/http/validators/validators.service.ts @@ -15,7 +15,7 @@ export class ValidatorsService { const lastUpdatedAt = this.validatorsServiceStorage.getLastUpdate(); const maxExitEpoch = Number(this.validatorsServiceStorage.getMaxExitEpoch()); const frameBalancesBigNumber = this.validatorsServiceStorage.getFrameBalances(); - const totalValidators = this.validatorsServiceStorage.getTotal(); + const totalValidators = this.validatorsServiceStorage.getActiveValidatorsCount(); const currentFrame = this.genesisTimeService.getFrameOfEpoch(this.genesisTimeService.getCurrentEpoch()); const frameBalances = Object.keys(frameBalancesBigNumber).reduce((acc, item) => { diff --git a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts new file mode 100644 index 0000000..358ec7b --- /dev/null +++ b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts @@ -0,0 +1,40 @@ +import { BigNumber } from '@ethersproject/bignumber'; +import { WITHDRAWALS_VALIDATORS_PER_SLOT } from '../validators.constants'; +import { SECONDS_PER_SLOT } from '../../../common/genesis-time'; + +/* +algorithm: +1. cursor goes from 0 to last validator index in queue +2. when cursor comes to withdrawable validator, it withdraws eth from it +3. cursor can withdraw only 16 validators per slot +4. percentOfActiveValidators is used to get rid of inactive validators in queue + and make more accurate calculation + + +examples: +1. if current cursor is 50 and total validators 100, + then if we want to know when will be withdrawn validator with index 75 + (75 - 50) / 16 = 2 slots + +2. if current cursor is 50 and total validators 100, + then if we want to know when will be withdrawn validator with index 25 + (cursor will go to the end and start from 0) + (100 - 50 + 25) / 16 = 5 slots +*/ +export function getValidatorWithdrawalTimestamp( + index: BigNumber, + lastWithdrawalValidatorIndex: BigNumber, + activeValidatorCount: number, + totalValidatorsCount: number, +) { + const diff = index.sub(lastWithdrawalValidatorIndex); + const percentOfActiveValidators = activeValidatorCount / totalValidatorsCount; + const lengthQueueValidators = diff.lt(0) + ? BigNumber.from(activeValidatorCount).sub(lastWithdrawalValidatorIndex.add(index)) + : diff; + + const slots = lengthQueueValidators.div(BigNumber.from(WITHDRAWALS_VALIDATORS_PER_SLOT)); + const seconds = slots.toNumber() * SECONDS_PER_SLOT * percentOfActiveValidators; + console.log(`${index.toNumber()} | ${seconds / (60 * 60)} hours`); + return Date.now() + seconds * 1000; +} diff --git a/src/jobs/validators/validators.constants.ts b/src/jobs/validators/validators.constants.ts index db5305f..496e6f6 100644 --- a/src/jobs/validators/validators.constants.ts +++ b/src/jobs/validators/validators.constants.ts @@ -9,3 +9,5 @@ export const ORACLE_REPORTS_CRON_BY_CHAIN_ID = { [CHAINS.Mainnet]: '30 4/8 * * *', // 4 utc, 12 utc, 20 utc [CHAINS.Holesky]: CronExpression.EVERY_3_HOURS, // happens very often, not necessary sync in testnet }; + +export const WITHDRAWALS_VALIDATORS_PER_SLOT = 16; diff --git a/src/jobs/validators/validators.service.ts b/src/jobs/validators/validators.service.ts index 6ed224a..8f0bb4c 100644 --- a/src/jobs/validators/validators.service.ts +++ b/src/jobs/validators/validators.service.ts @@ -4,6 +4,7 @@ import { LOGGER_PROVIDER, LoggerService } from 'common/logger'; import { JobService } from 'common/job'; import { ConfigService } from 'common/config'; import { ConsensusProviderService } from 'common/consensus-provider'; +import { ExecutionProviderService } from 'common/execution-provider'; import { GenesisTimeService } from 'common/genesis-time'; import { OneAtTime } from '@lido-nestjs/decorators'; import { ValidatorsStorageService } from 'storage'; @@ -18,6 +19,7 @@ import { ValidatorsCacheService } from 'storage/validators/validators-cache.serv import { CronExpression } from '@nestjs/schedule'; import { PrometheusService } from '../../common/prometheus'; import { stringifyFrameBalances } from '../../common/validators/strigify-frame-balances'; +import { getValidatorWithdrawalTimestamp } from './utils/get-validator-withdrawal-timestamp'; export class ValidatorsService { static SERVICE_LOG_NAME = 'validators'; @@ -27,6 +29,7 @@ export class ValidatorsService { protected readonly prometheusService: PrometheusService, protected readonly consensusProviderService: ConsensusProviderService, + protected readonly executionProviderService: ExecutionProviderService, protected readonly configService: ConfigService, protected readonly jobService: JobService, protected readonly validatorsStorageService: ValidatorsStorageService, @@ -65,12 +68,12 @@ export class ValidatorsService { const data: ResponseValidatorsData = await processValidatorsStream(stream); const currentEpoch = this.genesisTimeService.getCurrentEpoch(); - let totalValidators = 0; + let activeValidatorCount = 0; let latestEpoch = `${currentEpoch + MAX_SEED_LOOKAHEAD + 1}`; for (const item of data) { if (['active_ongoing', 'active_exiting', 'active_slashed'].includes(item.status)) { - totalValidators++; + activeValidatorCount++; } if (item.validator.exit_epoch !== FAR_FUTURE_EPOCH.toString()) { @@ -81,7 +84,9 @@ export class ValidatorsService { await unblock(); } - this.validatorsStorageService.setTotal(totalValidators); + + this.validatorsStorageService.setActiveValidatorsCount(activeValidatorCount); + this.validatorsStorageService.setTotalValidatorsCount(data.length); this.validatorsStorageService.setMaxExitEpoch(latestEpoch); this.validatorsStorageService.setLastUpdate(Math.floor(Date.now() / 1000)); @@ -92,7 +97,7 @@ export class ValidatorsService { const currentFrame = this.genesisTimeService.getFrameOfEpoch(this.genesisTimeService.getCurrentEpoch()); this.logger.log('End update validators', { service: ValidatorsService.SERVICE_LOG_NAME, - totalValidators, + activeValidatorCount, latestEpoch, frameBalances: stringifyFrameBalances(frameBalances), currentFrame, @@ -113,12 +118,18 @@ export class ValidatorsService { protected async getLidoValidatorsWithdrawableBalances(validators: Validator[]) { const keysData = await this.lidoKeys.fetchLidoKeysData(); const lidoValidators = await this.lidoKeys.getLidoValidatorsByKeys(keysData.data, validators); - + const lastWithdrawalValidatorIndex = await this.getLastWithdrawalValidatorIndex(); const frameBalances = {}; for (const item of lidoValidators) { if (item.validator.withdrawable_epoch !== FAR_FUTURE_EPOCH.toString() && BigNumber.from(item.balance).gt(0)) { - const frame = this.genesisTimeService.getFrameOfEpoch(Number(item.validator.withdrawable_epoch)); + const withdrawalTimestamp = getValidatorWithdrawalTimestamp( + BigNumber.from(item.index), + lastWithdrawalValidatorIndex, + this.validatorsStorageService.getActiveValidatorsCount(), + this.validatorsStorageService.getTotalValidatorsCount(), + ); + const frame = this.genesisTimeService.getFrameByTimestamp(withdrawalTimestamp) + 1; const prevBalance = frameBalances[frame]; const balance = parseGweiToWei(item.balance); frameBalances[frame] = prevBalance ? prevBalance.add(balance) : BigNumber.from(balance); @@ -129,4 +140,9 @@ export class ValidatorsService { return frameBalances; } + + protected async getLastWithdrawalValidatorIndex() { + const withdrawals = await this.executionProviderService.getLatestWithdrawals(); + return BigNumber.from(withdrawals[withdrawals.length - 1].validatorIndex); + } } diff --git a/src/storage/validators/validators-cache.service.ts b/src/storage/validators/validators-cache.service.ts index a703ff5..9a7182d 100644 --- a/src/storage/validators/validators-cache.service.ts +++ b/src/storage/validators/validators-cache.service.ts @@ -50,7 +50,7 @@ export class ValidatorsCacheService { return; } - this.validatorsStorage.setTotal(Number(data[0])); + this.validatorsStorage.setActiveValidatorsCount(Number(data[0])); this.validatorsStorage.setMaxExitEpoch(data[1]); this.validatorsStorage.setLastUpdate(Number(data[2])); this.validatorsStorage.setFrameBalances(this.parseFrameBalances(data[3])); @@ -73,7 +73,7 @@ export class ValidatorsCacheService { await mkdir(ValidatorsCacheService.CACHE_DIR, { recursive: true }); const data = [ - this.validatorsStorage.getTotal(), + this.validatorsStorage.getActiveValidatorsCount(), this.validatorsStorage.getMaxExitEpoch(), this.validatorsStorage.getLastUpdate(), stringifyFrameBalances(this.validatorsStorage.getFrameBalances()), diff --git a/src/storage/validators/validators.service.ts b/src/storage/validators/validators.service.ts index 72ce270..d17cd2b 100644 --- a/src/storage/validators/validators.service.ts +++ b/src/storage/validators/validators.service.ts @@ -4,7 +4,8 @@ import { BigNumber } from '@ethersproject/bignumber'; @Injectable() export class ValidatorsStorageService { protected maxExitEpoch: string; - protected total: number; + protected activeValidatorsCount: number; + protected totalValidatorsCount: number; protected lastUpdate: number; protected frameBalances: Record; @@ -20,8 +21,8 @@ export class ValidatorsStorageService { * Get total validators * @returns total validators number */ - public getTotal(): number { - return this.total; + public getActiveValidatorsCount(): number { + return this.activeValidatorsCount; } /** @@ -42,10 +43,10 @@ export class ValidatorsStorageService { /** * Updates total validators - * @param total - total validators number + * @param activeValidatorsCount - total validators number */ - public setTotal(total: number): void { - this.total = total; + public setActiveValidatorsCount(activeValidatorsCount: number): void { + this.activeValidatorsCount = activeValidatorsCount; } /** @@ -71,4 +72,12 @@ export class ValidatorsStorageService { public setFrameBalances(frameBalances: Record): void { this.frameBalances = frameBalances; } + + public setTotalValidatorsCount(totalValidatorsCount: number) { + this.totalValidatorsCount = totalValidatorsCount; + } + + public getTotalValidatorsCount() { + return this.totalValidatorsCount; + } } diff --git a/src/waiting-time/utils/calculate-frame-by-validator-balances.ts b/src/waiting-time/utils/calculate-frame-by-validator-balances.ts index 002fd35..aa0967c 100644 --- a/src/waiting-time/utils/calculate-frame-by-validator-balances.ts +++ b/src/waiting-time/utils/calculate-frame-by-validator-balances.ts @@ -1,18 +1,14 @@ import { BigNumber } from '@ethersproject/bignumber'; -import { calculateSweepingMean } from './calculate-sweeping-mean'; - type calculateFrameByValidatorBalancesArgs = { unfinilized: BigNumber; rewardsPerFrame: BigNumber; currentFrame: number; - totalValidators: number; frameBalances: Record; - epochPerFrame: number; }; export const calculateFrameByValidatorBalances = (args: calculateFrameByValidatorBalancesArgs): number | null => { - const { frameBalances, unfinilized, totalValidators, epochPerFrame, rewardsPerFrame, currentFrame } = args; + const { frameBalances, unfinilized, rewardsPerFrame, currentFrame } = args; let unfinalizedAmount = unfinilized; let lastFrame = BigNumber.from(currentFrame); @@ -38,13 +34,5 @@ export const calculateFrameByValidatorBalances = (args: calculateFrameByValidato } } - if (result === null) return null; - - const sweepingMean = calculateSweepingMean(totalValidators).toNumber(); - const framesOfSweepingMean = Math.ceil(sweepingMean / epochPerFrame); - - const resultFrame = result.add(framesOfSweepingMean).toNumber(); - - // If withdrawable_epoch is less than current frame, should return next frame - return resultFrame < currentFrame ? currentFrame + 1 : resultFrame; + return result === null ? null : result.toNumber(); }; diff --git a/src/waiting-time/waiting-time.service.spec.ts b/src/waiting-time/waiting-time.service.spec.ts index 6b0a80f..94fc985 100644 --- a/src/waiting-time/waiting-time.service.spec.ts +++ b/src/waiting-time/waiting-time.service.spec.ts @@ -142,7 +142,7 @@ describe('WaitingTimeService', () => { jest.spyOn(genesisTimeService, 'getFrameByTimestamp').mockImplementation(getFrameByTimestampMock); jest.spyOn(genesisTimeService, 'timeToWithdrawalFrame').mockImplementation(timeToWithdrawalFrameMock); jest.spyOn(rewardsStorage, 'getRewardsPerFrame').mockReturnValue(rewardsPerFrame); - jest.spyOn(validatorsStorage, 'getTotal').mockReturnValue(10000); + jest.spyOn(validatorsStorage, 'getActiveValidatorsCount').mockReturnValue(10000); jest.spyOn(validatorsStorage, 'getFrameBalances').mockReturnValue({}); jest.spyOn(service, 'getFrameIsBunker').mockReturnValue(null); }); diff --git a/src/waiting-time/waiting-time.service.ts b/src/waiting-time/waiting-time.service.ts index bf64509..a971c23 100644 --- a/src/waiting-time/waiting-time.service.ts +++ b/src/waiting-time/waiting-time.service.ts @@ -221,14 +221,10 @@ export class WaitingTimeService { // loop over all known frames with balances of withdrawing validators const frameBalances = this.validators.getFrameBalances(); - const epochPerFrame = this.contractConfig.getEpochsPerFrame(); - const totalValidators = this.validators.getTotal(); const rewardsPerFrame = this.rewardsStorage.getRewardsPerFrame(); const valueFrameValidatorsBalance = calculateFrameByValidatorBalances({ unfinilized: unfinalized.sub(fullBuffer), frameBalances, - epochPerFrame, - totalValidators, currentFrame, rewardsPerFrame, }); @@ -263,7 +259,7 @@ export class WaitingTimeService { latestEpoch: string, ): Promise { // latest epoch of most late to exit validators - const totalValidators = this.validators.getTotal(); + const totalValidators = this.validators.getActiveValidatorsCount(); const churnLimit = Math.max(MIN_PER_EPOCH_CHURN_LIMIT, totalValidators / CHURN_LIMIT_QUOTIENT); const epochPerFrame = this.contractConfig.getEpochsPerFrame(); @@ -466,7 +462,7 @@ export class WaitingTimeService { public calculateRequestTimeSimple(unfinalizedETH: BigNumber): number { const currentEpoch = this.genesisTimeService.getCurrentEpoch(); const latestEpoch = this.validators.getMaxExitEpoch(); - const totalValidators = this.validators.getTotal(); + const totalValidators = this.validators.getActiveValidatorsCount(); const churnLimit = Math.max(MIN_PER_EPOCH_CHURN_LIMIT, totalValidators / CHURN_LIMIT_QUOTIENT); From 46935df2bb3bbad288be441191e256edaaa6cb2d Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Thu, 19 Sep 2024 11:21:01 +0200 Subject: [PATCH 2/8] test: updated tests --- src/waiting-time/waiting-time.service.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/waiting-time/waiting-time.service.spec.ts b/src/waiting-time/waiting-time.service.spec.ts index 94fc985..aa25bc7 100644 --- a/src/waiting-time/waiting-time.service.spec.ts +++ b/src/waiting-time/waiting-time.service.spec.ts @@ -104,7 +104,7 @@ describe('WaitingTimeService', () => { { provide: ValidatorsStorageService, useValue: { - getTotal: jest.fn(), + getActiveValidatorsCount: jest.fn(), getFrameBalances: jest.fn(), }, }, From b15c5af9b1b1bb21b9dec09c036b4786ee733b68 Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Thu, 19 Sep 2024 11:27:04 +0200 Subject: [PATCH 3/8] fix: remove console logs --- .../validators/utils/get-validator-withdrawal-timestamp.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts index 358ec7b..e5eca8d 100644 --- a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts +++ b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts @@ -30,11 +30,11 @@ export function getValidatorWithdrawalTimestamp( const diff = index.sub(lastWithdrawalValidatorIndex); const percentOfActiveValidators = activeValidatorCount / totalValidatorsCount; const lengthQueueValidators = diff.lt(0) - ? BigNumber.from(activeValidatorCount).sub(lastWithdrawalValidatorIndex.add(index)) + ? BigNumber.from(activeValidatorCount).sub(lastWithdrawalValidatorIndex).add(index) : diff; const slots = lengthQueueValidators.div(BigNumber.from(WITHDRAWALS_VALIDATORS_PER_SLOT)); const seconds = slots.toNumber() * SECONDS_PER_SLOT * percentOfActiveValidators; - console.log(`${index.toNumber()} | ${seconds / (60 * 60)} hours`); + return Date.now() + seconds * 1000; } From d9eec2ddd46245dcba03f9c57ea4055b9ab305cb Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Tue, 24 Sep 2024 15:51:33 +0200 Subject: [PATCH 4/8] docs: added docs calculation withdrawal frame of validators --- how-estimation-works.md | 15 +++++-- .../execution-provider.service.ts | 17 ++++++-- .../get-validator-withdrawal-timestamp.ts | 40 ++++++++++--------- src/jobs/validators/validators.service.ts | 8 ++-- 4 files changed, 51 insertions(+), 29 deletions(-) diff --git a/how-estimation-works.md b/how-estimation-works.md index 4f31f0e..3e46981 100644 --- a/how-estimation-works.md +++ b/how-estimation-works.md @@ -85,14 +85,21 @@ where `unfinalized` is the amount of the withdrawal request considered summed wi If there is not enough ether to fulfill the withdrawal request (`unfinalized > totalBuffer`), the previous case might be appended with the known validators are to be withdrawn (when the `withdrawable_epoch` is assigned). -It's needed to select the Lido-participating validators which are already in process of withdrawal and group them by `withdrawable_epoch` to `frameBalances`, allowing to find the oracle report frame containing enough funds from: +It's needed to select the Lido-participating validators which are already in process of withdrawal and group them by calculated frame of expected withdrawal to `frameBalances`, allowing to find the oracle report frame containing enough funds from: - buffer (`totalBuffer`) - projectedRewards (`rewardsPerEpoch * epochsTillTheFrame`) -- frameBalances (`object { [frame]: [sum of balances of validators with withdrawable_epoch for certain frame] }`) +- frameBalances (`object { [frame]: [sum of balances of validators with calculated withdrawal frame] }`) -So the final formula for that case looks like this: -`frame (which has engough validator balances) + sweepingMean`. More about `sweepingMean` [here](#sweeping mean). +#### Algorithm of calculation withdrawal frame of validators: + +1. The cursor goes from 0 to the last validator index in infinite loop. +2. When the cursor reaches a withdrawable validator, it withdraws ETH from that validator. +3. The cursor can withdraw from a maximum of 16 validators per slot. +4. We assume that all validators in network have to something to withdraw (partially or fully) +5. `percentOfActiveValidators` is used to exclude inactive validators from the queue, ensuring more accurate calculations. +6. Formula to get number of slots to wait is `(number of validators to withdraw before cursor get index of validator) / 16` +7. By knowing number slots we can calculate frame of withdrawal --- diff --git a/src/common/execution-provider/execution-provider.service.ts b/src/common/execution-provider/execution-provider.service.ts index c9b7980..d0c5f4d 100644 --- a/src/common/execution-provider/execution-provider.service.ts +++ b/src/common/execution-provider/execution-provider.service.ts @@ -3,11 +3,13 @@ import { CHAINS } from '@lido-nestjs/constants'; import { Injectable } from '@nestjs/common'; import { ethers } from 'ethers'; import { ConfigService } from '@nestjs/config'; +import { PrometheusService } from '../prometheus'; @Injectable() export class ExecutionProviderService { constructor( protected readonly provider: SimpleFallbackJsonRpcBatchProvider, + protected readonly prometheusService: PrometheusService, protected readonly configService: ConfigService, ) {} @@ -28,9 +30,18 @@ export class ExecutionProviderService { return chainId; } + // using ethers.JsonRpcProvider direct request to "eth_getBlockByNumber" + // default @ethersproject provider getBlock does not contain "withdrawals" property public async getLatestWithdrawals(): Promise> { - const provider = new ethers.JsonRpcProvider(this.configService.get('EL_RPC_URLS')[0]); - const block = await provider.send('eth_getBlockByNumber', ['latest', false]); - return block.withdrawals; + const endTimer = this.prometheusService.elRpcRequestDuration.startTimer(); + try { + const provider = new ethers.JsonRpcProvider(this.configService.get('EL_RPC_URLS')[0]); + const block = await provider.send('eth_getBlockByNumber', ['latest', false]); + endTimer({ result: 'success' }); + return block.withdrawals; + } catch (error) { + endTimer({ result: 'error' }); + throw error; + } } } diff --git a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts index e5eca8d..728a8fb 100644 --- a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts +++ b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts @@ -1,25 +1,29 @@ import { BigNumber } from '@ethersproject/bignumber'; import { WITHDRAWALS_VALIDATORS_PER_SLOT } from '../validators.constants'; -import { SECONDS_PER_SLOT } from '../../../common/genesis-time'; +import { SECONDS_PER_SLOT } from 'common/genesis-time'; /* -algorithm: -1. cursor goes from 0 to last validator index in queue -2. when cursor comes to withdrawable validator, it withdraws eth from it -3. cursor can withdraw only 16 validators per slot -4. percentOfActiveValidators is used to get rid of inactive validators in queue - and make more accurate calculation - - -examples: -1. if current cursor is 50 and total validators 100, - then if we want to know when will be withdrawn validator with index 75 - (75 - 50) / 16 = 2 slots - -2. if current cursor is 50 and total validators 100, - then if we want to know when will be withdrawn validator with index 25 - (cursor will go to the end and start from 0) - (100 - 50 + 25) / 16 = 5 slots +#### Algorithm of calculation withdrawal frame of validators: + +1. The cursor goes from 0 to the last validator index in infinite loop. +2. When the cursor reaches a withdrawable validator, it withdraws ETH from that validator. +3. The cursor can withdraw from a maximum of 16 validators per slot. +4. We assume that all validators in network have to something to withdraw (partially or fully) +5. `percentOfActiveValidators` is used to exclude inactive validators from the queue, ensuring more accurate calculations. +6. Formula to get number of slots to wait is `(number of validators to withdraw before cursor get index of validator) / 16` +7. By knowing number slots we can calculate frame of withdrawal + +Examples: + +1. If the current cursor is 50 and the total number of validators is 100, + then if we want to know when the validator with index 75 will be withdrawn: + (75 - 50) / 16 = 2 slots. + +2. If the current cursor is 50 and the total number of validators is 100, + and we want to know when the validator with index 25 will be withdrawn + (since the cursor will go to the end and start from 0): + (100 - 50 + 25) / 16 = 5 slots. + */ export function getValidatorWithdrawalTimestamp( index: BigNumber, diff --git a/src/jobs/validators/validators.service.ts b/src/jobs/validators/validators.service.ts index 8f0bb4c..e21b785 100644 --- a/src/jobs/validators/validators.service.ts +++ b/src/jobs/validators/validators.service.ts @@ -11,14 +11,14 @@ import { ValidatorsStorageService } from 'storage'; import { FAR_FUTURE_EPOCH, ORACLE_REPORTS_CRON_BY_CHAIN_ID, MAX_SEED_LOOKAHEAD } from './validators.constants'; import { BigNumber } from '@ethersproject/bignumber'; import { processValidatorsStream } from 'jobs/validators/utils/validators-stream'; -import { unblock } from '../../common/utils/unblock'; +import { unblock } from 'common/utils/unblock'; import { LidoKeysService } from './lido-keys'; import { ResponseValidatorsData, Validator } from './validators.types'; -import { parseGweiToWei } from '../../common/utils/parse-gwei-to-big-number'; +import { parseGweiToWei } from 'common/utils/parse-gwei-to-big-number'; import { ValidatorsCacheService } from 'storage/validators/validators-cache.service'; import { CronExpression } from '@nestjs/schedule'; -import { PrometheusService } from '../../common/prometheus'; -import { stringifyFrameBalances } from '../../common/validators/strigify-frame-balances'; +import { PrometheusService } from 'common/prometheus'; +import { stringifyFrameBalances } from 'common/validators/strigify-frame-balances'; import { getValidatorWithdrawalTimestamp } from './utils/get-validator-withdrawal-timestamp'; export class ValidatorsService { From a8cf789fdafcece138c79bad435fa7a240fb4c16 Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Tue, 24 Sep 2024 16:03:07 +0200 Subject: [PATCH 5/8] docs: added docs calculation withdrawal frame of validators --- how-estimation-works.md | 2 +- src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/how-estimation-works.md b/how-estimation-works.md index 3e46981..1f13a7b 100644 --- a/how-estimation-works.md +++ b/how-estimation-works.md @@ -93,7 +93,7 @@ It's needed to select the Lido-participating validators which are already in pro #### Algorithm of calculation withdrawal frame of validators: -1. The cursor goes from 0 to the last validator index in infinite loop. +1. Withdrawals sweep cursor goes from 0 to the last validator index in infinite loop. 2. When the cursor reaches a withdrawable validator, it withdraws ETH from that validator. 3. The cursor can withdraw from a maximum of 16 validators per slot. 4. We assume that all validators in network have to something to withdraw (partially or fully) diff --git a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts index 728a8fb..b72b775 100644 --- a/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts +++ b/src/jobs/validators/utils/get-validator-withdrawal-timestamp.ts @@ -5,7 +5,7 @@ import { SECONDS_PER_SLOT } from 'common/genesis-time'; /* #### Algorithm of calculation withdrawal frame of validators: -1. The cursor goes from 0 to the last validator index in infinite loop. +1. Withdrawals sweep cursor goes from 0 to the last validator index in infinite loop. 2. When the cursor reaches a withdrawable validator, it withdraws ETH from that validator. 3. The cursor can withdraw from a maximum of 16 validators per slot. 4. We assume that all validators in network have to something to withdraw (partially or fully) From 62359bb4f722fe74a16115291fdb178df521246a Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Wed, 25 Sep 2024 11:33:33 +0200 Subject: [PATCH 6/8] fix: fixed vulnerabilities --- package.json | 13 +- src/http/estimate/estimate.controller.ts | 2 +- src/http/nft/nft.controller.ts | 2 +- src/http/validators/validators.controller.ts | 11 +- yarn.lock | 718 ++++++++----------- 5 files changed, 302 insertions(+), 444 deletions(-) diff --git a/package.json b/package.json index daa8315..9bb984b 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/units": "^5.7.0", - "@fastify/static": "^6.6.0", + "@fastify/static": "^7.0.4", "@lido-nestjs/consensus": "^1.5.0", "@lido-nestjs/constants": "^5.2.0", "@lido-nestjs/contracts": "^9.3.0", @@ -37,12 +37,12 @@ "@lido-nestjs/logger": "^1.0.1", "@lidofinance/satanizer": "^0.32.0", "@nestjs/cache-manager": "^2.2.2", - "@nestjs/common": "^9.2.1", + "@nestjs/common": "^10.4.4", "@nestjs/config": "^2.2.0", - "@nestjs/core": "^9.2.1", - "@nestjs/platform-fastify": "^9.2.1", + "@nestjs/core": "^10.4.4", + "@nestjs/platform-fastify": "^10.4.4", "@nestjs/schedule": "^2.2.0", - "@nestjs/swagger": "^6.1.4", + "@nestjs/swagger": "^7.4.2", "@nestjs/terminus": "^9.1.4", "@nestjs/throttler": "^6.0.0", "@sentry/node": "^7.29.0", @@ -51,7 +51,6 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "ethers": "^6.13.2", - "fastify-swagger": "^5.2.0", "node-abort-controller": "^3.0.1", "prom-client": "^14.1.1", "reflect-metadata": "^0.1.13", @@ -80,7 +79,7 @@ "ts-loader": "^9.2.6", "ts-node": "^10.4.0", "tsconfig-paths": "^4.1.2", - "typescript": "^4.5.4" + "typescript": "^5.1.0" }, "jest": { "moduleFileExtensions": [ diff --git a/src/http/estimate/estimate.controller.ts b/src/http/estimate/estimate.controller.ts index 5326829..9a6dc3f 100644 --- a/src/http/estimate/estimate.controller.ts +++ b/src/http/estimate/estimate.controller.ts @@ -5,9 +5,9 @@ import { HttpStatus, UseInterceptors, Version, - CacheTTL, Query, } from '@nestjs/common'; +import { CacheTTL } from '@nestjs/cache-manager'; import { ApiResponse, ApiTags } from '@nestjs/swagger'; import { Throttle } from '@nestjs/throttler'; import { HTTP_PATHS } from 'http/http.constants'; diff --git a/src/http/nft/nft.controller.ts b/src/http/nft/nft.controller.ts index 40b9728..16d3406 100644 --- a/src/http/nft/nft.controller.ts +++ b/src/http/nft/nft.controller.ts @@ -5,11 +5,11 @@ import { HttpStatus, UseInterceptors, Version, - CacheTTL, Param, Query, Header, } from '@nestjs/common'; +import { CacheTTL } from '@nestjs/cache-manager'; import { ApiResponse, ApiTags } from '@nestjs/swagger'; import { Throttle } from '@nestjs/throttler'; import { HTTP_PATHS } from 'http/http.constants'; diff --git a/src/http/validators/validators.controller.ts b/src/http/validators/validators.controller.ts index 40077bd..0771d66 100644 --- a/src/http/validators/validators.controller.ts +++ b/src/http/validators/validators.controller.ts @@ -1,12 +1,5 @@ -import { - ClassSerializerInterceptor, - Controller, - Get, - HttpStatus, - UseInterceptors, - Version, - CacheTTL, -} from '@nestjs/common'; +import { ClassSerializerInterceptor, Controller, Get, HttpStatus, UseInterceptors, Version } from '@nestjs/common'; +import { CacheTTL } from '@nestjs/cache-manager'; import { ApiResponse, ApiTags } from '@nestjs/swagger'; import { HTTP_PATHS } from 'http/http.constants'; import { ValidatorsService } from './validators.service'; diff --git a/yarn.lock b/yarn.lock index a90f669..0ce1966 100644 --- a/yarn.lock +++ b/yarn.lock @@ -975,69 +975,82 @@ resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== -"@fastify/ajv-compiler@^3.3.1": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" - integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== +"@fastify/ajv-compiler@^3.5.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz#907497a0e62a42b106ce16e279cf5788848e8e79" + integrity sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ== dependencies: ajv "^8.11.0" ajv-formats "^2.1.1" fast-uri "^2.0.0" -"@fastify/cors@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-8.2.0.tgz#44ce6b28bc111e12679cb02f980f0ce865ff4877" - integrity sha512-qDgwpmg6C4D0D3nh8MTMuRXWyEwPnDZDBODaJv90FP2o9ukbahJByW4FtrM5Bpod5KbTf1oIExBmpItbUTQmHg== +"@fastify/cors@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-9.0.1.tgz#9ddb61b4a61e02749c5c54ca29f1c646794145be" + integrity sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q== dependencies: fastify-plugin "^4.0.0" - mnemonist "0.39.5" + mnemonist "0.39.6" -"@fastify/deepmerge@^1.0.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" - integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A== - -"@fastify/error@^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.2.0.tgz#9010e0acfe07965f5fc7d2b367f58f042d0f4106" - integrity sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ== +"@fastify/error@^3.2.0", "@fastify/error@^3.3.0", "@fastify/error@^3.4.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.1.tgz#b14bb4cac3dd4ec614becbc643d1511331a6425c" + integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== -"@fastify/fast-json-stringify-compiler@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.2.0.tgz#52d047fac76b0d75bd660f04a5dd606659f57c5a" - integrity sha512-ypZynRvXA3dibfPykQN3RB5wBdEUgSGgny8Qc6k163wYPLD4mEGEDkACp+00YmqkGvIm8D/xYoHajwyEdWD/eg== +"@fastify/fast-json-stringify-compiler@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" + integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== dependencies: - fast-json-stringify "^5.0.0" + fast-json-stringify "^5.7.0" -"@fastify/formbody@7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@fastify/formbody/-/formbody-7.3.0.tgz#0da0f3e8895d7360d179020cf999be3b1d68d514" - integrity sha512-4uHTS7wH0mkUoltk4wyJ966rs/TQP0BNDSCtyqRMy7p5adGg+5ERbYue/zGh/qI9yLDPN0K98u7Fw+lLEmBZJQ== +"@fastify/formbody@7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@fastify/formbody/-/formbody-7.4.0.tgz#5370b16d1ee58b9023008d1e883de60353a132ad" + integrity sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og== dependencies: fast-querystring "^1.0.0" fastify-plugin "^4.0.0" -"@fastify/middie@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@fastify/middie/-/middie-8.0.0.tgz#78fe18e948e03de0c7453d0f813d198acac233ca" - integrity sha512-SsZUzJwRV2IBhko8TNI5gGzUdUp2Xd0XCrU+pBTfsMN8LYGsksDI/Hb3qcUZ2/Kfg6ecbFEeRO4nZmHeFCDpHQ== +"@fastify/merge-json-schemas@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz#3551857b8a17a24e8c799e9f51795edb07baa0bc" + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== dependencies: - fastify-plugin "^3.0.0" - path-to-regexp "^6.1.0" + fast-deep-equal "^3.1.3" + +"@fastify/middie@8.3.3": + version "8.3.3" + resolved "https://registry.yarnpkg.com/@fastify/middie/-/middie-8.3.3.tgz#1c1d2b21c41c56badb5c9aac6afe1e25d187b6a7" + integrity sha512-+WHavMQr9CNTZoy2cjoDxoWp76kZ3JKjAtZj5sXNlxX5XBzHig0TeCPfPc+1+NQmliXtndT3PFwAjrQHE/6wnQ== + dependencies: + "@fastify/error" "^3.2.0" + fastify-plugin "^4.0.0" + path-to-regexp "^6.3.0" reusify "^1.0.4" -"@fastify/static@^6.6.0": - version "6.6.0" - resolved "https://registry.yarnpkg.com/@fastify/static/-/static-6.6.0.tgz#763244583abf7a4734bff7b1d1aef0ef445393fb" - integrity sha512-UiYSN2dUmDZ48M40xdIwY1dPwSSYD7c+wtoIQP8y7wyxCwcUtf1YT5/Q4n1uJsBF1fySvuo9njQZKlHeiKy4HQ== +"@fastify/send@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/send/-/send-2.1.0.tgz#1aa269ccb4b0940a2dadd1f844443b15d8224ea0" + integrity sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA== + dependencies: + "@lukeed/ms" "^2.0.1" + escape-html "~1.0.3" + fast-decode-uri-component "^1.0.1" + http-errors "2.0.0" + mime "^3.0.0" + +"@fastify/static@^7": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@fastify/static/-/static-7.0.4.tgz#51c6a58a5db60cf4724e88603c2ec38b9f53ab1b" + integrity sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q== dependencies: "@fastify/accept-negotiator" "^1.0.0" + "@fastify/send" "^2.0.0" content-disposition "^0.5.3" fastify-plugin "^4.0.0" - glob "^8.0.1" - p-limit "^3.1.0" - readable-stream "^4.0.0" - send "^0.18.0" + fastq "^1.17.0" + glob "^10.3.4" "@humanwhocodes/config-array@^0.11.8": version "0.11.8" @@ -1494,6 +1507,21 @@ dependencies: call-bind "^1.0.7" +"@lukeed/csprng@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" + integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + +"@lukeed/ms@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.2.tgz#07f09e59a74c52f4d88c6db5c1054e819538e2a8" + integrity sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA== + +"@microsoft/tsdoc@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz#f29a55df17cb6e87cfbabce33ff6a14a9f85076d" + integrity sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== + "@nestjs/cache-manager@^2.2.2": version "2.2.2" resolved "https://registry.yarnpkg.com/@nestjs/cache-manager/-/cache-manager-2.2.2.tgz#4b0e7c4112c7b8c2a869d64f998aaf8a1bf0040d" @@ -1524,14 +1552,14 @@ webpack "5.93.0" webpack-node-externals "3.0.0" -"@nestjs/common@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-9.2.1.tgz#24de19ee85a8f1747288980fe517b12753cf66ea" - integrity sha512-nZuo3oDsSSlC5mti/M2aCWTEIfHPGDXmBwWgPeCpRbrNz3IWd109rkajll+yxgidVjznAdBS9y00JkAVJblNYw== +"@nestjs/common@^10.4.4": + version "10.4.4" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.4.tgz#673d0eca273e1ab3a4d3ec9e212114b9f4fbf6e8" + integrity sha512-0j2/zqRw9nvHV1GKTktER8B/hIC/Z8CYFjN/ZqUuvwayCH+jZZBhCR2oRyuvLTXdnlSmtCAg2xvQ0ULqQvzqhA== dependencies: + uid "2.0.2" iterare "1.2.1" - tslib "2.4.1" - uuid "9.0.0" + tslib "2.7.0" "@nestjs/config@^2.2.0": version "2.2.0" @@ -1543,36 +1571,35 @@ lodash "4.17.21" uuid "8.3.2" -"@nestjs/core@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-9.2.1.tgz#598e51a421a0aaafc568c1a02499f7c1f9491caf" - integrity sha512-a9GkXuu8uXgNgCVW+17iI8kLCltO+HwHpU2IhR+32JKnN2WEQ1YEWU4t3GJ2MNq44YkjIw9zrKvFkjJBlYrNbQ== +"@nestjs/core@^10.4.4": + version "10.4.4" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.4.tgz#12cb1110da6d76e12ceccf0e92f6f5220fe27525" + integrity sha512-y9tjmAzU6LTh1cC/lWrRsCcOd80khSR0qAHAqwY2svbW+AhsR/XCzgpZrAAKJrm/dDfjLCZKyxJSayeirGcW5Q== dependencies: + uid "2.0.2" "@nuxtjs/opencollective" "0.3.2" fast-safe-stringify "2.1.1" iterare "1.2.1" - object-hash "3.0.0" - path-to-regexp "3.2.0" - tslib "2.4.1" - uuid "9.0.0" + path-to-regexp "3.3.0" + tslib "2.7.0" -"@nestjs/mapped-types@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-1.2.0.tgz#1bbdbb5c956f0adb3fd76add929137bc6ad3183f" - integrity sha512-NTFwPZkQWsArQH8QSyFWGZvJ08gR+R4TofglqZoihn/vU+ktHEJjMqsIsADwb7XD97DhiD+TVv5ac+jG33BHrg== +"@nestjs/mapped-types@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz#485d6b44e19779c98d04e52bd1d2bcc7001df0ea" + integrity sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg== -"@nestjs/platform-fastify@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-9.2.1.tgz#d07febbc54da2ab5fcfe9c9dc0fae2934f8d54d4" - integrity sha512-vhygCrU1Q4VkgsSo9EbS5Ihn2J78ZAK+Zb4M5Bbg+DGWGyrOLbMWL/gYgGSGIV4Fe7CVzp7H9xwuCfl8oqEFNg== - dependencies: - "@fastify/cors" "8.2.0" - "@fastify/formbody" "7.3.0" - "@fastify/middie" "8.0.0" - fastify "4.10.2" - light-my-request "5.6.1" - path-to-regexp "3.2.0" - tslib "2.4.1" +"@nestjs/platform-fastify@^10.4.4": + version "10.4.4" + resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-10.4.4.tgz#fe5f9792bba0ae111e06c0a3d554819e31fdf747" + integrity sha512-3fRt9mhhqe7aS1kF9myAFSUazhW88yrq9w3LrdHbjOTkGh8ZiZckjzKL705xORVJw2d/BHkgP8AqoNthakLJeQ== + dependencies: + "@fastify/cors" "9.0.1" + "@fastify/formbody" "7.4.0" + "@fastify/middie" "8.3.3" + fastify "4.28.1" + light-my-request "6.0.0" + path-to-regexp "3.3.0" + tslib "2.7.0" "@nestjs/schedule@^2.2.0": version "2.2.0" @@ -1604,16 +1631,17 @@ jsonc-parser "3.2.0" pluralize "8.0.0" -"@nestjs/swagger@^6.1.4": - version "6.1.4" - resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-6.1.4.tgz#ef48abc401253b3e475d44aba8bcded7975341df" - integrity sha512-kE8VjR+NaoKqxg8XqM/YYfALScPh4AcoR8Wywga8/OxHsTHY+MKxqvTpWp7IhCUWSA6xT8nQUpcC9Rt7C+r7Hw== +"@nestjs/swagger@^7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-7.4.2.tgz#3b72eb8a6d1366e8e211f9a90681283bb18817e9" + integrity sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ== dependencies: - "@nestjs/mapped-types" "1.2.0" + "@microsoft/tsdoc" "^0.15.0" + "@nestjs/mapped-types" "2.0.5" js-yaml "4.1.0" lodash "4.17.21" - path-to-regexp "3.2.0" - swagger-ui-dist "4.15.5" + path-to-regexp "3.3.0" + swagger-ui-dist "5.17.14" "@nestjs/terminus@^9.1.4": version "9.1.4" @@ -2222,6 +2250,13 @@ ajv-formats@2.1.1, ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -2318,11 +2353,6 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2370,14 +2400,13 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -avvio@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.2.0.tgz#aff28b0266617bf07ffc1c2d5f4220c3663ce1c2" - integrity sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg== +avvio@^8.3.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.4.0.tgz#7cbd5bca74f0c9effa944ced601f94ffd8afc5ed" + integrity sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA== dependencies: - archy "^1.0.0" - debug "^4.0.0" - fastq "^1.6.1" + "@fastify/error" "^3.3.0" + fastq "^1.17.1" babel-jest@^29.7.0: version "29.7.0" @@ -2887,11 +2916,6 @@ content-disposition@^0.5.3: dependencies: safe-buffer "5.2.1" -content-type@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" @@ -2907,10 +2931,10 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== cookiejar@^2.1.3: version "2.1.4" @@ -2966,14 +2990,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3028,21 +3045,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -3100,11 +3102,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -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.4.251: version "1.4.284" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" @@ -3148,16 +3145,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@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding-negotiator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/encoding-negotiator/-/encoding-negotiator-2.0.1.tgz#79871bb5473b81f6a0670e8de5303fb5ee0868a3" - integrity sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ== - enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: version "5.12.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" @@ -3361,11 +3348,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== - ethers@^5.5.4: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -3481,6 +3463,11 @@ external-editor@^3.0.3, external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" +fast-content-type-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" + integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== + fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" @@ -3512,16 +3499,17 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-sta resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-json-stringify@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.5.0.tgz#6655cb944df8da43f6b15312a9564b81c55dadab" - integrity sha512-rmw2Z8/mLkND8zI+3KTYIkNPEoF5v6GqDP/o+g7H3vjdWjBwuKpgAYFHIzL6ORRB+iqDjjtJnLIW9Mzxn5szOA== +fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz#a6d0c575231a3a08c376a00171d757372f2ca46e" + integrity sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g== dependencies: - "@fastify/deepmerge" "^1.0.0" + "@fastify/merge-json-schemas" "^0.1.0" ajv "^8.10.0" - ajv-formats "^2.1.1" + ajv-formats "^3.0.1" fast-deep-equal "^3.1.3" fast-uri "^2.1.0" + json-schema-ref-resolver "^1.0.1" rfdc "^1.2.0" fast-levenshtein@^2.0.6: @@ -3551,79 +3539,41 @@ fast-uri@^2.0.0, fast-uri@^2.1.0: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.2.0.tgz#519a0f849bef714aad10e9753d69d8f758f7445a" integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== -fastify-plugin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-3.0.1.tgz#79e84c29f401020f38b524f59f2402103fd21ed2" - integrity sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA== - fastify-plugin@^4.0.0: version "4.4.0" resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.4.0.tgz#ce9fab1352390199c3d55569fea43779699b58ae" integrity sha512-ovwFQG2qNy3jcCROiWpr94Hs0le+c7N/3t7m9aVwbFhkxcR/esp2xu25dP8e617HpQdmeDv+gFX4zagdUhDByw== -"fastify-static-deprecated@npm:fastify-static@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/fastify-static/-/fastify-static-4.6.1.tgz#687131da76f1d4391fb8b47f71ea2118cdc85803" - integrity sha512-vy7N28U4AMhuOim12ZZWHulEE6OQKtzZbHgiB8Zj4llUuUQXPka0WHAQI3njm1jTCx4W6fixUHfpITxweMtAIA== - dependencies: - content-disposition "^0.5.3" - encoding-negotiator "^2.0.1" - fastify-plugin "^3.0.0" - glob "^7.1.4" - p-limit "^3.1.0" - readable-stream "^3.4.0" - send "^0.17.1" - -fastify-static@^4.0.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/fastify-static/-/fastify-static-4.7.0.tgz#e802658d69c1dcddb380b9afc2456d467a3494be" - integrity sha512-zZhCfJv/hkmud2qhWqpU3K9XVAuy3+IV8Tp9BC5J5U+GyA2XwoB6h8lh9GqpEIqdXOw01WyWQllV7dOWVyAlXg== +fastify@4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.28.1.tgz#39626dedf445d702ef03818da33064440b469cd1" + integrity sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ== dependencies: - fastify-static-deprecated "npm:fastify-static@4.6.1" - process-warning "^1.0.0" - -"fastify-swagger-deprecated@npm:fastify-swagger@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/fastify-swagger/-/fastify-swagger-5.1.1.tgz#9aae3f7edb629c98e534841c3c0a1347f9321cd1" - integrity sha512-7DA0zS8CCV5r+gbLgWdeeKEwLrVbbOxLMJVUfOl1H9+wSildSLD8hok2TLX7s3c28wOjF8+iZRxsz/hBDzfdIw== - dependencies: - fastify-plugin "^3.0.0" - fastify-static "^4.0.0" - js-yaml "^4.0.0" - json-schema-resolver "^1.3.0" - openapi-types "^10.0.0" - rfdc "^1.3.0" - -fastify-swagger@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/fastify-swagger/-/fastify-swagger-5.2.0.tgz#680cae4352b68b7e064aaaeb36fa1de60ff26dc7" - integrity sha512-yKct50Mev9YIrhd2FRO4AChcJM9JwTBCziIjA4C+AI+hV2ystaIklgHVEwHoyqlaeQ+B4gZ1Z5rgOE87i4llLg== - dependencies: - fastify-swagger-deprecated "npm:fastify-swagger@5.1.1" - process-warning "^1.0.0" - -fastify@4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.10.2.tgz#0dd1cb8d16df3c14eff938c08aa6da63b4035d0d" - integrity sha512-0T+4zI6N3S8ex0LCZi3H4FasJR4AzWw834fUkPWvV8r6GBJkLmAOfFxH8f5V29Plef24IK0QSQD/tz1Nx+1UOA== - dependencies: - "@fastify/ajv-compiler" "^3.3.1" - "@fastify/error" "^3.0.0" - "@fastify/fast-json-stringify-compiler" "^4.1.0" + "@fastify/ajv-compiler" "^3.5.0" + "@fastify/error" "^3.4.0" + "@fastify/fast-json-stringify-compiler" "^4.3.0" abstract-logging "^2.0.1" - avvio "^8.2.0" - content-type "^1.0.4" - find-my-way "^7.3.0" - light-my-request "^5.6.1" - pino "^8.5.0" - process-warning "^2.0.0" + avvio "^8.3.0" + fast-content-type-parse "^1.1.0" + fast-json-stringify "^5.8.0" + find-my-way "^8.0.0" + light-my-request "^5.11.0" + pino "^9.0.0" + process-warning "^3.0.0" proxy-addr "^2.0.7" rfdc "^1.3.0" - secure-json-parse "^2.5.0" - semver "^7.3.7" - tiny-lru "^10.0.0" + secure-json-parse "^2.7.0" + semver "^7.5.4" + toad-cache "^3.3.0" + +fastq@^1.17.0, fastq@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" -fastq@^1.6.0, fastq@^1.6.1: +fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== @@ -3663,14 +3613,14 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -find-my-way@^7.3.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.4.0.tgz#22363e6cd1c466f88883703e169a20c983f9c9cc" - integrity sha512-JFT7eURLU5FumlZ3VBGnveId82cZz7UR7OUu+THQJOwdQXxmS/g8v0KLoFhv97HreycOrmAbqjXD/4VG2j0uMQ== +find-my-way@^8.0.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-8.2.2.tgz#f3e78bc6ead2da4fdaa201335da3228600ed0285" + integrity sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA== dependencies: fast-deep-equal "^3.1.3" fast-querystring "^1.0.0" - safe-regex2 "^2.0.0" + safe-regex2 "^3.1.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" @@ -3765,11 +3715,6 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - fs-extra@11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" @@ -3884,6 +3829,18 @@ glob@10.4.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" +glob@^10.3.4: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -3896,17 +3853,6 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4026,17 +3972,6 @@ 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@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -4736,7 +4671,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -4761,14 +4696,12 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-resolver@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/json-schema-resolver/-/json-schema-resolver-1.3.0.tgz#0840864b06780363d31fb03cdfae5047e2f81fbb" - integrity sha512-EX7W1r8aZ/T3j8GbbBxPXi60bnsELfT90OiA1QrbGMvwzVSbyMNOAzvMFcFb8m7gKCXZLJpGe+cJOvWgoFl29A== +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== dependencies: - debug "^4.1.1" - rfdc "^1.1.4" - uri-js "^4.2.2" + fast-deep-equal "^3.1.3" json-schema-traverse@^0.4.1: version "0.4.1" @@ -4842,22 +4775,22 @@ libphonenumber-js@^1.10.14: resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.17.tgz#7efcfa3068fc076bc59a43a08a723ccd95308474" integrity sha512-UQrNzsusSn5qaojdpWqporWRdpx6AGeb+egj64NrpYuyKHvnSH9jMp/1Dy3b/WnMyJA5zgV1yw//jC6J0dCXkw== -light-my-request@5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.6.1.tgz#cff5c75d8cb35a354433d75406fea74a2f8bcdb1" - integrity sha512-sbJnC1UBRivi9L1kICr3CESb82pNiPNB3TvtdIrZZqW0Qh8uDXvoywMmWKZlihDcmw952CMICCzM+54LDf+E+g== +light-my-request@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-6.0.0.tgz#97c6d0d5448ea2fc37836f0aefe94298f5a87dde" + integrity sha512-kFkFXrmKCL0EEeOmJybMH5amWFd+AFvlvMlvFTRxCUwbhfapZqDmeLMPoWihntnYY6JpoQDE9k+vOzObF1fDqg== dependencies: - cookie "^0.5.0" - process-warning "^2.0.0" - set-cookie-parser "^2.4.1" + cookie "^0.6.0" + process-warning "^4.0.0" + set-cookie-parser "^2.6.0" -light-my-request@^5.6.1: - version "5.8.0" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.8.0.tgz#93b28615d4cd134b4e2370bcf2ff7e35b51c8d29" - integrity sha512-4BtD5C+VmyTpzlDPCZbsatZMJVgUIciSOwYhJDCbLffPZ35KoDkDj4zubLeHDEb35b4kkPeEv5imbh+RJxK/Pg== +light-my-request@^5.11.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.13.0.tgz#b29905e55e8605b77fee2a946e17b219bca35113" + integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== dependencies: - cookie "^0.5.0" - process-warning "^2.0.0" + cookie "^0.6.0" + process-warning "^3.0.0" set-cookie-parser "^2.4.1" lines-and-columns@^1.1.6: @@ -5032,16 +4965,16 @@ mime-types@^2.1.12, mime-types@^2.1.27: dependencies: mime-db "1.52.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mime@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -5064,13 +4997,6 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.2.tgz#0939d7d6f0898acbd1508abe534d1929368a8fff" - integrity sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -5088,24 +5014,19 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mnemonist@0.39.5: - version "0.39.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.5.tgz#5850d9b30d1b2bc57cc8787e5caa40f6c3420477" - integrity sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ== +mnemonist@0.39.6: + version "0.39.6" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.6.tgz#0b3c9b7381d9edf6ce1957e74b25a8ad25732f57" + integrity sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA== dependencies: obliterator "^2.0.1" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5195,11 +5116,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -object-hash@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -5215,20 +5131,6 @@ on-exit-leak-free@^2.1.0: resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== -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" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -5250,11 +5152,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -openapi-types@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-10.0.0.tgz#0debbf663b2feed0322030b5b7c9080804076934" - integrity sha512-Y8xOCT2eiKGYDzMW9R4x5cmfc3vGaaI4EL2pwhDmodWw1HlK18YcZ4uJxc7Rdp7/gGzAygzH9SXr6GKYIXbRcQ== - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -5370,15 +5267,15 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f" - integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== -path-to-regexp@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" - integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== +path-to-regexp@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== path-type@^4.0.0: version "4.0.0" @@ -5405,35 +5302,35 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pino-abstract-transport@v1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" - integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== +pino-abstract-transport@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" + integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== dependencies: readable-stream "^4.0.0" split2 "^4.0.0" -pino-std-serializers@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.1.0.tgz#307490fd426eefc95e06067e85d8558603e8e844" - integrity sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g== +pino-std-serializers@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== -pino@^8.5.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.8.0.tgz#1f0d6695a224aa06afc7ad60f2ccc4772d3b9233" - integrity sha512-cF8iGYeu2ODg2gIwgAHcPrtR63ILJz3f7gkogaHC/TXVVXxZgInmNYiIpDYEwgEkxZti2Se6P2W2DxlBIZe6eQ== +pino@^9.0.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-9.4.0.tgz#e4600ff199efc744856a5b3b71c53e38998eae5a" + integrity sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.0.0 - pino-std-serializers "^6.0.0" - process-warning "^2.0.0" + pino-abstract-transport "^1.2.0" + pino-std-serializers "^7.0.0" + process-warning "^4.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" - thread-stream "^2.0.0" + sonic-boom "^4.0.1" + thread-stream "^3.0.0" pirates@^4.0.4: version "4.0.5" @@ -5487,15 +5384,15 @@ pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== -process-warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.1.0.tgz#1e60e3bfe8183033bbc1e702c2da74f099422d1a" - integrity sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg== +process-warning@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.0.tgz#581e3a7a1fb456c5f4fd239f76bce75897682d5a" + integrity sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw== process@^0.11.10: version "0.11.10" @@ -5564,11 +5461,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.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== - react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -5669,17 +5561,17 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" - integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== +ret@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.4.3.tgz#5243fa30e704a2e78a9b9b1e86079e15891aa85c" + integrity sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ== reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.1.4, rfdc@^1.2.0, rfdc@^1.3.0: +rfdc@^1.2.0, rfdc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== @@ -5734,12 +5626,12 @@ safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" - integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== +safe-regex2@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-3.1.0.tgz#fd7ec23908e2c730e1ce7359a5b72883a87d2763" + integrity sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug== dependencies: - ret "~0.2.0" + ret "~0.4.0" safe-stable-stringify@^2.3.1: version "2.4.2" @@ -5774,10 +5666,10 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secure-json-parse@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.6.0.tgz#95d89f84adf32d76ff7800e68a673b129fe918b0" - integrity sha512-B9osKohb6L+EZ6Kve3wHKfsAClzOC/iISA2vSuCe5Jx5NAKiwitfxx8ZKYapHXr0sYRj7UZInT7pLb3rp2Yx6A== +secure-json-parse@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.5.4" @@ -5796,44 +5688,6 @@ semver@^7.5.3, semver@^7.5.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -send@^0.17.1: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "1.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -send@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - serialize-javascript@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" @@ -5846,6 +5700,11 @@ set-cookie-parser@^2.4.1: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== +set-cookie-parser@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz#ef5552b56dc01baae102acb5fc9fb8cd060c30f9" + integrity sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ== + set-function-length@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -5911,10 +5770,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -sonic-boom@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.2.1.tgz#972ceab831b5840a08a002fa95a672008bda1c38" - integrity sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A== +sonic-boom@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.1.0.tgz#4f039663ba191fac5cfe4f1dc330faac079e4342" + integrity sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw== dependencies: atomic-sleep "^1.0.0" @@ -5976,11 +5835,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - stream-chain@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" @@ -6126,10 +5980,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swagger-ui-dist@4.15.5: - version "4.15.5" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz#cda226a79db2a9192579cc1f37ec839398a62638" - integrity sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA== +swagger-ui-dist@5.17.14: + version "5.17.14" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz#e2c222e5bf9e15ccf80ec4bc08b4aaac09792fd6" + integrity sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw== symbol-observable@4.0.0: version "4.0.0" @@ -6188,10 +6042,10 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -thread-stream@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.2.0.tgz#310c03a253f729094ce5d4638ef5186dfa80a9e8" - integrity sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ== +thread-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== dependencies: real-require "^0.2.0" @@ -6200,11 +6054,6 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tiny-lru@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-10.0.1.tgz#aaf5d22207e641ed1b176ac2e616d6cc2fc9ef66" - integrity sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6229,6 +6078,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toad-cache@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -6334,6 +6188,11 @@ tslib@2.4.1, tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -6373,10 +6232,17 @@ typescript@5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -typescript@^4.5.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@^5.1.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + +uid@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/uid/-/uid-2.0.2.tgz#4b5782abf0f2feeefc00fa88006b2b3b7af3e3b9" + integrity sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== + dependencies: + "@lukeed/csprng" "^1.0.0" universalify@^2.0.0: version "2.0.0" From 71df066f0d7913f2831c90c2830ea057a1b19fc5 Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Wed, 25 Sep 2024 12:04:50 +0200 Subject: [PATCH 7/8] fix: fixed vulnerabilities --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 0ce1966..1fc65ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1040,7 +1040,7 @@ http-errors "2.0.0" mime "^3.0.0" -"@fastify/static@^7": +"@fastify/static@^7.0.4": version "7.0.4" resolved "https://registry.yarnpkg.com/@fastify/static/-/static-7.0.4.tgz#51c6a58a5db60cf4724e88603c2ec38b9f53ab1b" integrity sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q== From 8b7eec2317ec80a140fd3bd984e21a71f60dc346 Mon Sep 17 00:00:00 2001 From: Taras Alekhin Date: Thu, 26 Sep 2024 10:09:42 +0200 Subject: [PATCH 8/8] fix: updated test library --- package.json | 4 +- yarn.lock | 103 ++++++++++----------------------------------------- 2 files changed, 21 insertions(+), 86 deletions(-) diff --git a/package.json b/package.json index 9bb984b..05beb43 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ }, "devDependencies": { "@nestjs/cli": "^10.4.4", - "@nestjs/schematics": "^9.0.4", - "@nestjs/testing": "^9.2.1", + "@nestjs/schematics": "^10.1.4", + "@nestjs/testing": "^10.4.4", "@types/cron": "^2.0.1", "@types/jest": "^29.2.5", "@types/node": "^18.15.11", diff --git a/yarn.lock b/yarn.lock index 1fc65ae..cc7f6d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,17 +23,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@angular-devkit/core@15.0.4": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-15.0.4.tgz#257ba1d76cd106216d0150f480d0062e726af996" - integrity sha512-4ITpRAevd652SxB+qNesIQ9qfbm7wT5UBU5kJOPPwGL77I21g8CQpkmV1n5VSacPvC9Zbz90feOWexf7w7JzcA== - dependencies: - ajv "8.11.0" - ajv-formats "2.1.1" - jsonc-parser "3.2.0" - rxjs "6.6.7" - source-map "0.7.4" - "@angular-devkit/core@17.3.8": version "17.3.8" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-17.3.8.tgz#8679cacf84cf79764f027811020e235ab32016d2" @@ -58,17 +47,6 @@ symbol-observable "4.0.0" yargs-parser "21.1.1" -"@angular-devkit/schematics@15.0.4": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-15.0.4.tgz#64de42f9100d7080bc3c59bb06d1e4f6f15a088e" - integrity sha512-/gXiLFS0+xFdx6wPoBpe/c6/K9I5edMpaASqPf4XheKtrsSvL+qTlIi3nsbfItzOiDXbaBmlbxGfkMHz/yg0Ig== - dependencies: - "@angular-devkit/core" "15.0.4" - jsonc-parser "3.2.0" - magic-string "0.26.7" - ora "5.4.1" - rxjs "6.6.7" - "@angular-devkit/schematics@17.3.8": version "17.3.8" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-17.3.8.tgz#f853eb21682aadfb6667e090b5b509fc95ce8442" @@ -1620,15 +1598,15 @@ jsonc-parser "3.3.1" pluralize "8.0.0" -"@nestjs/schematics@^9.0.4": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-9.0.4.tgz#ab612f5a8e006ca1d617eddc8143ee00b766312b" - integrity sha512-egurCfAc4e5i1r2TmeAF0UrOKejFmT5oTdv4b7HcOVPupc3QGU7CbEfGleL3mkM5AjrixTQeMxU9bJ00ttAbGg== +"@nestjs/schematics@^10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-10.1.4.tgz#e445b856eefce9bd338c5fc1cf2c95f0985849cf" + integrity sha512-QpY8ez9cTvXXPr3/KBrtSgXQHMSV6BkOUYy2c2TTe6cBqriEdGnCYqGl8cnfrQl3632q3lveQPaZ/c127dHsEw== dependencies: - "@angular-devkit/core" "15.0.4" - "@angular-devkit/schematics" "15.0.4" - fs-extra "11.1.0" - jsonc-parser "3.2.0" + "@angular-devkit/core" "17.3.8" + "@angular-devkit/schematics" "17.3.8" + comment-json "4.2.3" + jsonc-parser "3.3.1" pluralize "8.0.0" "@nestjs/swagger@^7.4.2": @@ -1651,12 +1629,12 @@ boxen "5.1.2" check-disk-space "3.3.1" -"@nestjs/testing@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-9.2.1.tgz#2a3f64214d58ec4ab878862395407947671e4ece" - integrity sha512-lemXZdRSuqoZ87l0orCrS/c7gqwxeduIFOd21g9g2RUeQ4qlWPegbQDKASzbfC28klPyrgJLW4MNq7uv2JwV8w== +"@nestjs/testing@^10.4.4": + version "10.4.4" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-10.4.4.tgz#1f73f4b6c8d7a996a267ec498679e53763936963" + integrity sha512-qRGFj51A5RM7JqA8pcyEwSLA3Y0dle/PAZ8oxP0suimoCusRY3Tk7wYqutZdCNj1ATb678SDaUZDHk2pwSv9/g== dependencies: - tslib "2.4.1" + tslib "2.7.0" "@nestjs/throttler@^6.0.0": version "6.1.0" @@ -2262,16 +2240,6 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ajv@8.12.0, ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" @@ -3715,15 +3683,6 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fs-extra@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -4723,11 +4682,6 @@ json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - jsonc-parser@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" @@ -4890,13 +4844,6 @@ luxon@^3.2.1: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.3.0.tgz#d73ab5b5d2b49a461c47cedbc7e73309b4805b48" integrity sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg== -magic-string@0.26.7: - version "0.26.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" - integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== - dependencies: - sourcemap-codec "^1.4.8" - magic-string@0.30.8: version "0.30.8" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" @@ -5600,13 +5547,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@6.6.7: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@7.8.1, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -5803,11 +5743,6 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - split2@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" @@ -6183,21 +6118,21 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@2.4.1, tslib@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - tslib@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== -tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"