diff --git a/contracts/rate_limiter.wasm b/contracts/rate_limiter.wasm new file mode 100644 index 00000000..7627ff34 Binary files /dev/null and b/contracts/rate_limiter.wasm differ diff --git a/package.json b/package.json index 2fffd0f9..b1d32728 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "test:dex_bindings": "NO_WAIT_CHANNEL1=1 NO_WAIT_HTTP2=1 NO_WAIT_CHANNEL2=1 NO_WAIT_DELAY=1 vitest --run src/testcases/run_in_band/dex_bindings --bail 1", "test:chain_manager": "vitest --run src/testcases/run_in_band/chain_manager --bail 1", "test:feemarket": "NO_WAIT_CHANNEL1=1 NO_WAIT_HTTP2=1 NO_WAIT_CHANNEL2=1 NO_WAIT_DELAY=1 vitest --run src/testcases/run_in_band/feemarket --bail 1", + "test:ibc_rate_limit": "vitest --run src/testcases/run_in_band/ibc_rate_limit --bail 1", "lint": "eslint ./src", "fmt": "eslint ./src --fix", "build:neutronjsplus": "[ -d './node_modules/@neutron-org/neutronjsplus/dist' ] || tsc -p ./node_modules/@neutron-org/neutronjsplus/tsconfig.json", @@ -46,7 +47,7 @@ "@cosmjs/stargate": "0.32.4", "@cosmjs/tendermint-rpc": "^0.32.4", "@neutron-org/neutronjs": "https://github.com/neutron-org/neutronjs.git#7f45328320b53b4fa2b572bc25bb96bf80260181", - "@neutron-org/neutronjsplus": "https://github.com/neutron-org/neutronjsplus.git#df604d8c6475c8640f4ee2ded9b1905574226a3a", + "@neutron-org/neutronjsplus": "https://github.com/neutron-org/neutronjsplus.git#39dd19b17165ef206b40018ff437054210c2bdbc", "@types/lodash": "^4.14.182", "axios": "1.6.0", "commander": "^10.0.0", @@ -90,4 +91,4 @@ "engines": { "node": ">=20.0" } -} \ No newline at end of file +} diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts index e9e395f4..a3657ac0 100644 --- a/src/helpers/constants.ts +++ b/src/helpers/constants.ts @@ -75,6 +75,7 @@ export const CONTRACTS = { LOCKDROP_VAULT_CL: 'lockdrop_vault_for_cl_pools.wasm', MARKETMAP: 'marketmap.wasm', ORACLE: 'oracle.wasm', + IBC_RATE_LIMITER: 'rate_limiter.wasm', }; export const NEUTRON_PREFIX = process.env.NEUTRON_ADDRESS_PREFIX || 'neutron'; diff --git a/src/testcases/run_in_band/ibc_rate_limit.test.ts b/src/testcases/run_in_band/ibc_rate_limit.test.ts new file mode 100644 index 00000000..a1e84a97 --- /dev/null +++ b/src/testcases/run_in_band/ibc_rate_limit.test.ts @@ -0,0 +1,515 @@ +import { Registry } from '@cosmjs/proto-signing'; +import { RunnerTestSuite, inject, expect } from 'vitest'; +import { LocalState, mnemonicToWallet } from '../../helpers/local_state'; +import { SigningNeutronClient } from '../../helpers/signing_neutron_client'; +import { MsgTransfer as GaiaMsgTransfer } from 'cosmjs-types/ibc/applications/transfer/v1/tx'; +import { MsgTransfer as NeutronMsgTransfer } from '@neutron-org/neutronjs/ibc/applications/transfer/v1/tx'; +import { defaultRegistryTypes } from '@cosmjs/stargate'; +import { QueryClientImpl as BankQueryClient } from '@neutron-org/neutronjs/cosmos/bank/v1beta1/query.rpc.Query'; +import { + COSMOS_DENOM, + CONTRACTS, + NEUTRON_DENOM, +} from '../../helpers/constants'; +import { SigningStargateClient } from '@cosmjs/stargate'; +import config from '../../config.json'; +import { + Dao, + DaoMember, + getDaoContracts, + getNeutronDAOCore, +} from '@neutron-org/neutronjsplus/dist/dao'; +import { ADMIN_MODULE_ADDRESS } from '@neutron-org/neutronjsplus/dist/constants'; +import { createRPCQueryClient as createNeutronClient } from '@neutron-org/neutronjs/neutron/rpc.query'; +import { NeutronQuerier } from '@neutron-org/neutronjs/querier_types'; +import { QueryClientImpl as IbcQueryClient } from '@neutron-org/neutronjs/ibc/applications/transfer/v1/query.rpc.Query'; +import { Wallet } from '../../helpers/wallet'; + +const TRANSFER_CHANNEL = 'channel-0'; +const UATOM_IBC_TO_NEUTRON_DENOM = + 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2'; + +// These are wallets rich enough to execute transfer which hits the rl +const DEMO_MNEMONIC_1 = + 'banner spread envelope side kite person disagree path silver will brother under couch edit food venture squirrel civil budget number acquire point work mass'; +const DEMO_MNEMONIC_2 = + 'veteran try aware erosion drink dance decade comic dawn museum release episode original list ability owner size tuition surface ceiling depth seminar capable only'; + +describe('Neutron / IBC transfer', () => { + let testState: LocalState; + + let neutronClient: SigningNeutronClient; + let neutronClient2: SigningNeutronClient; + let gaiaClient: SigningStargateClient; + let neutronWallet: Wallet; + let neutronWallet2: Wallet; + let gaiaWallet: Wallet; + + let daoMember1: DaoMember; + let mainDao: Dao; + let chainManagerAddress: string; + + let rlContract: string; + let ibcContract: string; + + let bankQuerier: BankQueryClient; + let neutronQuerier: NeutronQuerier; + let ibcQuerier: IbcQueryClient; + + let amount: string; + + beforeAll(async (suite: RunnerTestSuite) => { + testState = await LocalState.create(config, inject('mnemonics'), suite); + + neutronWallet = await mnemonicToWallet(DEMO_MNEMONIC_1, 'neutron'); + neutronClient = await SigningNeutronClient.connectWithSigner( + testState.rpcNeutron, + neutronWallet.directwallet, + neutronWallet.address, + ); + neutronWallet2 = await testState.nextWallet('neutron'); + neutronClient2 = await SigningNeutronClient.connectWithSigner( + testState.rpcNeutron, + neutronWallet2.directwallet, + neutronWallet2.address, + ); + gaiaWallet = await mnemonicToWallet(DEMO_MNEMONIC_2, 'cosmos'); + gaiaClient = await SigningStargateClient.connectWithSigner( + testState.rpcGaia, + gaiaWallet.directwallet, + { registry: new Registry(defaultRegistryTypes) }, + ); + + const neutronRpcClient = await testState.neutronRpcClient(); + + const daoCoreAddress = await getNeutronDAOCore( + neutronClient, + neutronRpcClient, + ); // add assert for some addresses + const daoContracts = await getDaoContracts(neutronClient, daoCoreAddress); + mainDao = new Dao(neutronClient, daoContracts); + daoMember1 = new DaoMember( + mainDao, + neutronClient.client, + neutronWallet.address, + NEUTRON_DENOM, + ); + bankQuerier = new BankQueryClient(neutronRpcClient); + neutronQuerier = await createNeutronClient({ + rpcEndpoint: testState.rpcNeutron, + }); + const admins = await neutronQuerier.cosmos.adminmodule.adminmodule.admins(); + chainManagerAddress = admins.admins[0]; + ibcQuerier = new IbcQueryClient(neutronRpcClient); + neutronClient.waitBlocks(20); + }); + + describe('Contracts', () => { + test('store and instantiate RL contract', async () => { + const quota = buildChannelQuota( + 'weekly', + TRANSFER_CHANNEL, + NEUTRON_DENOM, + 604800, + 1, + 1, + ); + rlContract = await neutronClient.create(CONTRACTS.IBC_RATE_LIMITER, { + gov_module: neutronWallet.address, + ibc_module: ADMIN_MODULE_ADDRESS, + paths: [quota], + }); + }); + test('instantiate IBC contract', async () => { + ibcContract = await neutronClient.create(CONTRACTS.IBC_TRANSFER, {}); + }); + }); + + describe('prepare: test IBC transfer and set RL contract addr to neutron', () => { + test('bond form wallet 1', async () => { + await daoMember1.bondFunds('10000'); + await neutronClient.getWithAttempts( + async () => await mainDao.queryVotingPower(daoMember1.user), + async (response) => response.power == 11000, + 20, + ); + }); + + test('IBC transfer without any limits', async () => { + const fee = { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }; + const res = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: NEUTRON_DENOM, amount: '1000' }, + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + fee, + ); + expect(res.code).toEqual(0); + }); + + describe('IBC rate limit params proposal', () => { + const proposalId = 1; + test('create proposal', async () => { + await daoMember1.submitUpdateParamsRateLimitProposal( + chainManagerAddress, + 'Proposal #1', + 'Param change proposal. Setup IBC rate limit contract', + { + contract_address: rlContract, + }, + '1000', + ); + }); + test('vote YES', async () => { + await daoMember1.voteYes(proposalId); + }); + test('check if proposal is passed', async () => { + await mainDao.checkPassedProposal(proposalId); + }); + test('execute passed proposal', async () => { + await daoMember1.executeProposalWithAttempts(proposalId); + }); + }); + }); + + describe('IBC Rate limits', () => { + describe('setup ibc contract', () => { + test('transfer to contract', async () => { + const res = await neutronClient.sendTokens( + ibcContract, + [{ denom: NEUTRON_DENOM, amount: '50000000' }], + { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }, + ); + expect(res.code).toEqual(0); + }); + test('set payer fees', async () => { + const res = await neutronClient.execute(ibcContract, { + set_fees: { + denom: NEUTRON_DENOM, + ack_fee: '2333', + recv_fee: '0', + timeout_fee: '2666', + }, + }); + expect(res.code).toEqual(0); + }); + }); + describe('with limit, Neutron -> gaia', () => { + test('IBC transfer exceed limit in 2 steps: 1tx almost hits the limit (w/o failing), 2 tx exceeds the limit by 1 untrn', async () => { + const fee = { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }; + const neutronSupply = await bankQuerier.supplyOf({ + denom: NEUTRON_DENOM, + }); + // 1% of ntrn supply - 1ntrn + const firstAmount = ( + BigInt(neutronSupply.amount.amount) / BigInt(100) - + BigInt(1000000) + ).toString(); + + // transfer 6.9(9)M from neutron wallet which almost 1%, but still not reach it + const res = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: NEUTRON_DENOM, amount: firstAmount }, + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + fee, + ); + expect(res.code).toEqual(0); + + const res2 = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: NEUTRON_DENOM, amount: '1000001' }, // basically 1NTRN + 1 untrn + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + fee, + ); + expect(res2.code).toEqual(2); + expect(res2.rawLog).contains( + 'IBC Rate Limit exceeded for channel-0/untrn.', + ); + }); + + test('IBC send via contract(s) should be limited as well', async () => { + await expect( + neutronClient.execute(ibcContract, { + send: { + channel: TRANSFER_CHANNEL, + to: gaiaWallet.address, + denom: NEUTRON_DENOM, + amount: '1000001', + }, + }), + ).rejects.toThrow(/IBC Rate Limit exceeded for channel-0/); + }); + + test('IBC transfer from a different wallet to ensure that limiting is working for different address (non-contract)', async () => { + const fee = { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }; + const res = await neutronClient2.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: NEUTRON_DENOM, amount: '1000001' }, // 1NTRN + 1untrn + sender: neutronWallet2.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + fee, + ); + expect(res.code).toEqual(2); + expect(res.rawLog).contains( + 'IBC Rate Limit exceeded for channel-0/untrn.', + ); + }); + + test('Unset limit', async () => { + await neutronClient.execute(rlContract, { + remove_path: { + channel_id: TRANSFER_CHANNEL, + denom: NEUTRON_DENOM, + }, + }); + }); + test('IBC transfer: no more limiting', async () => { + const fee = { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }; + // here we doing exact same tx, but it is not failing because there is no such path (limit) anymore + const res = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: NEUTRON_DENOM, amount: '100000' }, + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + fee, + ); + expect(res.code).toEqual(0); + }); + }); + describe('with limit, Gaia -> Neutron', () => { + test('send some atoms to neutron chain', async () => { + const resBefroreLimit = await gaiaClient.signAndBroadcast( + gaiaWallet.address, + [ + { + typeUrl: GaiaMsgTransfer.typeUrl, + value: GaiaMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: COSMOS_DENOM, amount: '1000000' }, + sender: gaiaWallet.address, + receiver: neutronWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + { + gas: '200000', + amount: [{ denom: COSMOS_DENOM, amount: '1000' }], + }, + ); + expect(resBefroreLimit.code).toEqual(0); + }); + + test('check that weird IBC denom is uatom indeed', async () => { + const res = await ibcQuerier.denomTrace({ + hash: '27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2', + }); + expect(res.denomTrace.baseDenom).toEqual(COSMOS_DENOM); + }); + + test('add limit', async () => { + const quota = buildChannelQuota( + 'weekly', + TRANSFER_CHANNEL, + UATOM_IBC_TO_NEUTRON_DENOM, + 604800, + 1, + 1, + ); + await neutronClient.execute(rlContract, { + add_path: quota, + }); + }); + + test('IBC transfer exceeds the limit', async () => { + const uatomibcSupply = await bankQuerier.supplyOf({ + denom: UATOM_IBC_TO_NEUTRON_DENOM, + }); + + amount = ( + BigInt(uatomibcSupply.amount.amount) / BigInt(100) + + BigInt(1) + ).toString(); + + const res = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: UATOM_IBC_TO_NEUTRON_DENOM, amount: amount }, + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }, + ); + expect(res.code).toEqual(2); + expect(res.rawLog).contains('IBC Rate Limit exceeded'); + }); + }); + + // Note: we haven't unset the limit afterwards, instead we've removed rate limiting contract from params. + // ibc send afterwards should work because rate-limiting MW action is completely removed from the ibc stack + describe('Remove RL contract from neutron', () => { + const proposalId = 2; + test('create proposal', async () => { + await daoMember1.submitUpdateParamsRateLimitProposal( + chainManagerAddress, + 'Proposal #2', + 'Param change proposal. Remove rate limit contract', + { + contract_address: '', + }, + '1000', + ); + }); + test('vote YES', async () => { + await daoMember1.voteYes(proposalId); + }); + test('check if proposal is passed', async () => { + await mainDao.checkPassedProposal(proposalId); + }); + test('execute passed proposal', async () => { + await daoMember1.executeProposalWithAttempts(proposalId); + }); + // and here we just tests if ibc send works + test('perform IBC send after removig of contract: should be fine', async () => { + const res = await neutronClient.signAndBroadcast( + [ + { + typeUrl: NeutronMsgTransfer.typeUrl, + value: NeutronMsgTransfer.fromPartial({ + sourcePort: 'transfer', + sourceChannel: TRANSFER_CHANNEL, + token: { denom: UATOM_IBC_TO_NEUTRON_DENOM, amount: amount }, + sender: neutronWallet.address, + receiver: gaiaWallet.address, + timeoutHeight: { + revisionNumber: 2n, + revisionHeight: 100000000n, + }, + }), + }, + ], + { + gas: '200000', + amount: [{ denom: NEUTRON_DENOM, amount: '1000' }], + }, + ); + expect(res.code).toEqual(0); + }); + }); + }); +}); + +function buildChannelQuota( + name: string, + channel: string, + denom: string, + duration: number, + sendPercentage: number, + recvPercentage: number, +): object { + return { + channel_id: channel, + denom: denom, + quotas: [ + { + name: name, + duration: duration, + send_recv: [sendPercentage, recvPercentage], + }, + ], + }; +} diff --git a/yarn.lock b/yarn.lock index f860f031..0c07889a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1345,9 +1345,9 @@ version "4.2.0" resolved "https://github.com/neutron-org/neutronjs.git#7f45328320b53b4fa2b572bc25bb96bf80260181" -"@neutron-org/neutronjsplus@https://github.com/neutron-org/neutronjsplus.git#df604d8c6475c8640f4ee2ded9b1905574226a3a": +"@neutron-org/neutronjsplus@https://github.com/neutron-org/neutronjsplus.git#39dd19b17165ef206b40018ff437054210c2bdbc": version "0.5.0" - resolved "https://github.com/neutron-org/neutronjsplus.git#df604d8c6475c8640f4ee2ded9b1905574226a3a" + resolved "https://github.com/neutron-org/neutronjsplus.git#39dd19b17165ef206b40018ff437054210c2bdbc" dependencies: "@cosmjs/cosmwasm-stargate" "^0.32.4" "@cosmjs/proto-signing" "^0.32.4" @@ -1397,9 +1397,9 @@ fastq "^1.6.0" "@polka/url@^1.0.0-next.24": - version "1.0.0-next.25" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" - integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== + version "1.0.0-next.28" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -1454,90 +1454,90 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@rollup/rollup-android-arm-eabi@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz#155c7d82c1b36c3ad84d9adf9b3cd520cba81a0f" - integrity sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg== - -"@rollup/rollup-android-arm64@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz#b94b6fa002bd94a9cbd8f9e47e23b25e5bd113ba" - integrity sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g== - -"@rollup/rollup-darwin-arm64@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz#0934126cf9cbeadfe0eb7471ab5d1517e8cd8dcc" - integrity sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ== - -"@rollup/rollup-darwin-x64@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz#0ce8e1e0f349778938c7c90e4bdc730640e0a13e" - integrity sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA== - -"@rollup/rollup-linux-arm-gnueabihf@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz#5669d34775ad5d71e4f29ade99d0ff4df523afb6" - integrity sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g== - -"@rollup/rollup-linux-arm-musleabihf@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz#f6d1a0e1da4061370cb2f4244fbdd727c806dd88" - integrity sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA== - -"@rollup/rollup-linux-arm64-gnu@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz#ed96a05e99743dee4d23cc4913fc6e01a0089c88" - integrity sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw== - -"@rollup/rollup-linux-arm64-musl@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz#057ea26eaa7e537a06ded617d23d57eab3cecb58" - integrity sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz#6e6e1f9404c9bf3fbd7d51cd11cd288a9a2843aa" - integrity sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw== - -"@rollup/rollup-linux-riscv64-gnu@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz#eef1536a53f6e6658a2a778130e6b1a4a41cb439" - integrity sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ== - -"@rollup/rollup-linux-s390x-gnu@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz#2b28fb89ca084efaf8086f435025d96b4a966957" - integrity sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg== - -"@rollup/rollup-linux-x64-gnu@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz#5226cde6c6b495b04a3392c1d2c572844e42f06b" - integrity sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g== - -"@rollup/rollup-linux-x64-musl@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz#2c2412982e6c2a00a2ecac6d548ebb02f0aa6ca4" - integrity sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg== - -"@rollup/rollup-win32-arm64-msvc@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz#fbb6ef5379199e2ec0103ef32877b0985c773a55" - integrity sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q== - -"@rollup/rollup-win32-ia32-msvc@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz#d50e2082e147e24d87fe34abbf6246525ec3845a" - integrity sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA== - -"@rollup/rollup-win32-x64-msvc@4.21.3": - version "4.21.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz#4115233aa1bd5a2060214f96d8511f6247093212" - integrity sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA== +"@rollup/rollup-android-arm-eabi@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz#e0f5350845090ca09690fe4a472717f3b8aae225" + integrity sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww== + +"@rollup/rollup-android-arm64@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz#08270faef6747e2716d3e978a8bbf479f75fb19a" + integrity sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ== + +"@rollup/rollup-darwin-arm64@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz#691671133b350661328d42c8dbdedd56dfb97dfd" + integrity sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw== + +"@rollup/rollup-darwin-x64@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz#b2ec52a1615f24b1cd40bc8906ae31af81e8a342" + integrity sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg== + +"@rollup/rollup-linux-arm-gnueabihf@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz#217f01f304808920680bd269002df38e25d9205f" + integrity sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw== + +"@rollup/rollup-linux-arm-musleabihf@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz#93ac1c5a1e389f4482a2edaeec41fcffee54a930" + integrity sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ== + +"@rollup/rollup-linux-arm64-gnu@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz#a7f146787d6041fecc4ecdf1aa72234661ca94a4" + integrity sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w== + +"@rollup/rollup-linux-arm64-musl@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz#6a37236189648e678bd564d6e8ca798f42cf42c5" + integrity sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz#5661420dc463bec31ecb2d17d113de858cfcfe2d" + integrity sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w== + +"@rollup/rollup-linux-riscv64-gnu@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz#cb00342b7432bdef723aa606281de2f522d6dcf7" + integrity sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A== + +"@rollup/rollup-linux-s390x-gnu@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz#0708889674dccecccd28e2befccf791e0767fcb7" + integrity sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ== + +"@rollup/rollup-linux-x64-gnu@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz#a135b040b21582e91cfed2267ccfc7d589e1dbc6" + integrity sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA== + +"@rollup/rollup-linux-x64-musl@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz#88395a81a3ab7ee3dc8dc31a73ff62ed3185f34d" + integrity sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g== + +"@rollup/rollup-win32-arm64-msvc@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz#12ee49233b1125f2c1da38392f63b1dbb0c31bba" + integrity sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w== + +"@rollup/rollup-win32-ia32-msvc@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz#0f987b134c6b3123c22842b33ba0c2b6fb78cc3b" + integrity sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg== + +"@rollup/rollup-win32-x64-msvc@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz#f2feb149235a5dc1deb5439758f8871255e5a161" + integrity sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ== "@scure/base@~1.1.6": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.8.tgz#8f23646c352f020c83bca750a82789e246d42b50" - integrity sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg== + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.4.0": version "1.4.0" @@ -1611,15 +1611,15 @@ dependencies: "@types/node" "*" -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.6", "@types/estree@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1647,9 +1647,9 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@^4.14.182": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" - integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.9.tgz#0dc4902c229f6b8e2ac5456522104d7b1a230290" + integrity sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w== "@types/long@^4.0.1": version "4.0.2" @@ -1662,9 +1662,9 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node@*", "@types/node@>=13.7.0": - version "22.5.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" - integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA== + version "22.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" + integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== dependencies: undici-types "~6.19.2" @@ -1866,6 +1866,13 @@ loupe "^3.1.1" tinyrainbow "^1.2.0" +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -2057,7 +2064,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.0: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2138,12 +2145,12 @@ brorand@^1.1.0: integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== + version "4.24.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" + integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" + caniuse-lite "^1.0.30001663" + electron-to-chromium "^1.5.28" node-releases "^2.0.18" update-browserslist-db "^1.1.0" @@ -2157,6 +2164,14 @@ buffer-reverse@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -2188,10 +2203,10 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001646: - version "1.0.30001660" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz#31218de3463fabb44d0b7607b652e56edf2e2355" - integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg== +caniuse-lite@^1.0.30001663: + version "1.0.30001664" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz#d588d75c9682d3301956b05a3749652a80677df4" + integrity sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g== chai@^5.1.1: version "5.1.1" @@ -2500,10 +2515,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.4: - version "1.5.24" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.24.tgz#b3cd2f71b7a84bac340d862e3b7b0aadf48478de" - integrity sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA== +electron-to-chromium@^1.5.28: + version "1.5.29" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz#aa592a3caa95d07cc26a66563accf99fa573a1ee" + integrity sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw== elliptic@^6.5.4: version "6.5.7" @@ -2584,7 +2599,7 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -escalade@^3.1.2: +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -2761,6 +2776,16 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2850,9 +2875,9 @@ fast-safe-stringify@2.0.4: integrity sha512-mNlGUdKOeGNleyrmgbKYtbnCr9KZkZXU7eM89JRo8vY10f7Ul1Fbj07hUBW3N4fC0xM+fmfFfa2zM7mIizhpNQ== fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + version "3.0.2" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024" + integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== fastq@^1.6.0: version "1.17.1" @@ -2861,10 +2886,10 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fdir@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.3.0.tgz#fcca5a23ea20e767b15e081ee13b3e6488ee0bb0" - integrity sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ== +fdir@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.0.tgz#8e80ab4b18a2ac24beebf9d20d71e1bc2627dbae" + integrity sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ== fecha@^4.2.0: version "4.2.3" @@ -3134,6 +3159,11 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -3770,9 +3800,9 @@ path-to-regexp@0.1.10: integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== path-to-regexp@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.1.0.tgz#4d687606ed0be8ed512ba802eb94d620cb1a86f0" - integrity sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ== + version "8.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" + integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== path-type@^4.0.0: version "4.0.0" @@ -3789,7 +3819,7 @@ pathval@^2.0.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== @@ -3844,6 +3874,11 @@ pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + prom-client@13.1.0: version "13.1.0" resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45" @@ -3927,7 +3962,7 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -readable-stream@^3.4.0, readable-stream@^3.6.2: +readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -3936,6 +3971,17 @@ readable-stream@^3.4.0, readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readonly-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" @@ -4034,28 +4080,28 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.20.0: - version "4.21.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.21.3.tgz#c64ba119e6aeb913798a6f7eef2780a0df5a0821" - integrity sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA== + version "4.22.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.5.tgz#d5108cc470249417e50492456253884d19f5d40f" + integrity sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.6" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.21.3" - "@rollup/rollup-android-arm64" "4.21.3" - "@rollup/rollup-darwin-arm64" "4.21.3" - "@rollup/rollup-darwin-x64" "4.21.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.21.3" - "@rollup/rollup-linux-arm-musleabihf" "4.21.3" - "@rollup/rollup-linux-arm64-gnu" "4.21.3" - "@rollup/rollup-linux-arm64-musl" "4.21.3" - "@rollup/rollup-linux-powerpc64le-gnu" "4.21.3" - "@rollup/rollup-linux-riscv64-gnu" "4.21.3" - "@rollup/rollup-linux-s390x-gnu" "4.21.3" - "@rollup/rollup-linux-x64-gnu" "4.21.3" - "@rollup/rollup-linux-x64-musl" "4.21.3" - "@rollup/rollup-win32-arm64-msvc" "4.21.3" - "@rollup/rollup-win32-ia32-msvc" "4.21.3" - "@rollup/rollup-win32-x64-msvc" "4.21.3" + "@rollup/rollup-android-arm-eabi" "4.22.5" + "@rollup/rollup-android-arm64" "4.22.5" + "@rollup/rollup-darwin-arm64" "4.22.5" + "@rollup/rollup-darwin-x64" "4.22.5" + "@rollup/rollup-linux-arm-gnueabihf" "4.22.5" + "@rollup/rollup-linux-arm-musleabihf" "4.22.5" + "@rollup/rollup-linux-arm64-gnu" "4.22.5" + "@rollup/rollup-linux-arm64-musl" "4.22.5" + "@rollup/rollup-linux-powerpc64le-gnu" "4.22.5" + "@rollup/rollup-linux-riscv64-gnu" "4.22.5" + "@rollup/rollup-linux-s390x-gnu" "4.22.5" + "@rollup/rollup-linux-x64-gnu" "4.22.5" + "@rollup/rollup-linux-x64-musl" "4.22.5" + "@rollup/rollup-win32-arm64-msvc" "4.22.5" + "@rollup/rollup-win32-ia32-msvc" "4.22.5" + "@rollup/rollup-win32-x64-msvc" "4.22.5" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4305,7 +4351,7 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -4416,11 +4462,11 @@ tinyexec@^0.3.0: integrity sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg== tinyglobby@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.6.tgz#950baf1462d0c0b443bc3d754d0d39c2e589aaae" - integrity sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g== + version "0.2.7" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.7.tgz#36f583c166ac2d91f47c799d6e2e256fdcfb3a56" + integrity sha512-qFWYeNxBQxrOTRHvGjlRdBamy8JFqu6c0bwRru9leE+q8J72tLtlT0L3v+2T7fbLXN7FGzDNBhXkWiJqHUHD9g== dependencies: - fdir "^6.3.0" + fdir "^6.4.0" picomatch "^4.0.2" tinypool@^1.0.0: @@ -4604,12 +4650,12 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.0" uri-js@^4.2.2: version "4.4.1" @@ -4649,9 +4695,9 @@ vite-node@2.1.1: vite "^5.0.0" vite@^5.0.0: - version "5.4.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.6.tgz#85a93a1228a7fb5a723ca1743e337a2588ed008f" - integrity sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q== + version "5.4.8" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.8.tgz#af548ce1c211b2785478d3ba3e8da51e39a287e8" + integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ== dependencies: esbuild "^0.21.3" postcss "^8.4.43" @@ -4714,12 +4760,12 @@ why-is-node-running@^2.3.0: stackback "0.0.2" winston-transport@^4.4.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.1.tgz#52ff1bcfe452ad89991a0aaff9c3b18e7f392569" - integrity sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA== + version "4.8.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.8.0.tgz#a15080deaeb80338455ac52c863418c74fcf38ea" + integrity sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA== dependencies: logform "^2.6.1" - readable-stream "^3.6.2" + readable-stream "^4.5.2" triple-beam "^1.3.0" winston@3.3.3: