diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index f872b6bc..00000000 --- a/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "plugins": [ - "@typescript-eslint" - ], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "rules" : { - "no-console": 2 // We dont want console log - } -} \ No newline at end of file diff --git a/e2e/calldata.ts b/e2e/calldata.ts index 15762f38..1ab5050c 100644 --- a/e2e/calldata.ts +++ b/e2e/calldata.ts @@ -1,8 +1,6 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import { Interface } from "ethers"; - -export function encodeCalldata(funcSignature: string, args: any) { +export function encodeCalldata(funcSignature: string, args: string[] | []) { const iface = new Interface([`function ${funcSignature}`]); const functionName = funcSignature.split('(')[0]; // "balanceOf" gibi const callData = iface.encodeFunctionData(functionName, args); diff --git a/e2e/jest.globalSetup.ts b/e2e/jest.globalSetup.ts index 3a185ef5..1da7bfa8 100644 --- a/e2e/jest.globalSetup.ts +++ b/e2e/jest.globalSetup.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable no-console */ import { getDevAccount, getEthStrkHolderAccount, sendERC20FromSnAccount, sendStrksFromSnAccount, startNode, testConfig, updateNodeConfig } from './utils' import { declareContract, deployContract } from './transaction' import { ETH_ADDRESS, SN_ADDRESS_TEST_1, STRK_ADDRESS } from './constants' diff --git a/e2e/jest.globalTeardown.ts b/e2e/jest.globalTeardown.ts index 12cdc15e..804b9f62 100644 --- a/e2e/jest.globalTeardown.ts +++ b/e2e/jest.globalTeardown.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable no-console */ export default async function globalTeardown() { console.log('\n🛠️ Global teardown: Tests are done. Exiting...') } diff --git a/e2e/registers.ts b/e2e/registers.ts index 2557e75c..3dcf5239 100644 --- a/e2e/registers.ts +++ b/e2e/registers.ts @@ -1,15 +1,9 @@ -/* eslint-disable no-console */ -import { Abi, Account, Contract } from "starknet"; +import { Abi, Account, Contract } from "starknet"; import { ETH_ADDRESS, SN_ADDRESS_TEST_1, STRK_ADDRESS } from "./constants"; import { getContractAbi, getProvider } from "./utils"; import { addHexPrefix } from "../src/utils/padding"; import { getEthAddressFromRegistry } from "./registry/rosettanet"; - - -interface RosettanetCompatibleAddress { - starknet: string; - ethereum: string; -} +import { RosettanetCompatibleAddress } from "../src/types/types"; export async function updateRegistry(account: Account, rosettanetAddress: string) { try { @@ -18,7 +12,7 @@ export async function updateRegistry(account: Account, rosettanetAddress: string await registerContract(account, ETH_ADDRESS, rosettanetAddress); await getEthAddressFromRegistry(STRK_ADDRESS); await registerContract(account, SN_ADDRESS_TEST_1, rosettanetAddress); - + console.log('Registry updated.') return; } catch (ex) { @@ -29,14 +23,14 @@ export async function updateRegistry(account: Account, rosettanetAddress: string async function registerContract(account: Account, contractAddress: string, rosettanetAddress: string): Promise { const abi: Abi = await getContractAbi('Rosettanet') - + const contract = new Contract(abi, rosettanetAddress, getProvider()) - + contract.connect(account) - + await contract.register_contract(contractAddress) const generatedAddress = await getEthAddressFromRegistry(contractAddress) - + return addHexPrefix(generatedAddress.toLowerCase()) } @@ -53,21 +47,21 @@ export async function registerFunction(account: Account, rosettanetAddress: stri const abi: Abi = await getContractAbi('Rosettanet') //const EvmTypes = EVMTypesEnum; - + const contract = new Contract(abi, rosettanetAddress, getProvider()) contract.connect(account) const params = getParameters(fn_name); - await contract.invoke('register_function',params, { parseRequest: false}); + await contract.invoke('register_function', params, { parseRequest: false }); console.log(`Function ${fn_name} registered to registry.`) } -function getParameters(fn_name:string): string[] { +function getParameters(fn_name: string): string[] { switch (fn_name) { case 'transfer': - return ['0x0', '0x7472616E7366657228616464726573732C75696E7432353629', '0x19', + return ['0x0', '0x7472616E7366657228616464726573732C75696E7432353629', '0x19', '0x2', '0x3', '0x24'] default: throw 'fn_name not found' diff --git a/e2e/registry/rosettanet.ts b/e2e/registry/rosettanet.ts index e9148abe..7dcabbae 100644 --- a/e2e/registry/rosettanet.ts +++ b/e2e/registry/rosettanet.ts @@ -6,7 +6,6 @@ export async function registerFunction(/* account: Account, fn: string */) { // Implementation pending } -// eslint-disable-next-line @typescript-eslint/no-explicit-any export async function registerContractIfNotRegistered( account: Account, contractAddress: string, diff --git a/e2e/rpc/server.test.ts b/e2e/rpc/server.test.ts index ce07dcee..88dfcb90 100644 --- a/e2e/rpc/server.test.ts +++ b/e2e/rpc/server.test.ts @@ -17,7 +17,7 @@ describe('Server robustness tests', () => { }, { timeout: 2000 }, ) - } catch (error) { + } catch { // Skip all tests in this suite fail('server is not working') } diff --git a/e2e/signing.ts b/e2e/signing.ts index 87bf2708..86dedbf9 100644 --- a/e2e/signing.ts +++ b/e2e/signing.ts @@ -1,65 +1,10 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { Wallet, Transaction, AbiCoder } from 'ethers'; +import { Wallet } from 'ethers'; const PRIVATE_KEY = '0x72dd28749115344b785e66ec88f439471e10895693b6d659aaa8264f30272212' -const ETH_ADDRESS ='0x188669dbc25577B33d3eEFe1030bB7134bbaeC2A'; +// const ETH_ADDRESS = '0x188669dbc25577B33d3eEFe1030bB7134bbaeC2A'; export function getTestAccount(): Wallet { const signer = new Wallet(PRIVATE_KEY); - - return signer; -} - -export function getTestAccountAddress(): string { - return ETH_ADDRESS; -} - -export interface Eip1559Transaction { - to: string, - gasLimit: number, - nonce: number, - value: bigint, - chainId: number, - maxPriorityFeePerGas: number, - maxFeePerGas: number -} - -export interface SignedTransaction { - txHash: string, - signature: any, - unsignedHash: string, - signedSerialized: string -} - -export async function eip1559Sign(tx: Eip1559Transaction, selector:string, abi: string[], params: any[]): Promise { - const testAccount = getTestAccount() - const abicoder = new AbiCoder(); - - const calldata = abicoder.encode(abi, params); - const { to, gasLimit, nonce, value, chainId, maxPriorityFeePerGas, maxFeePerGas } = tx; - const transaction = { - to, - gasLimit, - nonce, - value, - chainId, - accessList: [], - maxPriorityFeePerGas, - maxFeePerGas, - data: `${selector}${calldata.replace('0x','')}` - } - - const signedTx = Transaction.from(await testAccount.signTransaction(transaction)); - - if(signedTx.hash == null) { - throw 'Error at signing tx' - } - - return { - txHash: signedTx.hash, - signature: signedTx.signature, - unsignedHash: signedTx.unsignedHash, - signedSerialized: signedTx.serialized - } + return signer; } \ No newline at end of file diff --git a/e2e/utils.ts b/e2e/utils.ts index c274e28f..4e2760a5 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -1,6 +1,4 @@ -/* eslint-disable no-console */ import { initNode } from '../src/index' -/* eslint-disable no-console */ import { promises as fs } from 'fs' import path from 'path' import { Abi, Account, BigNumberish, RpcProvider, uint256 } from 'starknet' @@ -32,6 +30,8 @@ export const testConfig = { }, } +export type NodeConfig = typeof testConfig + // These values are used in the devnet setup script // export const rpcList = ["https://free-rpc.nethermind.io/mainnet-juno/v0_7"] // export const accountSeed = "1223632" @@ -89,8 +89,8 @@ export async function updateNodeConfig(config: string) { } } -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function readNodeConfig(): Promise { + +export async function readNodeConfig(): Promise { try { const configFilePath = path.resolve(__dirname, '../config.test.json') diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..6b5db9ad --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,48 @@ +import { defineConfig } from "eslint/config"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default defineConfig([{ + extends: compat.extends( + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + ), + + plugins: { + "@typescript-eslint": typescriptEslint, + }, + + languageOptions: { + parser: tsParser, + }, + + rules: { + "no-console": 2, + }, +}, { + files: ["e2e/**/*.ts"], + + rules: { + "no-console": "off", + }, +}, { + files: ["jest.config.js"], + rules: { + "no-undef": "off" + } +} +]); \ No newline at end of file diff --git a/package.json b/package.json index e2d15406..109baa80 100644 --- a/package.json +++ b/package.json @@ -37,11 +37,11 @@ "@types/mocha": "^10.0.10", "@types/node": "^20.17.24", "@types/supertest": "^6.0.2", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", "chai": "^5.2.0", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", + "eslint": "^9.38.0", + "eslint-config-prettier": "^10.1.8", "jest": "^29.7.0", "mocha": "^11.1.0", "nodemon": "^3.0.3", @@ -52,6 +52,7 @@ "typescript": "^5.8.3" }, "dependencies": { + "@starknet-io/types-js": "0.8.4", "@types/cors": "^2.8.17", "axios": "^1.6.7", "bignumber.js": "^9.1.2", diff --git a/src/cache/blockNumber.ts b/src/cache/blockNumber.ts index 934de4a7..221688f4 100644 --- a/src/cache/blockNumber.ts +++ b/src/cache/blockNumber.ts @@ -35,7 +35,6 @@ export async function initialSyncBlockNumber() { } export async function syncBlockNumber() { - // eslint-disable-next-line no-constant-condition while (true) { await new Promise(resolve => setTimeout(resolve, 10000)) // Sync new blocks in every 10 seconds await updateBlockNumber() diff --git a/src/cache/gasPrice.ts b/src/cache/gasPrice.ts index d402d263..c3767fbc 100644 --- a/src/cache/gasPrice.ts +++ b/src/cache/gasPrice.ts @@ -1,28 +1,10 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + import { writeLog } from '../logger' import { isStarknetRPCError } from '../types/typeGuards' import { RPCResponse, StarknetRPCError } from '../types/types' import { callStarknet } from '../utils/callHelper' - -export interface SyncedGas { - l1: { - fri: string - wei: string - }, - l1_data: { - fri: string - wei: string - }, - l2: { - fri: string - wei: string - } -} - -interface GasData { - price_in_fri: string - price_in_wei: string -} - +import { GasData, SyncedGas } from '../types/types' let syncedGasPrice: SyncedGas @@ -88,7 +70,6 @@ async function updateGasPrice() { syncedGasPrice = gas; writeLog(0, `Gas sync, l1: ${gas.l1.wei} (wei) ${gas.l1.fri} (fri), l1_data: ${gas.l1_data.wei} (wei) ${gas.l1_data.fri} (fri), l2: ${gas.l2.wei} (wei) ${gas.l2.fri} (fri)`) return - // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (e: any) { writeLog(2, 'Error at gas sync: ' + e.message) } @@ -100,7 +81,6 @@ export async function initialSyncGasPrice() { } export async function syncGasPrice() { - // eslint-disable-next-line no-constant-condition while (true) { await new Promise(resolve => setTimeout(resolve, 10000)) // Sync new blocks in every 10 seconds await updateGasPrice() diff --git a/src/logger.ts b/src/logger.ts index f04d23a1..a0aeaf7b 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -59,7 +59,7 @@ function appendLog( severity: getSeverityString(severity), message: JSON.parse(text), }) - } catch (error) { + } catch { logMessage = JSON.stringify({ date: now.toLocaleDateString(), time: now.toTimeString().split(' ')[0], diff --git a/src/rpc/calls.ts b/src/rpc/calls.ts index 0e58dd9c..c79af22f 100644 --- a/src/rpc/calls.ts +++ b/src/rpc/calls.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Router, Response, Request } from 'express' import { ResponseHandler, RPCError, RPCResponse } from '../types/types' import { chainIdHandler } from './calls/chainId' @@ -235,7 +236,6 @@ Methods.set('eth_createAccessList', { handler: createAccessListHandler, }) -// eslint-disable-next-line @typescript-eslint/no-explicit-any async function handleRequest(request: any): Promise { try { if (request && typeof request === 'object') { @@ -272,7 +272,7 @@ async function handleRequest(request: any): Promise { return result } catch (ex) { const errorMessage = ex instanceof Error ? ex.message : String(ex); - writeLog(2, JSON.stringify({request, error: errorMessage})) + writeLog(2, JSON.stringify({ request, error: errorMessage })) return { jsonrpc: '2.0', id: id, diff --git a/src/rpc/calls/estimateGas.ts b/src/rpc/calls/estimateGas.ts index e18a15f2..7f398254 100644 --- a/src/rpc/calls/estimateGas.ts +++ b/src/rpc/calls/estimateGas.ts @@ -1,32 +1,10 @@ -/* eslint-disable no-console */ - import { RPCResponse, RPCRequest, RPCError } from '../../types/types' import { estimateGasCost } from '../../utils/gas'; import { addHexPrefix } from '../../utils/padding'; -/* -{ - "id": 1, - "jsonrpc": "2.0", - "result": [ - { - "l1_data_gas_consumed": "0x400", - "l1_data_gas_price": "0x545a559", - "l1_gas_consumed": "0x0", - "l1_gas_price": "0x1ef3fed292f3", - "l2_gas_consumed": "0x450c50", - "l2_gas_price": "0xb2d05e00", - "overall_fee": "0x303ad8121ac400", - "unit": "FRI" - } - ] -} - */ - - export async function estimateGasHandler(request: RPCRequest): Promise { const parameters = request.params[0]; - + const totalFee = await estimateGasCost({ from: parameters.from, to: parameters.to, @@ -40,8 +18,7 @@ export async function estimateGasHandler(request: RPCRequest): Promise{ jsonrpc: request.jsonrpc, id: request.id, diff --git a/src/rpc/calls/ethCall.ts b/src/rpc/calls/ethCall.ts index f3ef394b..bbeb5571 100644 --- a/src/rpc/calls/ethCall.ts +++ b/src/rpc/calls/ethCall.ts @@ -1,9 +1,7 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { writeLog } from '../../logger' import { isEVMDecodeError, isEVMEncodeResult, - isRPCError, isStarknetContract, isStarknetRPCError, } from '../../types/typeGuards' @@ -18,6 +16,10 @@ import { StarknetContract, StarknetContractReadError, StarknetRPCError, + EthCallParameters, + StarknetCallableMethod, + ConvertableType, + CairoNamedConvertableType, } from '../../types/types' import { callStarknet } from '../../utils/callHelper' import { @@ -28,16 +30,14 @@ import { handleTokenMetadataException, } from '../../utils/calldata' import { - ConvertableType, + initializeStarknetAbi, } from '../../utils/converters/abiFormatter' import { - findStarknetCallableMethod, - StarknetCallableMethod, + findStarknetCallableMethod } from '../../utils/match' import { snKeccak } from '../../utils/sn_keccak' import { - CairoNamedConvertableType, getContractAbiAndMethods, getEthereumInputsCairoNamed, getEthereumOutputsCairoNamed, @@ -45,15 +45,7 @@ import { import { validateEthAddress } from '../../utils/validations' import { getSnAddressFromEthAddress } from '../../utils/wrapper' -export interface EthCallParameters { - from?: string - to: string - gas?: string | number | bigint - gasPrice?: string | number | bigint - value?: string | number | bigint - data?: string - input?: string -} + export function isEthCallParameters( value: unknown, diff --git a/src/rpc/calls/gasPrice.ts b/src/rpc/calls/gasPrice.ts index b0c3a1f4..222df128 100644 --- a/src/rpc/calls/gasPrice.ts +++ b/src/rpc/calls/gasPrice.ts @@ -1,5 +1,5 @@ -import { getCachedGasPrice, SyncedGas } from '../../cache/gasPrice' -import { RPCError, RPCRequest, RPCResponse } from '../../types/types' +import { getCachedGasPrice } from '../../cache/gasPrice' +import { RPCError, RPCRequest, RPCResponse, SyncedGas } from '../../types/types' export async function gasPriceHandler( request: RPCRequest, diff --git a/src/rpc/calls/getBlockByHash.ts b/src/rpc/calls/getBlockByHash.ts index caa1b072..6d16ba95 100644 --- a/src/rpc/calls/getBlockByHash.ts +++ b/src/rpc/calls/getBlockByHash.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import { isHexString } from "ethers"; import { isStarknetRPCError } from "../../types/typeGuards"; import { RPCError, RPCRequest, RPCResponse } from "../../types/types"; @@ -6,6 +5,7 @@ import { callStarknet } from "../../utils/callHelper"; import { getConfigurationProperty } from "../../utils/configReader"; import { numberToHex } from "../../utils/converters/integer"; import { getLast160Bits, padHashTo64 } from "../../utils/padding"; +import { BlockWithTxs, BlockWithTxHashes, TXN } from "@starknet-io/types-js"; export async function getBlockByHashHandler(request: RPCRequest): Promise { if (!Array.isArray(request.params)) { @@ -86,35 +86,35 @@ const params = return parseBlockData(request, blockData, txDetails); } -export function parseBlockData(request: RPCRequest, starknetData: any, txDetails: boolean): RPCResponse { +export function parseBlockData(request: RPCRequest, starknetData: BlockWithTxs | BlockWithTxHashes, txDetails: boolean): RPCResponse { const baseFeePerGas = starknetData.l1_gas_price?.price_in_wei ?? '0x0'; if (!txDetails) { - const txList = starknetData.transactions; + const txList = (starknetData as BlockWithTxHashes).transactions; return { jsonrpc: request.jsonrpc, id: request.id, result: { - baseFeePerGas: baseFeePerGas, // Calculate from l1_gas_price - blobGasUsed: "0x60000", // use value like this - difficulty: "0x0", // this value ok - excessBlobGas: "0x40000", // use value like this - extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", //?? - gasLimit: "0x2ad4e1b", // maximum gas allowed in this block. Must be higher than 21000 - gasUsed: "0x1287e57", // Sum of gas used in transactions - hash: padHashTo64(starknetData.block_hash), // block_hash + baseFeePerGas: baseFeePerGas, + blobGasUsed: "0x60000", + difficulty: "0x0", + excessBlobGas: "0x40000", + extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", + gasLimit: "0x2ad4e1b", + gasUsed: "0x1287e57", + hash: padHashTo64(starknetData.block_hash ?? '0x0'), logsBloom: "0x8ff5c7f3ed5369eb783b6e19ca6dfd1d9fb0e4701e16fa7806a50b71f6fe8fb39b5d4bb66ffd608e5377bbc1bf9ff7ffeebd9fff9edfa99dfbbe77dda5ff68d7dd4cf9dd366dbbaa7f3be6dbc07fecf3f1df37f573773d7999f97ef7da62b867d75f28be8ffe227e6d26d3b6ac3b5e7bb3aba4623cf59fdd7bc06f1f3bab147d1fe8abdbd7b6fd7ee5eb9767ee33b9eede077e71e7ddb1caefb167d775f7663ebef9f1ffbedf3a763b57b5e6feefbedca5f67effc9d77d663e595636ff2b7feffeda5adf4b50efcaaedb1e77fffd78bdd26f3e5f372f9fd19ece7183ebf4a75bbfbb7c6aebf84f66f0e6cecda7cb6dcf8779aca9e3fa72e558a1ba7e54f976ef", - miner: getLast160Bits(starknetData.sequencer_address), // sequencer_address but in eth format - mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", // ?? - nonce: "0x0000000000000000", // always zero after pow - number: numberToHex(starknetData.block_number), // block_number - parentBeaconBlockRoot: padHashTo64(starknetData.new_root), // maybe parent_hash again? - parentHash: padHashTo64(starknetData.parent_hash), // parent_hash - receiptsRoot: padHashTo64(starknetData.new_root), - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", // ?? - size: "0x1b736", // Blocks size in bytes. Random value but non zero will work for sn - stateRoot: padHashTo64(starknetData.new_root), // new_root - timestamp: numberToHex(starknetData.timestamp), // timestamp but in hex - transactions: txList, // Only return tx hashes + miner: getLast160Bits(starknetData.sequencer_address ?? '0x0'), + mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", + nonce: "0x0000000000000000", + number: numberToHex(starknetData.block_number ?? 0), + parentBeaconBlockRoot: padHashTo64(starknetData.new_root ?? '0x0'), + parentHash: padHashTo64(starknetData.parent_hash ?? '0x0'), + receiptsRoot: padHashTo64(starknetData.new_root ?? '0x0'), + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + size: "0x1b736", + stateRoot: padHashTo64(starknetData.new_root ?? '0x0'), + timestamp: numberToHex(starknetData.timestamp ?? 0), + transactions: txList, transactionsRoot: "0xc00f25d59d5698d341d492876705c5810ddaac56ee81d683a7e911b4d63bdafe", uncles: [], withdrawals: [], @@ -122,32 +122,32 @@ export function parseBlockData(request: RPCRequest, starknetData: any, txDetails } } } else { - const txList = starknetData.transactions.map((tx: any) => createTxObject(starknetData, tx)); + const txList = (starknetData as BlockWithTxs).transactions.map((tx: TXN) => createTxObject(starknetData, tx)); return { jsonrpc: request.jsonrpc, id: request.id, result: { - baseFeePerGas: baseFeePerGas, // Calculate from l1_gas_price - blobGasUsed: "0x60000", // use value like this - difficulty: "0x0", // this value ok - excessBlobGas: "0x40000", // use value like this - extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", //?? - gasLimit: "0x2ad4e1b", // maximum gas allowed in this block. Must be higher than 21000 - gasUsed: "0x1287e57", // Sum of gas used in transactions - hash: padHashTo64(starknetData.block_hash), // block_hash + baseFeePerGas: baseFeePerGas, + blobGasUsed: "0x60000", + difficulty: "0x0", + excessBlobGas: "0x40000", + extraData: "0x546974616e2028746974616e6275696c6465722e78797a29", + gasLimit: "0x2ad4e1b", + gasUsed: "0x1287e57", + hash: padHashTo64(starknetData.block_hash ?? '0x0'), logsBloom: "0x8ff5c7f3ed5369eb783b6e19ca6dfd1d9fb0e4701e16fa7806a50b71f6fe8fb39b5d4bb66ffd608e5377bbc1bf9ff7ffeebd9fff9edfa99dfbbe77dda5ff68d7dd4cf9dd366dbbaa7f3be6dbc07fecf3f1df37f573773d7999f97ef7da62b867d75f28be8ffe227e6d26d3b6ac3b5e7bb3aba4623cf59fdd7bc06f1f3bab147d1fe8abdbd7b6fd7ee5eb9767ee33b9eede077e71e7ddb1caefb167d775f7663ebef9f1ffbedf3a763b57b5e6feefbedca5f67effc9d77d663e595636ff2b7feffeda5adf4b50efcaaedb1e77fffd78bdd26f3e5f372f9fd19ece7183ebf4a75bbfbb7c6aebf84f66f0e6cecda7cb6dcf8779aca9e3fa72e558a1ba7e54f976ef", - miner: getLast160Bits(starknetData.sequencer_address), // sequencer_address but in eth format - mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", // ?? - nonce: "0x0000000000000000", // always zero after pow - number: numberToHex(starknetData.block_number), // block_number - parentBeaconBlockRoot: padHashTo64(starknetData.new_root), // maybe parent_hash again? - parentHash: padHashTo64(starknetData.parent_hash), // parent_hash - receiptsRoot: padHashTo64(starknetData.new_root), - sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", // ?? - size: "0x1b736", // Blocks size in bytes. Random value but non zero will work for sn - stateRoot: padHashTo64(starknetData.new_root), // new_root - timestamp: numberToHex(starknetData.timestamp), // timestamp but in hex - transactions: txList, // Only return tx hashes + miner: getLast160Bits(starknetData.sequencer_address ?? '0x0'), + mixHash: "0x91eb7c2391a1186eb62e36f389a61333fcf46700d691f641548aaa4cce9d84e5", + nonce: "0x0000000000000000", + number: numberToHex(starknetData.block_number ?? 0), + parentBeaconBlockRoot: padHashTo64(starknetData.new_root ?? '0x0'), + parentHash: padHashTo64(starknetData.parent_hash ?? '0x0'), + receiptsRoot: padHashTo64(starknetData.new_root ?? '0x0'), + sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + size: "0x1b736", + stateRoot: padHashTo64(starknetData.new_root ?? '0x0'), + timestamp: numberToHex(starknetData.timestamp ?? 0), + transactions: txList, transactionsRoot: "0xc00f25d59d5698d341d492876705c5810ddaac56ee81d683a7e911b4d63bdafe", uncles: [], withdrawals: [], @@ -157,26 +157,34 @@ export function parseBlockData(request: RPCRequest, starknetData: any, txDetails } } -function createTxObject(starknetData: any, tx: any): any { - const gas = tx.version === "0x3" ? tx.resource_bounds.l1_gas.max_amount : '0x0' - const r = typeof tx.signature[0] === "string" ? tx.signature[0] : '0x0' - const s = typeof tx.signature[1] === "string" ? tx.signature[1] : '0x0' +function createTxObject(starknetData: BlockWithTxs | BlockWithTxHashes, tx: TXN): Record { + const txAny = tx as Record + const gas = tx.version === "0x3" && 'resource_bounds' in tx ? (tx.resource_bounds as {l1_gas: {max_amount: string}}).l1_gas.max_amount : '0x0' + const signature = 'signature' in tx ? tx.signature as string[] : [] + const r = typeof signature[0] === "string" ? signature[0] : '0x0' + const s = typeof signature[1] === "string" ? signature[1] : '0x0' const chainId = getConfigurationProperty('chainId') + + const senderAddress = 'sender_address' in tx ? (tx.sender_address as string) : '0x0' + const transactionHash = 'transaction_hash' in tx ? (tx.transaction_hash as string) : '0x0' + const nonce = 'nonce' in tx ? txAny.nonce : '0x0' + const resourceBounds = 'resource_bounds' in tx ? (tx.resource_bounds as {l2_gas: {max_amount: string, max_price_per_unit: string}}) : {l2_gas: {max_amount: '0x0', max_price_per_unit: '0x0'}} + return { - blockHash: padHashTo64(starknetData.block_hash), - blockNumber: numberToHex(starknetData.block_number), - from: getLast160Bits(tx.sender_address), // TODO: We cant fetch registry for each tx so this is temp solution here + blockHash: padHashTo64(starknetData.block_hash ?? '0x0'), + blockNumber: numberToHex(starknetData.block_number ?? 0), + from: getLast160Bits(senderAddress), gas: gas, gasPrice: "0x8e2a40e26", - maxPriorityFeePerGas: tx.resource_bounds.l2_gas.max_amount, - maxFeePerGas: tx.resource_bounds.l2_gas.max_price_per_unit, - hash: padHashTo64(tx.transaction_hash), - input: "0x0", // We cant parse starknet calldata now. So we return 0x0 here. - nonce: tx.nonce, - to: getLast160Bits(tx.sender_address), // TODO: We cant parse starknet calldata now. So we return sender address here. + maxPriorityFeePerGas: resourceBounds.l2_gas.max_amount, + maxFeePerGas: resourceBounds.l2_gas.max_price_per_unit, + hash: padHashTo64(transactionHash), + input: "0x0", + nonce: nonce, + to: getLast160Bits(senderAddress), transactionIndex: "0x0", value: "0x0", - type: "0x2", // All txs returned as eip1559 by default. In further we may match with sn versions. + type: "0x2", accessList: [], chainId: chainId, v: "0x0", diff --git a/src/rpc/calls/getBlockByHashOld.ts b/src/rpc/calls/getBlockByHashOld.ts deleted file mode 100644 index 346ece32..00000000 --- a/src/rpc/calls/getBlockByHashOld.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { isStarknetRPCError } from '../../types/typeGuards' -import { - RPCError, - RPCRequest, - RPCResponse, - StarknetRPCError, -} from '../../types/types' -import { callStarknet } from '../../utils/callHelper' -import { validateBlockHash } from '../../utils/validations' - -export async function getBlockByHashHandler( - request: RPCRequest, -): Promise { - // Define the network and method - - // Check params' length - if (request.params.length != 2) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Parameter length should be 2.', - }, - } - } - - // Get the block hash - const blockHash = request.params[0] as string - - // Validate the block hash - if (!validateBlockHash(blockHash)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Invalid block hash.', - }, - } - } - - // Get the boolean parameter and check its type - const isFullTxObjectRequested = request.params[1] - - if (typeof isFullTxObjectRequested != 'boolean') { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: - 'Invalid argument, Invalid parameter[1] type. Expected boolean', - }, - } - } - - if (isFullTxObjectRequested == true) { - const method = 'starknet_getBlockWithTxs' - - const response: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: request.jsonrpc, - method, - params: [{ block_hash: blockHash }], - id: request.id, - }) - - if (isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } - } - - // Construct the result with types - const result = response.result as { - block_hash: string - block_number: number - l1_gas_price: { - price_in_wei: string - } - new_root: string - parent_hash: string - sequencer_address: string - starknet_version: string - status: 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' - timestamp: number - transactions: Array<{ - calldata: string[] - max_fee: string - nonce: string - sender_address: string - signature: string[] - transaction_hash: string - type: 'DECLARE' | 'DEPLOY' | 'DEPLOY_ACCOUNT' | 'INVOKE' | 'L1_HANDLER' - version: string - }> - } - - if ( - result.status !== 'ACCEPTED_ON_L1' && - result.status !== 'ACCEPTED_ON_L2' - ) { - // Check if the block is accepted - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32002, - message: 'Resource unavailable, Block is not accepted yet.', - }, - } - } - - const transactions = result.transactions.map((transaction, index) => { - return { - accessList: [], - blockHash: result.block_hash, - blockNumber: '0x' + result.block_number.toString(16), - chainId: '0x0', // No chainId field returned by StarkNet - from: transaction.sender_address, - gas: '0x0', // No gas field can be retrieved from given methods - gasPrice: '0x' + result.l1_gas_price.price_in_wei, - hash: transaction.transaction_hash, - input: '0x' + transaction.calldata.join(''), // Concatenate calldata for simplicity. - maxFeePerGas: transaction.max_fee || '0x0', // maxFeePerGas field may not be returned by StarkNet - maxPriorityFeePerGas: '0x0', // No maxPriorityFeePerGas field returned by StarkNet - nonce: '0x' + parseInt(transaction.nonce).toString(16), - r: transaction.signature.length > 0 ? transaction.signature[0] : '0x0', // Map the first signature element to 'r' - s: transaction.signature.length > 1 ? transaction.signature[1] : '0x0', // Map the first signature element to 's' - to: '0x0', // StarkNet transactions may not always have a direct 'to' field. - transactionIndex: '0x' + index.toString(16), - type: transaction.type, - v: '0x1b', // Placeholder, as StarkNet does not have a direct 'v' equivalent, or use `0x1c` (27 or 28) - value: '0x0', // StarkNet transactions don't directly map to ETH value transfers. - } - }) - - return { - jsonrpc: '2.0', - id: request.id, - result: { - difficulty: '0x0', // StarkNet does not work in PoW - extraData: '0x0', // StarkNet does not work in PoW - gasLimit: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - gasUsed: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - hash: result.block_hash, - logsBloom: '0x0', // The mechanism for indexing and querying these events in Starknet does not rely on a Bloom filter - miner: '0x0', // StarkNet does not work in PoW - mixHash: '0x0', // StarkNet does not work in PoW - nonce: '0x0', // The nonce here demonstrates computational work, which is not applicable to StarkNet - number: '0x' + result.block_number.toString(16), // 'number' is the block number in hex format - parentHash: result.parent_hash, - receiptsRoot: '0x0', // No receiptsRoot field returned by StarkNet - sha3Uncles: '0x0', // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - size: '0x0', // No size field returned by StarkNet - stateRoot: '0x' + result.new_root, - timestamp: '0x' + result.timestamp.toString(16), - totalDifficulty: '0x0', // StarkNet does not work in PoW - transactions: transactions, - transactionsRoot: '0x0', // No transactionsRoot field returned by StarkNet - uncles: [], // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - }, - } - } else { - const method = 'starknet_getBlockWithTxHashes' - - const response: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: request.jsonrpc, - method, - params: [{ block_hash: blockHash }], - id: request.id, - }) - - if (isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } - } - - // Construct the result with types - const result = response.result as { - block_hash: string - block_number: number - l1_gas_price: { - price_in_wei: string - } - new_root: string - parent_hash: string - sequencer_address: string - starknet_version: string - status: 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' - timestamp: number - transactions: string[] - } - - return { - jsonrpc: '2.0', - id: request.id, - result: { - difficulty: '0x0', // StarkNet does not work in PoW - extraData: '0x0', // StarkNet does not work in PoW - gasLimit: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - gasUsed: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - hash: result.block_hash, - logsBloom: '0x0', // The mechanism for indexing and querying these events in Starknet does not rely on a Bloom filter - miner: '0x0', // StarkNet does not work in PoW - mixHash: '0x0', // StarkNet does not work in PoW - nonce: '0x0', // The nonce here demonstrates computational work, which is not applicable to StarkNet - number: '0x' + result.block_number.toString(16), // 'number' is the block number in hex format - parentHash: result.parent_hash, - receiptsRoot: '0x0', // No receiptsRoot field returned by StarkNet - sha3Uncles: '0x0', // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - size: '0x0', // No size field returned by StarkNet - stateRoot: '0x' + result.new_root, - timestamp: '0x' + result.timestamp.toString(16), - totalDifficulty: '0x0', // StarkNet does not work in PoW - transactions: result.transactions, - transactionsRoot: '0x0', // No transactionsRoot field returned by StarkNet - uncles: [], // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - }, - } - } -} diff --git a/src/rpc/calls/getBlockByNumber.ts b/src/rpc/calls/getBlockByNumber.ts index 302f84ae..61a68edb 100644 --- a/src/rpc/calls/getBlockByNumber.ts +++ b/src/rpc/calls/getBlockByNumber.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import { isHexString } from "ethers"; import { RPCError, RPCRequest, RPCResponse } from "../../types/types"; import { hexToDecimal } from "../../utils/converters/integer"; @@ -8,83 +7,84 @@ import { parseBlockData } from "./getBlockByHash"; import { writeLog } from "../../logger"; export async function getBlockByNumberHandler(request: RPCRequest): Promise { - if(!Array.isArray(request.params)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Parameter must be array', - }, - } + if (!Array.isArray(request.params)) { + return { + jsonrpc: request.jsonrpc, + id: request.id, + error: { + code: -32602, + message: 'Invalid argument, Parameter must be array', + }, } - if (request.params.length != 2) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Parameter length must be 2.', - }, - } + } + if (request.params.length != 2) { + return { + jsonrpc: request.jsonrpc, + id: request.id, + error: { + code: -32602, + message: 'Invalid argument, Parameter length must be 2.', + }, } + } - const blockNumber = blockNumberParameter(request.params[0]); - const txDetails = request.params[1] as boolean; - writeLog(1, "Blocknumber: " + blockNumber) - let blockData; + const blockNumber = blockNumberParameter(request.params[0]); + const txDetails = request.params[1] as boolean; + writeLog(1, "Blocknumber: " + blockNumber) + let blockData; - if(txDetails == false) { - const response = await callStarknet({ + if (txDetails == false) { + const response = await callStarknet({ + jsonrpc: request.jsonrpc, + method: 'starknet_getBlockWithTxHashes', + params: [blockNumber], + id: request.id, + }) + + if (isStarknetRPCError(response)) { + return { jsonrpc: request.jsonrpc, - method: 'starknet_getBlockWithTxHashes', - params: [blockNumber], id: request.id, - }) - - if(isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } + error: response, } + } - blockData = response.result; - } else { - const response = await callStarknet({ + blockData = response.result; + } else { + const response = await callStarknet({ + jsonrpc: request.jsonrpc, + method: 'starknet_getBlockWithTxs', + params: [blockNumber], + id: request.id, + }) + + if (isStarknetRPCError(response)) { + return { jsonrpc: request.jsonrpc, - method: 'starknet_getBlockWithTxs', - params: [blockNumber], id: request.id, - }) - - if(isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } + error: response, } - blockData = response.result; } + blockData = response.result; + } - return parseBlockData(request, blockData, txDetails); + return parseBlockData(request, blockData, txDetails); } -function blockNumberParameter(param: any): any { - if(typeof param === 'number') { - return { - block_number: param - } +function blockNumberParameter(param: number | string): { block_number: string | number } | string { + if (typeof param === 'number') { + return { + block_number: param } - if(typeof param === 'string') { - if(isHexString(param)) { - return { - block_number : hexToDecimal(param) - } - } else { - return param === "latest" ? param : "pending" - } + } + if (typeof param === 'string') { + if (isHexString(param)) { + return { + block_number: hexToDecimal(param) + } + } else { + return param === "latest" ? "latest" : "pending" } + } + return { block_number: 0 } } \ No newline at end of file diff --git a/src/rpc/calls/getBlockByNumberOld.ts b/src/rpc/calls/getBlockByNumberOld.ts deleted file mode 100644 index f54089b1..00000000 --- a/src/rpc/calls/getBlockByNumberOld.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { isHexString } from 'ethers' -import { - RPCError, - RPCRequest, - RPCResponse, - StarknetRPCError, -} from '../../types/types' -import { callStarknet } from '../../utils/callHelper' -import { validateBlockNumber } from '../../utils/validations' -import { isStarknetRPCError } from '../../types/typeGuards' -export async function getBlockByNumberHandler( - request: RPCRequest, -): Promise { - // Define the network and method - - // Check params' length - if (request.params.length != 2) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Parameter lenght should be 2.', - }, - } - } - - // Get the block number - const blockNumber = request.params[0] as string - - // Validate the block hash - if (!validateBlockNumber(blockNumber)) { - // TODO: check validation - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: 'Invalid argument, Invalid block number.', - }, - } - } - - const currentLiveBlockNumber: RPCResponse | StarknetRPCError = - await callStarknet({ - jsonrpc: request.jsonrpc, - method: 'starknet_blockNumber', - params: [], - id: request.id, - }) - - if (isStarknetRPCError(currentLiveBlockNumber)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: currentLiveBlockNumber, - } - } - - // Get the boolean parameter and check its type - const isFullTxObjectRequested = request.params[1] - - if (typeof isFullTxObjectRequested != 'boolean') { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: - 'Invalid argument, Invalid parameter[1] type. Expected boolean', - }, - } - } - - const params = - blockNumber === 'latest' || blockNumber === 'pending' - ? [blockNumber] - : isHexString(blockNumber) - ? [{ block_number: parseInt(blockNumber, 16) }] - : [{ block_number: blockNumber }] - - if (isFullTxObjectRequested == true) { - const method = 'starknet_getBlockWithTxs' - - const response: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: request.jsonrpc, - method, - params, - id: request.id, - }) - - if (isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } - } - - // Construct the result with types - const result = response.result as { - block_hash: string - block_number: number - l1_gas_price: { - price_in_wei: string - } - new_root: string - parent_hash: string - sequencer_address: string - starknet_version: string - status: 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' - timestamp: number - transactions: Array<{ - calldata: string[] - max_fee: string - nonce: string - sender_address: string - signature: string[] - transaction_hash: string - type: 'DECLARE' | 'DEPLOY' | 'DEPLOY_ACCOUNT' | 'INVOKE' | 'L1_HANDLER' - version: string - }> - } - - if ( - result.status !== 'ACCEPTED_ON_L1' && - result.status !== 'ACCEPTED_ON_L2' - ) { - // Check if the block is accepted - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32002, - message: 'Resource unavailable, Block is not accepted yet.', - }, - } - } - - const transactions = result.transactions.map((transaction, index) => { - return { - accessList: [], - blockHash: result.block_hash, - blockNumber: '0x' + result.block_number.toString(16), - chainId: '0x0', // No chainId field returned by StarkNet - from: transaction.sender_address, - gas: '0x0', // No gas field can be retrieved from given methods - gasPrice: '0x' + result.l1_gas_price.price_in_wei, - hash: transaction.transaction_hash, - input: '0x' + transaction.calldata?.join(''), // Concatenate calldata for simplicity. - maxFeePerGas: transaction.max_fee || '0x0', // maxFeePerGas field may not be returned by StarkNet - maxPriorityFeePerGas: '0x0', // No maxPriorityFeePerGas field returned by StarkNet - nonce: '0x' + parseInt(transaction.nonce).toString(16), - r: transaction.signature?.length > 0 ? transaction.signature[0] : '0x0', // Map the first signature element to 'r' - s: transaction.signature?.length > 1 ? transaction.signature[1] : '0x0', // Map the first signature element to 's' - to: '0x0', // StarkNet transactions may not always have a direct 'to' field. - transactionIndex: '0x' + index.toString(16), - type: transaction.type, - v: '0x1b', // Placeholder, as StarkNet does not have a direct 'v' equivalent, or use `0x1c` (27 or 28) - value: '0x0', // StarkNet transactions don't directly map to ETH value transfers. - } - }) - - return { - jsonrpc: '2.0', - id: request.id, - result: { - number: '0x' + result.block_number.toString(16), // 'number' is the block number in hex format - baseFeePerGas: '0x13f5345', // This is needed to web3 wallet decides it is eip1559 tx - difficulty: '0x0', // StarkNet does not work in PoW - extraData: '0x0', // StarkNet does not work in PoW - gasLimit: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - gasUsed: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - hash: result.block_hash, - logsBloom: '0x0', // The mechanism for indexing and querying these events in Starknet does not rely on a Bloom filter - miner: '0x0', // StarkNet does not work in PoW - mixHash: '0x0', // StarkNet does not work in PoW - nonce: '0x0', // The nonce here demonstrates computational work, which is not applicable to StarkNet - parentHash: result.parent_hash, - receiptsRoot: '0x0', // No receiptsRoot field returned by StarkNet - sha3Uncles: '0x0', // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - size: '0x0', // No size field returned by StarkNet - stateRoot: '0x' + result.new_root, - timestamp: '0x' + result.timestamp.toString(16), - totalDifficulty: '0x0', // StarkNet does not work in PoW - transactions: transactions, - transactionsRoot: '0x0', // No transactionsRoot field returned by StarkNet - uncles: [], // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - }, - } - } else { - const method = 'starknet_getBlockWithTxHashes' - - const response: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: request.jsonrpc, - method, - params: ['latest'], - id: request.id, - }) - if (isStarknetRPCError(response)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: response, - } - } - - // Construct the result with types - const result = response.result as { - block_hash: string - block_number: number - l1_gas_price: { - price_in_wei: string - } - new_root: string - parent_hash: string - sequencer_address: string - starknet_version: string - status: 'RECEIVED' | 'REJECTED' | 'ACCEPTED_ON_L2' | 'ACCEPTED_ON_L1' - timestamp: number - transactions: string[] - } - - return { - jsonrpc: '2.0', - id: request.id, - result: { - number: '0x' + result.block_number.toString(16), // 'number' is the block number in hex format - baseFeePerGas: '0x13f5345', // This is needed to web3 wallet decides it is eip1559 tx - difficulty: '0x0', // StarkNet does not work in PoW - extraData: '0x0', // StarkNet does not work in PoW - gasLimit: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - gasUsed: '0x0', // Gas metrics in StarkNet are more focused on individual transactions - hash: result.block_hash, - logsBloom: '0x0', // The mechanism for indexing and querying these events in Starknet does not rely on a Bloom filter - miner: '0x0', // StarkNet does not work in PoW - mixHash: '0x0', // StarkNet does not work in PoW - nonce: '0x0', // The nonce here demonstrates computational work, which is not applicable to StarkNet - parentHash: result.parent_hash, - receiptsRoot: '0x0', // No receiptsRoot field returned by StarkNet - sha3Uncles: '0x0', // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - size: '0x0', // No size field returned by StarkNet - stateRoot: '0x' + result.new_root, - timestamp: '0x' + result.timestamp.toString(16), - totalDifficulty: '0x0', // StarkNet does not work in PoW - transactions: result.transactions, - transactionsRoot: '0x0', // No transactionsRoot field returned by StarkNet - uncles: [], // Uncles are the mechanism for rewarding miners in PoW, which is not applicable to StarkNet - }, - } - } -} diff --git a/src/rpc/calls/getTransactionReceipt.ts b/src/rpc/calls/getTransactionReceipt.ts index 8f094377..0755b00a 100644 --- a/src/rpc/calls/getTransactionReceipt.ts +++ b/src/rpc/calls/getTransactionReceipt.ts @@ -1,5 +1,6 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { ethers, Transaction } from "ethers"; +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable no-console */ +import { Transaction } from "ethers"; import { writeLog } from "../../logger"; import { isStarknetRPCError } from "../../types/typeGuards"; import { RosettanetRawCalldata, RPCError, RPCRequest, RPCResponse, StarknetRPCError } from "../../types/types"; @@ -8,6 +9,7 @@ import { sumHexStrings } from "../../utils/converters/integer"; import { padHashTo64, padTo256Byte } from "../../utils/padding"; import { parseRosettanetRawCalldata, isRosettaAccountDeployed } from "../../utils/rosettanet"; import { getEthersTransactionFromRosettanetCall, getEthersTransactionFromStarknetCall } from "../../utils/signature"; +import { TransactionWithHash, TransactionReceipt } from "starknet"; import { getConfigurationProperty } from "../../utils/configReader"; export async function getTransactionReceiptHandler(request: RPCRequest): Promise { @@ -101,44 +103,31 @@ export async function getTransactionReceiptHandler(request: RPCRequest): Promise } } -/* - + "blockHash": "0x0a79eca9f5ca58a1d5d5030a0fabfdd8e815b8b77a9f223f74d59aa39596e1c7", - + "blockNumber": "0x11e5883", - + "contractAddress": null, - + "cumulativeGasUsed": "0xc5f3e7", - + "effectiveGasPrice": "0xa45b9a444", - + "from": "0x690b9a9e9aa1c9db991c7721a92d351db4fac990", - + "gasUsed": "0x565f", - + "logs": [], - + "logsBloom": "0x00000000000000000000000000000000000100004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000", - + "status": "0x1", - + "to": "0x388c818ca8b9251b393131c08a736a67ccb19297", - + "transactionHash": "0x7114b4da1a6ed391d5d781447ed443733dcf2b508c515b81c17379dea8a3c9af", - "transactionIndex": "0x76", - + "type": "0x2" -*/ // Inputs starknet_getTransactionByHash result -async function parseTxDetails(result: any): Promise<{ from: string; to: string; gasUsed: string; cumulativeGasUsed: string; type: string; effectiveGasPrice: string }> { +async function parseTxDetails(result: TransactionWithHash): Promise<{ from: string; to: string; gasUsed: string; cumulativeGasUsed: string; type: string; effectiveGasPrice: string }> { // from address await ile eth adres cekilmeli ama?? const accountClass = getConfigurationProperty("accountClass") let ethersTx: Transaction | undefined - const isRosettanetAccount = await isRosettaAccountDeployed(result.sender_address, accountClass) + const signature: string[] = ('signature' in result && result.signature ? result.signature : []) as string[] + const calldata: string[] = ('calldata' in result && result.calldata ? result.calldata : []) as string[] + const senderAddress: string = ('sender_address' in result && result.sender_address ? result.sender_address : '0x0') as string + + const isRosettanetAccount = await isRosettaAccountDeployed(senderAddress, accountClass) if (isRosettanetAccount) { - ethersTx = getEthersTransactionFromRosettanetCall(result.signature, result.calldata) + ethersTx = getEthersTransactionFromRosettanetCall(signature, calldata) } else { console.log("123") ethersTx = getEthersTransactionFromStarknetCall(result) } + const parsedCalldata: RosettanetRawCalldata | undefined = parseRosettanetRawCalldata(calldata) - const parsedCalldata: RosettanetRawCalldata | undefined = parseRosettanetRawCalldata(result.calldata) - - if (typeof parsedCalldata === 'undefined' && isRosettanetAccount) { + if (typeof parsedCalldata === 'undefined') { writeLog(2, 'Error at parsing RawCalldata') - writeLog(2, result.calldata) + writeLog(2, JSON.stringify(calldata)) return { gasUsed: '0x0', from: '0x0', to: '0x0', cumulativeGasUsed: '0x0', type: '0x0', effectiveGasPrice: '0x0' }; @@ -176,7 +165,7 @@ function getEffectiveGasPrice(tx: Transaction): string { } // Inputs starknet_getTransactionReceipt result -function parseTxReceipt(result: any): { blockHash: string; blockNumber: string; transactionHash: string; status: string; events: any; } { +function parseTxReceipt(result: TransactionReceipt): { blockHash: string; blockNumber: string; transactionHash: string; status: string; events: any; } { const blockHash = typeof result.block_hash === 'string' ? padHashTo64(result.block_hash) : padHashTo64('0x0'); const blockNumber = typeof result.block_number === 'number' ? '0x' + result.block_number.toString(16) : '0x0'; const transactionHash = typeof result.transaction_hash === 'string' ? padHashTo64(result.transaction_hash) : padHashTo64('0x0'); @@ -198,8 +187,8 @@ function getTransactionStatus(exec_status: string): string { } // Inputs starknet_getTransactionByHash result -function getTransactionType(txDetailsResult: any): string { - const calldata = txDetailsResult?.calldata; +function getTransactionType(txDetailsResult: TransactionWithHash): string { + const calldata = 'calldata' in txDetailsResult ? txDetailsResult.calldata : []; if (!Array.isArray(calldata)) { return '0x0' } diff --git a/src/rpc/calls/getTransactionReceiptOld.ts b/src/rpc/calls/getTransactionReceiptOld.ts deleted file mode 100644 index 6b3e8c8d..00000000 --- a/src/rpc/calls/getTransactionReceiptOld.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import BigNumber from 'bignumber.js' -import { isRPCResponse, isStarknetRPCError } from '../../types/typeGuards' -import { - RPCError, - RPCRequest, - RPCResponse, - StarknetRPCError, -} from '../../types/types' -import { callStarknet } from '../../utils/callHelper' -import { getEthAddressFromSnAddress } from '../../utils/wrapper' -import { calculateSpentGas } from '../../utils/gas' - -interface TransactionByHashResponse { - transaction_hash: string - sender_address: string - type: string - version: string - resource_bounds: { - l1_gas: { - max_amount: string - max_price_per_unit: string - } - l2_gas: { - max_amount: string - max_price_per_unit: string - } - } - calldata: string[] - constructor_calldata: string[] -} - -interface TransactionReceiptResponse { - block_hash: string - block_number: number | string - // eslint-disable-next-line @typescript-eslint/no-explicit-any - events: any - execution_status: string - finality_status: string - actual_fee: { - amount: string - unit: string - } -} - -function isTransactionByHashResponse( - value: unknown, -): value is TransactionByHashResponse { - if (typeof value === 'object' && value !== null) { - const obj = value as TransactionByHashResponse - if (typeof obj.type === 'string' && obj.type === 'INVOKE') { - return ( - typeof obj.transaction_hash === 'string' && - typeof obj.sender_address === 'string' && - typeof obj.version === 'string' && - typeof obj.resource_bounds === 'object' && - typeof obj.resource_bounds.l1_gas === 'object' && - typeof obj.resource_bounds.l2_gas === 'object' && - typeof obj.resource_bounds.l1_gas.max_amount === 'string' && - typeof obj.resource_bounds.l1_gas.max_price_per_unit === 'string' && - typeof obj.resource_bounds.l2_gas.max_amount === 'string' && - typeof obj.resource_bounds.l2_gas.max_price_per_unit === 'string' && - Array.isArray(obj.calldata) && - obj.calldata.length > 0 - ) - } else { - return ( - typeof obj.transaction_hash === 'string' && - Array.isArray(obj.constructor_calldata) && - obj.constructor_calldata.length > 0 - ) - } - } - return false -} - -function isTransactionReceiptResponse( - value: unknown, -): value is TransactionReceiptResponse { - if (typeof value === 'object' && value !== null) { - const obj = value as TransactionReceiptResponse - return ( - typeof obj.block_hash === 'string' && - typeof obj.execution_status === 'string' && - typeof obj.finality_status === 'string' && - typeof obj.events !== 'undefined' && - typeof obj.actual_fee === 'object' && - (typeof obj.block_number === 'number' || - typeof obj.block_number === 'string') && - typeof obj.actual_fee.amount === 'string' && - typeof obj.actual_fee.unit === 'string' - ) - } - return false -} - -type TransactionHashObject = { - transaction_hash: string -} - -interface TransactionReceiptRequest extends RPCRequest { - params: string[] | TransactionHashObject[] -} - -export async function getTransactionReceiptHandler( - request: TransactionReceiptRequest, -): Promise { - if (request.params.length == 0) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - error: { - code: -32602, - message: - 'Invalid argument, Parameter should be valid transaction hash.', - }, - } - } - - const txHash = - typeof request.params[0] === 'string' - ? request.params[0] - : request.params[0].transaction_hash - - const starknetTransactionDetails: RPCResponse | StarknetRPCError = - await callStarknet({ - jsonrpc: request.jsonrpc, - method: 'starknet_getTransactionByHash', - params: { - transaction_hash: txHash, - }, - id: request.id, - }) - - // TODO: deploy tx returns failin because there is no sender_address on deploy account tx - - // TODO: Improve safety for if deploy account tx - - if (!isRPCResponse(starknetTransactionDetails)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: null, - } - } - - if (!isTransactionByHashResponse(starknetTransactionDetails.result)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: null, - } - } - - const starknetTransactionReceipt: RPCResponse | StarknetRPCError = - await callStarknet({ - jsonrpc: request.jsonrpc, - method: 'starknet_getTransactionReceipt', - params: { - transaction_hash: txHash, - }, - id: request.id, - }) - - if (!isRPCResponse(starknetTransactionReceipt)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: null, - } - } - - if (!isTransactionReceiptResponse(starknetTransactionReceipt.result)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: null, - } - } - - const { - transaction_hash, - sender_address, - type, - version, - resource_bounds, - calldata, - constructor_calldata, - } = starknetTransactionDetails.result - const { - block_hash, - block_number, - events, - execution_status, - finality_status, - actual_fee, - } = starknetTransactionReceipt.result - if (type === 'DEPLOY_ACCOUNT') { - const gasUsed = calculateSpentGas( - resource_bounds.l1_gas.max_price_per_unit, - actual_fee, - ) - const receiptObject = { - blockHash: block_hash, - blockNumber: new BigNumber(block_number).toString(16), // Hex string eg 0x123 - contractAddress: null, - cumulativeGasUsed: '0x500FF', // Random value - effectiveGasPrice: resource_bounds.l1_gas.max_price_per_unit, - from: constructor_calldata[0], // Sender address but receive it from rosettanet - gasUsed: gasUsed, - logs: [], // These will be added after - logsBloom: '', // These will be added after - status: execution_status === 'SUCCEEDED' ? '0x1' : '0x0', - to: constructor_calldata[0], - transactionHash: transaction_hash, - transactionIndex: '0x1', // We may need extra request to receive this. Is it really important? - type: '0x2', - } - - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: receiptObject, - } - } - - const to = calldata[0] - - const from: string | StarknetRPCError = - await getEthAddressFromSnAddress(sender_address) - - if (isStarknetRPCError(from)) { - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: null, - } - } - - const gasUsed = calculateSpentGas( - resource_bounds.l1_gas.max_price_per_unit, - actual_fee, - ) - - const receiptObject = { - blockHash: block_hash, - blockNumber: new BigNumber(block_number).toString(16), // Hex string eg 0x123 - contractAddress: null, - cumulativeGasUsed: '0x500FF', // Random value - effectiveGasPrice: resource_bounds.l1_gas.max_price_per_unit, - from: from, // Sender address but receive it from rosettanet - gasUsed: gasUsed, - logs: [], // These will be added after - logsBloom: '', // These will be added after - status: execution_status === 'SUCCEEDED' ? '0x1' : '0x0', - to: to, - transactionHash: transaction_hash, - transactionIndex: '0x1', // We may need extra request to receive this. Is it really important? - type: '0x2', - } - - return { - jsonrpc: request.jsonrpc, - id: request.id, - result: receiptObject, - } -} diff --git a/src/rpc/calls/sendRawTransaction.ts b/src/rpc/calls/sendRawTransaction.ts index d0a0241f..40968762 100644 --- a/src/rpc/calls/sendRawTransaction.ts +++ b/src/rpc/calls/sendRawTransaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Transaction } from 'ethers' import { RPCError, @@ -6,6 +7,9 @@ import { SignedRawTransaction, StarknetRPCError, ValidationError, + AccountDeployError, + AccountDeployResult, + RosettanetAccountResult } from '../../types/types' import { validateRawTransaction } from '../../utils/validations' import { @@ -15,11 +19,8 @@ import { isStarknetRPCError, } from '../../types/typeGuards' import { - AccountDeployError, - AccountDeployResult, deployRosettanetAccount, getRosettaAccountAddress, - RosettanetAccountResult, } from '../../utils/rosettanet' import { callStarknet } from '../../utils/callHelper' import { @@ -117,8 +118,7 @@ export async function sendRawTransactionHandler( async function broadcastTransaction( request: RPCRequest, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - params: any, + params: any, // invoke & deploy transaction params ): Promise { const response: RPCResponse | StarknetRPCError = await callStarknet(< RPCRequest diff --git a/src/server.ts b/src/server.ts index 8fa8d3cd..6f8c6eb2 100644 --- a/src/server.ts +++ b/src/server.ts @@ -13,7 +13,7 @@ export function StartListening() { app.use(cors()) app.options('*', cors()) - + app.use((req, res, next) => { if (req.method !== 'POST') { return res.status(405).json({ @@ -38,7 +38,7 @@ export function StartListening() { try { req.body = JSON.parse(data) next() - } catch (e) { + } catch { return res.status(400).json({ jsonrpc: '2.0', id: null, @@ -65,7 +65,7 @@ export function StartListening() { try { req.body = JSON.parse(data) next() - } catch (e) { + } catch { return res.status(400).json({ jsonrpc: '2.0', id: null, @@ -90,7 +90,7 @@ export function StartListening() { verify: (req, res, buf) => { try { JSON.parse(buf.toString()) - } catch (e) { + } catch { throw new Error('Invalid JSON') } }, @@ -121,7 +121,6 @@ export function StartListening() { app.use('/', Routes) const server = app.listen(port, host, (): void => { - // eslint-disable-next-line no-console writeLog(0, `Server started at ${host}:${port}`) }) diff --git a/src/types/transactions.types.ts b/src/types/transactions.types.ts index 90e727e8..c5d723bf 100644 --- a/src/types/transactions.types.ts +++ b/src/types/transactions.types.ts @@ -1,4 +1,4 @@ -import { AccessList } from 'ethers' +import { ResourceBounds } from "./types" export interface EthereumSignature { v: number @@ -7,23 +7,6 @@ export interface EthereumSignature { networkV?: string } -export interface EthereumTransaction { - chainId?: string - type?: string - hash?: string - nonce?: number - gasLimit?: string - maxFeePerGas?: string - maxPriorityFeePerGas?: string - from?: string - to?: string - publicKey?: string - data: string - value?: string - signature: EthereumSignature - accessList?: AccessList -} - export interface StarknetInvokeTransaction { invoke_transaction: { account_deployment_data: Array @@ -32,8 +15,7 @@ export interface StarknetInvokeTransaction { nonce: string nonce_data_availability_mode: string paymaster_data: Array - // eslint-disable-next-line @typescript-eslint/no-explicit-any - resource_bounds?: any + resource_bounds?: ResourceBounds sender_address: string signature: Array tip: string diff --git a/src/types/typeGuards.ts b/src/types/typeGuards.ts index 669c45a9..52a18e58 100644 --- a/src/types/typeGuards.ts +++ b/src/types/typeGuards.ts @@ -1,19 +1,16 @@ -import { AccountDeployError, AccountDeployResult } from '../utils/rosettanet' +/* eslint-disable @typescript-eslint/no-explicit-any */ import { EVMDecodeError, EVMDecodeResult, EVMEncodeResult, PrepareCalldataError, - RawTransaction, - RosettanetRawCalldata, RosettanetSignature, RPCError, RPCResponse, SignedRawTransaction, - SimulateTransaction, StarknetContract, StarknetRPCError, - ValidationError, + AccountDeployResult } from './types' export function isRPCError(value: unknown): value is RPCError { @@ -43,16 +40,6 @@ export function isRPCResponse(value: unknown): value is RPCResponse { return false } -export function isAccountDeployError( - value: unknown, -): value is AccountDeployError { - if (typeof value === 'object' && value !== null) { - const obj = value as AccountDeployError - return typeof obj.code === 'number' && typeof obj.message === 'string' - } - return false -} - export function isAccountDeployResult( value: unknown, ): value is AccountDeployResult { @@ -129,14 +116,6 @@ export function isSignedRawTransaction( return false } -export function isValidationError(value: unknown): value is ValidationError { - if (typeof value === 'object' && value !== null) { - const obj = value as ValidationError - return typeof obj.message === 'string' - } - return false -} - export function isPrepareCalldataError( value: unknown, ): value is PrepareCalldataError { @@ -158,7 +137,6 @@ export function isStarknetContract(value: unknown): value is StarknetContract { // Function for checking Starknet RPC error responses export function isStarknetRPCError(value: unknown): value is StarknetRPCError { if (typeof value === 'object' && value !== null) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any const obj = value as any // Check both direct error structure and nested error structure return ( @@ -169,66 +147,4 @@ export function isStarknetRPCError(value: unknown): value is StarknetRPCError { ) } return false -} - -export function isEstimateGasTransaction( - value: unknown, -): value is RawTransaction { - if (typeof value === 'object' && value !== null) { - const obj = value as RawTransaction - return ( - typeof obj.from === 'string' && - typeof obj.to === 'string' && - typeof obj.gas === 'string' && - typeof obj.gasPrice === 'string' - ) - } - return false -} - -export function isSimulateTransaction( - value: unknown, -): value is SimulateTransaction { - if (typeof value === 'object' && value !== null) { - const obj = value as SimulateTransaction - return ( - (typeof obj.from === 'string' || obj.from == null) && - typeof obj.to === 'string' && - (typeof obj.gas === 'string' || obj.gas == null) && - (typeof obj.gasPrice === 'string' || obj.gasPrice == null) && - (typeof obj.maxPriorityFeePerGas === 'string' || - obj.maxPriorityFeePerGas == null) && - (typeof obj.maxFeePerGas === 'string' || obj.maxFeePerGas == null) && - (typeof obj.value === 'string' || obj.value == null) && - (typeof obj.data === 'string' || obj.data == null) && - (typeof obj.gasLimit === 'string' || obj.gasLimit == null) - ) - } - return false -} - -/** - * Type guard function to check if the provided value is a valid RosettanetRawCalldata object. - * @param value - The value to check - * @returns A type predicate indicating if the value is RosettanetRawCalldata - */ -export function isRosettanetRawCalldata(value: unknown): value is RosettanetRawCalldata { - if (!value || typeof value !== 'object') { - return false; - } - - const obj = value as Record; - - // Check that all required properties exist and are strings - return ( - typeof obj.txType === 'string' && - typeof obj.to === 'string' && - typeof obj.nonce === 'string' && - typeof obj.maxPriorityFeePerGas === 'string' && - typeof obj.maxFeePerGas === 'string' && - typeof obj.gasPrice === 'string' && - typeof obj.gasLimit === 'string' && - typeof obj.value === 'string' && - typeof obj.selector === 'string' - ); } \ No newline at end of file diff --git a/src/types/types.ts b/src/types/types.ts index 7844ee8b..b43bb247 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -1,7 +1,6 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Request } from 'express' import { Abi } from 'starknet' -import { StarknetCallableMethod } from '../utils/match' export interface ParsedRequest extends Request { rpcRequest?: RPCRequest @@ -35,11 +34,6 @@ export interface ResponseHandler { handler(request?: RPCRequest | undefined): Promise } -export interface StarknetType { - name: string - converter(value: string): string | Array | undefined -} - export interface StarknetFunctionInput { name: string type: string @@ -49,11 +43,6 @@ export interface StarknetFunctionOutput { type: string } -export interface StarknetTypeMember { - name: string - type: string -} - export interface StarknetFunction { name: string inputs?: Array @@ -62,22 +51,6 @@ export interface StarknetFunction { state_mutability: string } -export interface EthereumSlot { - order: number - bits: number -} - -export interface EthereumBitSize { - slotSize: number - bitSize: number -} - -export interface StarknetValue { - value: string - bitSize: number -} -// After refactor types - export interface EVMDecodeResult { calldata: Array directives: Array @@ -190,4 +163,116 @@ export interface RosettanetRawCalldata { value: string selector: string rawInput: string +} + +export interface RosettanetCompatibleAddress { + starknet: string; + ethereum: string; +} + +export interface SyncedGas { + l1: { + fri: string + wei: string + }, + l1_data: { + fri: string + wei: string + }, + l2: { + fri: string + wei: string + } +} + +export interface GasData { + price_in_fri: string + price_in_wei: string +} + +export interface EthCallParameters { + from?: string + to: string + gas?: string | number | bigint + gasPrice?: string | number | bigint + value?: string | number | bigint + data?: string + input?: string +} + +export interface ActualFeeObject { + amount: string + unit: string +} + +export interface EstimateGasParameters { + from?: string; + to?: string; + value?: bigint; + data?: string; + gas?: string; + gasLimit?: bigint; + gasPrice?: bigint; + nonce?: string | number; + maxFeePerGas?: bigint; + maxPriorityFeePerGas?: bigint; +} + +export interface GasCost { + l1: number, + l1_data: number, + l2: number +} // TODO: Maybe making BigInt can be better. + +export interface StarknetCallableMethod { + ethereumSignature: string + snFunction: StarknetFunction + name: string + ethereumTypedName: string +} + +export interface ResourceBounds { + l1_gas: { + max_amount: string + max_price_per_unit: string + } + l1_data_gas: { + max_amount: string + max_price_per_unit: string + } + l2_gas: { + max_amount: string + max_price_per_unit: string + } +} + +// TODO: add custom types like in deploy function +export interface RosettanetAccountResult { + contractAddress: string + ethAddress: string + isDeployed: boolean +} + +export interface AccountDeployResult { + transactionHash: string + contractAddress: string +} + +export interface AccountDeployError { + code: number + message: string +} + +// We will use this interface for both function selector calc and calldata slot calcs +export interface ConvertableType { + size: number // bitsize + isDynamicSize: boolean // true if array + solidityType: string // uint256, etc. name used on function selector calc + isTuple: boolean // true if struct or tuple + tupleSizes?: Array + formatter?: (value: string) => string | Promise +} + +export interface CairoNamedConvertableType extends ConvertableType { + cairoType: string } \ No newline at end of file diff --git a/src/utils/callHelper.ts b/src/utils/callHelper.ts index b198ec9c..63242ba1 100644 --- a/src/utils/callHelper.ts +++ b/src/utils/callHelper.ts @@ -1,6 +1,5 @@ import { getRpc } from './getRpc' import { - EstimateFeeTransaction, NativeBalance, RPCError, RPCRequest, @@ -52,23 +51,6 @@ export async function callStarknet( } } -export async function getStarknetAccountNonce( - snAddress: string, -): Promise { - const nonce: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: '2.0', - method: 'starknet_getNonce', - params: ['latest', snAddress], - id: 1, - }) - - if (isStarknetRPCError(nonce)) { - return nonce - } - - return nonce.result -} - export async function getSTRKBalance( snAddress: string, ): Promise { @@ -107,45 +89,3 @@ export async function getSTRKBalance( ethereumFormat: addHexPrefix(balance), } } - -export async function callStarknetEstimateFee( - sender: string, - txn: EstimateFeeTransaction, - calldata: string[], -): Promise { - const response: RPCResponse | StarknetRPCError = await callStarknet({ - jsonrpc: '2.0', - method: 'starknet_estimateFee', - params: { - request: [ - { - type: 'INVOKE', - version: '0x3', - signature: txn.signature, - sender_address: sender, - calldata: calldata, - nonce: txn.nonce, - resource_bounds: { - l1_gas: { - max_amount: txn.maxAmountGas, - max_price_per_unit: txn.maxGasPricePerUnit, - }, - l2_gas: { - max_amount: '0x0', - max_price_per_unit: '0x0', - }, - }, - tip: '0x0', - paymaster_data: [], - fee_data_availability_mode: 'L1', - nonce_data_availability_mode: 'L1', - account_deployment_data: [], - }, - ], - block_id: 'latest', - simulation_flags: ['SKIP_VALIDATE'], - }, - id: 1, - }) - return response -} diff --git a/src/utils/calldata.ts b/src/utils/calldata.ts index 35e25547..b10f4c08 100644 --- a/src/utils/calldata.ts +++ b/src/utils/calldata.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { AbiCoder, dataSlice, getBytes, hexlify } from 'ethers' import { EVMDecodeError, @@ -6,6 +6,7 @@ import { EVMEncodeError, EVMEncodeResult, StarknetRPCError, + CairoNamedConvertableType } from '../types/types' import { BnToU256, @@ -13,13 +14,10 @@ import { Uint256ToU256, } from './converters/integer' import { getSnAddressWithFallback } from './wrapper' -import { CairoNamedConvertableType } from './starknet' -import { addHexPrefix, removeHexZeroes, removeHexPrefix } from './padding' +import { addHexPrefix, removeHexPrefix } from './padding' import { isStarknetRPCError } from '../types/typeGuards' -import { convertStringIntoChunks } from './felt' -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function getFunctionSelectorFromCalldata(calldata: any): string | null { +export function getFunctionSelectorFromCalldata(calldata: string | null): string | null { if (typeof calldata !== 'string') { return null } @@ -140,26 +138,6 @@ export function to128Bits(calldata: string): string[] { return slots } -// Returns calldata in a serialized string format -export function to256Bits(calldata: string[]): string { - if (calldata.length == 0) { - return '0x' - } - if (calldata.length == 1) { - return calldata[0]; // returns only selector - } - - const selector = calldata[0]; - let str = `${selector}` - for (let i = 1; i < calldata.length; i++) { - const data = safeU256ToUint256([calldata[i], calldata[i + 1]]); - str = str + data.replace('0x', '') - i += 2; - } - - return str; -} - export function convertUint256s(data: Array): Array { const split256Bits: Array = [] @@ -175,7 +153,6 @@ export function convertUint256s(data: Array): Array { } // Tuples also returned like array -// eslint-disable-next-line @typescript-eslint/no-explicit-any export function decodeCalldataWithTypes( types: Array, data: string, @@ -355,48 +332,6 @@ export async function decodeEVMCalldataWithAddressConversion( } } -export function decodeMulticallCalldata( - data: string, - selector: string, -): EVMDecodeResult | EVMDecodeError { - try { - const chunks = convertStringIntoChunks(data, 64) - const calls = [] - const callCount = Number(chunks[0]) - calls.push(selector) - calls.push(removeHexZeroes(callCount.toString(16))) - let readIndex = 1 - - for (let i = 0; i < callCount; i++) { - const to = chunks[readIndex] - - calls.push(removeHexZeroes(to)) - readIndex++ - const entrypoint = chunks[readIndex] - calls.push(removeHexZeroes(entrypoint)) - readIndex++ - const innerCalldataLength = Number(chunks[readIndex]) - calls.push(removeHexZeroes(innerCalldataLength.toString(16))) - readIndex++ - const innerCalldata = [] - for (let j = 0; j < innerCalldataLength; j++) { - innerCalldata.push(chunks[readIndex]) - calls.push(removeHexZeroes(chunks[readIndex])) - readIndex++ - } - } - return { - directives: [0, 0], - calldata: calls, - } - } catch (ex) { - return { - code: -1, - message: (ex as Error).message, - } - } -} - // data: Selector removed calldata export function decodeMulticallFeatureCalldata( data: string, @@ -463,66 +398,4 @@ export function decodeMulticallFeatureCalldata( message: (ex as Error).message, } } -} - -export function decodeEVMCalldata( - types: Array, - data: string, - selector: string, -): EVMDecodeResult | EVMDecodeError { - try { - if (types.length == 0 || data.length == 0) { - return { - code: -32700, - message: 'Types or data length is wrong on EVM calldata decoding', - } - } - - if (selector.length != 10) { - return { - code: -32700, - message: 'Selector length must be 10 on EVM calldata decoding', - } - } - - const decoder = new AbiCoder() - const solidityTypes = types.map(x => x.solidityType) - const result = decoder - .decode(solidityTypes, dataSlice('0x' + data, 0)) - .toArray() - - const decodedValues: Array = [] - const directives: Array = [] - decodedValues.push(selector) - - if (result.length != types.length) { - return { - code: -32700, - message: 'Decode result and length mismatch on EVM calldata decoding.', - } - } - - for (let i = 0; i < result.length; i++) { - const currentType = types[i] - const currentData = result[i] - - if (currentType.solidityType === 'uint256') { - decodedValues.push(...BnToU256(currentData)) - directives.push(1, 0) - continue - } - decodedValues.push(addHexPrefix(currentData)) - directives.push(currentType.solidityType === 'address' ? 2 : 0) - } - - return { - directives, - calldata: decodedValues, - } - } catch (ex) { - return { - code: -1, - message: (ex as Error).message, - } - } -} +} \ No newline at end of file diff --git a/src/utils/configReader.ts b/src/utils/configReader.ts index 60c1b5f3..b3e6cfca 100644 --- a/src/utils/configReader.ts +++ b/src/utils/configReader.ts @@ -1,17 +1,9 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { promises as fs } from 'fs' import * as path from 'path' -// eslint-disable-next-line @typescript-eslint/no-explicit-any let configuration: any -export function getConfiguration(): object | undefined { - if (typeof configuration === 'undefined') { - throw new Error('Config not initialized') - } - - return configuration -} - export function isConfigurationInitialized(): boolean { if (typeof configuration === 'undefined') { return false @@ -19,7 +11,6 @@ export function isConfigurationInitialized(): boolean { return true } -// eslint-disable-next-line @typescript-eslint/no-explicit-any export function getConfigurationProperty(prop: string): any { if (!isConfigurationInitialized()) { throw new Error('Config not initialized') @@ -43,7 +34,7 @@ export async function initConfig(configPath: string): Promise { try { await fs.access(configPath, fs.constants.R_OK) } catch (error) { - throw new Error(`Configuration file is not readable: ${configPath}`) + throw new Error(`Configuration file is not readable: ${configPath}, ${error}`) } const rawData = await fs.readFile(configPath, 'utf8') @@ -52,7 +43,6 @@ export async function initConfig(configPath: string): Promise { let config try { config = JSON.parse(rawData) - // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { throw new Error(`Error parsing JSON configuration file: ${error.message}`) } diff --git a/src/utils/converters/abiFormatter.ts b/src/utils/converters/abiFormatter.ts index 0faa3062..6da272aa 100644 --- a/src/utils/converters/abiFormatter.ts +++ b/src/utils/converters/abiFormatter.ts @@ -1,14 +1,7 @@ import { Abi } from 'starknet' +import { ConvertableType } from '../../types/types' + -// We will use this interface for both function selector calc and calldata slot calcs -export interface ConvertableType { - size: number // bitsize - isDynamicSize: boolean // true if array - solidityType: string // uint256, etc. name used on function selector calc - isTuple: boolean // true if struct or tuple - tupleSizes?: Array - formatter?: (value: string) => string | Promise -} // TODO: Sizeları starknet sizelarına göre updatele. mesela contract addres 252 gibi ve class hash. Onlar solidityde uint256 olarak girilecek ama size limit belli. const starknetElementaryTypes: Array> = [ [ @@ -673,11 +666,4 @@ function getStructConvertableTypes( ] return [basic, array, option, span] -} - -export function isSolidityArray(type: string): boolean { - if (type.indexOf('[') > -1 || type.indexOf(']') > -1) { - return true - } - return false -} +} \ No newline at end of file diff --git a/src/utils/converters/integer.ts b/src/utils/converters/integer.ts index 04106779..3e1f6fcc 100644 --- a/src/utils/converters/integer.ts +++ b/src/utils/converters/integer.ts @@ -80,7 +80,7 @@ export function safeU256ToUint256(value: Array): string { // Validate the final Uint256 value validateUint256(BigInt('0x' + result)) return result - } catch (error) { + } catch { return ZERO_RESULT } } @@ -95,7 +95,7 @@ export function safeU256ToUint256(value: Array): string { // Validate the final Uint256 value validateUint256(BigInt('0x' + result)) return result - } catch (error) { + } catch { return ZERO_RESULT } } diff --git a/src/utils/encoding.ts b/src/utils/encoding.ts deleted file mode 100644 index e94d1c78..00000000 --- a/src/utils/encoding.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function asciiToHex(str: string): string { - const arr1 = [] - for (let n = 0, l = str.length; n < l; n++) { - const hex = Number(str.charCodeAt(n)).toString(16) - arr1.push(hex) - } - return arr1.join('') -} diff --git a/src/utils/gas.ts b/src/utils/gas.ts index 8562bc74..ed7ba14b 100644 --- a/src/utils/gas.ts +++ b/src/utils/gas.ts @@ -4,12 +4,9 @@ import { writeLog } from '../logger' import { isRosettaAccountDeployed } from './rosettanet' import { getConfigurationProperty } from './configReader' import { prepareRosettanetCalldataForEstimateFee } from './transaction' -import { getAccountNonce, getAccountNonceForEstimateFee } from './starknet' +import { getAccountNonceForEstimateFee } from './starknet' +import { ActualFeeObject, EstimateGasParameters, GasCost } from '../types/types' -interface ActualFeeObject { - amount: string - unit: string -} export function calculateSpentGas( max_price_per_unit: string, @@ -40,11 +37,7 @@ const parseToBigInt = (v: unknown, fallback: bigint): bigint => { return fallback } -export interface GasCost { - l1: number, - l1_data: number, - l2: number -} // TODO: Belki bigint yapmak daha mantikli olabilir? + function sumGas(lhs: GasCost, rhs: GasCost): GasCost { return { @@ -62,18 +55,7 @@ function roundUpGasCost(gas: GasCost): GasCost { } } -export interface EstimateGasParameters { - from?: string; - to?: string; - value?: bigint; - data?: string; - gas?: string; - gasLimit?: bigint; - gasPrice?: bigint; - nonce?: any; - maxFeePerGas?: bigint; - maxPriorityFeePerGas?: bigint; -} + export async function estimateGasCost(parameters: EstimateGasParameters): Promise { const BASE_FEE: GasCost = { l1: 0, @@ -92,7 +74,7 @@ export async function estimateGasCost(parameters: EstimateGasParameters): Promis }; const from = parameters.from; - + // If from address is not provided, return BASE_FEE if (!from) { return BASE_FEE; @@ -100,16 +82,16 @@ export async function estimateGasCost(parameters: EstimateGasParameters): Promis // Get Starknet account address const precalculatedStarknetAddress = await precalculateStarknetAccountAddress(from); - if(typeof precalculatedStarknetAddress !== 'string') { + if (typeof precalculatedStarknetAddress !== 'string') { writeLog(2, 'Starknet rpc error at precalculating from address at estimateGasCost') return BASE_FEE; } const isAccountDeployed = await isRosettaAccountDeployed(precalculatedStarknetAddress, getConfigurationProperty('accountClass')); - if(!isAccountDeployed) { + if (!isAccountDeployed) { totalFee = sumGas(totalFee, DEPLOYMENT_COST); - totalFee = sumGas(totalFee, {l1: 0, l1_data: 2048, l2: 100000000}); + totalFee = sumGas(totalFee, { l1: 0, l1_data: 2048, l2: 100000000 }); return roundUpGasCost(totalFee) } @@ -135,7 +117,7 @@ export async function estimateGasCost(parameters: EstimateGasParameters): Promis return 0 })(); - const inferredType: number = (parameters.maxFeePerGas != null || parameters.maxPriorityFeePerGas != null)? 2 : 0; + const inferredType: number = (parameters.maxFeePerGas != null || parameters.maxPriorityFeePerGas != null) ? 2 : 0; const maxFeePerGas: bigint = parseToBigInt(parameters.maxFeePerGas, BigInt(0)); const maxPriorityFeePerGas: bigint = parseToBigInt( diff --git a/src/utils/match.ts b/src/utils/match.ts index cde5cbb9..49310174 100644 --- a/src/utils/match.ts +++ b/src/utils/match.ts @@ -1,17 +1,9 @@ import { keccak256 } from 'js-sha3' import BigNumber from 'bignumber.js' -import { StarknetFunction } from '../types/types' +import { StarknetFunction, StarknetCallableMethod, ConvertableType } from '../types/types' import { generateEthereumFunctionSignatureFromTypeMapping } from './starknet' -import { ConvertableType } from './converters/abiFormatter' import { addHexPadding } from './padding' -export interface StarknetCallableMethod { - ethereumSignature: string - snFunction: StarknetFunction - name: string - ethereumTypedName: string -} - export function findStarknetCallableMethod( ethSelector: string, snFunctions: Array, diff --git a/src/utils/parser.ts b/src/utils/parser.ts index 445066ec..6fad7e25 100644 --- a/src/utils/parser.ts +++ b/src/utils/parser.ts @@ -1,7 +1,7 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Response, NextFunction } from 'express' import { ParsedRequest, RPCError } from '../types/types' -// eslint-disable-next-line @typescript-eslint/no-explicit-any function isValidJsonRpcRequest(body: any): boolean { // Check if body exists if (!body) return false diff --git a/src/utils/resourceBounds.ts b/src/utils/resourceBounds.ts index 08e68b9d..9ce31a08 100644 --- a/src/utils/resourceBounds.ts +++ b/src/utils/resourceBounds.ts @@ -1,22 +1,9 @@ -import { getCachedGasPrice, SyncedGas } from "../cache/gasPrice" -import { SignedRawTransaction } from "../types/types" -import { estimateGasCost, GasCost } from "./gas" +import { getCachedGasPrice } from "../cache/gasPrice" +import { SignedRawTransaction, ResourceBounds, SyncedGas, GasCost } from "../types/types" +import { estimateGasCost } from "./gas" import { addHexPrefix } from "./padding" -export interface ResourceBounds { - l1_gas: { - max_amount: string - max_price_per_unit: string - } - l1_data_gas: { - max_amount: string - max_price_per_unit: string - } - l2_gas: { - max_amount: string - max_price_per_unit: string - } -} + // TODO: l1_gas and l1_data_gas fields will be set by rosettanet // l1_gas ve l1_data_gasi estimate tx veya cacheden cekerek dolduralim. // kontratlarda sadece l2_gas kismi verif edilmeli @@ -45,22 +32,22 @@ export async function resourceBoundsFromSignedTxn(txn: SignedRawTransaction): Pr const gasPrice = txn.maxFeePerGas == null ? txn.gasPrice : txn.maxFeePerGas; const actualGasPrice = gasPrice == null ? '0x0' : gasPrice; - if(BigInt(totalFee) >= txn.gasLimit) { + if (BigInt(totalFee) >= txn.gasLimit) { // Total fee is more than gas passed. So we should return max possible with priorities. // Priority l1_data > l2 > l1 let availableGas = txn.gasLimit; - let l1_data = availableGas > BigInt(gasCost.l1_data) ? BigInt(gasCost.l1_data) : availableGas; + const l1_data = availableGas > BigInt(gasCost.l1_data) ? BigInt(gasCost.l1_data) : availableGas; availableGas = availableGas - l1_data; - let l2 = availableGas > BigInt(gasCost.l2) ? BigInt(gasCost.l2) : availableGas; + const l2 = availableGas > BigInt(gasCost.l2) ? BigInt(gasCost.l2) : availableGas; availableGas = availableGas - l2; - let l1 = availableGas > BigInt(gasCost.l1) ? BigInt(gasCost.l1) : availableGas; + const l1 = availableGas > BigInt(gasCost.l1) ? BigInt(gasCost.l1) : availableGas; availableGas = availableGas - l1; - return { + return { l1_gas: { max_amount: addHexPrefix(l1.toString(16)), max_price_per_unit: addHexPrefix(cachedGasPrices.l1.fri) @@ -76,7 +63,7 @@ export async function resourceBoundsFromSignedTxn(txn: SignedRawTransaction): Pr } } - return { + return { l1_gas: { max_amount: addHexPrefix(gasCost.l1.toString(16)), max_price_per_unit: addHexPrefix(cachedGasPrices.l1.fri) @@ -95,7 +82,7 @@ export async function resourceBoundsFromSignedTxn(txn: SignedRawTransaction): Pr export function getDeploymentResourceBounds(): ResourceBounds { const cachedGasPrices: SyncedGas = getCachedGasPrice(); - return { + return { l1_gas: { max_amount: '0x0', max_price_per_unit: addHexPrefix(cachedGasPrices.l1.fri) diff --git a/src/utils/rosettanet.ts b/src/utils/rosettanet.ts index 6683cafa..389de38a 100644 --- a/src/utils/rosettanet.ts +++ b/src/utils/rosettanet.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { callStarknet } from './callHelper' import { RosettanetRawCalldata, @@ -8,19 +7,13 @@ import { } from '../types/types' import { getConfigurationProperty } from './configReader' import { isRPCResponse, isStarknetRPCError } from '../types/typeGuards' -import { addHexPrefix, hexPadding } from './padding' +import { hexPadding } from './padding' import { writeLog } from '../logger' import { safeU256ToUint256, U256ToUint256HexString } from './converters/integer' import { getDeploymentResourceBounds } from './resourceBounds' +import { RosettanetAccountResult, AccountDeployResult, AccountDeployError } from '../types/types' // Calls starknet factory contract to precalculate starknet account address -// TODO: add custom types like in deploy function -export interface RosettanetAccountResult { - contractAddress: string - ethAddress: string - isDeployed: boolean -} - export async function getRosettaAccountAddress( ethAddress: string, ): Promise { @@ -102,15 +95,6 @@ export async function isRosettaAccountDeployed( return response.result === expectedClass } -export interface AccountDeployResult { - transactionHash: string - contractAddress: string -} - -export interface AccountDeployError { - code: number - message: string -} @@ -120,7 +104,7 @@ export async function deployRosettanetAccount( const rosettanet = getConfigurationProperty('rosettanet') const accountClass = getConfigurationProperty('accountClass') //const gasPrice = txn.maxFeePerGas == null ? txn.gasPrice : txn.maxFeePerGas - // const actualGasPrice = gasPrice == null ? '0x0' : gasPrice + // const actualGasPrice = gasPrice == null ? '0x0' : gasPrice //console.log('MAX FEE: ' + txn.gasLimit.toString(16)) //console.log('MAX price per unit: ' + actualGasPrice.toString(16)) //const gasObject = getGasObject(txn) @@ -225,22 +209,22 @@ export async function getRosettanetAccountNonce( export function decodeCalldataInput(rawCalldata: string[]): { selector: string, rawInput: string } { const calldataLength = Number(BigInt(rawCalldata[9])) - if(calldataLength == 0) { + if (calldataLength == 0) { return { selector: '0x', rawInput: '0x' } } const selector = hexPadding(rawCalldata[10], 8) - if(calldataLength == 1) { + if (calldataLength == 1) { return { - selector: selector, rawInput:selector + selector: selector, rawInput: selector } } let rawInput = `${selector}` for (let i = 1; i < calldataLength; i++) { - const data = U256ToUint256HexString([rawCalldata[i + 11].replace('0x',''), rawCalldata[i + 10].replace('0x','')]).replace('0x',''); + const data = U256ToUint256HexString([rawCalldata[i + 11].replace('0x', ''), rawCalldata[i + 10].replace('0x', '')]).replace('0x', ''); rawInput = rawInput + data - i +=1; + i += 1; } return { @@ -250,21 +234,21 @@ export function decodeCalldataInput(rawCalldata: string[]): { selector: string, } export function parseRosettanetRawCalldata(rawCalldata: string[]): RosettanetRawCalldata | undefined { - if(rawCalldata.length >= 10) { - const decodedCalldata = decodeCalldataInput(rawCalldata) - return { - txType: rawCalldata[0], - to: rawCalldata[1], - nonce: rawCalldata[2], - maxPriorityFeePerGas: rawCalldata[3], - maxFeePerGas: rawCalldata[4], - gasPrice: rawCalldata[5], - gasLimit: rawCalldata[6], - value: safeU256ToUint256([rawCalldata[7], rawCalldata[8]]), - selector: decodedCalldata.selector, - rawInput: decodedCalldata.rawInput - } + if (rawCalldata.length >= 10) { + const decodedCalldata = decodeCalldataInput(rawCalldata) + return { + txType: rawCalldata[0], + to: rawCalldata[1], + nonce: rawCalldata[2], + maxPriorityFeePerGas: rawCalldata[3], + maxFeePerGas: rawCalldata[4], + gasPrice: rawCalldata[5], + gasLimit: rawCalldata[6], + value: safeU256ToUint256([rawCalldata[7], rawCalldata[8]]), + selector: decodedCalldata.selector, + rawInput: decodedCalldata.rawInput } + } - return undefined + return undefined } \ No newline at end of file diff --git a/src/utils/signature.ts b/src/utils/signature.ts index da6a64b3..27a4f27a 100644 --- a/src/utils/signature.ts +++ b/src/utils/signature.ts @@ -74,6 +74,7 @@ export function getEthersTransactionFromRosettanetCall(signature: string[], call } } +/* eslint-disable @typescript-eslint/no-explicit-any */ export function getEthersTransactionFromStarknetCall(result: any): Transaction { const r = addHexPrefix(safeU256ToUint256([addHexPrefix(removeHexPrefix(result.signature[0]).slice(0, 32)), addHexPrefix(removeHexPrefix(result.signature[1]).slice(32))])); const s = addHexPrefix(safeU256ToUint256([addHexPrefix(removeHexPrefix(result.signature[0]).slice(0, 32)), addHexPrefix(removeHexPrefix(result.signature[1]).slice(32))])); diff --git a/src/utils/starknet.ts b/src/utils/starknet.ts index 2f76404b..beb78d2f 100644 --- a/src/utils/starknet.ts +++ b/src/utils/starknet.ts @@ -1,23 +1,15 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { RpcProvider, constants, Abi, FunctionAbi } from 'starknet' -import { snKeccak } from '../../src/utils/sn_keccak' +import { RpcProvider, Abi } from 'starknet' import { validateSnAddress } from './validations' import { getRpc } from './getRpc' import { StarknetFunctionInput, StarknetFunction, - RPCError, StarknetContract, StarknetContractReadError, - StarknetRPCError, } from '../types/types' -import { ConvertableType } from './converters/abiFormatter' import { writeLog } from '../logger' +import { CairoNamedConvertableType, ConvertableType } from '../types/types' -export interface CairoNamedConvertableType extends ConvertableType { - cairoType: string -} export async function getContractAbiAndMethods( snAddress: string, @@ -35,14 +27,13 @@ export async function getContractAbiAndMethods( try { const compressedContract = await provider.getClassAt(snAddress) contractAbi = compressedContract.abi - } catch (e) { + } catch { return { code: -32701, message: 'Error at starknet RPC getClassAt method call', } } - // eslint-disable-next-line @typescript-eslint/no-unused-vars const directFunctions = contractAbi.filter( item => item.type === 'function' && @@ -51,7 +42,6 @@ export async function getContractAbiAndMethods( ) const interfaces = contractAbi.filter(item => item.type === 'interface') const callableFunctionsInterface = interfaces.map(item => item.items) - // eslint-disable-next-line @typescript-eslint/no-unused-vars const flattenedCallableFunctionsInterface = callableFunctionsInterface.flat(1) const allEntrypoints = [ @@ -65,43 +55,6 @@ export async function getContractAbiAndMethods( } } -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function getContractsMethods( - snAddress: string, -): Promise> { - if (!validateSnAddress(snAddress)) { - return [] - } - const rpcUrl: string = getRpc() - const provider = new RpcProvider({ nodeUrl: rpcUrl }) - - let contractAbi: Abi = [] - try { - const compressedContract = await provider.getClassAt(snAddress) - contractAbi = compressedContract.abi - } catch (e) { - return [] - } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const directFunctions = contractAbi.filter( - item => - item.type === 'function' && - (item.state_mutability === 'external' || - item.state_mutability === 'view'), - ) - const interfaces = contractAbi.filter(item => item.type === 'interface') - const callableFunctionsInterface = interfaces.map(item => item.items) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const flattenedCallableFunctionsInterface = callableFunctionsInterface.flat(1) - - const allEntrypoints = [ - ...flattenedCallableFunctionsInterface, - ...directFunctions, - ] - - return allEntrypoints -} - export function getEthereumOutputsCairoNamed( snFunction: StarknetFunction, map: Map, @@ -152,29 +105,6 @@ export function getEthereumInputsCairoNamed( return inputs } -export function getEthereumInputTypesFromStarknetFunction( - snFunction: StarknetFunction, - map: Map, -): Array { - if (!snFunction.inputs || snFunction.inputs.length == 0) { - return [] - } - - const inputs = snFunction.inputs.map(input => { - if (map.has(input.type)) { - const type = map.get(input.type) - if (typeof type === 'undefined') { - throw 'Type undefined' - } - return type.solidityType - } else { - throw 'Type not found' // Todo return undefined - } - }) - - return inputs -} - export function generateEthereumFunctionSignatureFromTypeMapping( snFunction: StarknetFunction, map: Map, @@ -206,20 +136,6 @@ function getFunctionInputTypesFromMap( return inputTypes.toString() } -// Returns contract abi -export async function getContractsAbi(snAddress: string): Promise { - const rpcUrl: string = getRpc() - const provider = new RpcProvider({ nodeUrl: rpcUrl }) - let contractAbi: Abi = [] - try { - const compressedContract = await provider.getClassAt(snAddress) - contractAbi = compressedContract.abi - } catch (e) { - return [] - } - return contractAbi -} - export async function getAccountNonce(snAddress: string): Promise { const rpcUrl: string = getRpc() const provider = new RpcProvider({ nodeUrl: rpcUrl }) @@ -239,8 +155,8 @@ export async function getAccountNonceForEstimateFee(snAddress: string): Promise< const fallbackNonce: string = '0x10240'; try { const nonce = await provider.getNonceForAddress(snAddress) - if(BigInt(nonce) == BigInt(0)) { - writeLog(0,`Returning fallback nonce. nonce received = 0`); + if (BigInt(nonce) == BigInt(0)) { + writeLog(0, `Returning fallback nonce. nonce received = 0`); return fallbackNonce } return nonce diff --git a/src/utils/transaction.ts b/src/utils/transaction.ts index 8b290011..d7e25baa 100644 --- a/src/utils/transaction.ts +++ b/src/utils/transaction.ts @@ -1,17 +1,14 @@ import { StarknetInvokeTransaction } from '../types/transactions.types' import { - EstimateFeeTransaction, PrepareCalldataError, SignedRawTransaction, + ResourceBounds } from '../types/types' import { getFunctionSelectorFromCalldata, to128Bits } from './calldata' import { - BnToU256, safeUint256ToU256, - Uint256ToU256, } from './converters/integer' import { addHexPrefix } from './padding' -import { ResourceBounds, resourceBoundsFromSignedTxn } from './resourceBounds' // Signature will be v,r,s // Deprecate this one @@ -43,12 +40,12 @@ export function prepareStarknetInvokeTransaction( return starknetTx } -export function prepareRosettanetCalldataForEstimateFee(from: string, to: string, gasLimit: bigint, data: string, value: bigint, nonce: number, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, gasPrice: bigint , type: number): string[] { +export function prepareRosettanetCalldataForEstimateFee(from: string, to: string, gasLimit: bigint, data: string, value: bigint, nonce: number, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, gasPrice: bigint, type: number): string[] { const targetFunctionSelector: string | null = - getFunctionSelectorFromCalldata(data); + getFunctionSelectorFromCalldata(data); const calldata = [] - if(type == 2) { - if(targetFunctionSelector == null) { + if (type == 2) { + if (targetFunctionSelector == null) { calldata.push(addHexPrefix(type.toString(16))) calldata.push(to) calldata.push(addHexPrefix(nonce.toString(16))) @@ -207,17 +204,3 @@ export function prepareRosettanetCalldata( } } } - -export function prepareSignature( - r: string, - s: string, - v: number, - value: bigint, -): Array { - return [ - ...Uint256ToU256(r.replace('0x', '')).map(rv => addHexPrefix(rv)), - ...Uint256ToU256(s.replace('0x', '')).map(sv => addHexPrefix(sv)), - v.toString(16), - ...BnToU256(value), - ] -} diff --git a/src/utils/wrapper.ts b/src/utils/wrapper.ts index da4f112a..ede2f635 100644 --- a/src/utils/wrapper.ts +++ b/src/utils/wrapper.ts @@ -1,10 +1,9 @@ import { callStarknet } from './callHelper' -import { RPCRequest, RPCResponse, StarknetRPCError } from '../types/types' +import { RPCRequest, RPCResponse, StarknetRPCError, GasCost } from '../types/types' import { getConfigurationProperty } from './configReader' import { isStarknetRPCError } from '../types/typeGuards' import { writeLog } from '../logger' import { addHexPrefix } from './padding' -import { GasCost } from './gas' import { BnToU256 } from './converters/integer' const SELECTORS = { diff --git a/tests/testingUtilities.ts b/tests/testingUtilities.ts deleted file mode 100644 index 7b7f701f..00000000 --- a/tests/testingUtilities.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Wallet } from 'ethers' - -const TEST_PRIVATE_KEY = - '0x29a98ffd0692bb7012b9eed05ba2f186ef7d6a9bf8a536b84c9792f1784a3aee' -// Account addr: 0x30ffDf2c33b929F749afE49D7aBf3f4B8D399B40 - -export function getTestAccount(): Wallet { - const signer = new Wallet(TEST_PRIVATE_KEY) - - return signer -} diff --git a/tests/utils/assertResponse.ts b/tests/utils/assertResponse.ts deleted file mode 100644 index 7101dfb8..00000000 --- a/tests/utils/assertResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { RPCError, RPCResponse } from '../../src/types/types' -import { isRPCError } from '../../src/types/typeGuards' - -export function assertError( - response: RPCResponse | RPCError, - expectedMessage: string, -): void { - expect(isRPCError(response)).toBeTruthy() - const errorResponse = response as RPCError - expect(errorResponse.error.message).toBe(expectedMessage) -} - -export function assertResult(response: RPCResponse | RPCError): RPCResponse { - expect(!isRPCError(response)).toBeTruthy() - return response as RPCResponse -} diff --git a/tests/utils/calldata.test.ts b/tests/utils/calldata.test.ts index 7861dbe3..d33eabfb 100644 --- a/tests/utils/calldata.test.ts +++ b/tests/utils/calldata.test.ts @@ -12,8 +12,8 @@ import { EVMDecodeResult, EVMEncodeError, EVMEncodeResult, + CairoNamedConvertableType } from '../../src/types/types' -import { CairoNamedConvertableType } from '../../src/utils/starknet' import { isEVMDecodeResult, isEVMEncodeResult, diff --git a/tests/utils/converters/abiFormatter.test.ts b/tests/utils/converters/abiFormatter.test.ts index d793f878..cb8ae1e5 100644 --- a/tests/utils/converters/abiFormatter.test.ts +++ b/tests/utils/converters/abiFormatter.test.ts @@ -1,7 +1,8 @@ import { - ConvertableType, initializeStarknetAbi, } from '../../../src/utils/converters/abiFormatter' +import { ConvertableType } from '../../../src/types/types' + const abi = [ { type: 'impl', @@ -398,7 +399,6 @@ describe('Initialization of abi', () => { expect(snAbi.size).toEqual(73) }) it('Returns updated mapping', () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const snAbi: Map = initializeStarknetAbi(abi) const customStructs = abi.filter(x => x.type === 'struct') const standartTypesLength = 73 diff --git a/tests/utils/validations.test.ts b/tests/utils/validations.test.ts index 2e69981e..a3891f6c 100644 --- a/tests/utils/validations.test.ts +++ b/tests/utils/validations.test.ts @@ -84,11 +84,11 @@ describe('Test Address validations', () => { it('return false if block number is a number not string', async () => { const result = validateBlockNumber(123) expect(result).toBe(false) - }), - it('return false if block number is a negative number', async () => { - const result = validateBlockNumber(-123) - expect(result).toBe(false) - }) + }) + it('return false if block number is a negative number', async () => { + const result = validateBlockNumber(-123) + expect(result).toBe(false) + }) it('return false if block number is a decimal number', async () => { const result = validateBlockNumber(123.123) expect(result).toBe(false) diff --git a/yarn.lock b/yarn.lock index a8344a29..161a9faf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,164 +7,119 @@ resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/compat-data@^7.23.5": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz" - integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.24.5" - "@babel/helpers" "^7.24.5" - "@babel/parser" "^7.24.5" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz" + integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz" + integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.5", "@babel/generator@^7.7.2": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz" - integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== +"@babel/generator@^7.28.3", "@babel/generator@^7.7.2": + version "7.28.3" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz" + integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== + dependencies: + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/types" "^7.24.5" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.24.3": - version "7.24.3" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" - -"@babel/helper-module-transforms@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz" - integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.24.3" - "@babel/helper-simple-access" "^7.24.5" - "@babel/helper-split-export-declaration" "^7.24.5" - "@babel/helper-validator-identifier" "^7.24.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz" - integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== - -"@babel/helper-simple-access@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz" - integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-split-export-declaration@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz" - integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-string-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz" - integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helpers@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz" - integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" - -"@babel/highlight@^7.24.2": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz" - integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz" - integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== + dependencies: + "@babel/types" "^7.28.4" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -180,14 +135,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -202,13 +171,13 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -222,7 +191,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -250,7 +219,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -258,45 +234,41 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz" - integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== - dependencies: - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.24.5" - "@babel/parser" "^7.24.5" - "@babel/types" "^7.24.5" + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/template@^7.27.2", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz" + integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz" - integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3": + version "7.28.4" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== dependencies: - "@babel/helper-string-parser" "^7.24.1" - "@babel/helper-validator-identifier" "^7.24.5" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -310,56 +282,96 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.2" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.1": + version "0.4.1" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz" + integrity sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw== + dependencies: + "@eslint/core" "^0.16.0" + +"@eslint/core@^0.16.0": + version "0.16.0" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz" + integrity sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@9.38.0": + version "9.38.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz" + integrity sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz" + integrity sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A== + dependencies: + "@eslint/core" "^0.16.0" + levn "^0.4.1" -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -548,7 +560,7 @@ jest-haste-map "^29.7.0" slash "^3.0.0" -"@jest/transform@^29.0.0", "@jest/transform@^29.7.0": +"@jest/transform@^29.7.0": version "29.7.0" resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== @@ -569,7 +581,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.0.0", "@jest/types@^29.6.3": +"@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== @@ -581,13 +593,20 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": @@ -595,23 +614,10 @@ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -621,12 +627,13 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@noble/curves@~1.7.0": - version "1.7.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz" - integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: - "@noble/hashes" "1.6.0" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@noble/curves@1.2.0": version "1.2.0" @@ -635,18 +642,13 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@1.7.0": +"@noble/curves@1.7.0", "@noble/curves@~1.7.0": version "1.7.0" resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz" integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== dependencies: "@noble/hashes" "1.6.0" -"@noble/hashes@~1.6.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz" - integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== - "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" @@ -657,6 +659,16 @@ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz" integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== +"@noble/hashes@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz" + integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== + +"@noble/hashes@~1.6.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -665,12 +677,12 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -678,6 +690,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@paralleldrive/cuid2@^2.2.2": + version "2.3.0" + resolved "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.0.tgz" + integrity sha512-dnBUdZHawCgqpp8bJhzFDAdkzci00nCN47EiW6TxD9OVfP+gh4qVnstXRRnBKW3hm9vpa+P7cod6jiBJdf7V+g== + dependencies: + "@noble/hashes" "^2.0.1" + error-causes "^3.0.2" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" @@ -725,6 +745,11 @@ resolved "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.8.4.tgz" integrity sha512-0RZ3TZHcLsUTQaq1JhDSCM8chnzO4/XNsSCozwDET64JK5bjFDIf2ZUkta+tl5Nlbf4usoU7uZiDI/Q57kt2SQ== +"@starknet-io/types-js@0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@starknet-io/types-js/-/types-js-0.8.4.tgz#bbc07422e89cb5bac45da28e8457f0f17535950d" + integrity sha512-0RZ3TZHcLsUTQaq1JhDSCM8chnzO4/XNsSCozwDET64JK5bjFDIf2ZUkta+tl5Nlbf4usoU7uZiDI/Q57kt2SQ== + "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" @@ -757,9 +782,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" @@ -772,26 +797,27 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.28.0" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.28.2" "@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + version "1.19.6" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" "@types/chai@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@types/chai/-/chai-5.2.0.tgz" - integrity sha512-FWnQYdrG9FAC8KgPVhDFfrPL1FBsL3NtIt2WsxKvwu/61K6HiuDF3xAb7c7w/k9ML2QOUHcwTgU7dKLFPK6sBg== + version "5.2.3" + resolved "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz" + integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== dependencies: "@types/deep-eql" "*" + assertion-error "^2.0.1" "@types/connect@*": version "3.4.38" @@ -806,9 +832,9 @@ integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== "@types/cors@^2.8.17": - version "2.8.17" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz" - integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + version "2.8.19" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" @@ -817,10 +843,15 @@ resolved "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz" integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== +"@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + "@types/express-serve-static-core@^4.17.33": - version "4.19.0" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz" - integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== + version "4.19.7" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -828,9 +859,9 @@ "@types/send" "*" "@types/express@^4.17.21": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + version "4.17.23" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -845,9 +876,9 @@ "@types/node" "*" "@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + version "2.0.5" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" @@ -897,48 +928,52 @@ integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== "@types/node@*", "@types/node@^20.17.24": - version "20.17.24" - resolved "https://registry.npmjs.org/@types/node/-/node-20.17.24.tgz" - integrity sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA== + version "20.19.23" + resolved "https://registry.npmjs.org/@types/node/-/node-20.19.23.tgz" + integrity sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ== dependencies: - undici-types "~6.19.2" + undici-types "~6.21.0" -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" "@types/qs@*": - version "6.9.15" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + version "6.14.0" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + version "1.2.0" + resolved "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz" + integrity sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.5" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.7" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + version "1.15.9" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz" + integrity sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" + "@types/send" "<1" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -956,9 +991,9 @@ form-data "^4.0.0" "@types/supertest@^6.0.2": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz" - integrity sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg== + version "6.0.3" + resolved "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz" + integrity sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w== dependencies: "@types/methods" "^1.1.4" "@types/superagent" "^8.1.0" @@ -969,107 +1004,109 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^7.0.1": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz" - integrity sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg== +"@typescript-eslint/eslint-plugin@^8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz" + integrity sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/type-utils" "7.8.0" - "@typescript-eslint/utils" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/type-utils" "8.46.2" + "@typescript-eslint/utils" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" graphemer "^1.4.0" - ignore "^5.3.1" + ignore "^7.0.0" natural-compare "^1.4.0" - semver "^7.6.0" - ts-api-utils "^1.3.0" + ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^7.0.0", "@typescript-eslint/parser@^7.0.1": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz" - integrity sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ== +"@typescript-eslint/parser@^8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz" + integrity sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g== dependencies: - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/typescript-estree" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz" - integrity sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g== +"@typescript-eslint/project-service@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz" + integrity sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg== dependencies: - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + "@typescript-eslint/tsconfig-utils" "^8.46.2" + "@typescript-eslint/types" "^8.46.2" + debug "^4.3.4" -"@typescript-eslint/type-utils@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz" - integrity sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A== +"@typescript-eslint/scope-manager@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz" + integrity sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA== dependencies: - "@typescript-eslint/typescript-estree" "7.8.0" - "@typescript-eslint/utils" "7.8.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" -"@typescript-eslint/types@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz" - integrity sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw== +"@typescript-eslint/tsconfig-utils@8.46.2", "@typescript-eslint/tsconfig-utils@^8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz" + integrity sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag== -"@typescript-eslint/typescript-estree@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz" - integrity sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg== +"@typescript-eslint/type-utils@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz" + integrity sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA== dependencies: - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/visitor-keys" "7.8.0" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" + "@typescript-eslint/utils" "8.46.2" debug "^4.3.4" - globby "^11.1.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.46.2", "@typescript-eslint/types@^8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz" + integrity sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ== + +"@typescript-eslint/typescript-estree@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz" + integrity sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ== + dependencies: + "@typescript-eslint/project-service" "8.46.2" + "@typescript-eslint/tsconfig-utils" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/visitor-keys" "8.46.2" + debug "^4.3.4" + fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" - ts-api-utils "^1.3.0" + ts-api-utils "^2.1.0" -"@typescript-eslint/utils@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz" - integrity sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ== +"@typescript-eslint/utils@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz" + integrity sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.8.0" - "@typescript-eslint/types" "7.8.0" - "@typescript-eslint/typescript-estree" "7.8.0" - semver "^7.6.0" + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.46.2" + "@typescript-eslint/types" "8.46.2" + "@typescript-eslint/typescript-estree" "8.46.2" -"@typescript-eslint/visitor-keys@7.8.0": - version "7.8.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz" - integrity sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA== +"@typescript-eslint/visitor-keys@8.46.2": + version "8.46.2" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz" + integrity sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w== dependencies: - "@typescript-eslint/types" "7.8.0" - eslint-visitor-keys "^3.4.3" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + "@typescript-eslint/types" "8.46.2" + eslint-visitor-keys "^4.2.1" abi-wan-kanabi@2.2.4: version "2.2.4" @@ -1095,14 +1132,16 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + version "8.3.4" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1: + version "8.15.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== aes-js@4.0.0-beta.5: version "4.0.0-beta.5" @@ -1119,11 +1158,6 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -1137,16 +1171,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" + version "6.2.2" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" @@ -1161,9 +1188,9 @@ ansi-styles@^5.0.0: integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + version "6.2.3" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== ansicolors@^0.3.2, ansicolors@~0.3.2: version "0.3.2" @@ -1200,11 +1227,6 @@ array-flatten@1.1.1: resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - asap@^2.0.0: version "2.0.6" resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" @@ -1215,26 +1237,21 @@ assertion-error@^2.0.1: resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== -async@^3.2.3: - version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.6.7: - version "1.6.8" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + version "1.12.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz" + integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== dependencies: follow-redirects "^1.15.6" - form-data "^4.0.0" + form-data "^4.0.4" proxy-from-env "^1.1.0" -babel-jest@^29.0.0, babel-jest@^29.7.0: +babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== @@ -1269,22 +1286,25 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.2.0" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" babel-preset-jest@^29.6.3: version "29.6.3" @@ -1299,20 +1319,25 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +baseline-browser-mapping@^2.8.19: + version "2.8.19" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz" + integrity sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ== + bignumber.js@^9.1.2: - version "9.1.2" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + version "9.3.1" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" @@ -1322,47 +1347,48 @@ body-parser@1.20.2: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" + qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.22.2, "browserslist@>= 4.21.0": - version "4.23.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.24.0: + version "4.27.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz" + integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + baseline-browser-mapping "^2.8.19" + caniuse-lite "^1.0.30001751" + electron-to-chromium "^1.5.238" + node-releases "^2.0.26" + update-browserslist-db "^1.1.4" bs-logger@^0.2.6: version "0.2.6" @@ -1388,16 +1414,21 @@ bytes@3.1.2: resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -1409,20 +1440,15 @@ camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001616" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz" - integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== +caniuse-lite@^1.0.30001751: + version "1.0.30001751" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz" + integrity sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw== cardinal@^2.1.1: version "2.1.1" @@ -1433,9 +1459,9 @@ cardinal@^2.1.1: redeyed "~2.1.0" chai@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz" - integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== + version "5.3.3" + resolved "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz" + integrity sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw== dependencies: assertion-error "^2.0.1" check-error "^2.1.1" @@ -1443,16 +1469,7 @@ chai@^5.2.0: loupe "^3.1.0" pathval "^2.0.0" -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1470,7 +1487,7 @@ check-error@^2.1.1: resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.5.2: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -1485,15 +1502,22 @@ chokidar@^3.5.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + version "1.4.3" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== cliui@^8.0.1: version "8.0.1" @@ -1510,16 +1534,9 @@ co@^4.6.0: integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" + version "1.0.3" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^2.0.1: version "2.0.1" @@ -1533,11 +1550,6 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -1577,10 +1589,10 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== cookiejar@^2.1.4: version "2.1.4" @@ -1613,7 +1625,7 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -1622,13 +1634,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: - version "4.4.0" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -1636,15 +1641,22 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.4.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + version "1.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz" + integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== deep-eql@^5.0.1: version "5.0.2" @@ -1661,15 +1673,6 @@ deepmerge@^4.2.2: resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -1708,24 +1711,19 @@ diff@^4.0.1: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: - esutils "^2.0.2" + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" eastasianwidth@^0.2.0: version "0.2.0" @@ -1737,17 +1735,10 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.10: - version "3.1.10" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.668: - version "1.4.756" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz" - integrity sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw== +electron-to-chromium@^1.5.238: + version "1.5.239" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.239.tgz" + integrity sha512-1y5w0Zsq39MSPmEjHjbizvhYoTaulVtivpxkp5q5kaPmQtsK6/2nvAzGRxNMS9DoYySp9PkW0MAQDwU1m764mg== emittery@^0.13.1: version "0.13.1" @@ -1769,40 +1760,60 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +error-causes@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/error-causes/-/error-causes-3.0.2.tgz" + integrity sha512-i0B8zq1dHL6mM85FGoxaJnVtx6LD5nL2v0hlpGdntg5FOSyzQ46c9lmz5qx0xRS2+PWHGOHcYxGIBC5Le2dRMw== + error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" @@ -1813,86 +1824,87 @@ escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== +eslint-config-prettier@^10.1.8: + version "10.1.8" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.56.0, eslint@>=7.0.0: - version "8.57.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.38.0: + version "9.38.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz" + integrity sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.1" + "@eslint/core" "^0.16.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.38.0" + "@eslint/plugin-kit" "^0.4.0" + "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^8.9.0" + acorn "^8.15.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^4.2.1" esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -1919,16 +1931,16 @@ etag@~1.8.1: integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== ethers@^6.13.1: - version "6.13.1" - resolved "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz" - integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== + version "6.15.0" + resolved "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz" + integrity sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" + "@types/node" "22.7.5" aes-js "4.0.0-beta.5" - tslib "2.4.0" + tslib "2.7.0" ws "8.17.1" execa@^5.0.0: @@ -1963,36 +1975,36 @@ expect@^29.0.0, expect@^29.7.0: jest-util "^29.7.0" express@^4.18.2: - version "4.19.2" - resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + version "4.21.2" + resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.6.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" - qs "6.11.0" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -2004,18 +2016,18 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2031,9 +2043,9 @@ fast-safe-stringify@^2.1.1: integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -2044,49 +2056,34 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - minimatch "^5.0.1" + flat-cache "^4.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" statuses "2.0.1" unpipe "~1.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -2102,14 +2099,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flat@^5.0.2: version "5.0.2" @@ -2117,14 +2113,14 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.11" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== foreground-child@^3.1.0: version "3.3.1" @@ -2134,22 +2130,24 @@ foreground-child@^3.1.0: cross-spawn "^7.0.6" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +form-data@^4.0.0, form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" formidable@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz" - integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + version "2.1.5" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz" + integrity sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q== dependencies: + "@paralleldrive/cuid2" "^2.2.2" dezalgo "^1.0.4" - hexoid "^1.0.0" once "^1.4.0" qs "^6.11.0" @@ -2177,6 +2175,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -2192,28 +2195,41 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2227,13 +2243,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob@^10.4.5: version "10.4.5" resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" @@ -2258,36 +2267,15 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" @@ -2299,6 +2287,18 @@ graphemer@^1.4.0: resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +handlebars@^4.7.8: + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -2309,24 +2309,19 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.2: +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-symbols "^1.0.3" -hasown@^2.0.0: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -2338,11 +2333,6 @@ he@^1.2.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hexoid@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" @@ -2376,23 +2366,28 @@ ignore-by-default@^1.0.1: resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -2432,12 +2427,12 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" @@ -2508,9 +2503,9 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + version "6.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== dependencies: "@babel/core" "^7.23.9" "@babel/parser" "^7.23.9" @@ -2537,9 +2532,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -2553,16 +2548,6 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" @@ -2767,7 +2752,7 @@ jest-resolve-dependencies@^29.7.0: jest-regex-util "^29.6.3" jest-snapshot "^29.7.0" -jest-resolve@*, jest-resolve@^29.7.0: +jest-resolve@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== @@ -2863,7 +2848,7 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.7.0: +jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -2911,7 +2896,7 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.0, jest@^29.7.0: +jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -2946,10 +2931,10 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== json-buffer@3.0.1: version "3.0.1" @@ -2977,15 +2962,15 @@ json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -3048,14 +3033,14 @@ log-symbols@^4.1.0: is-unicode-supported "^0.1.0" lossless-json@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/lossless-json/-/lossless-json-4.0.2.tgz" - integrity sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA== + version "4.3.0" + resolved "https://registry.npmjs.org/lossless-json/-/lossless-json-4.3.0.tgz" + integrity sha512-ToxOC+SsduRmdSuoLZLYAr5zy1Qu7l5XhmPWM3zefCZ5IcrzW/h108qbJUKfOlDlhvhjUK84+8PSVX0kxnit0g== loupe@^3.1.0: - version "3.1.3" - resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz" - integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== + version "3.2.1" + resolved "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz" + integrity sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ== lru-cache@^10.2.0: version "10.4.3" @@ -3088,22 +3073,27 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -3113,12 +3103,12 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -3148,54 +3138,24 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.1.6: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== +minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" +minimist@^1.2.5: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" @@ -3203,41 +3163,42 @@ minimatch@^9.0.4: integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== mocha@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz" - integrity sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg== + version "11.7.4" + resolved "https://registry.npmjs.org/mocha/-/mocha-11.7.4.tgz" + integrity sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w== dependencies: - ansi-colors "^4.1.3" browser-stdout "^1.3.1" - chokidar "^3.5.3" + chokidar "^4.0.1" debug "^4.3.5" - diff "^5.2.0" + diff "^7.0.0" escape-string-regexp "^4.0.0" find-up "^5.0.0" glob "^10.4.5" he "^1.2.0" + is-path-inside "^3.0.3" js-yaml "^4.1.0" log-symbols "^4.1.0" - minimatch "^5.1.6" + minimatch "^9.0.5" ms "^2.1.3" + picocolors "^1.1.1" serialize-javascript "^6.0.2" strip-json-comments "^3.1.1" supports-color "^8.1.1" - workerpool "^6.5.1" + workerpool "^9.2.0" yargs "^17.7.2" yargs-parser "^21.1.1" yargs-unparser "^2.0.0" -ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.3, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -3248,20 +3209,25 @@ negotiator@0.6.3: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.26: + version "2.0.26" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz" + integrity sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA== nodemon@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz" - integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== + version "3.1.10" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz" + integrity sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw== dependencies: chokidar "^3.5.2" debug "^4" @@ -3274,13 +3240,6 @@ nodemon@^3.0.3: touch "^3.1.0" undefsafe "^2.0.5" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -3298,10 +3257,10 @@ object-assign@^4: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== on-finished@2.4.1: version "2.4.1" @@ -3429,25 +3388,20 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + version "2.0.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz" + integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -3455,9 +3409,9 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.2.0: version "4.2.0" @@ -3472,9 +3426,9 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.6.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" @@ -3521,12 +3475,19 @@ pure-rand@^6.0.0: resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qs@^6.11.0, qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +qs@^6.11.0: + version "6.14.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.4" + side-channel "^1.1.0" queue-microtask@^1.2.2: version "1.2.3" @@ -3560,6 +3521,11 @@ react-is@^18.0.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -3597,30 +3563,23 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + version "2.0.3" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.20.0: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + version "1.22.11" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== run-parallel@^1.1.9: version "1.2.0" @@ -3629,7 +3588,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.1.0, safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -3639,25 +3598,20 @@ safe-buffer@^5.1.0, safe-buffer@5.2.1: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: - version "7.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.3: + version "7.7.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -3680,27 +3634,15 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" + send "0.19.0" setprototypeof@1.2.0: version "1.2.0" @@ -3719,15 +3661,45 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.2" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -3782,9 +3754,9 @@ stack-utils@^2.0.3: escape-string-regexp "^2.0.0" starknet@7.5: - version "7.5.0" - resolved "https://registry.npmjs.org/starknet/-/starknet-7.5.0.tgz" - integrity sha512-yrGc97Y8Ao9n1Vv6ynq0fMB5Q/isyCRZS83Db9NWzwp/n9ZA9qSjqS3GMhSp9RZ5AB1hUhAC3+sT2hMXC/vs6w== + version "7.5.1" + resolved "https://registry.npmjs.org/starknet/-/starknet-7.5.1.tgz" + integrity sha512-PYMAWjxSivJp+zK1wTv7PeK3imkIP2P1cxRyHIcP47B+tjYlwfodTUzjCd+bar6MEMXKj4Y4sgEE6K1Oi9iPJQ== dependencies: "@noble/curves" "1.7.0" "@noble/hashes" "1.6.0" @@ -3852,9 +3824,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + version "7.1.2" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== dependencies: ansi-regex "^6.0.1" @@ -3897,13 +3869,6 @@ supertest@^6.3.4: methods "^1.1.2" superagent "^8.1.2" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -3918,14 +3883,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -3946,21 +3904,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -3974,30 +3922,28 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" + version "3.1.1" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== -ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-jest@^29.2.6: - version "29.2.6" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz" - integrity sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg== + version "29.4.5" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz" + integrity sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q== dependencies: bs-logger "^0.2.6" - ejs "^3.1.10" fast-json-stable-stringify "^2.1.0" - jest-util "^29.0.0" + handlebars "^4.7.8" json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.1" + semver "^7.7.3" + type-fest "^4.41.0" yargs-parser "^21.1.1" ts-mixer@^6.0.3: @@ -4005,7 +3951,7 @@ ts-mixer@^6.0.3: resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz" integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== -ts-node@^10.9.2, ts-node@>=9.0.0: +ts-node@^10.9.2: version "10.9.2" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -4024,10 +3970,10 @@ ts-node@^10.9.2, ts-node@>=9.0.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4041,16 +3987,16 @@ type-detect@4.0.8: resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^4.41.0: + version "4.41.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" @@ -4059,10 +4005,15 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@^5.8.3, typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6": - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== +typescript@^5.8.3: + version "5.9.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== undefsafe@^2.0.5: version "2.0.5" @@ -4074,23 +4025,28 @@ undici-types@~6.19.2: resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.13: - version "1.0.15" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz" - integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: - escalade "^3.1.2" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -4110,9 +4066,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + version "9.3.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -4142,10 +4098,15 @@ word-wrap@^1.2.5: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -workerpool@^6.5.1: - version "6.5.1" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" - integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@^9.2.0: + version "9.3.4" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz" + integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0"