diff --git a/package.json b/package.json index f26dd9a..fee4b73 100644 --- a/package.json +++ b/package.json @@ -92,10 +92,11 @@ "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^5.0.2", "@openzeppelin/contracts-upgradeable": "^5.0.2", + "@solana/wallet-adapter-react": "^0.15.35", "@solana/web3.js": "^1.95.3", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@zetachain/faucet-cli": "^4.1.1", - "@zetachain/networks": "10.0.0", + "@zetachain/networks": "v10.0.0-rc1", "@zetachain/protocol-contracts": "11.0.0-rc3", "axios": "^1.4.0", "bech32": "^2.0.0", diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 5d55208..2e9102f 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -1,3 +1,6 @@ +import type { Wallet as SolanaWallet } from "@coral-xyz/anchor"; +import type { WalletContextState } from "@solana/wallet-adapter-react"; +import { PublicKey } from "@solana/web3.js"; import { networks } from "@zetachain/networks"; import type { Signer, Wallet } from "ethers"; import merge from "lodash/merge"; @@ -33,9 +36,36 @@ export interface ZetaChainClientParamsBase { export type ZetaChainClientParams = ZetaChainClientParamsBase & ( - | { signer: Signer; wallet?: never } - | { signer?: never; wallet: Wallet } - | { signer?: undefined; wallet?: undefined } + | { + signer: Signer; + solanaAdapter?: never; + solanaWallet?: never; + wallet?: never; + } + | { + signer?: never; + solanaAdapter: WalletContextState; + solanaWallet?: never; + wallet?: never; + } + | { + signer?: never; + solanaAdapter?: never; + solanaWallet: SolanaWallet; + wallet?: never; + } + | { + signer?: never; + solanaAdapter?: never; + solanaWallet?: never; + wallet: Wallet; + } + | { + signer?: undefined; + solanaAdapter?: undefined; + solanaWallet?: undefined; + wallet?: undefined; + } ); export class ZetaChainClient { @@ -43,6 +73,8 @@ export class ZetaChainClient { public network: string; public wallet: Wallet | undefined; public signer: any | undefined; + public solanaWallet: SolanaWallet | undefined; + public solanaAdapter: WalletContextState | undefined; /** * Initializes ZetaChainClient instance. @@ -96,6 +128,10 @@ export class ZetaChainClient { this.wallet = params.wallet; } else if (params.signer) { this.signer = params.signer; + } else if (params.solanaWallet) { + this.solanaWallet = params.solanaWallet; + } else if (params.solanaAdapter) { + this.solanaAdapter = params.solanaAdapter; } this.chains = { ...networks }; this.network = params.network || ""; @@ -115,6 +151,16 @@ export class ZetaChainClient { return this.chains; } + public isSolanaWalletConnected(): boolean { + return this.solanaAdapter?.connected || this.solanaWallet !== undefined; + } + + public getSolanaPublicKey(): PublicKey | null { + return ( + this.solanaAdapter?.publicKey || this.solanaWallet?.publicKey || null + ); + } + getEndpoint = getEndpoint; getBalances = getBalances; getForeignCoins = getForeignCoins; diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts index c2df7d4..0ceab20 100644 --- a/packages/client/src/solanaDeposit.ts +++ b/packages/client/src/solanaDeposit.ts @@ -1,5 +1,7 @@ import * as anchor from "@coral-xyz/anchor"; -import { Keypair } from "@solana/web3.js"; +import { TransactionMessage, VersionedTransaction } from "@solana/web3.js"; +import { Transaction } from "@solana/web3.js"; +import { getEndpoints } from "@zetachain/networks"; import { ethers } from "ethers"; import { ZetaChainClient } from "./client"; @@ -11,21 +13,53 @@ export const solanaDeposit = async function ( this: ZetaChainClient, args: { amount: number; - api: string; - idPath: string; params: any[]; recipient: string; } ) { - const keypair = await getKeypairFromFile(args.idPath); - const wallet = new anchor.Wallet(keypair); - - const connection = new anchor.web3.Connection(args.api); - const provider = new anchor.AnchorProvider( - connection, - wallet, - anchor.AnchorProvider.defaultOptions() - ); + if (!this.isSolanaWalletConnected()) { + throw new Error("Solana wallet not connected"); + } + + const network = "solana_" + this.network; + const api = getEndpoints("solana" as any, network); + + const connection = new anchor.web3.Connection(api[0].url); + + let provider; + if (this.solanaAdapter) { + const walletAdapter = { + publicKey: this.solanaAdapter.publicKey!, + signAllTransactions: async (txs: Transaction[]) => { + if (!this.solanaAdapter?.signAllTransactions) { + throw new Error( + "Wallet does not support signing multiple transactions" + ); + } + return await this.solanaAdapter.signAllTransactions(txs); + }, + signTransaction: async (tx: Transaction) => { + if (!this.solanaAdapter?.signTransaction) { + throw new Error("Wallet does not support transaction signing"); + } + return await this.solanaAdapter.signTransaction(tx); + }, + }; + + provider = new anchor.AnchorProvider( + connection, + walletAdapter as any, + anchor.AnchorProvider.defaultOptions() + ); + } else if (this.solanaWallet) { + provider = new anchor.AnchorProvider( + connection, + this.solanaWallet, + anchor.AnchorProvider.defaultOptions() + ); + } else { + throw new Error("No valid Solana wallet found"); + } anchor.setProvider(provider); const programId = new anchor.web3.PublicKey(Gateway_IDL.address); @@ -58,7 +92,9 @@ export const solanaDeposit = async function ( .deposit(depositAmount, m) .accounts({ pda: pdaAccount, - signer: wallet.publicKey, + signer: this.solanaAdapter + ? this.solanaAdapter.publicKey! + : this.solanaWallet!.publicKey, systemProgram: anchor.web3.SystemProgram.programId, }) .instruction(); @@ -66,45 +102,34 @@ export const solanaDeposit = async function ( tx.add(depositInstruction); // Send the transaction - const txSignature = await anchor.web3.sendAndConfirmTransaction( - connection, - tx, - [keypair] - ); + let txSignature; + if (this.solanaAdapter) { + const { blockhash, lastValidBlockHeight } = + await connection.getLatestBlockhash(); + const messageLegacy = new TransactionMessage({ + instructions: tx.instructions, + payerKey: this.solanaAdapter.publicKey!, + recentBlockhash: blockhash, + }).compileToV0Message(); - console.log("Transaction signature:", txSignature); - } catch (error) { - console.error("Transaction failed:", error); - } -}; + const versionedTransaction = new VersionedTransaction(messageLegacy); -const getKeypairFromFile = async (filepath: string) => { - const path = await import("path"); - if (filepath[0] === "~") { - const home = process.env.HOME || null; - if (home) { - filepath = path.join(home, filepath.slice(1)); + txSignature = await this.solanaAdapter.sendTransaction( + versionedTransaction, + connection + ); + } else { + txSignature = await anchor.web3.sendAndConfirmTransaction( + connection, + tx, + [this.solanaWallet!.payer] + ); } - } - // Get contents of file - let fileContents; - try { - const { readFile } = await import("fs/promises"); - const fileContentsBuffer = await readFile(filepath); - fileContents = fileContentsBuffer.toString(); + + console.log("Transaction signature:", txSignature); + + return txSignature; } catch (error) { - throw new Error(`Could not read keypair from file at '${filepath}'`); - } - // Parse contents of file - let parsedFileContents; - try { - parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); - } catch (thrownObject) { - const error: any = thrownObject; - if (!error.message.includes("Unexpected token")) { - throw error; - } - throw new Error(`Invalid secret key file at '${filepath}'!`); + console.error("Transaction failed:", error); } - return Keypair.fromSecretKey(parsedFileContents); }; diff --git a/packages/tasks/src/solanaDeposit.ts b/packages/tasks/src/solanaDeposit.ts index 8c99b52..adf6a60 100644 --- a/packages/tasks/src/solanaDeposit.ts +++ b/packages/tasks/src/solanaDeposit.ts @@ -1,3 +1,5 @@ +import { Wallet } from "@coral-xyz/anchor"; +import { Keypair } from "@solana/web3.js"; import bech32 from "bech32"; import { utils } from "ethers"; import { task } from "hardhat/config"; @@ -9,7 +11,13 @@ export const solanaDeposit = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const client = new ZetaChainClient({ network: "testnet" }); + const keypair = await getKeypairFromFile(args.idPath); + const wallet = new Wallet(keypair); + + const client = new ZetaChainClient({ + network: args.solanaNetwork, + solanaWallet: wallet, + }); let recipient; try { if ((bech32 as any).decode(args.recipient)) { @@ -21,15 +29,46 @@ export const solanaDeposit = async ( } catch (e) { recipient = args.recipient; } - const { amount, api, idPath } = args; + const { amount, idPath } = args; const params = [JSON.parse(args.types), args.values]; - await client.solanaDeposit({ amount, api, idPath, params, recipient }); + await client.solanaDeposit({ amount, params, recipient }); }; task("solana-deposit", "Solana deposit", solanaDeposit) .addParam("amount", "Amount of SOL to deposit") .addParam("recipient", "Universal contract address") - .addOptionalParam("api", "Solana API", "https://api.devnet.solana.com") + .addOptionalParam("solanaNetwork", "Solana Network", "devnet") .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json") .addParam("types", "The types of the parameters (example: ['string'])") .addVariadicPositionalParam("values", "The values of the parameters"); + +export const getKeypairFromFile = async (filepath: string) => { + const path = await import("path"); + if (filepath[0] === "~") { + const home = process.env.HOME || null; + if (home) { + filepath = path.join(home, filepath.slice(1)); + } + } + // Get contents of file + let fileContents; + try { + const { readFile } = await import("fs/promises"); + const fileContentsBuffer = await readFile(filepath); + fileContents = fileContentsBuffer.toString(); + } catch (error) { + throw new Error(`Could not read keypair from file at '${filepath}'`); + } + // Parse contents of file + let parsedFileContents; + try { + parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); + } catch (thrownObject) { + const error: any = thrownObject; + if (!error.message.includes("Unexpected token")) { + throw error; + } + throw new Error(`Invalid secret key file at '${filepath}'!`); + } + return Keypair.fromSecretKey(parsedFileContents); +}; diff --git a/yarn.lock b/yarn.lock index daa7d64..80ad4d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1382,7 +1382,7 @@ dependencies: "@noble/hashes" "1.4.0" -"@noble/curves@^1.4.2": +"@noble/curves@^1.1.0", "@noble/curves@^1.4.2": version "1.6.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== @@ -1620,6 +1620,13 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@react-native-async-storage/async-storage@^1.17.7": + version "1.24.0" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz#888efbc62a26f7d9464b32f4d3027b7f2771999b" + integrity sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g== + dependencies: + merge-options "^3.0.4" + "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" @@ -1787,6 +1794,38 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== +"@solana-mobile/mobile-wallet-adapter-protocol-web3js@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol-web3js/-/mobile-wallet-adapter-protocol-web3js-2.1.4.tgz#70b55f2dc62740f0a0fb445103f414ec63ef387d" + integrity sha512-eE0NfQ450TrjD20/gN9hDYLhm6ggYtA5Vrrp3kuzj2antC0t6UtCCHe3/ivHLU14ir6kPoQTsTJHQaKGIqcheQ== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol" "^2.1.4" + bs58 "^5.0.0" + js-base64 "^3.7.5" + +"@solana-mobile/mobile-wallet-adapter-protocol@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@solana-mobile/mobile-wallet-adapter-protocol/-/mobile-wallet-adapter-protocol-2.1.4.tgz#47f31e230aca8500b8715fe68ce0be59e5401851" + integrity sha512-o5C61cZbtvkuAyn5YxRxsl8jeTVpGO40xT7VjtgFSE9elxvLOZAlqxxrtxpqT4hiwFzQFDzjUGsp97cabij06A== + dependencies: + "@solana/wallet-standard" "^1.1.2" + "@solana/wallet-standard-util" "^1.1.1" + "@wallet-standard/core" "^1.0.3" + js-base64 "^3.7.5" + +"@solana-mobile/wallet-adapter-mobile@^2.0.0": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@solana-mobile/wallet-adapter-mobile/-/wallet-adapter-mobile-2.1.4.tgz#d9b5c3d0480dadc344a6019182eb756cfb014cb8" + integrity sha512-uOG7Jqrjlcf52OyNfguv1CD29zQrUB5YbPhBOv6n/BcS0Zd9jHvcB0J9iMt5EZ6P8MYdJ898L6X1+4mnqFFixg== + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol-web3js" "^2.1.4" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-features" "^1.2.0" + js-base64 "^3.7.5" + qrcode "^1.5.4" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.17.7" + "@solana/buffer-layout@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" @@ -1794,6 +1833,97 @@ dependencies: buffer "~6.0.3" +"@solana/wallet-adapter-base@^0.9.23": + version "0.9.23" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11" + integrity sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw== + dependencies: + "@solana/wallet-standard-features" "^1.1.0" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + eventemitter3 "^4.0.7" + +"@solana/wallet-adapter-react@^0.15.35": + version "0.15.35" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-react/-/wallet-adapter-react-0.15.35.tgz#0d42e6774c0d55f3782d3eb5edb6ac9888858b08" + integrity sha512-i4hc/gNLTYNLMEt2LS+4lrrc0QAwa5SU2PtYMnZ2A3rsoKF5m1bv1h6cjLj2KBry4/zRGEBoqkiMOC5zHkLnRQ== + dependencies: + "@solana-mobile/wallet-adapter-mobile" "^2.0.0" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.0" + +"@solana/wallet-standard-chains@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-chains/-/wallet-standard-chains-1.1.0.tgz#459b297e71b0d9c1196c11a0578b38c85998be7d" + integrity sha512-IRJHf94UZM8AaRRmY18d34xCJiVPJej1XVwXiTjihHnmwD0cxdQbc/CKjrawyqFyQAKJx7raE5g9mnJsAdspTg== + dependencies: + "@wallet-standard/base" "^1.0.1" + +"@solana/wallet-standard-core@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-core/-/wallet-standard-core-1.1.1.tgz#7187c085dcee38719902217a7ecdd1bf3f27afa3" + integrity sha512-DoQ5Ryly4GAZtxRUmW2rIWrgNvTYVCWrFCFFjZI5s4zu2QNsP7sHZUax3kc1GbmFLXNL1FWRZlPOXRs6e0ZEng== + dependencies: + "@solana/wallet-standard-chains" "^1.1.0" + "@solana/wallet-standard-features" "^1.2.0" + "@solana/wallet-standard-util" "^1.1.1" + +"@solana/wallet-standard-features@^1.1.0", "@solana/wallet-standard-features@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.2.0.tgz#be8b3824abf5ebcfeaa7298445bf53f76a27c935" + integrity sha512-tUd9srDLkRpe1BYg7we+c4UhRQkq+XQWswsr/L1xfGmoRDF47BPSXf4zE7ZU2GRBGvxtGt7lwJVAufQyQYhxTQ== + dependencies: + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + +"@solana/wallet-standard-util@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-util/-/wallet-standard-util-1.1.1.tgz#f645fdd8b7d3c553a3b59aa19c25c51a1badce66" + integrity sha512-dPObl4ntmfOc0VAGGyyFvrqhL8UkHXmVsgbj0K9RcznKV4KB3MgjGwzo8CTSX5El5lkb0rDeEzFqvToJXRz3dw== + dependencies: + "@noble/curves" "^1.1.0" + "@solana/wallet-standard-chains" "^1.1.0" + "@solana/wallet-standard-features" "^1.2.0" + +"@solana/wallet-standard-wallet-adapter-base@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-base/-/wallet-standard-wallet-adapter-base-1.1.2.tgz#f030f412cd16b06e95c6da5548a03113319d3620" + integrity sha512-DqhzYbgh3disHMgcz6Du7fmpG29BYVapNEEiL+JoVMa+bU9d4P1wfwXUNyJyRpGGNXtwhyZjIk2umWbe5ZBNaQ== + dependencies: + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/wallet-standard-chains" "^1.1.0" + "@solana/wallet-standard-features" "^1.2.0" + "@solana/wallet-standard-util" "^1.1.1" + "@wallet-standard/app" "^1.0.1" + "@wallet-standard/base" "^1.0.1" + "@wallet-standard/features" "^1.0.3" + "@wallet-standard/wallet" "^1.0.1" + +"@solana/wallet-standard-wallet-adapter-react@^1.1.0", "@solana/wallet-standard-wallet-adapter-react@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter-react/-/wallet-standard-wallet-adapter-react-1.1.2.tgz#a7bc71786e8f891d2dd83f7de30db4708767a56a" + integrity sha512-bN6W4QkzenyjUoUz3sC5PAed+z29icGtPh9VSmLl1ZrRO7NbFB49a8uwUUVXNxhL/ZbMsyVKhb9bNj47/p8uhQ== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.2" + "@wallet-standard/app" "^1.0.1" + "@wallet-standard/base" "^1.0.1" + +"@solana/wallet-standard-wallet-adapter@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard-wallet-adapter/-/wallet-standard-wallet-adapter-1.1.2.tgz#a9ff9e4d5c379e4f38c03a2b69c9a221904181b6" + integrity sha512-lCwoA+vhPfmvjcmJOhSRV94wouVWTfJv1Z7eeULAe+GodCeKA/0T9/uBYgXHUxQjLHd7o8LpLYIkfm+xjA5sMA== + dependencies: + "@solana/wallet-standard-wallet-adapter-base" "^1.1.2" + "@solana/wallet-standard-wallet-adapter-react" "^1.1.2" + +"@solana/wallet-standard@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@solana/wallet-standard/-/wallet-standard-1.1.2.tgz#b68e38db863f6945979fe278f2cecc2e21f84c2d" + integrity sha512-o7wk+zr5/QgyE393cGRC04K1hacR4EkBu3MB925ddaLvCVaXjwr2asgdviGzN9PEm3FiEJp3sMmMKYHFnwOITQ== + dependencies: + "@solana/wallet-standard-core" "^1.1.1" + "@solana/wallet-standard-wallet-adapter" "^1.1.2" + "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.95.3": version "1.95.3" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.3.tgz#70b5f4d76823f56b5af6403da51125fffeb65ff3" @@ -2198,6 +2328,51 @@ "@uniswap/lib" "1.1.1" "@uniswap/v2-core" "1.0.0" +"@wallet-standard/app@^1.0.1", "@wallet-standard/app@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/app/-/app-1.1.0.tgz#2ca32e4675536224ebe55a00ad533b7923d7380a" + integrity sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/base@^1.0.1", "@wallet-standard/base@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.1.0.tgz#214093c0597a1e724ee6dbacd84191dfec62bb33" + integrity sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ== + +"@wallet-standard/core@^1.0.3": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/core/-/core-1.1.0.tgz#06a2193afe9cda41e626a8e990996e568138da91" + integrity sha512-v2W5q/NlX1qkn2q/JOXQT//pOAdrhz7+nOcO2uiH9+a0uvreL+sdWWqkhFmMcX+HEBjaibdOQMUoIfDhOGX4XA== + dependencies: + "@wallet-standard/app" "^1.1.0" + "@wallet-standard/base" "^1.1.0" + "@wallet-standard/errors" "^0.1.0" + "@wallet-standard/features" "^1.1.0" + "@wallet-standard/wallet" "^1.1.0" + +"@wallet-standard/errors@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/errors/-/errors-0.1.0.tgz#fb8ae75b365eb5d3c167ec6b88d3c9cb3039b928" + integrity sha512-ag0eq5ixy7rz8M5YUWGi/EoIJ69KJ+KILFNunoufgmXVkiISC7+NIZXJYTJrapni4f9twE1hfT+8+IV2CYCvmg== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@wallet-standard/features@^1.0.3", "@wallet-standard/features@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.1.0.tgz#f256d7b18940c8d134f66164330db358a8f5200e" + integrity sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg== + dependencies: + "@wallet-standard/base" "^1.1.0" + +"@wallet-standard/wallet@^1.0.1", "@wallet-standard/wallet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/wallet/-/wallet-1.1.0.tgz#a1e46a3f1b2d06a0206058562169b1f0e9652d0f" + integrity sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg== + dependencies: + "@wallet-standard/base" "^1.1.0" + "@zetachain/faucet-cli@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@zetachain/faucet-cli/-/faucet-cli-4.1.1.tgz#57645e9b7f7bb8483d25605053383c531ab04961" @@ -2212,10 +2387,10 @@ typescript "5.5.4" zod "3.22.4" -"@zetachain/networks@10.0.0", "@zetachain/networks@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-10.0.0.tgz#dd5d14a0870f6b658644aded8c96859f15531089" - integrity sha512-FPolaO19oVkSLSPDUA/Hu+8AhG3lDEslRDpLnMzbMbnNSC669Fkah0/TEf+6egrQbAifBRfFLzwWidAGs8oxtA== +"@zetachain/networks@v10.0.0-rc1": + version "10.0.0-rc1" + resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-10.0.0-rc1.tgz#ef869694dffb7f73e2212dc656480b9fe1066e33" + integrity sha512-ggHrrvwGajLau86S1Q8yK42PDvLCGM++U601/Nq7LP4WWyhvMtexAAeAnI/A62ZHQ+IRJK25xD1zWuxU1ZL4Sg== dependencies: dotenv "^16.1.4" @@ -2973,6 +3148,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -3027,6 +3207,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3135,6 +3320,15 @@ cli-width@^4.0.0, cli-width@^4.1.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3223,6 +3417,11 @@ commander@10.0.1, commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3417,6 +3616,11 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -3523,6 +3727,11 @@ difflib@^0.2.4: dependencies: heap ">= 0.2.0" +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4464,6 +4673,14 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -4629,7 +4846,7 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5589,6 +5806,11 @@ jayson@^4.1.1: uuid "^8.3.2" ws "^7.5.10" +js-base64@^3.7.5: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== + js-sha3@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" @@ -5788,6 +6010,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5915,6 +6144,13 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -6407,6 +6643,13 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -6421,6 +6664,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -6440,6 +6690,11 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + package-json-from-dist@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" @@ -6566,6 +6821,11 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + portfinder@^1.0.28: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -6647,6 +6907,15 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +qrcode@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88" + integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + dependencies: + dijkstrajs "^1.0.1" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@^6.4.0: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" @@ -6821,6 +7090,11 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requireindex@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" @@ -7049,6 +7323,11 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + set-function-length@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -8100,6 +8379,11 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" @@ -8218,6 +8502,11 @@ ws@^8.17.1, ws@^8.5.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -8228,6 +8517,14 @@ yaml@^2.3.4, yaml@^2.4.5: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -8243,6 +8540,23 @@ yargs-unparser@^2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"