diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index bfeb4dbb..33b580c5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -15,7 +15,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: "21" + node-version: "22" registry-url: "https://registry.npmjs.org" - name: Install Foundry diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index b45f2c1d..d48d836e 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -15,7 +15,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: "21" + node-version: "22" registry-url: "https://registry.npmjs.org" - name: Install Foundry diff --git a/.github/workflows/publish-npm.yaml b/.github/workflows/publish-npm.yaml index 7e986c7e..2f3dfed3 100644 --- a/.github/workflows/publish-npm.yaml +++ b/.github/workflows/publish-npm.yaml @@ -15,7 +15,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: "21" + node-version: "22" registry-url: "https://registry.npmjs.org" - name: Install Foundry diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7a9039a9..f799252a 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -15,7 +15,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: "21" + node-version: "22" registry-url: "https://registry.npmjs.org" - name: Install Foundry diff --git a/package.json b/package.json index df31898a..5b45a93c 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "@types/chai": "^4.2.0", "@types/jest": "^29.5.14", "@types/lodash": "^4.14.202", + "@types/minimatch": "^6.0.0", "@types/mocha": ">=9.1.0", "@types/node": ">=12.0.0", "@types/spinnies": "^0.5.3", @@ -128,8 +129,11 @@ "@ton/core": "^0.60.1", "@ton/crypto": "^3.3.0", "@ton/ton": "^15.2.1", + "@types/inquirer": "^9.0.7", "@uniswap/v2-periphery": "^1.1.0-beta.0", + "@uniswap/v3-core": "^1.0.1", "@uniswap/v3-periphery": "^1.4.4", + "@uniswap/v3-sdk": "^3.25.2", "@zetachain/networks": "14.0.0-rc1", "@zetachain/protocol-contracts": "13.0.0", "@zetachain/protocol-contracts-solana": "^5.0.0", @@ -150,7 +154,10 @@ "form-data": "^4.0.0", "handlebars": "4.7.7", "hardhat": "^2.22.8", + "inquirer": "^12.5.2", + "jsbi": "^4.3.2", "lodash": "^4.17.21", + "minimatch": "^10.0.3", "ora": "5.4.1", "spinnies": "^0.5.1", "table": "^6.9.0", diff --git a/packages/client/src/getPools.ts b/packages/client/src/getPools.ts index 5577de90..ed7bec94 100644 --- a/packages/client/src/getPools.ts +++ b/packages/client/src/getPools.ts @@ -39,9 +39,10 @@ export const getPools = async function ( // Step 6: Format pools with token details const foreignCoins = await this.getForeignCoins(); - return formatPoolsWithTokenDetails( + return await formatPoolsWithTokenDetails( pools, foreignCoins, - addresses.zetaTokenAddress + addresses.zetaTokenAddress, + provider ); }; diff --git a/packages/commands/src/zetachain/index.ts b/packages/commands/src/zetachain/index.ts index 0622089c..c3844e18 100644 --- a/packages/commands/src/zetachain/index.ts +++ b/packages/commands/src/zetachain/index.ts @@ -1,6 +1,7 @@ import { Command } from "commander"; import { callCommand } from "./call"; +import { poolsCommand } from "./pools"; import { withdrawCommand } from "./withdraw"; import { withdrawAndCallCommand } from "./withdrawAndCall"; @@ -10,4 +11,5 @@ export const zetachainCommand = new Command("zetachain") .addCommand(callCommand) .addCommand(withdrawCommand) .addCommand(withdrawAndCallCommand) + .addCommand(poolsCommand) .helpCommand(false); diff --git a/packages/commands/src/zetachain/pools/create.ts b/packages/commands/src/zetachain/pools/create.ts new file mode 100644 index 00000000..2ccd9ff5 --- /dev/null +++ b/packages/commands/src/zetachain/pools/create.ts @@ -0,0 +1,172 @@ +/******************************************************************** + * pools create — create a V3 pool and initialise it if required + *******************************************************************/ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as UniswapV3Pool from "@uniswap/v3-core/artifacts/contracts/UniswapV3Pool.sol/UniswapV3Pool.json"; +import { Command } from "commander"; +import { + Contract, + ContractTransactionResponse, + ethers, + JsonRpcProvider, + Wallet, +} from "ethers"; + +import { + DEFAULT_FACTORY, + DEFAULT_FEE, + DEFAULT_RPC, +} from "../../../../../src/constants/pools"; +import { IERC20Metadata__factory } from "../../../../../typechain-types"; +import { + type CreatePoolOptions, + createPoolOptionsSchema, + PoolCreationError, +} from "../../../../../types/pools"; + +/* ─── helpers ---------------------------------------------------- */ +const sqrtBig = (n: bigint): bigint => { + // integer √ + if (n < 2n) return n; + let x = n, + y = (x + 1n) >> 1n; + while (y < x) { + x = y; + y = (x + n / x) >> 1n; + } + return x; +}; + +/** sqrtPriceX96 = √(price₁ / price₀) × 2⁹⁶ (token1/token0) */ +const buildSqrtPriceX96 = ( + usd0: number, + usd1: number, + dec0: number, + dec1: number +): bigint => { + // USD prices mapped to factory order + const pTok0 = BigInt(Math.round(usd0 * 1e18)); + const pTok1 = BigInt(Math.round(usd1 * 1e18)); + + // token1/token0 ratio in base-units, scaled by 2¹⁹² + const num = pTok1 * 10n ** BigInt(dec0); // p₁ × 10^dec₀ + const den = pTok0 * 10n ** BigInt(dec1); // p₀ × 10^dec₁ + const ratioX192 = (num << 192n) / den; // shift before divide + if (ratioX192 === 0n) throw new Error("ratio underflow – raise precision"); + + /* integer √ → Q64.96 */ + return sqrtBig(ratioX192); +}; + +/* ─── main ------------------------------------------------------- */ +const main = async (raw: CreatePoolOptions) => { + try { + const o = createPoolOptionsSchema.parse(raw); + const [usdA, usdB] = o.prices.map(Number); + + const provider = new JsonRpcProvider(o.rpc ?? DEFAULT_RPC); + const signer = new Wallet(o.privateKey, provider); + + /* factory --------------------------------------------------- */ + const factory = new Contract( + o.factory ?? DEFAULT_FACTORY, + UniswapV3Factory.abi, + signer + ); + + let poolAddr = (await factory.getPool( + o.tokens[0], + o.tokens[1], + o.fee ?? DEFAULT_FEE + )) as string; + + if (poolAddr === ethers.ZeroAddress) { + console.log("Creating pool …"); + const tx = (await factory.createPool( + o.tokens[0], + o.tokens[1], + o.fee ?? DEFAULT_FEE + )) as ContractTransactionResponse; + await tx.wait(); + poolAddr = (await factory.getPool( + o.tokens[0], + o.tokens[1], + o.fee ?? DEFAULT_FEE + )) as string; + console.log("✦ createPool tx:", tx.hash); + } else { + console.log("Pool already exists:", poolAddr); + } + + /* pool contract -------------------------------------------- */ + const pool = new Contract(poolAddr, UniswapV3Pool.abi, signer); + const [token0, token1] = await Promise.all([ + pool.token0() as Promise, + pool.token1() as Promise, + ]); + const [dec0, dec1] = await Promise.all([ + IERC20Metadata__factory.connect(token0, provider).decimals(), + IERC20Metadata__factory.connect(token1, provider).decimals(), + ]); + + /* compute initial sqrtPriceX96 ----------------------------- */ + const isUserToken0EqualPoolToken0 = + token0.toLowerCase() === o.tokens[0].toLowerCase(); + const [priceToken0, priceToken1] = isUserToken0EqualPoolToken0 + ? [usdA, usdB] // matches pool order already + : [usdB, usdA]; // swap + + const sqrtPriceX96 = buildSqrtPriceX96( + priceToken0, + priceToken1, + Number(dec0), + Number(dec1) + ); + + /* check if initialised ------------------------------------- */ + let needInit = false; + try { + const slot0 = (await pool.slot0()) as { sqrtPriceX96: bigint }; + needInit = slot0.sqrtPriceX96 === 0n; + } catch { + needInit = true; // slot0() reverted → not initialised + } + + if (needInit) { + console.log("Initialising pool …"); + const tx = (await pool.initialize( + sqrtPriceX96 + )) as ContractTransactionResponse; + await tx.wait(); + console.log("✓ Pool initialised (tx:", tx.hash, ")"); + } else { + console.log("Pool already initialised; skipped."); + } + + console.log("✔ Done – pool address:", poolAddr); + } catch (err) { + const e = err as PoolCreationError; + console.error("Pool creation failed:", e.message); + if (e.transaction) console.error("tx:", e.transaction); + if (e.receipt) console.error("receipt:", e.receipt); + process.exit(1); + } +}; + +/* ─── CLI ------------------------------------------------------- */ +export const createCommand = new Command("create") + .summary("Create a Uniswap V3 pool and initialise it at a USD price ratio") + .requiredOption("--private-key ", "Private key paying gas") + .requiredOption("--tokens ", "Two token addresses (CLI order)") + .requiredOption( + "--prices ", + "USD prices for the tokens in same order" + ) + .option( + "--fee ", + "Fee tier (default 3000 = 0.3%)", + DEFAULT_FEE.toString() + ) + .option("--factory ", "Uniswap V3 Factory", DEFAULT_FACTORY) + .option("--rpc ", "JSON-RPC endpoint", DEFAULT_RPC) + .action(main); diff --git a/packages/commands/src/zetachain/pools/deploy.ts b/packages/commands/src/zetachain/pools/deploy.ts new file mode 100644 index 00000000..5081e2d5 --- /dev/null +++ b/packages/commands/src/zetachain/pools/deploy.ts @@ -0,0 +1,187 @@ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as NonfungiblePositionManager from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"; +import * as SwapRouter from "@uniswap/v3-periphery/artifacts/contracts/SwapRouter.sol/SwapRouter.json"; +import { Command } from "commander"; +import { ContractFactory, ethers, JsonRpcProvider, Wallet } from "ethers"; + +import { DEFAULT_RPC, DEFAULT_WZETA } from "../../../../../src/constants/pools"; +import { + DeploymentError, + type DeployOptions, + deployOptionsSchema, +} from "../../../../../types/pools"; + +const deployOpts = { + gasLimit: 8000000, +}; + +const estimateGas = async ( + contractFactory: ContractFactory, + args: unknown[] = [] +): Promise => { + try { + const deployment = await contractFactory.getDeployTransaction(...args); + const gasEstimate = await contractFactory.runner?.provider?.estimateGas( + deployment + ); + console.log("Estimated gas:", gasEstimate?.toString()); + return gasEstimate ?? null; + } catch (error) { + console.error("Gas estimation failed:", error); + return null; + } +}; + +const main = async (options: DeployOptions): Promise => { + try { + // Validate options + const validatedOptions = deployOptionsSchema.parse(options); + + // Initialize provider and signer + const provider = new JsonRpcProvider(validatedOptions.rpc); + const signer = new Wallet(validatedOptions.privateKey, provider); + + console.log("Deploying Uniswap V3 contracts..."); + console.log("Deployer address:", await signer.getAddress()); + console.log("Network:", (await provider.getNetwork()).name); + console.log( + "Balance:", + ethers.formatEther(await provider.getBalance(await signer.getAddress())), + "ZETA" + ); + + // Deploy Uniswap V3 Factory + console.log("\nDeploying Uniswap V3 Factory..."); + const uniswapV3Factory = new ContractFactory( + UniswapV3Factory.abi, + UniswapV3Factory.bytecode, + signer + ); + + // Estimate gas for factory deployment + const factoryGasEstimate = await estimateGas(uniswapV3Factory); + if (factoryGasEstimate) { + deployOpts.gasLimit = Number(factoryGasEstimate * 2n); + } + + console.log("Using gas limit:", deployOpts.gasLimit.toString()); + + const uniswapV3FactoryInstance = await uniswapV3Factory.deploy(deployOpts); + console.log( + "Factory deployment transaction hash:", + uniswapV3FactoryInstance.deploymentTransaction()?.hash + ); + + await uniswapV3FactoryInstance.waitForDeployment(); + console.log( + "Uniswap V3 Factory deployed at:", + await uniswapV3FactoryInstance.getAddress() + ); + + // Deploy Swap Router + console.log("\nDeploying Swap Router..."); + const swapRouter = new ContractFactory( + SwapRouter.abi, + SwapRouter.bytecode, + signer + ); + + // Estimate gas for router deployment + const routerGasEstimate = await estimateGas(swapRouter, [ + await uniswapV3FactoryInstance.getAddress(), + validatedOptions.wzeta, + ]); + if (routerGasEstimate) { + deployOpts.gasLimit = Number(routerGasEstimate * 2n); + } + + console.log("Using gas limit:", deployOpts.gasLimit.toString()); + + const swapRouterInstance = await swapRouter.deploy( + await uniswapV3FactoryInstance.getAddress(), + validatedOptions.wzeta, + deployOpts + ); + console.log( + "Router deployment transaction hash:", + swapRouterInstance.deploymentTransaction()?.hash + ); + + await swapRouterInstance.waitForDeployment(); + console.log( + "Swap Router deployed at:", + await swapRouterInstance.getAddress() + ); + + // Deploy Nonfungible Position Manager + console.log("\nDeploying Nonfungible Position Manager..."); + const nonfungiblePositionManager = new ContractFactory( + NonfungiblePositionManager.abi, + NonfungiblePositionManager.bytecode, + signer + ); + + // Estimate gas for position manager deployment + const positionManagerGasEstimate = await estimateGas( + nonfungiblePositionManager, + [ + await uniswapV3FactoryInstance.getAddress(), + validatedOptions.wzeta, + await swapRouterInstance.getAddress(), + ] + ); + if (positionManagerGasEstimate) { + deployOpts.gasLimit = Number(positionManagerGasEstimate * 2n); + } + + console.log("Using gas limit:", deployOpts.gasLimit.toString()); + + const nonfungiblePositionManagerInstance = + await nonfungiblePositionManager.deploy( + await uniswapV3FactoryInstance.getAddress(), + validatedOptions.wzeta, + await swapRouterInstance.getAddress(), + deployOpts + ); + console.log( + "Position Manager deployment transaction hash:", + nonfungiblePositionManagerInstance.deploymentTransaction()?.hash + ); + + await nonfungiblePositionManagerInstance.waitForDeployment(); + console.log( + "Nonfungible Position Manager deployed at:", + await nonfungiblePositionManagerInstance.getAddress() + ); + + console.log("\nDeployment completed successfully!"); + console.log("\nContract addresses:"); + console.log( + "Uniswap V3 Factory:", + await uniswapV3FactoryInstance.getAddress() + ); + console.log("Swap Router:", await swapRouterInstance.getAddress()); + console.log( + "Nonfungible Position Manager:", + await nonfungiblePositionManagerInstance.getAddress() + ); + } catch (error) { + const deploymentError = error as DeploymentError; + console.error("\nDeployment failed with error:"); + console.error("Error message:", deploymentError.message); + if (deploymentError.receipt) { + console.error("Transaction receipt:", deploymentError.receipt); + } + if (deploymentError.transaction) { + console.error("Transaction details:", deploymentError.transaction); + } + process.exit(1); + } +}; + +export const deployCommand = new Command("deploy") + .summary("Deploy Uniswap V3 contracts") + .requiredOption("--private-key ", "Private key for deployment") + .option("--rpc ", "RPC URL for the network", DEFAULT_RPC) + .option("--wzeta ", "WZETA token address", DEFAULT_WZETA) + .action(main); diff --git a/packages/commands/src/zetachain/pools/index.ts b/packages/commands/src/zetachain/pools/index.ts new file mode 100644 index 00000000..56b533ce --- /dev/null +++ b/packages/commands/src/zetachain/pools/index.ts @@ -0,0 +1,19 @@ +import { Command } from "commander"; + +import { createCommand } from "./create"; +import { deployCommand } from "./deploy"; +import { liquidityCommand } from "./liquidity"; +import { showCommand } from "./show"; +import { swapCommand } from "./swap"; + +export const poolsCommand = new Command("pools") + .summary("Interact with ZetaChain Uniswap v3 pools.") + .description( + "This command group provides a set of commands for managing and interacting with Uniswap v3 pools on ZetaChain. It includes functionality for deploying new pools, creating new pools, swapping tokens, and managing liquidity positions. Note: these commands are meant to be used for testing purposes only." + ) + .alias("p") + .addCommand(deployCommand) + .addCommand(createCommand) + .addCommand(swapCommand) + .addCommand(showCommand) + .addCommand(liquidityCommand); diff --git a/packages/commands/src/zetachain/pools/liquidity/add.ts b/packages/commands/src/zetachain/pools/liquidity/add.ts new file mode 100644 index 00000000..5c9b48fe --- /dev/null +++ b/packages/commands/src/zetachain/pools/liquidity/add.ts @@ -0,0 +1,401 @@ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as NonfungiblePositionManager from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"; +import { Command } from "commander"; +import { + Contract, + ContractTransactionReceipt, + ContractTransactionResponse, + ethers, + JsonRpcProvider, + Log, + Wallet, +} from "ethers"; +import inquirer from "inquirer"; + +// Type definitions for better type safety +type Slot0Result = { + feeProtocol: number; + observationCardinality: number; + observationCardinalityNext: number; + observationIndex: number; + sqrtPriceX96: bigint; + tick: bigint; + unlocked: boolean; +}; + +import { + DEFAULT_FACTORY, + DEFAULT_FEE, + DEFAULT_POSITION_MANAGER, + DEFAULT_RPC, +} from "../../../../../../src/constants/pools"; +import { + type AddLiquidityOptions, + addLiquidityOptionsSchema, + MintParams, +} from "../../../../../../types/pools"; + +const main = async (options: AddLiquidityOptions): Promise => { + try { + // 1. Validate CLI options + const validatedOptions = addLiquidityOptionsSchema.parse(options); + + /** + * 2. Bootstrap signer & provider + */ + const provider = new JsonRpcProvider(validatedOptions.rpc ?? DEFAULT_RPC); + const signer = new Wallet(validatedOptions.privateKey, provider); + + /** + * 3. Parse token addresses from CLI + */ + if (validatedOptions.tokens.length !== 2) { + throw new Error("Exactly 2 token addresses must be provided"); + } + + const [inputTokenA, inputTokenB] = validatedOptions.tokens.map((addr) => + ethers.getAddress(addr) + ); + + /** + * 4. Locate (or verify) the pool — order agnostic + */ + const factory = new Contract( + DEFAULT_FACTORY, + UniswapV3Factory.abi, + provider + ); + + const fee = Number(validatedOptions.fee ?? DEFAULT_FEE); + + const poolAddress = (await factory.getPool( + inputTokenA, + inputTokenB, + fee + )) as string; + + if (poolAddress === ethers.ZeroAddress) { + throw new Error("No pool found for supplied token pair and fee tier"); + } + + /** + * 5. Read canonical token ordering and current state from the pool + */ + const pool = new Contract( + poolAddress, + [ + "function token0() view returns (address)", + "function token1() view returns (address)", + "function tickSpacing() view returns (int24)", + "function liquidity() view returns (uint128)", + "function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)", + ], + provider + ); + + const poolToken0 = ethers.getAddress((await pool.token0()) as string); + const poolToken1 = ethers.getAddress((await pool.token1()) as string); + const tickSpacing = Number((await pool.tickSpacing()) as bigint); + const slot0 = (await pool.slot0()) as Slot0Result; + const currentTick = Number(slot0.tick); + + /** + * 6. Build token helpers (decimals, symbol, balances, approve) + */ + const tokenContracts: Record = {}; + + const getTokenContract = (addr: string): Contract => { + if (!tokenContracts[addr]) { + tokenContracts[addr] = new Contract( + addr, + [ + "function decimals() view returns (uint8)", + "function symbol() view returns (string)", + "function balanceOf(address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + ], + signer + ); + } + return tokenContracts[addr]; + }; + + const [decA, symA] = await Promise.all([ + getTokenContract(inputTokenA).decimals() as Promise, + getTokenContract(inputTokenA).symbol() as Promise, + ]).then(([d, s]) => [Number(d), s]); + + const [decB, symB] = await Promise.all([ + getTokenContract(inputTokenB).decimals() as Promise, + getTokenContract(inputTokenB).symbol() as Promise, + ]).then(([d, s]) => [Number(d), s]); + + /** + * 7. Parse user-entered amounts (aligned with the order the user typed) + */ + if (validatedOptions.amounts.length !== 2) { + throw new Error("Exactly 2 amounts must be provided"); + } + const amountA = ethers.parseUnits(validatedOptions.amounts[0], decA); + const amountB = ethers.parseUnits(validatedOptions.amounts[1], decB); + + /** + * 8. Ensure we pass token0/token1 in *pool* order. Swap amounts if needed. + */ + const finalToken0 = poolToken0; + const finalToken1 = poolToken1; + + let finalAmount0: bigint; + let finalAmount1: bigint; + let symbol0: string; + let symbol1: string; + + if (inputTokenA === poolToken0) { + // user's first address matches pool.token0 ⇒ no swap + finalAmount0 = amountA; + finalAmount1 = amountB; + symbol0 = symA as string; + symbol1 = symB as string; + } else { + // user supplied in reverse order ⇒ swap + finalAmount0 = amountB; + finalAmount1 = amountA; + symbol0 = symB as string; + symbol1 = symA as string; + } + + /** + * 9. Balance checks + */ + const signerAddress = await signer.getAddress(); + + const [balance0, balance1] = await Promise.all([ + getTokenContract(finalToken0).balanceOf(signerAddress) as Promise, + getTokenContract(finalToken1).balanceOf(signerAddress) as Promise, + ]); + + if (balance0 < finalAmount0) { + throw new Error(`Insufficient ${symbol0} balance`); + } + if (balance1 < finalAmount1) { + throw new Error(`Insufficient ${symbol1} balance`); + } + + /** + * 10. Smart tick range calculation and validation + */ + let tickLower: number; + let tickUpper: number; + + if (!validatedOptions.tickLower || !validatedOptions.tickUpper) { + console.log( + "\n⚠️ No tick range specified. Calculating default range..." + ); + + // Use a moderate range around current price + const rangeWidth = 600; // Reasonable default range + const rawLower = currentTick - rangeWidth; + const rawUpper = currentTick + rangeWidth; + + tickLower = Math.floor(rawLower / tickSpacing) * tickSpacing; + tickUpper = Math.ceil(rawUpper / tickSpacing) * tickSpacing; + + console.log( + `✅ Using range: [${tickLower}, ${tickUpper}] (${ + tickUpper - tickLower + } ticks)` + ); + console.log(` Current tick: ${currentTick}`); + } else { + const rawLower = Number(validatedOptions.tickLower); + const rawUpper = Number(validatedOptions.tickUpper); + + tickLower = Math.floor(rawLower / tickSpacing) * tickSpacing; + tickUpper = Math.floor(rawUpper / tickSpacing) * tickSpacing; + + // Validate user-provided range + const rangeTicks = tickUpper - tickLower; + const priceRangeFactor = Math.pow(1.0001, rangeTicks); + + if (priceRangeFactor > 10) { + console.log(`\n🚨 WARNING: Extremely wide tick range detected!`); + console.log( + ` Range: [${tickLower}, ${tickUpper}] (${rangeTicks} ticks)` + ); + console.log(` Price range factor: ${priceRangeFactor.toFixed(2)}x`); + console.log(` This will heavily favor one token over the other!`); + console.log( + ` Consider using a smaller range around current tick: ${currentTick}\n` + ); + + if (validatedOptions.yes) { + console.log("Proceeding with wide range (--yes flag set)"); + } else { + const { continueAnyway } = (await inquirer.prompt([ + { + default: false, + message: "Continue with this wide range anyway?", + name: "continueAnyway", + type: "confirm", + }, + ])) as { continueAnyway: boolean }; + + if (!continueAnyway) { + console.log("Cancelled. Please specify a narrower tick range."); + return; + } + } + } + } + + if (tickLower >= tickUpper) { + throw new Error("tickLower must be smaller than tickUpper"); + } + + // Check for low liquidity and warn user + const poolLiquidity = (await pool.liquidity()) as bigint; + const liquidityAmount = Number(poolLiquidity); + + if (liquidityAmount < 1000) { + console.log( + `\n⚠️ WARNING: This pool has very low liquidity (${liquidityAmount} units)` + ); + console.log( + ` • Token ratios may be heavily skewed until more liquidity is added` + ); + console.log( + ` • Your position will still earn fees and can be withdrawn later` + ); + console.log(` • Consider this normal for new/empty pools\n`); + } + + /** + * 11. Recipient & summary + */ + const recipient = validatedOptions.recipient ?? signerAddress; + + console.log("\nTransaction Details:"); + console.log(`Pool: ${poolAddress}`); + console.log(`Fee tier: ${fee / 10000}%`); + console.log(`Token0: ${symbol0} (${finalToken0})`); + console.log(`Token1: ${symbol1} (${finalToken1})`); + console.log( + `Amount0: ${ + validatedOptions.amounts[inputTokenA === poolToken0 ? 0 : 1] + }` + ); + console.log( + `Amount1: ${ + validatedOptions.amounts[inputTokenA === poolToken0 ? 1 : 0] + }` + ); + console.log(`Tick range: [${tickLower}, ${tickUpper}]`); + console.log(`Recipient: ${recipient}`); + + if (validatedOptions.yes) { + console.log("Proceeding with transaction (--yes flag set)"); + } else { + const { confirm } = (await inquirer.prompt([ + { message: "Proceed?", name: "confirm", type: "confirm" }, + ])) as { confirm: boolean }; + if (!confirm) { + console.log("Cancelled by user"); + return; + } + } + + /** + * 12. Approvals + */ + console.log("Approving tokens..."); + const approve0Tx = (await getTokenContract(finalToken0).approve( + DEFAULT_POSITION_MANAGER, + finalAmount0 + )) as ContractTransactionResponse; + const approve1Tx = (await getTokenContract(finalToken1).approve( + DEFAULT_POSITION_MANAGER, + finalAmount1 + )) as ContractTransactionResponse; + await Promise.all([approve0Tx.wait(), approve1Tx.wait()]); + console.log("Tokens approved"); + + /** + * 13. Set minimum amounts and mint position + */ + const amount0Min = 1n; // Minimal slippage protection + const amount1Min = 1n; // Minimal slippage protection + + const params: MintParams = { + amount0Desired: finalAmount0, + amount0Min, + amount1Desired: finalAmount1, + amount1Min, + deadline: Math.floor(Date.now() / 1000) + 60 * 20, + fee: BigInt(fee), + recipient, + tickLower: BigInt(tickLower), + tickUpper: BigInt(tickUpper), + token0: finalToken0, + token1: finalToken1, + }; + + const positionManager = new Contract( + DEFAULT_POSITION_MANAGER, + NonfungiblePositionManager.abi, + signer + ); + + console.log("Minting position..."); + const mintTx = (await positionManager.mint( + params + )) as ContractTransactionResponse; + const receipt = (await mintTx.wait()) as ContractTransactionReceipt; + + /** + * 14. Extract NFT token ID from Transfer event + */ + const iface = positionManager.interface; + const transferLog = receipt.logs.find((l: Log) => { + try { + const parsed = iface.parseLog({ data: l.data, topics: l.topics }); + return parsed?.name === "Transfer"; + } catch { + return false; + } + }); + + const tokenId = transferLog + ? (iface.parseLog(transferLog as Log)?.args?.[2] as bigint)?.toString() ?? + "" + : ""; + + console.log("\nLiquidity added successfully!"); + console.log(`Position NFT ID: ${tokenId}`); + console.log(`Transaction: ${mintTx.hash}`); + } catch (err) { + console.error("Failed to add liquidity:", (err as Error).message); + process.exit(1); + } +}; + +export const addCommand = new Command("add") + .summary("Add liquidity to a Uniswap V3 pool") + .description( + "Add liquidity to a Uniswap V3 pool. If tick range is not specified, a reasonable default range around the current price will be calculated automatically." + ) + .requiredOption("--private-key ", "Private key") + .requiredOption("--tokens ", "Token addresses (2)") + .requiredOption("--amounts ", "Token amounts (2)") + .option("--rpc ", "JSON-RPC endpoint", DEFAULT_RPC) + .option( + "--tick-lower ", + "Lower tick (optional, auto-calculated if not provided)" + ) + .option( + "--tick-upper ", + "Upper tick (optional, auto-calculated if not provided)" + ) + .option("--fee ", "Fee tier", "3000") + .option("--recipient
", "Recipient address") + .option("--yes", "Skip confirmation prompts", false) + .action(main); diff --git a/packages/commands/src/zetachain/pools/liquidity/index.ts b/packages/commands/src/zetachain/pools/liquidity/index.ts new file mode 100644 index 00000000..2b4b62d3 --- /dev/null +++ b/packages/commands/src/zetachain/pools/liquidity/index.ts @@ -0,0 +1,11 @@ +import { Command } from "commander"; + +import { addCommand } from "./add"; +import { removeCommand } from "./remove"; +import { showCommand } from "./show"; + +export const liquidityCommand = new Command("liquidity") + .description("Manage liquidity in Uniswap V3 pools") + .addCommand(addCommand) + .addCommand(removeCommand) + .addCommand(showCommand); diff --git a/packages/commands/src/zetachain/pools/liquidity/remove.ts b/packages/commands/src/zetachain/pools/liquidity/remove.ts new file mode 100644 index 00000000..f4ba9ae2 --- /dev/null +++ b/packages/commands/src/zetachain/pools/liquidity/remove.ts @@ -0,0 +1,133 @@ +// src/cli/commands/pools/liquidity/remove.ts +import * as NonfungiblePositionManager from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"; +import { Command } from "commander"; +import { + Contract, + ContractTransactionResponse, + JsonRpcProvider, + Wallet, +} from "ethers"; +import inquirer from "inquirer"; + +import { + DEFAULT_POSITION_MANAGER, + DEFAULT_RPC, +} from "../../../../../../src/constants/pools"; +import { + type RemoveLiquidityOptions, + removeLiquidityOptionsSchema, +} from "../../../../../../types/pools"; + +const MaxUint128 = (1n << 128n) - 1n; // 2¹²⁸-1 + +const main = async (options: RemoveLiquidityOptions): Promise => { + try { + const o = removeLiquidityOptionsSchema.parse(options); + + /* ─── 1. Provider & signer ─────────────────────────────────────────────── */ + const provider = new JsonRpcProvider(o.rpc ?? DEFAULT_RPC); + const signer = new Wallet(o.privateKey, provider); + const pm = new Contract( + DEFAULT_POSITION_MANAGER, + NonfungiblePositionManager.abi, + signer + ); + + /* ─── 2. Select a position NFT ─────────────────────────────────────────── */ + let tokenId = o.tokenId; + if (!tokenId) { + const bal = (await pm.balanceOf(signer.address)) as bigint; + if (bal === 0n) throw new Error("Signer owns no liquidity positions"); + + const ids: bigint[] = []; + for (let i = 0n; i < bal; i++) { + ids.push((await pm.tokenOfOwnerByIndex(signer.address, i)) as bigint); + } + + const { chosen } = (await inquirer.prompt([ + { + choices: ids.map((id) => ({ name: id.toString(), value: id })), + message: "Select position to remove liquidity from", + name: "chosen", + type: "list", + }, + ])) as { chosen: bigint }; + tokenId = chosen.toString(); + } + + /* ─── 3. Fetch position info ───────────────────────────────────────────── */ + const pos = (await pm.positions(tokenId)) as { + liquidity: bigint; + token0: string; + token1: string; + }; + const liquidity = pos.liquidity; + if (liquidity === 0n) { + console.log("Position already has zero liquidity"); + return; + } + + console.log("\nPosition", tokenId.toString()); + console.log("Liquidity:", liquidity.toString()); + console.log("Token0:", pos.token0); + console.log("Token1:", pos.token1); + if ( + !( + (await inquirer.prompt([ + { + default: false, + message: "Remove ALL liquidity and collect the tokens?", + name: "ok", + type: "confirm", + }, + ])) as { ok: boolean } + ).ok + ) { + process.exit(0); + } + + /* ─── 4. decreaseLiquidity ─────────────────────────────────────────────── */ + const deadline = Math.floor(Date.now() / 1e3) + 60 * 20; + const decTx = (await pm.decreaseLiquidity({ + amount0Min: 0, + amount1Min: 0, + deadline, + liquidity, + tokenId, + })) as ContractTransactionResponse; + await decTx.wait(); + console.log("✓ Liquidity removed (tx:", decTx.hash + ")"); + + /* ─── 5. collect ───────────────────────────────────────────────────────── */ + const colTx = (await pm.collect({ + amount0Max: MaxUint128, + amount1Max: MaxUint128, + recipient: signer.address, + tokenId, + })) as ContractTransactionResponse; + await colTx.wait(); + console.log("✓ Fees + principal collected (tx:", colTx.hash + ")"); + + /* ─── 6. burn (optional) ───────────────────────────────────────────────── */ + if (o.burn) { + const burnTx = (await pm.burn(tokenId)) as ContractTransactionResponse; + await burnTx.wait(); + console.log("✓ Empty NFT burned (tx:", burnTx.hash + ")"); + } + } catch (e) { + console.error( + "\nRemove-liquidity failed:", + e instanceof Error ? e.message : e + ); + process.exit(1); + } +}; + +/* ─── CLI wiring ───────────────────────────────────────────────────────────── */ +export const removeCommand = new Command("remove") + .summary("Remove liquidity from a Uniswap V3 position") + .option("--rpc ", "RPC URL", DEFAULT_RPC) + .option("--token-id ", "Position NFT ID (prompted if omitted)") + .option("--burn", "Burn the NFT after withdrawing", false) + .requiredOption("--private-key ", "Private key of the position owner") + .action(main); diff --git a/packages/commands/src/zetachain/pools/liquidity/show.ts b/packages/commands/src/zetachain/pools/liquidity/show.ts new file mode 100644 index 00000000..6278b1e6 --- /dev/null +++ b/packages/commands/src/zetachain/pools/liquidity/show.ts @@ -0,0 +1,111 @@ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as NonfungiblePositionManager from "@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json"; +import { Command } from "commander"; +import { Contract, JsonRpcProvider, Wallet } from "ethers"; + +import { + DEFAULT_FACTORY, + DEFAULT_POSITION_MANAGER, + DEFAULT_RPC, +} from "../../../../../../src/constants/pools"; +import { IERC20Metadata__factory } from "../../../../../../typechain-types"; +import { + ShowLiquidityOptions, + showLiquidityOptionsSchema, +} from "../../../../../../types/pools"; + +const main = async (raw: ShowLiquidityOptions) => { + try { + /* ─── 1. Parse CLI options ───────────────────────────────────────────── */ + const o = showLiquidityOptionsSchema.parse(raw); + const provider = new JsonRpcProvider(o.rpc); + const signer = new Wallet(o.privateKey, provider); + const addr = await signer.getAddress(); + + /* ─── 2. Load contracts ──────────────────────────────────────────────── */ + const pm = new Contract( + DEFAULT_POSITION_MANAGER, + NonfungiblePositionManager.abi, + provider + ); + const fac = new Contract(DEFAULT_FACTORY, UniswapV3Factory.abi, provider); + + /* ─── 3. Enumerate NFTs ──────────────────────────────────────────────── */ + const bal = (await pm.balanceOf(addr)) as bigint; + if (bal === 0n) { + console.log("No liquidity positions found for", addr); + return; + } + console.log(`\n${bal.toString()} Uniswap V3 position(s) for ${addr}\n`); + + for (let i = 0n; i < bal; i++) { + const id = (await pm.tokenOfOwnerByIndex(addr, i)) as bigint; + const pos = (await pm.positions(id)) as { + fee: bigint; + liquidity: bigint; + tickLower: bigint; + tickUpper: bigint; + token0: string; + token1: string; + tokensOwed0: bigint; + tokensOwed1: bigint; + }; + + const [ + token0, + token1, + fee, + tickLower, + tickUpper, + liquidity, + tokensOwed0, + tokensOwed1, + ] = [ + pos.token0, + pos.token1, + pos.fee, + pos.tickLower, + pos.tickUpper, + pos.liquidity, + pos.tokensOwed0, + pos.tokensOwed1, + ]; + + /* symbols (fail-safe to address if call reverts) */ + const [sym0, sym1] = await Promise.all( + [token0, token1].map(async (t: string) => { + try { + return await IERC20Metadata__factory.connect(t, provider).symbol(); + } catch { + return t; + } + }) + ); + + /* derive pool address (handy for UI links / debugging) */ + const pool = (await fac.getPool(token0, token1, fee)) as string; + + console.log(`• NFT #${id.toString()}`); + console.log(` Pool : ${pool}`); + console.log(` Pair : ${sym0}/${sym1}`); + console.log(` Fee Tier : ${Number(fee) / 1e4}%`); + console.log( + ` Ticks : [${tickLower.toString()}, ${tickUpper.toString()}]` + ); + console.log(` Liquidity : ${liquidity.toString()}`); + console.log( + ` Owed0/Owed1: ${tokensOwed0.toString()} / ${tokensOwed1.toString()}` + ); + console.log(""); + } + } catch (e) { + console.error("liquidity show failed:", e instanceof Error ? e.message : e); + process.exit(1); + } +}; + +export const showCommand = new Command("show") + .summary("List all Uniswap V3 liquidity position NFTs owned by the signer") + .option("--rpc ", "RPC URL", DEFAULT_RPC) + .requiredOption("--private-key ", "Private key of the owner wallet") + .action(main); diff --git a/packages/commands/src/zetachain/pools/show.ts b/packages/commands/src/zetachain/pools/show.ts new file mode 100644 index 00000000..413c6cb9 --- /dev/null +++ b/packages/commands/src/zetachain/pools/show.ts @@ -0,0 +1,165 @@ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as UniswapV3Pool from "@uniswap/v3-core/artifacts/contracts/UniswapV3Pool.sol/UniswapV3Pool.json"; +import { Command, Option } from "commander"; +import { Contract, ethers, JsonRpcProvider } from "ethers"; + +import { + DEFAULT_FACTORY, + DEFAULT_FEE, + DEFAULT_RPC, +} from "../../../../../src/constants/pools"; +import { IERC20Metadata__factory } from "../../../../../typechain-types"; +import { + type ShowPoolOptions, + showPoolOptionsSchema, + Slot0Result, +} from "../../../../../types/pools"; + +// Helper function to get token symbol +const getTokenSymbol = async ( + provider: JsonRpcProvider, + tokenAddress: string +): Promise => { + try { + const token = IERC20Metadata__factory.connect(tokenAddress, provider); + const symbol = await token.symbol(); + return symbol; + } catch (error) { + // If symbol call fails, return the address + return tokenAddress; + } +}; + +const main = async (options: ShowPoolOptions): Promise => { + try { + // Validate options + const validatedOptions = showPoolOptionsSchema.parse(options); + + // Initialize provider + const provider = new JsonRpcProvider(validatedOptions.rpc); + let poolAddress: string; + if (validatedOptions.pool) { + poolAddress = validatedOptions.pool; + } else if (validatedOptions.tokens) { + if (validatedOptions.tokens.length !== 2) { + throw new Error("Exactly 2 token addresses must be provided"); + } + + // Initialize factory contract + const factory = new Contract( + validatedOptions.factory, + UniswapV3Factory.abi, + provider + ); + + // Get pool address from factory + const fee = validatedOptions.fee; + poolAddress = (await factory.getPool( + validatedOptions.tokens[0], + validatedOptions.tokens[1], + fee + )) as string; + + if (poolAddress === ethers.ZeroAddress) { + throw new Error("Pool not found for the given tokens and fee tier"); + } + } else { + throw new Error("Either --pool or --tokens must be provided"); + } + + // Initialize pool contract + const pool = new Contract(poolAddress, UniswapV3Pool.abi, provider); + + // Get pool information + const [token0, token1, fee, tickSpacing, liquidity, slot0] = + (await Promise.all([ + pool.token0(), + pool.token1(), + pool.fee(), + pool.tickSpacing(), + pool.liquidity(), + pool.slot0(), + ])) as [string, string, bigint, bigint, bigint, Slot0Result]; + + // Get token symbols and decimals (decimals needed for accurate price calculation) + const [token0Symbol, token1Symbol, dec0, dec1] = await Promise.all([ + getTokenSymbol(provider, token0), + getTokenSymbol(provider, token1), + IERC20Metadata__factory.connect(token0, provider).decimals(), + IERC20Metadata__factory.connect(token1, provider).decimals(), + ]); + + // Calculate price from sqrtPriceX96 accounting for token decimals + const sqrtPriceX96 = slot0.sqrtPriceX96; + + // Use BigInt arithmetic to avoid precision loss for large sqrtPriceX96 values + // sqrtPrice = sqrtPriceX96 / 2^96, price = sqrtPrice^2 + // We'll work with scaled integers throughout to maintain precision + const SCALE_FACTOR = 10n ** 18n; // Scale factor for calculations + + // Calculate (sqrtPriceX96)^2 / (2^96)^2 * SCALE_FACTOR + const priceScaled = + (sqrtPriceX96 * sqrtPriceX96 * SCALE_FACTOR) / 2n ** 192n; + + // Adjust for token decimals to get token-level price + const decDiff = Number(dec0) - Number(dec1); + const decimalAdjustment = + decDiff >= 0 ? 10n ** BigInt(decDiff) : 10n ** BigInt(-decDiff); + + const priceToken1PerToken0Scaled = + decDiff >= 0 + ? priceScaled / decimalAdjustment + : priceScaled * decimalAdjustment; + + // Convert to number for display (safe now since we've maintained precision through calculations) + const priceToken1PerToken0 = + Number(priceToken1PerToken0Scaled) / Number(SCALE_FACTOR); + const priceToken0PerToken1 = 1 / priceToken1PerToken0; + + console.log("\nPool Information:"); + console.log("Pool Address:", poolAddress); + console.log("Token 0:", `${token0Symbol} (${token0})`); + console.log("Token 1:", `${token1Symbol} (${token1})`); + console.log("Fee Tier:", `${Number(fee) / 10000}%`); + console.log("Tick Spacing:", tickSpacing.toString()); + console.log( + `1 ${token0Symbol} = ${priceToken1PerToken0.toFixed(6)} ${token1Symbol}` + ); + console.log( + `1 ${token1Symbol} = ${priceToken0PerToken1.toFixed(6)} ${token0Symbol}` + ); + console.log("Liquidity:", liquidity.toString()); + console.log("Current Tick:", slot0.tick.toString()); + } catch (error) { + console.error("\nFailed to fetch pool information:"); + console.error( + "Error message:", + error instanceof Error ? error.message : String(error) + ); + process.exit(1); + } +}; + +export const showCommand = new Command("show") + .summary("Show information about a Uniswap V3 pool") + .option("--rpc ", "RPC URL for the network", DEFAULT_RPC) + .addOption( + new Option("--pool ", "Pool contract address").conflicts("tokens") + ) + .addOption( + new Option( + "--tokens ", + "Token addresses for the pool (exactly 2 required)" + ).conflicts("pool") + ) + .option( + "--factory ", + "Uniswap V3 Factory contract address", + DEFAULT_FACTORY + ) + .option( + "--fee ", + "Fee tier for the pool (3000 = 0.3%)", + DEFAULT_FEE.toString() + ) + .action(main); diff --git a/packages/commands/src/zetachain/pools/swap.ts b/packages/commands/src/zetachain/pools/swap.ts new file mode 100644 index 00000000..5c5ba4a7 --- /dev/null +++ b/packages/commands/src/zetachain/pools/swap.ts @@ -0,0 +1,167 @@ +/******************************************************************** + * pools swap – nudge a pool’s price to a target USD ratio + *******************************************************************/ +import * as UniswapV3Factory from "@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json"; +import * as UniswapV3Pool from "@uniswap/v3-core/artifacts/contracts/UniswapV3Pool.sol/UniswapV3Pool.json"; +import * as SwapRouterArtifact from "@uniswap/v3-periphery/artifacts/contracts/SwapRouter.sol/SwapRouter.json"; +import { Command } from "commander"; +import { Contract, ethers, JsonRpcProvider, Wallet } from "ethers"; +import { z } from "zod"; + +import { + DEFAULT_FACTORY, + DEFAULT_RPC, +} from "../../../../../src/constants/pools"; +import { IERC20Metadata__factory } from "../../../../../typechain-types"; + +const DEFAULT_SWAP_ROUTER = "0x42F98DfA0Bcca632b5e979E766331E7599b83686"; +// const TWO_192 = 1n << 192n; // Removed as it's not used + +/* √(bigint) ------------------------------------------------------ */ +const sqrtBig = (n: bigint): bigint => { + if (n < 2n) return n; + let x = n, + y = (x + 1n) >> 1n; + while (y < x) { + x = y; + y = (x + n / x) >> 1n; + } + return x; +}; + +/* exact sqrtPriceX96 from USD prices ----------------------------- */ +const calcSqrtPriceX96 = ( + usd0: number, + usd1: number, + dec0: number, + dec1: number, + cliIsTok0: boolean +): bigint => { + // Use proper decimal handling to avoid floating point precision errors + const FIX_SCALE = 18; + + // Helper function to convert decimal to BigInt with proper scaling + const decimalToBigInt = (value: number): bigint => { + const str = value.toFixed(FIX_SCALE); + const [whole, fraction = ""] = str.split("."); + const paddedFraction = fraction.padEnd(FIX_SCALE, "0"); + return BigInt(whole + paddedFraction); + }; + + const p0 = decimalToBigInt(cliIsTok0 ? usd0 : usd1); // token0 USD * 10^18 + const p1 = decimalToBigInt(cliIsTok0 ? usd1 : usd0); // token1 USD * 10^18 + + // token1/token0 ratio in base-units, scaled by 2^192 for Q64.96 + const num = p1 * 10n ** BigInt(dec0); // p1 × 10^dec0 + const den = p0 * 10n ** BigInt(dec1); // p0 × 10^dec1 + if (num === 0n || den === 0n) throw new Error("bad price inputs"); + + const ratioX192 = (num << 192n) / den; // (token1/token0) × 2^192 + return sqrtBig(ratioX192); +}; + +/* ------------- CLI schema -------------------------------------- */ +const swapOpts = z.object({ + amountIn: z.string().default("1"), + approve: z.boolean().default(true), + fee: z.string().default("3000"), + prices: z.array(z.string()).length(2), + privateKey: z.string(), + router: z.string().default(DEFAULT_SWAP_ROUTER), + rpc: z.string().default(DEFAULT_RPC), + tokens: z.array(z.string()).length(2), +}); +type SwapOpts = z.infer; + +/* ------------- main -------------------------------------------- */ +const main = async (raw: SwapOpts) => { + const o = swapOpts.parse(raw); + const provider = new JsonRpcProvider(o.rpc); + const signer = new Wallet(o.privateKey, provider); + const [usdA, usdB] = o.prices.map(Number); + + /* factory / pool */ + const factory = new Contract(DEFAULT_FACTORY, UniswapV3Factory.abi, provider); + const poolAddr = (await factory.getPool( + o.tokens[0], + o.tokens[1], + Number(o.fee) + )) as string; + if (poolAddr === ethers.ZeroAddress) throw new Error("Pool not found"); + + const pool = new Contract(poolAddr, UniswapV3Pool.abi, provider); + const [token0, token1] = (await Promise.all([ + pool.token0(), + pool.token1(), + ])) as [string, string]; + const [dec0Big, dec1Big] = await Promise.all([ + IERC20Metadata__factory.connect(token0, provider).decimals(), + IERC20Metadata__factory.connect(token1, provider).decimals(), + ]); + const dec0 = Number(dec0Big); + const dec1 = Number(dec1Big); + + const cliIsTok0 = token0.toLowerCase() === o.tokens[0].toLowerCase(); + const sqrtLimit = calcSqrtPriceX96(usdA, usdB, dec0, dec1, cliIsTok0); + + const slot0 = (await pool.slot0()) as { sqrtPriceX96: bigint }; + const current = slot0.sqrtPriceX96; + const zeroForOne = sqrtLimit < current; // direction + + const tokenIn = zeroForOne ? token1 : token0; + const decimalsIn = zeroForOne ? dec1 : dec0; + const amountIn = ethers.parseUnits(o.amountIn, decimalsIn); + + console.log("Pool :", poolAddr); + console.log("√P now :", current.toString()); + console.log("√P tgt :", sqrtLimit.toString()); + console.log("swap :", zeroForOne ? "token1 → token0" : "token0 → token1"); + + /* approve */ + if (o.approve) { + const erc20 = IERC20Metadata__factory.connect(tokenIn, signer); + const allowance = await erc20.allowance( + await signer.getAddress(), + o.router + ); + if (allowance < amountIn) { + console.log("Approving", o.amountIn, "…"); + const tx = await erc20.approve(o.router, amountIn); + await tx.wait(); + } + } + + /* router swap */ + const router = new Contract(o.router, SwapRouterArtifact.abi, signer); + const params = { + amountIn, + amountOutMinimum: 0, + deadline: Math.floor(Date.now() / 1e3) + 600, + fee: Number(o.fee), + recipient: await signer.getAddress(), + sqrtPriceLimitX96: sqrtLimit, + tokenIn, + tokenOut: zeroForOne ? token0 : token1, + } as const; + + const tx = (await router.exactInputSingle(params, { gasLimit: 900_000 })) as { + hash: string; + wait: () => Promise; + }; + console.log("tx:", tx.hash, "– waiting…"); + await tx.wait(); + console.log("✓ Done. Verify with `pools show`."); +}; + +/* ------------- export command ---------------------------------- */ +export const swapCommand = new Command("swap") + .summary("Push a pool’s price to a target USD ratio with one swap") + .requiredOption("--private-key ", "Signer private key") + .requiredOption("--tokens ", "Two token addresses (CLI order)") + .requiredOption("--prices ", "USD prices (tokenA tokenB)") + .option("--fee ", "Fee tier (default 3000)", "3000") + .option("--amount-in ", "Input token amount (default 1)", "1") + .option("--no-approve", "Skip ERC-20 approve step") + .option("--router ", "SwapRouter address", DEFAULT_SWAP_ROUTER) + .option("--rpc ", "JSON-RPC endpoint", DEFAULT_RPC) + .action(main); diff --git a/src/constants/pools.ts b/src/constants/pools.ts new file mode 100644 index 00000000..1ef1ec4c --- /dev/null +++ b/src/constants/pools.ts @@ -0,0 +1,8 @@ +export const DEFAULT_RPC = + "https://zetachain-athens.g.allthatnode.com/archive/evm"; +export const DEFAULT_FACTORY = "0x6e895B1FC96BADceF94a73819C438B34AbCccA32"; +export const DEFAULT_ROUTER = "0xfaeeAC553CBEeaAD3C330c4A0a110139EB7AA5CE"; +export const DEFAULT_WZETA = "0x5F0b1a82749cb4E2278EC87F8BF6B618dC71a8bf"; +export const DEFAULT_FEE = 3000; // 0.3% +export const DEFAULT_POSITION_MANAGER = + "0xA0eb3b255938D9F74512c68c5c81B1097C5B88B7"; diff --git a/test/uniswap.test.ts b/test/uniswap.test.ts index 880db6ef..49a3ca19 100644 --- a/test/uniswap.test.ts +++ b/test/uniswap.test.ts @@ -1,3 +1,5 @@ +import { ethers } from "ethers"; + import { ForeignCoin } from "../types/foreignCoins.types"; import { Pool } from "../types/pools.types"; import { @@ -63,6 +65,7 @@ describe("generateUniquePairs", () => { describe("formatPoolsWithTokenDetails", () => { const mockZetaTokenAddress = "0xZETA"; + const mockProvider = new ethers.JsonRpcProvider("http://localhost:8545"); const mockForeignCoins: ForeignCoin[] = [ { @@ -89,6 +92,18 @@ describe("formatPoolsWithTokenDetails", () => { symbol: "TOKB", zrc20_contract_address: "0xB", }, + { + asset: "wzeta", + coin_type: "ERC20", + decimals: 18, + foreign_chain_id: "zetachain", + gas_limit: "100000", + liquidity_cap: "1000000", + name: "Wrapped Zeta", + paused: false, + symbol: "WZETA", + zrc20_contract_address: mockZetaTokenAddress, + }, ]; const mockPools: Pool[] = [ @@ -116,11 +131,12 @@ describe("formatPoolsWithTokenDetails", () => { }, ]; - it("should format pools with token details", () => { - const result = formatPoolsWithTokenDetails( + it("should format pools with token details", async () => { + const result = await formatPoolsWithTokenDetails( mockPools, mockForeignCoins, - mockZetaTokenAddress + mockZetaTokenAddress, + mockProvider ); // Check that token details are added for all tokens @@ -145,7 +161,7 @@ describe("formatPoolsWithTokenDetails", () => { expect(result[1].t1.reserve).toBe(BigInt(4000000)); }); - it("should handle unknown tokens without crashing", () => { + it("should handle unknown tokens without crashing", async () => { const poolsWithUnknownToken: Pool[] = [ { pair: "0xPAIR3", @@ -160,25 +176,26 @@ describe("formatPoolsWithTokenDetails", () => { }, ]; - const result = formatPoolsWithTokenDetails( + const result = await formatPoolsWithTokenDetails( poolsWithUnknownToken, mockForeignCoins, - mockZetaTokenAddress + mockZetaTokenAddress, + mockProvider ); // Should still return a result expect(result).toHaveLength(1); - // Unknown token should have empty details - expect(result[0].t0.symbol).toBeUndefined(); - expect(result[0].t0.decimals).toBeUndefined(); + // Unknown token should have fallback details + expect(result[0].t0.symbol).toBe("UNKNOWN"); + expect(result[0].t0.decimals).toBe(18); // Default fallback // Known token should have details expect(result[0].t1.symbol).toBe("TOKA"); expect(result[0].t1.decimals).toBe(6); }); - it("should handle case sensitivity in addresses", () => { + it("should handle case sensitivity in addresses", async () => { const poolsWithMixedCaseAddresses: Pool[] = [ { pair: "0xPAIR4", @@ -193,10 +210,11 @@ describe("formatPoolsWithTokenDetails", () => { }, ]; - const result = formatPoolsWithTokenDetails( + const result = await formatPoolsWithTokenDetails( poolsWithMixedCaseAddresses, mockForeignCoins, - mockZetaTokenAddress + mockZetaTokenAddress, + mockProvider ); // Should correctly match tokens despite case differences diff --git a/types/pools.ts b/types/pools.ts new file mode 100644 index 00000000..f0954438 --- /dev/null +++ b/types/pools.ts @@ -0,0 +1,115 @@ +import { ethers } from "ethers"; +import { z } from "zod"; + +import { + DEFAULT_FACTORY, + DEFAULT_FEE, + DEFAULT_RPC, + DEFAULT_WZETA, +} from "../src/constants/pools"; + +export interface MintParams { + amount0Desired: bigint; + amount0Min: bigint; + amount1Desired: bigint; + amount1Min: bigint; + deadline: number; + fee: bigint; + recipient: string; + tickLower: bigint; + tickUpper: bigint; + token0: string; + token1: string; +} + +export interface PoolCreationError extends Error { + receipt?: ethers.TransactionReceipt; + transaction?: ethers.TransactionResponse; +} + +export interface DeploymentError extends Error { + receipt?: ethers.TransactionReceipt; + transaction?: ethers.TransactionResponse; +} + +export interface Slot0Result { + feeProtocol: number; + observationCardinality: number; + observationCardinalityNext: number; + observationIndex: number; + sqrtPriceX96: bigint; + tick: number; + unlocked: boolean; +} + +export const evmAddressSchema = z + .string() + .refine((val) => ethers.isAddress(val), "Must be a valid EVM address"); + +export const showPoolOptionsSchema = z.object({ + factory: z.string().default(DEFAULT_FACTORY), + fee: z + .string() + .transform((val) => Number(val)) + .default(DEFAULT_FEE.toString()), + pool: z.string().optional(), + rpc: z.string().default(DEFAULT_RPC), + tokens: z.array(z.string()).optional(), +}); + +export const addLiquidityOptionsSchema = z.object({ + amounts: z.array(z.string()).min(2).max(2), + fee: z.string().default("3000"), + privateKey: z.string(), + recipient: z.string().optional(), + rpc: z.string().default(DEFAULT_RPC), + tickLower: z + .string() + .transform((val) => Number(val)) + .optional(), + tickUpper: z + .string() + .transform((val) => Number(val)) + .optional(), + tokens: z.array(z.string()).min(2).max(2), + yes: z.boolean().default(false), +}); + +export const removeLiquidityOptionsSchema = z.object({ + burn: z.boolean().optional(), + privateKey: z.string(), + rpc: z.string().default(DEFAULT_RPC), + tokenId: z + .string() + .regex(/^\d+$/, { message: "tokenId must be a numeric string" }) + .optional(), +}); + +export const createPoolOptionsSchema = z.object({ + factory: z.string().default(DEFAULT_FACTORY), + fee: z.string().default(DEFAULT_FEE.toString()), + prices: z.array(z.string()).length(2), + privateKey: z.string(), + rpc: z.string().default(DEFAULT_RPC), + tokens: z.array(evmAddressSchema).length(2), +}); + +export const deployOptionsSchema = z.object({ + privateKey: z.string(), + rpc: z.string().default(DEFAULT_RPC), + wzeta: z.string().default(DEFAULT_WZETA), +}); + +export const showLiquidityOptionsSchema = z.object({ + privateKey: z.string(), + rpc: z.string().default(DEFAULT_RPC), +}); + +export type ShowPoolOptions = z.infer; +export type AddLiquidityOptions = z.infer; +export type CreatePoolOptions = z.infer; +export type DeployOptions = z.infer; +export type RemoveLiquidityOptions = z.infer< + typeof removeLiquidityOptionsSchema +>; +export type ShowLiquidityOptions = z.infer; diff --git a/utils/uniswap.ts b/utils/uniswap.ts index 570bf449..4bda21ad 100644 --- a/utils/uniswap.ts +++ b/utils/uniswap.ts @@ -234,14 +234,66 @@ export const getPoolData = async ( return pools; }; +/** + * Fetch missing token details from contracts + */ +const fetchMissingTokenDetails = async ( + provider: ethers.JsonRpcProvider, + pools: Pool[] +): Promise => { + const IERC20 = [ + "function symbol() view returns (string)", + "function decimals() view returns (uint8)", + ]; + + const poolsWithDetails = await Promise.all( + pools.map(async (pool) => { + const t0NeedsDetails = !pool.t0.symbol || pool.t0.decimals === undefined; + const t1NeedsDetails = !pool.t1.symbol || pool.t1.decimals === undefined; + + if (!t0NeedsDetails && !t1NeedsDetails) { + return pool; + } + + const fetchDetails = async (address: string) => { + try { + const contract = new ethers.Contract(address, IERC20, provider); + const [symbol, decimals] = await Promise.all([ + contract.symbol() as Promise, + contract.decimals() as Promise, + ]); + return { decimals: Number(decimals), symbol }; + } catch (error) { + console.warn(`Failed to fetch details for token ${address}:`, error); + return { decimals: 18, symbol: "UNKNOWN" }; + } + }; + + const [t0Details, t1Details] = await Promise.all([ + t0NeedsDetails ? fetchDetails(pool.t0.address) : Promise.resolve({}), + t1NeedsDetails ? fetchDetails(pool.t1.address) : Promise.resolve({}), + ]); + + return { + ...pool, + t0: { ...pool.t0, ...t0Details }, + t1: { ...pool.t1, ...t1Details }, + }; + }) + ); + + return poolsWithDetails; +}; + /** * Format pools with token details (symbols and decimals) */ -export const formatPoolsWithTokenDetails = ( +export const formatPoolsWithTokenDetails = async ( pools: Pool[], foreignCoins: ForeignCoin[], - zetaTokenAddress: string -): Pool[] => { + zetaTokenAddress: string, + provider: ethers.JsonRpcProvider +): Promise => { // Create a mapping of ZRC20 details for quick lookup const zrc20Details = foreignCoins.reduce((acc: Zrc20Details, coin) => { const address = coin.zrc20_contract_address.toLowerCase(); @@ -252,24 +304,13 @@ export const formatPoolsWithTokenDetails = ( return acc; }, {} as Zrc20Details); - // ZETA token details - const zetaDetails = { decimals: 18, symbol: "WZETA" }; - const zetaAddressLower = zetaTokenAddress.toLowerCase(); - - return pools.map((pool) => { + const poolsWithBasicDetails = pools.map((pool) => { const t0AddressLower = pool.t0.address.toLowerCase(); const t1AddressLower = pool.t1.address.toLowerCase(); - // Get token details, prioritizing ZRC20 details and falling back to ZETA if it's the ZETA token - const t0Details = - t0AddressLower === zetaAddressLower - ? zetaDetails - : zrc20Details[t0AddressLower] || {}; - - const t1Details = - t1AddressLower === zetaAddressLower - ? zetaDetails - : zrc20Details[t1AddressLower] || {}; + // Get token details from the ZRC20 details mapping + const t0Details = zrc20Details[t0AddressLower]; + const t1Details = zrc20Details[t1AddressLower]; return { ...pool, @@ -283,4 +324,11 @@ export const formatPoolsWithTokenDetails = ( }, }; }); + + // Fetch missing details from contracts for any tokens not found in foreignCoins + const poolsWithCompleteDetails = await fetchMissingTokenDetails( + provider, + poolsWithBasicDetails + ); + return poolsWithCompleteDetails; }; diff --git a/yarn.lock b/yarn.lock index 88641917..ee2ab846 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,9 +8,9 @@ integrity sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw== "@0no-co/graphqlsp@^1.12.13": - version "1.12.16" - resolved "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.16.tgz#58fe7bad53b3ad9fdf2d5f41ddeb9b418d289a03" - integrity sha512-B5pyYVH93Etv7xjT6IfB7QtMBdaaC07yjbhN6v8H7KgFStMkPvi+oWYBTibMFRMY89qwc9H8YixXg8SXDVgYWw== + version "1.13.0" + resolved "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.13.0.tgz#b69bddb7b51869852ca28551f52a6f6e4e0164a6" + integrity sha512-I8HVJ19PeF0QMKCcxUXjsmbI6L26bmAuDHUFdLD8xjhaOi7XG2ZhlkhqTYNxzYJN58yvv0IfKfn8yVrVvPUmVw== dependencies: "@gql.tada/internal" "^1.0.0" graphql "^15.5.0 || ^16.0.0 || ^17.0.0" @@ -43,40 +43,40 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2": - version "7.27.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz#7d0658ec1a8420fc866d1df1b03bea0e79934c82" - integrity sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg== + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" + integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.27.4" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce" - integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g== + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" + integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.3" + "@babel/generator" "^7.28.0" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.27.3" - "@babel/helpers" "^7.27.4" - "@babel/parser" "^7.27.4" + "@babel/helpers" "^7.27.6" + "@babel/parser" "^7.28.0" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.27.4" - "@babel/types" "^7.27.3" + "@babel/traverse" "^7.28.0" + "@babel/types" "^7.28.0" 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.27.3", "@babel/generator@^7.7.2": - version "7.27.5" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" - integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== +"@babel/generator@^7.28.0", "@babel/generator@^7.7.2": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" + integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== dependencies: - "@babel/parser" "^7.27.5" - "@babel/types" "^7.27.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/parser" "^7.28.0" + "@babel/types" "^7.28.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.27.2": @@ -90,6 +90,11 @@ 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#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + 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#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -127,7 +132,7 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.27.4": +"@babel/helpers@^7.27.6": version "7.27.6" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c" integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug== @@ -135,12 +140,12 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.27.6" -"@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.27.4", "@babel/parser@^7.27.5": - version "7.27.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" - integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== +"@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.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== dependencies: - "@babel/types" "^7.27.3" + "@babel/types" "^7.28.0" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -275,23 +280,23 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.4": - version "7.27.4" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" - integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" + integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.3" - "@babel/parser" "^7.27.4" + "@babel/generator" "^7.28.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.0" "@babel/template" "^7.27.2" - "@babel/types" "^7.27.3" + "@babel/types" "^7.28.0" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6", "@babel/types@^7.3.3": - version "7.27.6" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" - integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.6", "@babel/types@^7.28.0", "@babel/types@^7.3.3": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz#2fd0159a6dc7353933920c43136335a9b264d950" + integrity sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" @@ -455,9 +460,9 @@ "@ethereumjs/rlp" "^5.0.2" ethereum-cryptography "^2.2.1" -"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.8.0": +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.8.0": version "5.8.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== dependencies: "@ethersproject/address" "^5.8.0" @@ -540,14 +545,14 @@ "@ethersproject/logger" "^5.8.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.8.0": +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": version "5.8.0" resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.8.0": +"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": version "5.8.0" resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== @@ -622,6 +627,14 @@ aes-js "3.0.0" scrypt-js "3.0.1" +"@ethersproject/keccak256@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + "@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.8.0": version "5.8.0" resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" @@ -630,7 +643,7 @@ "@ethersproject/bytes" "^5.8.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.8.0": +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": version "5.8.0" resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== @@ -720,9 +733,9 @@ elliptic "6.6.1" hash.js "1.1.7" -"@ethersproject/solidity@5.8.0": +"@ethersproject/solidity@5.8.0", "@ethersproject/solidity@^5.0.9": version "5.8.0" - resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== dependencies: "@ethersproject/bignumber" "^5.8.0" @@ -732,6 +745,15 @@ "@ethersproject/sha2" "^5.8.0" "@ethersproject/strings" "^5.8.0" +"@ethersproject/strings@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.8.0": version "5.8.0" resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" @@ -813,15 +835,15 @@ resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== -"@gerrit0/mini-shiki@^3.2.2": - version "3.6.0" - resolved "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.6.0.tgz#5c9b7a87fee29faa64aace00733a1691c691a999" - integrity sha512-KaeJvPNofTEZR9EzVNp/GQzbQqkGfjiu6k3CXKvhVTX+8OoAKSX/k7qxLKOX3B0yh2XqVAc93rsOu48CGt2Qug== +"@gerrit0/mini-shiki@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.7.0.tgz#7ab9c6fabe0b78949ad383b4d0b4db4ad6cb8a68" + integrity sha512-7iY9wg4FWXmeoFJpUL2u+tsmh0d0jcEJHAIzVxl3TG4KL493JNnisdLAILZ77zcD+z3J0keEXZ+lFzUgzQzPDg== dependencies: - "@shikijs/engine-oniguruma" "^3.6.0" - "@shikijs/langs" "^3.6.0" - "@shikijs/themes" "^3.6.0" - "@shikijs/types" "^3.6.0" + "@shikijs/engine-oniguruma" "^3.7.0" + "@shikijs/langs" "^3.7.0" + "@shikijs/themes" "^3.7.0" + "@shikijs/types" "^3.7.0" "@shikijs/vscode-textmate" "^10.0.2" "@gql.tada/cli-utils@1.6.3": @@ -875,6 +897,17 @@ chalk "^4.1.2" figures "^3.2.0" +"@inquirer/checkbox@^4.1.9": + version "4.1.9" + resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.9.tgz#431c65a3a1fd289be8102034ece15c91dda1ceec" + integrity sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + "@inquirer/confirm@^2.0.5": version "2.0.17" resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-2.0.17.tgz#a45eb1b973c51c993a3c093a0114e960b1cf09a4" @@ -884,6 +917,14 @@ "@inquirer/type" "^1.1.6" chalk "^4.1.2" +"@inquirer/confirm@^5.1.13": + version "5.1.13" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz#4931515edc63e25d833c9a40ccf1855e8e822dbc" + integrity sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + "@inquirer/core@^1.1.3": version "1.3.0" resolved "https://registry.npmjs.org/@inquirer/core/-/core-1.3.0.tgz#469427e51daa519f2b1332745a2222629c03c701" @@ -901,6 +942,20 @@ strip-ansi "^6.0.1" wrap-ansi "^6.0.1" +"@inquirer/core@^10.1.14": + version "10.1.14" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz#7678b2daaecf32fa2f6e02a03dc235f9620e197f" + integrity sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A== + dependencies: + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + "@inquirer/core@^2.3.1": version "2.3.1" resolved "https://registry.npmjs.org/@inquirer/core/-/core-2.3.1.tgz#b7a1563ef3830a20485f551257779657e843e53f" @@ -951,6 +1006,15 @@ chalk "^4.1.2" external-editor "^3.1.0" +"@inquirer/editor@^4.2.14": + version "4.2.14" + resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.14.tgz#74565caa37cd5f892a44663455194c35a527bfaf" + integrity sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + external-editor "^3.1.0" + "@inquirer/expand@^1.1.4": version "1.1.16" resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-1.1.16.tgz#63dce81240e5f7b2b1d7942b3e3cae18f4f03d07" @@ -961,6 +1025,20 @@ chalk "^4.1.2" figures "^3.2.0" +"@inquirer/expand@^4.0.16": + version "4.0.16" + resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.16.tgz#c87bbb0d5b05e4b54366e2841f993819f2339290" + integrity sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.12": + version "1.0.12" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz#667d6254cc7ba3b0c010a323d78024a1d30c6053" + integrity sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ== + "@inquirer/input@^1.2.4": version "1.2.16" resolved "https://registry.npmjs.org/@inquirer/input/-/input-1.2.16.tgz#94d8765a47689e799fd55ed0361dedc8f554341b" @@ -970,6 +1048,22 @@ "@inquirer/type" "^1.1.6" chalk "^4.1.2" +"@inquirer/input@^4.2.0": + version "4.2.0" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.2.0.tgz#ba13f09765b040964e21402b8f3d8019791996f9" + integrity sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + +"@inquirer/number@^3.0.16": + version "3.0.16" + resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.16.tgz#1abf6fc71af9f44954291a6d9211a9e572c64906" + integrity sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + "@inquirer/password@^1.1.4": version "1.1.16" resolved "https://registry.npmjs.org/@inquirer/password/-/password-1.1.16.tgz#37ddebbe37c6e76f8ad27d1f726aacdd7c423558" @@ -980,6 +1074,15 @@ ansi-escapes "^4.3.2" chalk "^4.1.2" +"@inquirer/password@^4.0.16": + version "4.0.16" + resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.16.tgz#baa79020aa371b7b2acfaba973d93223adf91580" + integrity sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + "@inquirer/prompts@^2.1.1": version "2.3.1" resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-2.3.1.tgz#fe430f96e510cf352efeb77af2dbd6d3049e677c" @@ -995,6 +1098,22 @@ "@inquirer/rawlist" "^1.2.4" "@inquirer/select" "^1.2.4" +"@inquirer/prompts@^7.6.0": + version "7.6.0" + resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.6.0.tgz#46f82154d9d9e4d8a2999d36f9da3594b1dda9f8" + integrity sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw== + dependencies: + "@inquirer/checkbox" "^4.1.9" + "@inquirer/confirm" "^5.1.13" + "@inquirer/editor" "^4.2.14" + "@inquirer/expand" "^4.0.16" + "@inquirer/input" "^4.2.0" + "@inquirer/number" "^3.0.16" + "@inquirer/password" "^4.0.16" + "@inquirer/rawlist" "^4.1.4" + "@inquirer/search" "^3.0.16" + "@inquirer/select" "^4.2.4" + "@inquirer/rawlist@^1.2.4": version "1.2.16" resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-1.2.16.tgz#ac6cc0bb2a60d51dccdfe2c3ea624185f1fbd5bc" @@ -1004,6 +1123,25 @@ "@inquirer/type" "^1.1.6" chalk "^4.1.2" +"@inquirer/rawlist@^4.1.4": + version "4.1.4" + resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.4.tgz#a08ccbd2cc3c800fc09787a690918cb3932abbc6" + integrity sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.16": + version "3.0.16" + resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.0.16.tgz#b72a75216f59a42a77fc5727b47f6bc776d88d3d" + integrity sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + "@inquirer/select@1.1.3": version "1.1.3" resolved "https://registry.npmjs.org/@inquirer/select/-/select-1.1.3.tgz#7974d1beff6b87c981a9e25e1ef4cb237f03c1b2" @@ -1026,6 +1164,17 @@ chalk "^4.1.2" figures "^3.2.0" +"@inquirer/select@^4.2.4": + version "4.2.4" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.2.4.tgz#72c964e24bf15316cbc4dc08183106a094c975f2" + integrity sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + "@inquirer/type@^1.0.3", "@inquirer/type@^1.0.5", "@inquirer/type@^1.1.1", "@inquirer/type@^1.1.6": version "1.5.5" resolved "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" @@ -1033,6 +1182,23 @@ dependencies: mute-stream "^1.0.0" +"@inquirer/type@^3.0.7": + version "3.0.7" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz#b46bcf377b3172dbc768fdbd053e6492ad801a09" + integrity sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1253,13 +1419,12 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.12" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz#2234ce26c62889f03db3d7fea43c1932ab3e927b" + integrity sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg== 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/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": @@ -1267,15 +1432,10 @@ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 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#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.4" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1285,30 +1445,30 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@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#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@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.29" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz#a58d31eaadaf92c6695680b2e1d464a9b8fbf7fc" + integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mysten/bcs@1.6.2": - version "1.6.2" - resolved "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.6.2.tgz#07bd510a779f868754e29599b5aa7b2d47ea0b6c" - integrity sha512-po3tjm3Ue7UM1cuveDvrIckR6y22LKXr7KAQf12ZOMasZ0rRjBOdq3zDCVBJC+m536hNLq5uG5U2SQPUGN5+JA== +"@mysten/bcs@1.6.3": + version "1.6.3" + resolved "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.6.3.tgz#49eb50ea8356b36971a82df7992182d3521ea1d7" + integrity sha512-QQ6u0U7a4+/o6rZ9tALTeGYMdf6V5z/HkRI/mhD5/fSr80DJoGzOWpFszcN/fhJpKb36vBaSQUMpS7yNQ10xBQ== dependencies: - "@mysten/utils" "0.0.1" + "@mysten/utils" "0.1.0" "@scure/base" "^1.2.6" "@mysten/sui@^1.28.2": - version "1.32.0" - resolved "https://registry.npmjs.org/@mysten/sui/-/sui-1.32.0.tgz#a492ce5d1d05f613235240d6cd535879fb77c052" - integrity sha512-rGKAWvlpIvURdu/OU/CjYp0gEwdWilD+3u73SCSdBSC5sUpz6VCJWXqi1l92IZQB44fdmboxYUUMQXuGSYwNhg== + version "1.35.0" + resolved "https://registry.npmjs.org/@mysten/sui/-/sui-1.35.0.tgz#924117879368b823b5c61475b285536b292cb335" + integrity sha512-za0+SiEFtjAjk0sJ8P9Q/X/m2E/YrXQ/UNsotEwb/eCqPyGS8A9Mrxkhm/iIgR1+AAl1OWUWCrqgJVe7u2i61A== dependencies: "@graphql-typed-document-node/core" "^3.2.0" - "@mysten/bcs" "1.6.2" - "@mysten/utils" "0.0.1" + "@mysten/bcs" "1.6.3" + "@mysten/utils" "0.1.0" "@noble/curves" "^1.9.1" "@noble/hashes" "^1.8.0" "@scure/base" "^1.2.6" @@ -1319,10 +1479,10 @@ poseidon-lite "^0.2.0" valibot "^0.36.0" -"@mysten/utils@0.0.1": - version "0.0.1" - resolved "https://registry.npmjs.org/@mysten/utils/-/utils-0.0.1.tgz#b98d2e3ada84b59a7acc8936928638ad4e026fc2" - integrity sha512-KrrGE1N0KFIKkQoQW5/StA6kxRZqUkZlw/Txa7rbj+MVYbnKpdWeH1Xxm7w5rWd8PZ4Sc7v6uVoPz179BAoNZA== +"@mysten/utils@0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@mysten/utils/-/utils-0.1.0.tgz#115ba377d3962b0ab64bf0ad66e905da8411c3ed" + integrity sha512-nFxqArh4cr629elLsIk7UZmx5dFVshblwrfwaG7Dm2L/ii2C65bhK5tdTs6UiC3K0tCr8q8svrgzXyF9L0CN/A== dependencies: "@scure/base" "^1.2.6" @@ -1424,53 +1584,53 @@ resolved "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== -"@nomicfoundation/edr-darwin-arm64@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.0.tgz#fa791451c5ce2acf6634143bca9fe8f1b5c66603" - integrity sha512-aYTVdcSs27XG7ayTzvZ4Yn9z/ABSaUwicrtrYK2NR8IH0ik4N4bWzo/qH8rax6rewVLbHUkGyGYnsy5ZN4iiMw== - -"@nomicfoundation/edr-darwin-x64@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.0.tgz#b1aaf0bfb331f6d136a92cbe31f184e2209e7a4f" - integrity sha512-RxX7UYgvJrfcyT/uHUn44Nsy1XaoW+Q1khKMdHKxeW7BrgIi+Lz+siz3bX5vhSoAnKilDPhIVLrnC8zxQhjR2A== - -"@nomicfoundation/edr-linux-arm64-gnu@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.0.tgz#fef6763c5d42bb68b4fc95df45c4745a0e31df93" - integrity sha512-J0j+rs0s11FuSipt/ymqrFmpJ7c0FSz1/+FohCIlUXDxFv//+1R/8lkGPjEYFmy8DPpk/iO8mcpqHTGckREbqA== - -"@nomicfoundation/edr-linux-arm64-musl@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.0.tgz#ef89d5d2aefc1f8d4f7c699c59b8897a645d33eb" - integrity sha512-4r32zkGMN7WT/CMEuW0VjbuEdIeCskHNDMW4SSgQSJOE/N9L1KSLJCSsAbPD3aYE+e4WRDTyOwmuLjeUTcLZKQ== - -"@nomicfoundation/edr-linux-x64-gnu@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.0.tgz#97432126110aa805b761d4743ab158698cae6d66" - integrity sha512-SmdncQHLYtVNWLIMyGaY6LpAfamzTDe3fxjkirmJv3CWR5tcEyC6LMui/GsIVnJzXeNJBXAzwl8hTUAxHTM6kQ== - -"@nomicfoundation/edr-linux-x64-musl@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.0.tgz#7605fddbada22dfdd14b15f4ac562014d9c82332" - integrity sha512-w6hUqpn/trwiH6SRuRGysj37LsQVCX5XDCA3Xi81sbOaLhbHrNvK9TXWyZmcuzbdTKQQW6VNywcSxDdOiChcJg== - -"@nomicfoundation/edr-win32-x64-msvc@0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.0.tgz#6766175f3ec47bfbda0429ca00fed4ae5632a3c4" - integrity sha512-BLmULjRKoH9BsX+c4Na2ypV7NGeJ+M6Zpqj/faPOwleVscDdSr/IhriyPaXCe8dyfwbge7lWsbekiADtPSnB2Q== - -"@nomicfoundation/edr@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.11.0.tgz#d8b0ba4dfd7d93b9c54762e72eb9cd4e8244ce46" - integrity sha512-36WERf8ldvyHR6UAbcYsa+vpbW7tCrJGBwF4gXSsb8+STj1n66Hz85Y/O7B9+8AauX3PhglvV5dKl91tk43mWw== - dependencies: - "@nomicfoundation/edr-darwin-arm64" "0.11.0" - "@nomicfoundation/edr-darwin-x64" "0.11.0" - "@nomicfoundation/edr-linux-arm64-gnu" "0.11.0" - "@nomicfoundation/edr-linux-arm64-musl" "0.11.0" - "@nomicfoundation/edr-linux-x64-gnu" "0.11.0" - "@nomicfoundation/edr-linux-x64-musl" "0.11.0" - "@nomicfoundation/edr-win32-x64-msvc" "0.11.0" +"@nomicfoundation/edr-darwin-arm64@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz#d8e2609fc24cf20e75c3782e39cd5a95f7488075" + integrity sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA== + +"@nomicfoundation/edr-darwin-x64@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz#7a9e94cee330269a33c7f1dce267560c7e12dbd3" + integrity sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA== + +"@nomicfoundation/edr-linux-arm64-gnu@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz#cd5ec90c7263045c3dfd0b109c73206e488edc27" + integrity sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ== + +"@nomicfoundation/edr-linux-arm64-musl@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz#ed23df2d9844470f5661716da27d99a72a69e99e" + integrity sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA== + +"@nomicfoundation/edr-linux-x64-gnu@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz#87a62496c2c4b808bc4a9ae96cca1642a21c2b51" + integrity sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw== + +"@nomicfoundation/edr-linux-x64-musl@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz#8cfe408c73bcb9ed5e263910c313866d442f4b48" + integrity sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg== + +"@nomicfoundation/edr-win32-x64-msvc@0.11.3": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz#fb208b94553c7eb22246d73a1ac4de5bfdb97d01" + integrity sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung== + +"@nomicfoundation/edr@^0.11.1": + version "0.11.3" + resolved "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.11.3.tgz#e8b30b868788e45d7a2ee2359a021ef7dcb96952" + integrity sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.11.3" + "@nomicfoundation/edr-darwin-x64" "0.11.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.11.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.11.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.11.3" + "@nomicfoundation/edr-linux-x64-musl" "0.11.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.11.3" "@nomicfoundation/hardhat-chai-matchers@^1.0.0": version "1.0.6" @@ -1499,16 +1659,16 @@ picocolors "^1.1.0" "@nomicfoundation/hardhat-ignition-ethers@^0.15.0": - version "0.15.12" - resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.12.tgz#f4ffb791a253a4fe05234ad4d0fde7cb5e125e6f" - integrity sha512-YEqjtrrMkGNXCFJKNrWgqtLmFSiOXDiEWiKup+yqonCzps1B/e9zg4ezRP5feiKUOIxblD6isCDKtQKu7iY6XA== + version "0.15.13" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.13.tgz#34be3c13183fad33ef0347d8d7858bf3b19b7599" + integrity sha512-fJuImb0KBbsylTL5M1DdlChIO/GZoms2NUVJhU+AvfhlgB0jzRH+9jSXE9izYPktd8//tdVSC4kJloJPrR+BlA== "@nomicfoundation/hardhat-ignition@^0.15.10": - version "0.15.11" - resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.11.tgz#124a4c5f70eca0f2f161ccfd82cef29793111f48" - integrity sha512-OXebmK9FCMwwbb4mIeHBbVFFicAGgyGKJT2zrONrpixrROxrVs6KEi1gzsiN25qtQhCQePt8BTjjYrgy86Dfxg== + version "0.15.12" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.12.tgz#99dfbb69b9f930b6ef6b33a39f5bc9736fed75ed" + integrity sha512-T03bSjFy8vWeKGvFsR42vzl4PgmW06i1e/84m2oowZzdO3i9ax3XJhRiH4kC08QXzkdAdUPinx68hQea8Wh6Jw== dependencies: - "@nomicfoundation/ignition-core" "^0.15.11" + "@nomicfoundation/ignition-core" "^0.15.12" "@nomicfoundation/ignition-ui" "^0.15.11" chalk "^4.0.0" debug "^4.3.2" @@ -1517,9 +1677,9 @@ prompts "^2.4.2" "@nomicfoundation/hardhat-network-helpers@^1.0.0": - version "1.0.12" - resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz#2c0abec0c50b75f9d0d71776e49e3b5ef746d289" - integrity sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA== + version "1.0.13" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.13.tgz#8385f87464a4ca2f1b3cc38f2f72c56a3eaa79d2" + integrity sha512-ptg0+SH8jnfoYHlR3dKWTNTB43HZSxkuy3OeDk+AufEKQvQ7Ru9LQEbJtLuDTQ4HGRBkhl4oJ9RABsEIbn7Taw== dependencies: ethereumjs-util "^7.1.4" @@ -1543,16 +1703,16 @@ table "^6.8.0" undici "^5.14.0" -"@nomicfoundation/ignition-core@^0.15.10", "@nomicfoundation/ignition-core@^0.15.11": - version "0.15.11" - resolved "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.11.tgz#315fd4dcde00ae6e44932222b92932bb15fe113a" - integrity sha512-PeYKRlrQ0koT72yRnlyyG66cXMFiv5X/cIB8hBFPl3ekeg5tPXcHAgs/VZhOsgwEox4ejphTtItLESb1IDBw0w== +"@nomicfoundation/ignition-core@^0.15.10", "@nomicfoundation/ignition-core@^0.15.12": + version "0.15.12" + resolved "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.12.tgz#c09c5aa493e54d82bf1737fa3852428185905f90" + integrity sha512-JJdyoyfM5RXaUqv4c2V/8xpuui4uqJbMCvVnEhgo6FMOK6bqj8wGP6hM4gNE5TLug6ZUCdjIB8kFpofl21RycQ== dependencies: "@ethersproject/address" "5.6.1" "@nomicfoundation/solidity-analyzer" "^0.1.1" cbor "^9.0.0" debug "^4.3.2" - ethers "^6.7.0" + ethers "^6.14.0" fs-extra "^10.0.0" immer "10.0.2" lodash "4.17.21" @@ -1637,6 +1797,11 @@ resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.3.0.tgz#79dba09ab0b4bb49f21544ea738b9de016b0ceea" integrity sha512-yVzSSyTMWO6rapGI5tuqkcLpcGGXA0UA1vScyV5EhE5yw8By3Ewex9rDUw8lfVw0iTkvR/egjfcW5vpk03lqZg== +"@openzeppelin/contracts@3.4.1-solc-0.7-2": + version "3.4.1-solc-0.7-2" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz#371c67ebffe50f551c3146a9eec5fe6ffe862e92" + integrity sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q== + "@openzeppelin/contracts@3.4.2-solc-0.7": version "3.4.2-solc-0.7" resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz#38f4dbab672631034076ccdf2f3201fab1726635" @@ -1647,6 +1812,46 @@ resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.3.0.tgz#0a90ce16f5c855e3c8239691f1722cd4999ae741" integrity sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA== +"@oxlint/darwin-arm64@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.6.0.tgz#68d197eeb3dd599f5d2ca6e04ee59654df26e69e" + integrity sha512-m3wyqBh1TOHjpr/dXeIZY7OoX+MQazb+bMHQdDtwUvefrafUx+5YHRvulYh1sZSQ449nQ3nk3qj5qj535vZRjg== + +"@oxlint/darwin-x64@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.6.0.tgz#4f2abbbd39b2fb196c072460a1dcac0d73d927ec" + integrity sha512-75fJfF/9xNypr7cnOYoZBhfmG1yP7ex3pUOeYGakmtZRffO9z1i1quLYhjZsmaDXsAIZ3drMhenYHMmFKS3SRg== + +"@oxlint/linux-arm64-gnu@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.6.0.tgz#cbb78ce5826bcfee49c943d3dce38d21e73556ae" + integrity sha512-YhXGf0FXa72bEt4F7eTVKx5X3zWpbAOPnaA/dZ6/g8tGhw1m9IFjrabVHFjzcx3dQny4MgA59EhyElkDvpUe8A== + +"@oxlint/linux-arm64-musl@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.6.0.tgz#0bbc7d32845d600e20d1fd68e3aaf29fdcb4f786" + integrity sha512-T3JDhx8mjGjvh5INsPZJrlKHmZsecgDYvtvussKRdkc1Nnn7WC+jH9sh5qlmYvwzvmetlPVNezAoNvmGO9vtMg== + +"@oxlint/linux-x64-gnu@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.6.0.tgz#6b3a47d433e65bbc659528659763a1f18083f566" + integrity sha512-Dx7ghtAl8aXBdqofJpi338At6lkeCtTfoinTYQXd9/TEJx+f+zCGNlQO6nJz3ydJBX48FDuOFKkNC+lUlWrd8w== + +"@oxlint/linux-x64-musl@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.6.0.tgz#6d4c233ed34410169c417ca03a31b0399a6d481b" + integrity sha512-7KvMGdWmAZtAtg6IjoEJHKxTXdAcrHnUnqfgs0JpXst7trquV2mxBeRZusQXwxpu4HCSomKMvJfsp1qKaqSFDg== + +"@oxlint/win32-arm64@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.6.0.tgz#af1f285fb6d00830c34c0e71c0e63f688f6552cf" + integrity sha512-iSGC9RwX+dl7o5KFr5aH7Gq3nFbkq/3Gda6mxNPMvNkWrgXdIyiINxpyD8hJu566M+QSv1wEAu934BZotFDyoQ== + +"@oxlint/win32-x64@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.6.0.tgz#4136819bcd4018f474620bf9cd6d788c292bb7ba" + integrity sha512-jOj3L/gfLc0IwgOTkZMiZ5c673i/hbAmidlaylT0gE6H18hln9HxPgp5GCf4E4y6mwEJlW8QC5hQi221+9otdA== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -1793,32 +1998,32 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@shikijs/engine-oniguruma@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz#dce6074a258f1b349ff043eddba9779e76984769" - integrity sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA== +"@shikijs/engine-oniguruma@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz#77afe066ed245ae9c3e790ca22344195e974ed54" + integrity sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw== dependencies: - "@shikijs/types" "3.6.0" + "@shikijs/types" "3.7.0" "@shikijs/vscode-textmate" "^10.0.2" -"@shikijs/langs@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz#e3faea60e12c9bcdbebeeac14975c71f927bc7cb" - integrity sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA== +"@shikijs/langs@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@shikijs/langs/-/langs-3.7.0.tgz#c201d0218e9f3a74d92bd3f53167f0fb897c5b6e" + integrity sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ== dependencies: - "@shikijs/types" "3.6.0" + "@shikijs/types" "3.7.0" -"@shikijs/themes@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz#6003780e033f9fec6b1336395a8994be17959e81" - integrity sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w== +"@shikijs/themes@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@shikijs/themes/-/themes-3.7.0.tgz#e4fb08ca56826dd3b0a48a555140cb090ce0a639" + integrity sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ== dependencies: - "@shikijs/types" "3.6.0" + "@shikijs/types" "3.7.0" -"@shikijs/types@3.6.0", "@shikijs/types@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz#0a4944724320eaa6f151d26d8f982a7f4a0b53ff" - integrity sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg== +"@shikijs/types@3.7.0", "@shikijs/types@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@shikijs/types/-/types-3.7.0.tgz#265641647708663ec8a18a9fab29449076da5a17" + integrity sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg== dependencies: "@shikijs/vscode-textmate" "^10.0.2" "@types/hast" "^3.0.4" @@ -1869,18 +2074,18 @@ integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== "@solana-mobile/mobile-wallet-adapter-protocol-web3js@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@solana-mobile/mobile-wallet-adapter-protocol-web3js/-/mobile-wallet-adapter-protocol-web3js-2.2.0.tgz#6d7fa935fd80c00201465473343729f28671b7e9" - integrity sha512-EVMlls3vgxmc2jYstdzWYujQ0s+22lEUt5JlaWYhG3aC27YfQgDP6e2zfSpdnKrLyOqMoz7bYYcti+Bx/QQPyg== + version "2.2.2" + resolved "https://registry.npmjs.org/@solana-mobile/mobile-wallet-adapter-protocol-web3js/-/mobile-wallet-adapter-protocol-web3js-2.2.2.tgz#3172924d9bcbc983cc1a565a5909e6a2ab612c0c" + integrity sha512-XmLJrEdkAJ3CBV+bkYDKSBqF6QfjGTIeX+tFGPcwcc9rQ68sE1MPhpUKV9ehRwDLrZXcin2UDMOpWB/S6FJWBQ== dependencies: "@solana-mobile/mobile-wallet-adapter-protocol" "^2.2.0" bs58 "^5.0.0" js-base64 "^3.7.5" "@solana-mobile/mobile-wallet-adapter-protocol@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.2.1.tgz#dd73bf10d0edcb6bbd8332d7da7e562fe80b69ad" - integrity sha512-fAT7Rzdw8dQH0CHOGNnwFjpNaHoQ0HJEjVK6iS6KXKlRjOm2y2BM8ZkNAyqIWKD+uGCBwDPZHWwZaME72k17kA== + version "2.2.2" + resolved "https://registry.npmjs.org/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.2.2.tgz#805ba204e4f910f5f76bc63c28ecd0fdae82c972" + integrity sha512-ZJVwPVXmIfoqEhPRbpj/atnyIkcxOrJcLOqIQSaRfgmGGhCAcXmC8dTxlrtjVisxkZviXEshmBVxvOD/kqLQOw== dependencies: "@solana/wallet-standard" "^1.1.2" "@solana/wallet-standard-util" "^1.1.1" @@ -1888,9 +2093,9 @@ js-base64 "^3.7.5" "@solana-mobile/wallet-adapter-mobile@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@solana-mobile/wallet-adapter-mobile/-/wallet-adapter-mobile-2.2.0.tgz#1c48280a57a655f5f69e8b4582ad8833292685fd" - integrity sha512-7xcx+i6D9HlXuVgKrlDVpBYrdhM8JVzrrhuges3ATfZvlZ5zwEnNenEuQCsG5Al8vgTvMBqX6KJ1dUFill0+Nw== + version "2.2.2" + resolved "https://registry.npmjs.org/@solana-mobile/wallet-adapter-mobile/-/wallet-adapter-mobile-2.2.2.tgz#8c2d6342c25e957aa46ae9a8a255a511370cdaeb" + integrity sha512-4whHagJRduFDWUjLi1kQc4k7LKPjnDn+mLigAd/cv9iPjk0NYNtQOqdGMT+5ENRm3q1XX3DO5jBVd++ckDPJvw== dependencies: "@solana-mobile/mobile-wallet-adapter-protocol-web3js" "^2.2.0" "@solana-mobile/wallet-standard-mobile" "^0.2.0" @@ -2232,9 +2437,9 @@ tweetnacl "1.0.3" "@ton/ton@^15.2.1": - version "15.2.1" - resolved "https://registry.npmjs.org/@ton/ton/-/ton-15.2.1.tgz#be5a5b8576c4bae9e7ad52616b3092b6abcf7672" - integrity sha512-ICzozzATRfymkVfFVZrfVpKnCc5PLxAVeaB62mx/HsgllsjnR64UuoLuE6hqWHcA3/Hft9YLGdk2/rOHGZM6qA== + version "15.3.1" + resolved "https://registry.npmjs.org/@ton/ton/-/ton-15.3.1.tgz#c20688b27eb8ce8474610843804a7599679c38a2" + integrity sha512-+UuvbE0o0VIU/0W90STO+emRIDr3Vs39LdbX5ySm/Ra+RQJSiH0KX6TDOFqWDmD2Wzk4/zw21KwSiZ6Xjk8zlw== dependencies: axios "^1.6.7" dataloader "^2.0.0" @@ -2391,6 +2596,14 @@ dependencies: "@types/unist" "*" +"@types/inquirer@^9.0.7": + version "9.0.8" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.8.tgz#09d39cc6435ab7b0597f527ff5e2d6ccdf6b14be" + integrity sha512-CgPD5kFGWsb8HJ5K7rfWlifao87m4ph8uioU7OTncJevmE/VLIqAAjfQtko578JZg7/f69K4FgqYym3gNr7DeA== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" @@ -2429,19 +2642,21 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.202": - version "4.17.17" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.17.tgz#fb85a04f47e9e4da888384feead0de05f7070355" - integrity sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ== + version "4.17.20" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93" + integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA== "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/minimatch@*", "@types/minimatch@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" + integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== + dependencies: + minimatch "*" "@types/mocha@>=9.1.0": version "10.0.10" @@ -2463,9 +2678,9 @@ "@types/node" "*" "@types/node@*", "@types/node@>=12.0.0": - version "24.0.0" - resolved "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz#14a278ce74dd33993f2c4e5dd614760728c0fba8" - integrity sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg== + version "24.0.10" + resolved "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz#f65a169779bf0d70203183a1890be7bee8ca2ddb" + integrity sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA== dependencies: undici-types "~7.8.0" @@ -2487,9 +2702,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^20.10.7", "@types/node@^20.4.2": - version "20.19.0" - resolved "https://registry.npmjs.org/@types/node/-/node-20.19.0.tgz#7006b097b15dfea06695c3bbdba98b268797f65b" - integrity sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q== + version "20.19.4" + resolved "https://registry.npmjs.org/@types/node/-/node-20.19.4.tgz#c4b8ce51a0f675a354225c58980ccacfe0af5d74" + integrity sha512-OP+We5WV8Xnbuvw0zC2m4qfB/BJvjyCwtNjhHdJxV1639SGSKrLmJkc3fMnp2Qy8nJyHp8RO6umxELN/dS1/EA== dependencies: undici-types "~6.21.0" @@ -2537,6 +2752,13 @@ resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/through@*": + version "0.0.33" + resolved "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" + integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ== + dependencies: + "@types/node" "*" + "@types/unist@*": version "3.0.3" resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" @@ -2736,6 +2958,33 @@ resolved "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz#2881008e55f075344675b3bca93f020b028fbd02" integrity sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA== +"@uniswap/sdk-core@^7.7.1": + version "7.7.2" + resolved "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-7.7.2.tgz#dc3a9b63b343640754860dce05d06972815eaee6" + integrity sha512-0KqXw+y0opBo6eoPAEoLHEkNpOu0NG9gEk7GAYIGok+SHX89WlykWsRYeJKTg9tOwhLpcG9oHg8xZgQ390iOrA== + dependencies: + "@ethersproject/address" "^5.0.2" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/strings" "5.7.0" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + jsbi "^3.1.4" + tiny-invariant "^1.1.0" + toformat "^2.0.0" + +"@uniswap/swap-router-contracts@^1.3.0": + version "1.3.1" + resolved "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.3.1.tgz#0ebbb93eb578625618ed9489872de381f9c66fb4" + integrity sha512-mh/YNbwKb7Mut96VuEtL+Z5bRe0xVIbjjiryn+iMMrK2sFKhR4duk/86mEz0UO5gSx4pQIw9G5276P5heY/7Rg== + dependencies: + "@openzeppelin/contracts" "3.4.2-solc-0.7" + "@uniswap/v2-core" "^1.0.1" + "@uniswap/v3-core" "^1.0.0" + "@uniswap/v3-periphery" "^1.4.4" + dotenv "^14.2.0" + hardhat-watcher "^2.1.1" + "@uniswap/v2-core@1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.0.tgz#e0fab91a7d53e8cafb5326ae4ca18351116b0844" @@ -2754,12 +3003,17 @@ "@uniswap/lib" "1.1.1" "@uniswap/v2-core" "1.0.0" -"@uniswap/v3-core@^1.0.0": +"@uniswap/v3-core@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz#6c24adacc4c25dceee0ba3ca142b35adbd7e359d" + integrity sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA== + +"@uniswap/v3-core@^1.0.0", "@uniswap/v3-core@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.1.tgz#b6d2bdc6ba3c3fbd610bdc502395d86cd35264a0" integrity sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ== -"@uniswap/v3-periphery@^1.4.4": +"@uniswap/v3-periphery@^1.0.1", "@uniswap/v3-periphery@^1.1.1", "@uniswap/v3-periphery@^1.4.4": version "1.4.4" resolved "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.4.tgz#d2756c23b69718173c5874f37fd4ad57d2f021b7" integrity sha512-S4+m+wh8HbWSO3DKk4LwUCPZJTpCugIsHrWR86m/OrUyvSqGDTXKFfc2sMuGXCZrD1ZqO3rhQsKgdWg3Hbb2Kw== @@ -2770,92 +3024,125 @@ "@uniswap/v3-core" "^1.0.0" base64-sol "1.0.1" -"@unrs/resolver-binding-darwin-arm64@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.8.1.tgz#4ebdbe47a4d8e45690f03482d7463b282683ded8" - integrity sha512-OKuBTQdOb4Kjbe+y4KgbRhn+nu47hNyNU2K3qjD+SA/bnQouvZnRzEiR85xZAIyZ6z1C+O1Zg1dK4hGH1RPdYA== +"@uniswap/v3-sdk@^3.25.2": + version "3.25.2" + resolved "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.25.2.tgz#cb6ee174b58d86a3b3b18b3ba72f662e58c415da" + integrity sha512-0oiyJNGjUVbc958uZmAr+m4XBCjV7PfMs/OUeBv+XDl33MEYF/eH86oBhvqGDM8S/cYaK55tCXzoWkmRUByrHg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/solidity" "^5.0.9" + "@uniswap/sdk-core" "^7.7.1" + "@uniswap/swap-router-contracts" "^1.3.0" + "@uniswap/v3-periphery" "^1.1.1" + "@uniswap/v3-staker" "1.0.0" + tiny-invariant "^1.1.0" + tiny-warning "^1.0.3" + +"@uniswap/v3-staker@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz#9a6915ec980852479dfc903f50baf822ff8fa66e" + integrity sha512-JV0Qc46Px5alvg6YWd+UIaGH9lDuYG/Js7ngxPit1SPaIP30AlVer1UYB7BRYeUVVxE+byUyIeN5jeQ7LLDjIw== + dependencies: + "@openzeppelin/contracts" "3.4.1-solc-0.7-2" + "@uniswap/v3-core" "1.0.0" + "@uniswap/v3-periphery" "^1.0.1" -"@unrs/resolver-binding-darwin-x64@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.8.1.tgz#2d36bee16e8dc8594a7ddbd04cc1e6c572bb1b68" - integrity sha512-inaphBsOqqzauNvx6kSHrgqDLShicPg3+fInBcEdD7Ut8sUUbm2z19LL+S9ccGpHnYoNiJ+Qrf7/B8hRsCUvBw== +"@unrs/resolver-binding-android-arm-eabi@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.0.tgz#6a64664fa35d2aaf3ed9bc82dff15ef9df23c066" + integrity sha512-LRw5BW29sYj9NsQC6QoqeLVQhEa+BwVINYyMlcve+6stwdBsSt5UB7zw4UZB4+4PNqIVilHoMaPWCb/KhABHQw== -"@unrs/resolver-binding-freebsd-x64@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.8.1.tgz#cc546963b5eabd059587498f81cf69a6f75e89ec" - integrity sha512-LkGw7jDoLKEZO6yYwTKUlrboD6Qmy9Jkq7ZDPlJReq/FnCnNh0k1Z1hjtevpqPCMLz9hGW0ITMb04jdDZ796Cg== +"@unrs/resolver-binding-android-arm64@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.0.tgz#1ab6be0d8a1340d629318d5985c5555c8d750558" + integrity sha512-zYX8D2zcWCAHqghA8tPjbp7LwjVXbIZP++mpU/Mrf5jUVlk3BWIxkeB8yYzZi5GpFSlqMcRZQxQqbMI0c2lASQ== -"@unrs/resolver-binding-linux-arm-gnueabihf@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.8.1.tgz#7135d3df1faa37b33923c8ee20314b6cef267e7f" - integrity sha512-6vhu22scv64dynXTVmeClenn3OPI8cwdhtydLFDkoW4UJzNwcgJ5mVtzbtikDGM9PmIQa+ekpH6tdvKt0ToK3A== +"@unrs/resolver-binding-darwin-arm64@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.0.tgz#45754acf53eda1d9ec2916da9411924bcadd8cf2" + integrity sha512-YsYOT049hevAY/lTYD77GhRs885EXPeAfExG5KenqMJ417nYLS2N/kpRpYbABhFZBVQn+2uRPasTe4ypmYoo3w== -"@unrs/resolver-binding-linux-arm-musleabihf@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.8.1.tgz#0ae5128e38d8df8ad685867b4de4d8df9a4fbf35" - integrity sha512-SrQ286JVFWlnZSm1/TJwulTgJVOdb1x8BWW2ecOK0Sx+acdRpoMf4WSxH+/+R4LyE/YYyekcEtUrPhSEgJ748g== +"@unrs/resolver-binding-darwin-x64@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.0.tgz#a5b64d820a1ca7d0f9d5f3b2dd4bf133b63143de" + integrity sha512-PSjvk3OZf1aZImdGY5xj9ClFG3bC4gnSSYWrt+id0UAv+GwwVldhpMFjAga8SpMo2T1GjV9UKwM+QCsQCQmtdA== -"@unrs/resolver-binding-linux-arm64-gnu@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.8.1.tgz#139d34a03f4232836e761f2aa28751fd8f86fa0e" - integrity sha512-I2s4L27V+2kAee43x/qAkFjTZJgmDvSd9vtnyINOdBEdz5+QqiG6ccd5pgOw06MsUwygkrhB4jOe4ZN4SA6IwA== +"@unrs/resolver-binding-freebsd-x64@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.0.tgz#17fc82321b7cdfdae871b63e3a54fe1978fde62e" + integrity sha512-KC/iFaEN/wsTVYnHClyHh5RSYA9PpuGfqkFua45r4sweXpC0KHZ+BYY7ikfcGPt5w1lMpR1gneFzuqWLQxsRKg== -"@unrs/resolver-binding-linux-arm64-musl@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.8.1.tgz#b095fcb567f00c6df88ff334e0c1cba3ea12ec44" - integrity sha512-Drq80e/EQbdSVyJpheF65qVmfYy8OaDdQqoWV+09tZHz/P1SdSulvVtgtYrk216D++9hbx3c1bwVXwR5PZ2TzA== +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.0.tgz#acc6d616231bde02dab70a844903652441aa1cbb" + integrity sha512-CDh/0v8uot43cB4yKtDL9CVY8pbPnMV0dHyQCE4lFz6PW/+9tS0i9eqP5a91PAqEBVMqH1ycu+k8rP6wQU846w== -"@unrs/resolver-binding-linux-ppc64-gnu@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.8.1.tgz#3fde0589f276be5e21d7b90fe264448839afa2b8" - integrity sha512-EninHQHw8Zkq8K5qB6KWNDqjCtUzTDsCRQ6LzAtQWIxic/VQxR5Kl36V/GCXNvQaR7W0AB5gvJLyQtJwkf+AJA== +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.0.tgz#8d200f0ceb193efe56972d7ca76a3cb147c992be" + integrity sha512-+TE7epATDSnvwr3L/hNHX3wQ8KQYB+jSDTdywycg3qDqvavRP8/HX9qdq/rMcnaRDn4EOtallb3vL/5wCWGCkw== -"@unrs/resolver-binding-linux-riscv64-gnu@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.8.1.tgz#ad21df9d44960e751cadf10a915eb190044be433" - integrity sha512-s7Xu5PS4vWhsb5ZFAi+UBguTn0g8qDhN+BbB1t9APX23AdAI7TS4DRrJV5dBVdQ6a8MiergGr1Cjb0Q1V/sW8w== +"@unrs/resolver-binding-linux-arm64-gnu@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.0.tgz#2d976fdbb4d6b94bf77b51c668e893ffc2e95c45" + integrity sha512-VBAYGg3VahofpQ+L4k/ZO8TSICIbUKKTaMYOWHWfuYBFqPbSkArZZLezw3xd27fQkxX4BaLGb/RKnW0dH9Y/UA== -"@unrs/resolver-binding-linux-riscv64-musl@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.8.1.tgz#b38d5c9fad291b542e45baccd9d43849f4dc0733" - integrity sha512-Ca+bVzOJtgQ3OrMkRSeDLYWJIjRmEylDHSZuSKqqPmZI2vgX6yZgzrKY28I6hjjG9idlW4DcJzLv/TjFXev+4Q== +"@unrs/resolver-binding-linux-arm64-musl@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.0.tgz#0bb3fcd3d490e171102a7e786557f3e30f375d74" + integrity sha512-9IgGFUUb02J1hqdRAHXpZHIeUHRrbnGo6vrRbz0fREH7g+rzQy53/IBSyadZ/LG5iqMxukriNPu4hEMUn+uWEg== -"@unrs/resolver-binding-linux-s390x-gnu@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.8.1.tgz#b77d80b7dea1e34d833b21d9579fd4956061d5c5" - integrity sha512-ut1vBBFs6AC5EcerH8HorcmS/9wAy6iI1tfpzT7jy+SKnMgmPth/psc3W5V04njble7cyLPjFHwYJTlxmozQ/g== +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.0.tgz#436b591ccda94e191a2a6eff6cd021b1375a703b" + integrity sha512-LR4iQ/LPjMfivpL2bQ9kmm3UnTas3U+umcCnq/CV7HAkukVdHxrDD1wwx74MIWbbgzQTLPYY7Ur2MnnvkYJCBQ== -"@unrs/resolver-binding-linux-x64-gnu@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.8.1.tgz#a2371b20d7ae7f482d247f2f45699ea314a4ceeb" - integrity sha512-w5agLxesvrYKrCOlAsUkwRDogjnyRBi4/vEaujZRkXbeRCupJ9dFD0qUhLXZyIed+GSzJJIsJocUZIVzcTHYXQ== +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.0.tgz#bcd73a92c8fb2897cdf345c21bc9e657fc04a120" + integrity sha512-HCupFQwMrRhrOg7YHrobbB5ADg0Q8RNiuefqMHVsdhEy9lLyXm/CxsCXeLJdrg27NAPsCaMDtdlm8Z2X8x91Tg== -"@unrs/resolver-binding-linux-x64-musl@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.8.1.tgz#45f2f58ad4fc103f7feea0899e638021d5bf2c57" - integrity sha512-vk5htmWYCLRpfjn2wmCUne6pLvlcYUFDAAut4g02/2iWeGeZO/3GmSLmiZ9fcn9oH0FUzgetg0/zSo8oZ7liIg== +"@unrs/resolver-binding-linux-riscv64-musl@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.0.tgz#29d7e501830635559a3b6bd24a46895ad015a257" + integrity sha512-Ckxy76A5xgjWa4FNrzcKul5qFMWgP5JSQ5YKd0XakmWOddPLSkQT+uAvUpQNnFGNbgKzv90DyQlxPDYPQ4nd6A== -"@unrs/resolver-binding-wasm32-wasi@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.8.1.tgz#d57ea7275464328403fc103347db1fa4900f220e" - integrity sha512-RcsLTcrqDT5XW/TnhhIeM7lVLgUv/gvPEC4WaH+OhkLCkRfH6EEuhprwrcp1WhdlrtL/U5FkHh4NtFLnMXoeXA== +"@unrs/resolver-binding-linux-s390x-gnu@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.0.tgz#0aff45e49256ed0340cac63562c0a424dfdbe45c" + integrity sha512-HfO0PUCCRte2pMJmVyxPI+eqT7KuV3Fnvn2RPvMe5mOzb2BJKf4/Vth8sSt9cerQboMaTVpbxyYjjLBWIuI5BQ== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.0.tgz#7437389f2d89eee159cd0a458c5719959cf37c1a" + integrity sha512-9PZdjP7tLOEjpXHS6+B/RNqtfVUyDEmaViPOuSqcbomLdkJnalt5RKQ1tr2m16+qAufV0aDkfhXtoO7DQos/jg== + +"@unrs/resolver-binding-linux-x64-musl@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.0.tgz#9fc10fa5fd0c37bc780296ef5aa15e32034c9701" + integrity sha512-qkE99ieiSKMnFJY/EfyGKVtNra52/k+lVF/PbO4EL5nU6AdvG4XhtJ+WHojAJP7ID9BNIra/yd75EHndewNRfA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.0.tgz#4be4f755b056207ed4f909798970d719d0a28a1b" + integrity sha512-MjXek8UL9tIX34gymvQLecz2hMaQzOlaqYJJBomwm1gsvK2F7hF+YqJJ2tRyBDTv9EZJGMt4KlKkSD/gZWCOiw== dependencies: "@napi-rs/wasm-runtime" "^0.2.11" -"@unrs/resolver-binding-win32-arm64-msvc@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.8.1.tgz#41eeb4731c22e74d87be0628df1eb79298ed663b" - integrity sha512-XbSRLZY/gEi5weYv/aCkiUiSWvrNKkvec3m6/bDypDI+ZACwMllPH7smeOW/fdnIGhf9YtPATNliJHAS2GyMUA== +"@unrs/resolver-binding-win32-arm64-msvc@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.0.tgz#fdd98a7d3cf6864c33d6e730efe31c0cff9ab591" + integrity sha512-9LT6zIGO7CHybiQSh7DnQGwFMZvVr0kUjah6qQfkH2ghucxPV6e71sUXJdSM4Ba0MaGE6DC/NwWf7mJmc3DAng== -"@unrs/resolver-binding-win32-ia32-msvc@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.8.1.tgz#399763affd06fb409f6d22f1e4d26e9cb3ac8982" - integrity sha512-SbCJMKOmqOsIBCklT5c+t0DjVbOkseE7ZN0OtMxRnraLKdj1AAv7d3cjJMYkPd9ZGKosHoMXo66gBs02YM8KeA== +"@unrs/resolver-binding-win32-ia32-msvc@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.0.tgz#b09f3dcf0f3b516d90dd1a3b00fa72d8536dadb6" + integrity sha512-HYchBYOZ7WN266VjoGm20xFv5EonG/ODURRgwl9EZT7Bq1nLEs6VKJddzfFdXEAho0wfFlt8L/xIiE29Pmy1RA== -"@unrs/resolver-binding-win32-x64-msvc@1.8.1": - version "1.8.1" - resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.8.1.tgz#91e3322e735382cbe5611d1467fd95411cb58141" - integrity sha512-DdHqo7XbeUa/ZOcxq+q5iuO4sSxhwX9HR1JPL0JMOKEzgkIO4OKF2TPjqmo6UCCGZUXIMwrAycFXj/40sICagw== +"@unrs/resolver-binding-win32-x64-msvc@1.11.0": + version "1.11.0" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.0.tgz#70c6b7d5807ece551c57dee4587dd4a40d197bd2" + integrity sha512-+oLKLHw3I1UQo4MeHfoLYF+e6YBa8p5vYUw3Rgt7IDzCs+57vIZqQlIo62NDpYM0VG6BjWOwnzBczMvbtH8hag== "@wallet-standard/app@^1.1.0": version "1.1.0" @@ -2937,7 +3224,7 @@ "@zetachain/protocol-contracts@13.0.0": version "13.0.0" - resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-13.0.0.tgz#dc194144b21bd333c6939cb7b6fa60f103bf8735" + resolved "https://registry.npmjs.org/@zetachain/protocol-contracts/-/protocol-contracts-13.0.0.tgz#dc194144b21bd333c6939cb7b6fa60f103bf8735" integrity sha512-gqylJeCI4rt6VYVpyr+5wXaUVHmLpr7WiGO6weJX2sOlwOlUk4+HSeRUgI3muK+k3CrY6igCETx/EP3UGMLf+Q== dependencies: "@openzeppelin/contracts" "^5.0.2" @@ -2947,7 +3234,7 @@ "@zetachain/standard-contracts@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@zetachain/standard-contracts/-/standard-contracts-2.0.1.tgz#aefd28bb81f1f05b183bd73dc62bd68e456a6ebf" + resolved "https://registry.npmjs.org/@zetachain/standard-contracts/-/standard-contracts-2.0.1.tgz#aefd28bb81f1f05b183bd73dc62bd68e456a6ebf" integrity sha512-SHV9a1bSgy8litI/LRZ4VIus7Gsjy0wj3n9bZeIsEydn0C5NNZxYO4XW+P06dlEyDQjtcVJQHoQOyHkodBoVsQ== abbrev@1: @@ -3195,7 +3482,7 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: call-bound "^1.0.3" is-array-buffer "^3.0.5" -array-includes@^3.1.8: +array-includes@^3.1.9: version "3.1.9" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== @@ -3229,7 +3516,7 @@ array-unique@^0.3.2: resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.findlastindex@^1.2.5: +array.prototype.findlastindex@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== @@ -3242,7 +3529,7 @@ array.prototype.findlastindex@^1.2.5: es-object-atoms "^1.1.1" es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== @@ -3252,7 +3539,7 @@ array.prototype.flat@^1.3.2: es-abstract "^1.23.5" es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== @@ -3343,9 +3630,9 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axios@^1.4.0, axios@^1.5.1, axios@^1.6.7: - version "1.9.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" - integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== + version "1.10.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz#af320aee8632eaf2a400b6a1979fa75856f38d54" + integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -3484,6 +3771,11 @@ bech32@^2.0.0: resolved "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + bigint-buffer@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" @@ -3659,12 +3951,12 @@ browserify-aes@^1.2.0: safe-buffer "^5.0.1" browserslist@^4.24.0: - version "4.25.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c" - integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA== + version "4.25.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" + integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== dependencies: - caniuse-lite "^1.0.30001718" - electron-to-chromium "^1.5.160" + caniuse-lite "^1.0.30001726" + electron-to-chromium "^1.5.173" node-releases "^2.0.19" update-browserslist-db "^1.1.3" @@ -3819,10 +4111,10 @@ camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.3.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001718: - version "1.0.30001722" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001722.tgz#ec25a2b3085b25b9079b623db83c22a70882ce85" - integrity sha512-DCQHBBZtiK6JVkAGw7drvAMK0Q0POD/xZvEmDp6baiMMP6QXXk9HpD6mNYBZWhOPG6LvIDb82ITqtWjhDckHCA== +caniuse-lite@^1.0.30001726: + version "1.0.30001727" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85" + integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" @@ -4244,7 +4536,17 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hash@~1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + integrity sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -4380,6 +4682,11 @@ decamelize@^4.0.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +decimal.js-light@^2.5.0: + version "2.5.1" + resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -4540,10 +4847,15 @@ dotenv@16.0.3: resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +dotenv@^14.2.0: + version "14.3.2" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369" + integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ== + dotenv@^16.1.4: - version "16.5.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" - integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== + version "16.6.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" @@ -4580,10 +4892,10 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.160: - version "1.5.166" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.166.tgz#3fff386ed473cc2169dbe2d3ace9592262601114" - integrity sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw== +electron-to-chromium@^1.5.173: + version "1.5.179" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz#453d53f360014a2604d40ccd41c4ea0a6e31b99a" + integrity sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ== elliptic@6.6.1, elliptic@^6.5.7, elliptic@^6.6.1: version "6.6.1" @@ -4817,36 +5129,36 @@ eslint-import-resolver-typescript@^3.5.5: tinyglobby "^0.2.13" unrs-resolver "^1.6.2" -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.27.5: - version "2.31.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + version "2.32.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" + eslint-module-utils "^2.12.1" hasown "^2.0.2" - is-core-module "^2.15.1" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.8" object.groupby "^1.0.3" - object.values "^1.2.0" + object.values "^1.2.1" semver "^6.3.1" - string.prototype.trimend "^1.0.8" + string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" eslint-plugin-prefer-arrow@^1.2.3: @@ -5144,10 +5456,10 @@ ethers@^5.7.2: "@ethersproject/web" "5.8.0" "@ethersproject/wordlists" "5.8.0" -ethers@^6.13.2, ethers@^6.7.0: - version "6.14.3" - resolved "https://registry.npmjs.org/ethers/-/ethers-6.14.3.tgz#7c4443c165ee59b2964e691600fd4586004b2000" - integrity sha512-qq7ft/oCJohoTcsNPFaXSQUm457MA5iWqkf1Mb11ujONdg7jBI6sAOrHaTi3j0CBqIGFSCeR/RMc+qwRRub7IA== +ethers@^6.13.2, ethers@^6.14.0: + version "6.15.0" + resolved "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz#2980f2a3baf0509749b7e21f8692fa8a8349c0e3" + integrity sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" @@ -5803,11 +6115,6 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - 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#8432a19d78ce0c1e833949c36adb345400bb1171" @@ -5855,9 +6162,9 @@ gopd@^1.0.1, gopd@^1.2.0: integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== gql.tada@^1.8.2: - version "1.8.10" - resolved "https://registry.npmjs.org/gql.tada/-/gql.tada-1.8.10.tgz#096a1b30d3c6fc74212fe07d507f01a4095f7f67" - integrity sha512-FrvSxgz838FYVPgZHGOSgbpOjhR+yq44rCzww3oOPJYi0OvBJjAgCiP6LEokZIYND2fUTXzQAyLgcvgw1yNP5A== + version "1.8.11" + resolved "https://registry.npmjs.org/gql.tada/-/gql.tada-1.8.11.tgz#71febbded96ab48f93f328e457f4d4004b4e1775" + integrity sha512-b94SV2ki1yZWm/MGzWIaWxuPJUMAYjlQllwoD9b8/GCVXKax1HS9xPfLq/p47UmAnUY3X8qDF0JdMEIr0EKmOA== dependencies: "@0no-co/graphql.web" "^1.0.5" "@0no-co/graphqlsp" "^1.12.13" @@ -5912,14 +6219,21 @@ hardhat-gas-reporter@^1.0.8: eth-gas-reporter "^0.2.25" sha1 "^1.1.1" +hardhat-watcher@^2.1.1: + version "2.5.0" + resolved "https://registry.npmjs.org/hardhat-watcher/-/hardhat-watcher-2.5.0.tgz#3ee76c3cb5b99f2875b78d176207745aa484ed4a" + integrity sha512-Su2qcSMIo2YO2PrmJ0/tdkf+6pSt8zf9+4URR5edMVti6+ShI8T3xhPrwugdyTOFuyj8lKHrcTZNKUFYowYiyA== + dependencies: + chokidar "^3.5.3" + hardhat@^2.22.8: - version "2.24.2" - resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.24.2.tgz#fe44c0d264557880a4e9e9a03fd03b5b68e95a5a" - integrity sha512-oYt+tcN2379Z3kqIhvVw6IFgWqTm/ixcrTvyAuQdE2RbD+kknwF7hDfUeggy0akrw6xdgCtXvnw9DFrxAB70hA== + version "2.25.0" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.25.0.tgz#473bf07b62a0ea30cf003e4585f71a0ffc70c739" + integrity sha512-yBiA74Yj3VnTRj7lhnn8GalvBdvsMOqTKRrRATSy/2v0VIR2hR0Jcnmfn4aQBLtGAnr3Q2c8CxL0g3LYegUp+g== dependencies: "@ethereumjs/util" "^9.1.0" "@ethersproject/abi" "^5.1.2" - "@nomicfoundation/edr" "^0.11.0" + "@nomicfoundation/edr" "^0.11.1" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -6036,6 +6350,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + integrity sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw== + dependencies: + inherits "^2.0.1" + hash-base@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -6245,6 +6566,19 @@ ini@^1.3.5: resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inquirer@^12.5.2: + version "12.7.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-12.7.0.tgz#57f07e096e33aa59519d0304ee74714a08e20dd1" + integrity sha512-KKFRc++IONSyE2UYw9CJ1V0IWx5yQKomwB+pp3cWomWs+v2+ZsG11G2OVfAjFS6WWCppKw+RfKmpqGfSzD5QBQ== + dependencies: + "@inquirer/core" "^10.1.14" + "@inquirer/prompts" "^7.6.0" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + mute-stream "^2.0.0" + run-async "^4.0.4" + rxjs "^7.8.2" + internal-slot@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" @@ -6352,7 +6686,7 @@ is-callable@^1.2.7: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: +is-core-module@^2.13.0, is-core-module@^2.16.0, 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#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -7066,7 +7400,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#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -7154,6 +7488,16 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbi@^3.1.4: + version "3.2.5" + resolved "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" + integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== + +jsbi@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz#8a4d05d4e09907d73042135b6aa55a6d161ee955" + integrity sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew== + jsesc@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -7606,6 +7950,13 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +minimatch@*, minimatch@^10.0.3: + version "10.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + "minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -7705,6 +8056,11 @@ mute-stream@^1.0.0: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + nan@^2.12.1: version "2.22.2" resolved "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz#6b504fd029fb8f38c0990e52ad5c26772fdacfbb" @@ -7727,10 +8083,10 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-postinstall@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" - integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== +napi-postinstall@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz#888e51d1fb500e86dcf6ace1baccdbb377e654ce" + integrity sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA== natural-compare-lite@^1.4.0: version "1.4.0" @@ -7932,7 +8288,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.2.0: +object.values@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== @@ -8024,6 +8380,20 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +oxlint@^1.2.0: + version "1.6.0" + resolved "https://registry.npmjs.org/oxlint/-/oxlint-1.6.0.tgz#ebe4611685befa5b0d445cf3c4720ade2cc2bd4f" + integrity sha512-jtaD65PqzIa1udvSxxscTKBxYKuZoFXyKGLiU1Qjo1ulq3uv/fQDtoV1yey1FrQZrQjACGPi1Widsy1TucC7Jg== + optionalDependencies: + "@oxlint/darwin-arm64" "1.6.0" + "@oxlint/darwin-x64" "1.6.0" + "@oxlint/linux-arm64-gnu" "1.6.0" + "@oxlint/linux-arm64-musl" "1.6.0" + "@oxlint/linux-x64-gnu" "1.6.0" + "@oxlint/linux-x64-musl" "1.6.0" + "@oxlint/win32-arm64" "1.6.0" + "@oxlint/win32-x64" "1.6.0" + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8155,15 +8525,16 @@ pathval@^1.1.1: integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + version "3.1.3" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" + integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA== dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" + create-hash "~1.1.3" + create-hmac "^1.1.7" + ripemd160 "=2.0.1" + safe-buffer "^5.2.1" + sha.js "^2.4.11" + to-buffer "^1.2.0" picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" @@ -8265,6 +8636,11 @@ prettier@^2.3.1, prettier@^2.8.3, prettier@^2.8.8: resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.5.3: + version "3.6.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -8618,6 +8994,14 @@ rimraf@^5.0.1: dependencies: glob "^10.3.7" +ripemd160@=2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w== + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8654,6 +9038,14 @@ run-async@^3.0.0: resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== +run-async@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/run-async/-/run-async-4.0.4.tgz#6855326c7ba59358979f7be96d30b972484d63db" + integrity sha512-2cgeRHnV11lSXBEhq7sN7a5UVjTKm9JTb9x8ApIT//16D7QL96AgnNeWSGoB4gIHc0iYw/Ha0Z+waBaCYZVNhg== + dependencies: + oxlint "^1.2.0" + prettier "^3.5.3" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8661,6 +9053,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.2.0, rxjs@^7.8.2: + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" @@ -8837,13 +9236,14 @@ setprototypeof@1.2.0: resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: + version "2.4.12" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" sha1@^1.1.1: version "1.1.1" @@ -9251,7 +9651,7 @@ string.prototype.trim@^1.2.10: es-object-atoms "^1.0.0" has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: +string.prototype.trimend@^1.0.9: version "1.0.9" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== @@ -9486,13 +9886,23 @@ through2@^4.0.0: dependencies: readable-stream "3" +tiny-invariant@^1.1.0: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tiny-secp256k1@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz#fe1dde11a64fcee2091157d4b78bcb300feb9b65" - integrity sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q== + version "2.2.4" + resolved "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.4.tgz#1d9e45c2facb8607847da71a0a3d9cb2fd027eb2" + integrity sha512-FoDTcToPqZE454Q04hH9o2EhxWsm7pOSpicyHkgTwKhdKWdsTUuqfP5MLq3g+VjAtl2vSx6JpXGdwA2qpYkI0Q== dependencies: uint8array-tools "0.0.7" +tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tinyglobby@^0.2.13, tinyglobby@^0.2.6: version "0.2.14" resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" @@ -9513,6 +9923,15 @@ tmpl@1.0.5: resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +to-buffer@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" + integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -9545,6 +9964,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toformat@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8" + integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -9581,14 +10005,13 @@ ts-essentials@^7.0.1: integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== ts-jest@^29.2.5: - version "29.3.4" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz#9354472aceae1d3867a80e8e02014ea5901aee41" - integrity sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA== + version "29.4.0" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz#bef0ee98d94c83670af7462a1617bf2367a83740" + integrity sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q== dependencies: bs-logger "^0.2.6" ejs "^3.1.10" fast-json-stable-stringify "^2.1.0" - jest-util "^29.0.0" json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" @@ -9635,7 +10058,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.4.0, tslib@^2.8.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.8.0: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -9775,20 +10198,20 @@ typedoc-plugin-frontmatter@^1.3.0: yaml "^2.7.0" typedoc-plugin-markdown@^4.6.4: - version "4.6.4" - resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.6.4.tgz#b28ce1a31b93a1e5a31f74b5fcc6f27f0417cbee" - integrity sha512-AnbToFS1T1H+n40QbO2+i0wE6L+55rWnj7zxnM1r781+2gmhMF2dB6dzFpaylWLQYkbg4D1Y13sYnne/6qZwdw== + version "4.7.0" + resolved "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.7.0.tgz#26075805ad5025a654e61720169e445bd24d81c0" + integrity sha512-PitbnAps2vpcqK2gargKoiFXLWFttvwUbyns/E6zGIFG5Gz8ZQJGttHnYR9csOlcSjB/uyjd8tnoayrtsXG17w== typedoc@^0.28.5: - version "0.28.5" - resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.28.5.tgz#c6e1303fde05b746b3d2079621aff9c81561eccf" - integrity sha512-5PzUddaA9FbaarUzIsEc4wNXCiO4Ot3bJNeMF2qKpYlTmM9TTaSHQ7162w756ERCkXER/+o2purRG6YOAv6EMA== + version "0.28.7" + resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.28.7.tgz#30453a9517b49e53f06e08954ef3dd106381447d" + integrity sha512-lpz0Oxl6aidFkmS90VQDQjk/Qf2iw0IUvFqirdONBdj7jPSN9mGXhy66BcGNDxx5ZMyKKiBVAREvPEzT6Uxipw== dependencies: - "@gerrit0/mini-shiki" "^3.2.2" + "@gerrit0/mini-shiki" "^3.7.0" lunr "^2.3.9" markdown-it "^14.1.0" minimatch "^9.0.5" - yaml "^2.7.1" + yaml "^2.8.0" typeforce@^1.11.3, typeforce@^1.18.0: version "1.18.0" @@ -9890,29 +10313,31 @@ unpipe@1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unrs-resolver@^1.6.2: - version "1.8.1" - resolved "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.8.1.tgz#f84ce4aee9ffc2d6eaad497178e0a996bc18433c" - integrity sha512-M5++xH5Tu/m3NNAc0+dBHidXfF6bTC08mfhQ3AB5UTonEzQSH9ASC/a7EbZN3WU5m0OWMTvf12GHVJZ3uUmPtA== + version "1.11.0" + resolved "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.0.tgz#6c14cf04f44fc7117c84f9341115e180b99a44bb" + integrity sha512-uw3hCGO/RdAEAb4zgJ3C/v6KIAFFOtBoxR86b2Ejc5TnH7HrhTWJR2o0A9ullC3eWMegKQCw/arQ/JivywQzkg== dependencies: - napi-postinstall "^0.2.2" + napi-postinstall "^0.3.0" optionalDependencies: - "@unrs/resolver-binding-darwin-arm64" "1.8.1" - "@unrs/resolver-binding-darwin-x64" "1.8.1" - "@unrs/resolver-binding-freebsd-x64" "1.8.1" - "@unrs/resolver-binding-linux-arm-gnueabihf" "1.8.1" - "@unrs/resolver-binding-linux-arm-musleabihf" "1.8.1" - "@unrs/resolver-binding-linux-arm64-gnu" "1.8.1" - "@unrs/resolver-binding-linux-arm64-musl" "1.8.1" - "@unrs/resolver-binding-linux-ppc64-gnu" "1.8.1" - "@unrs/resolver-binding-linux-riscv64-gnu" "1.8.1" - "@unrs/resolver-binding-linux-riscv64-musl" "1.8.1" - "@unrs/resolver-binding-linux-s390x-gnu" "1.8.1" - "@unrs/resolver-binding-linux-x64-gnu" "1.8.1" - "@unrs/resolver-binding-linux-x64-musl" "1.8.1" - "@unrs/resolver-binding-wasm32-wasi" "1.8.1" - "@unrs/resolver-binding-win32-arm64-msvc" "1.8.1" - "@unrs/resolver-binding-win32-ia32-msvc" "1.8.1" - "@unrs/resolver-binding-win32-x64-msvc" "1.8.1" + "@unrs/resolver-binding-android-arm-eabi" "1.11.0" + "@unrs/resolver-binding-android-arm64" "1.11.0" + "@unrs/resolver-binding-darwin-arm64" "1.11.0" + "@unrs/resolver-binding-darwin-x64" "1.11.0" + "@unrs/resolver-binding-freebsd-x64" "1.11.0" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.0" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.0" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.0" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.0" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.0" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.0" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.0" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.0" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.0" + "@unrs/resolver-binding-linux-x64-musl" "1.11.0" + "@unrs/resolver-binding-wasm32-wasi" "1.11.0" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.0" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.0" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.0" unset-value@^1.0.0: version "1.0.0" @@ -10460,9 +10885,9 @@ ws@^7.4.6, ws@^7.5.10: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.17.1, ws@^8.5.0: - version "8.18.2" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" - integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== + version "8.18.3" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== y18n@^4.0.0: version "4.0.3" @@ -10479,7 +10904,7 @@ yallist@^3.0.2: resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^2.7.0, yaml@^2.7.1: +yaml@^2.7.0, yaml@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== @@ -10565,7 +10990,12 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + zod@^3.21.4, zod@^3.24.2: - version "3.25.61" - resolved "https://registry.npmjs.org/zod/-/zod-3.25.61.tgz#2e09ece796c182d44b7defc8efb27aa792eb4c8b" - integrity sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ== + version "3.25.74" + resolved "https://registry.npmjs.org/zod/-/zod-3.25.74.tgz#9368a3986fe756bd94b9a5baad9919660ff3f250" + integrity sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg==